Модостроение. Спавн и логика
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Спавн и логика Создание объектов на локации и логика поведения этих объектов Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Code function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Code Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Code Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
ДеМЬян | Дата: Чт, 15.03.2012, 14:05 | Сообщение # 106 |
Удаленные
| Уважаемые сталкеры!
Скажите пожалуйста, как заспавнить своего персонажа привязанного к одной точке? Например я хочу создать нового торговца на "Скадовске".
Я прочитал вот эту тему по созданию персонажа: КМБ
Но там расписано как создать NPC в двух шагах от тебя (по нажатию клавиши), а я хочу создать своего персонажа (который спавниться при старте новой игры) и стоит на одном месте.
Как это сделать? Придется работать с all.spawn?
|
|
|
Эти 0 пользователя(ей) поблагодарили ДеМЬян за это полезное сообщение: |
|
|
Niafa | Дата: Чт, 15.03.2012, 14:32 | Сообщение # 107 |
Отмычка
Вольные сталкеры
Сообщений: 42
| ДеМЬян, не обязательно с олл.спавн. Хотя можно и с ним. Если делать скриптово, то в фунцию спавна alife.create можно подставить любые координаты. А в кмб уроке номер три описывается именно спавн при новой игре. Кроме того, можно ознакомиться с материалами с ресурсов из шапки темы.
|
|
|
Эти 0 пользователя(ей) поблагодарили Niafa за это полезное сообщение: |
|
|
ДеМЬян | Дата: Чт, 15.03.2012, 16:06 | Сообщение # 108 |
Удаленные
| HELP! Делаю все по инструкции из "КМБ как создать своего NPC"
Дошел до урока 3. Во время запуска, игра выдает вот такой лог: [cut noguest=LOG]Expression : no_assert Function : CXML_IdToIndex<class CCharacterInfo>::GetById File : d:\prog_repository\sources\trunk\xrserverentities\xml_str_id_loader.h Line : 112 Description : item not found, id Arguments : zat_sh_demian_skadovsk [/cut]
Как исправить?!
Сообщение отредактировал ДеМЬян - Чт, 15.03.2012, 16:23 |
|
|
Эти 0 пользователя(ей) поблагодарили ДеМЬян за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 15.03.2012, 16:28 | Сообщение # 109 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| ДеМЬян, В конце файла нет закывающего тега </xml>
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
ДеМЬян | Дата: Сб, 17.03.2012, 21:56 | Сообщение # 110 |
Удаленные
| И снова привет Сталкеры!
Вообщем, у меня возникла проблема с логикой торговца. Я создал NPC, прописал ему файл торговли, написал [cut noguest=вот эту логику][logic] active = move@trader trade = misc\trade\order_traders\zat_sh_nikitka_skadovsk.ltx
[move@trader] move_state_when_center = ward_noweap move_state_when_move = walk move_combat_disable = true move_home_teleport = true meet = meet invulnerable = true
[meet] abuse = false use = true allow_break = false meet_on_talking = false[/cut], но он куда то убегает! Просто разворачивается и бежит в неизвестном направлении от точки спауна.
Где я не правильно составил логику? И какая она должна быть вообще у торговца?
P.S.: Мой NPC обладает диалогом и должен стоять на одном месте.
Если не указываете игру\мод где работаете, по-стандарту принимается ЗП 1.6.02; Поэтому отвечаю по нему: NPC вообще не видит логики, если бы он ее увидел, вылетела бы игра, из-за неизвестной схемы поведения move. XOBAH
|
|
|
Эти 0 пользователя(ей) поблагодарили ДеМЬян за это полезное сообщение: |
|
|
Geonezis | Дата: Вс, 18.03.2012, 13:59 | Сообщение # 111 |
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
| Quote (ДеМЬян) Но где взять\прописать эти данные? ДеМЬян, в sgm ведь делаешь. есть пункт в меню координировать он выведет координаты точек. оттуда и берешь. да они у тебя и так должны быть: ты ведь спавнил его как-то вот и смотри координаты level_vertex_id() и game_vertex_id()
Смерти Вопреки Spectrum Project AP_Prodaction
|
|
|
Эти 0 пользователя(ей) поблагодарили Geonezis за это полезное сообщение: |
|
|
makdm | Дата: Вс, 18.03.2012, 18:26 | Сообщение # 112 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| denis2000, подскажите пожалуйста "Чайнику". Скопировал файлы из "Распакованный all.spawn" у GеJorge из мода 2.2 (те, что касаются работы с acdc). Perl установлен. Кинул all.spawn из фикса от 12.03. Распаковал. Посмотрел файлы (ничего не менял - поверьте на слово). Решил запаковать в all.spawn. И на тебе: FATAL ERROR! Function: stkutils::ini_file::new Line: 31 Expression: defined $self->{section_hash}->$section} Description: duplicate section found while reading way_military.ltx Вопрос: Как же это паковал GeJorge? Или я чего-то не понимаю?
Присоединяюсь к вопросу, ибо аналогичная ситуация и у меня... Но тут уже, наверное, только сам Николай и ответит. XOBAH
Добавлено (18.03.2012, 18:26) --------------------------------------------- ДеМЬян, в логике можно прописать [cut=Логика]
move_dest_number = ( Ваше значение) move_look_vertex = (Ваше значение) move_state_when_center = ( На Ваше усмотрение) move_state_when_move = walk move_combat_disable = true meet = meet invulnerable = true combat_ignore_cond = true combat_ignore_keep_when_attacked = true[/cut] И никуда он не побежит.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 18.03.2012, 18:36 | Сообщение # 113 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| makdm, Дело в том что в этом файле секции типа [mil_anomal_zone_***] распаковались по два раза! Убирайте дубликаты секций и компилируйте. К стати это проблема не только данной версии иногда последовательность all.spawn ->decompil file -> compile all.spawn иногда приводит к проблемам (личный опыт).
Проблема не в декомпиляторе. Проблема в том, что Николай, секции вида mil_anomal_zone_, записывал не только в way_military.ltx, но еще и в файл way_agroprom.ltx; И при сборке компилятор не ругался, из-за того, что секции были в разных файлах (у компилятора идет проверка на индивидуальность секций в пределах одного файла). А при распаковке, секции уже копируются в соответсвующие им файлы (по данным гейм-графов). И при запаковке, уже будет ошибка. XOBAH
Да действительно дубликаты секций находятся в исходных файлах way_agroprom.ltx и way_military.ltx при компиляции ошибки нет и при работе all.spawn тоже, но при повторной декомпиляции эти секции попадают в один файл way_military.ltx и компиляция такого файла уже вызывает ошибку.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Вс, 18.03.2012, 18:56 | Сообщение # 114 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| denis2000, ХОВАН, друзья ,спасибо большое за разъяснение. Я очень рад, что Мы друг друга поняли. Я понимаю, что нужно делать, но если у кого-то возникнет аналогичная проблема - может это стоит где-то написать?
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
Lazur | Дата: Ср, 21.03.2012, 11:04 | Сообщение # 115 |
Новичок
Пользователи
Сообщений: 82
| Чтот опять не то... [cut=Лог]Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\db.script:42: attempt to index field '?' (a nil value) [/cut] Скрипт db не трогал, что сие значит и как с этим бороться?
Чем подробнее вопрос - тем точнее ответ. Накосячил в скриптах. Исполняешь код, не проверяя значения на nil. XOBAHДобавлено (21.03.2012, 11:04) --------------------------------------------- Так и не понял, почему был вылет, поставил более раннюю сборку. Вопрос таков: Спавньть Ниву получилось, а УАЗ не могу. Почему? Кусочек из bind_stalker.script [cut=Кусьман] self.loaded = false benchmark.main() --' Distemper 06.2008 -- if rx_ai then rx_ai.actor_net_spawn() end avto_v_Zone.spawn_veh_niva() --спавню Ниву function spawn_veh_niva() if not has_alife_info("spawn_veh_niva_complite") then if has_alife_info("zat_b14_recon_place") then local p=vector(),lv,gv p.x = -161 p.y = 7 p.z = 152 lv = 0 gv = 0 alife():create("veh_niva",p,lv,gv) give_info("spawn_veh_niva_complite") end end end avto_v_Zone.spawn_veh_uaz() function spawn_veh_uaz() --спавним УАЗ if not has_alife_info("spawn_veh_uaz_complite") then if has_alife_info("zat_b14_recon_place") then local p=vector(),lv,gv p.x = -294 p.y = 258 p.z = 41 lv = 0 gv = 0 alife():create("veh_uaz",p,lv,gv) give_info("spawn_veh_uaz_complite") end end end return true end[/cut] Кусочек из файла, avto_v_Zone.script [cut=кусок]function spawn_veh_niva() --функция Нивы if not has_alife_info("spawn_veh_niva") then local p=vector(),lv,gv p.x = -161 p.y = 7 p.z = 152 lv = 0 gv = 0 alife():create("veh_niva",p,lv,gv) give_info("spawn_veh_niva_complite") end end function spawn_veh_uaz() --функция УАЗа if not has_alife_info("spawn_veh_uaz") then local p=vector(),lv,gv p.x = -294 p.y = 258 p.z = 41 lv = 0 gv = 0 alife():create("veh_uaz",p,lv,gv) give_info("spawn_veh_uaz_complite") end end[/cut] Запускаю, получаю вылет: [cut=Лог]FATAL ERROR [error]Expression : fatal error [error]Function : CInifile::r_section [error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp [error]Line : 475 [error]Description : <no expression> [error]Arguments : Can't open section 'veh_uaz'. Please attach [*.ini_log] file to your bug report stack trace:[/cut] Сие значит, что не может найти функцию спавна УАЗа, однако такая есть. Выходит, где то ошибка... Кто подскажет где, буду благодарен.
На пыльных тропинках аномальных полей Заспавнятся наши следы...
|
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 21.03.2012, 11:38 | Сообщение # 116 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Lazur, Не функцию спавна, а секцию спавна под именем [veh_uaz]. Код в скрипте avto_v_Zone.script кривой (ставишь одну инфопорцию проверяешь другую) Код из bind_stalker.script вообще зоопарк (в пределах одной функции начинаеш определение другой).
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Lazur | Дата: Ср, 21.03.2012, 18:37 | Сообщение # 117 |
Новичок
Пользователи
Сообщений: 82
| denis2000, тоесть моя функция должна иметь [cut=вид:]function spawn_veh_uaz() if not has_alife_info("spawn_veh_uaz") then local p=vector(),lv,gv p.x = -294 p.y = 258 p.z = 41 lv = 0 gv = 0 alife():create("veh_uaz",p,lv,gv) give_info("spawn_veh_uaz_complite") end end return true end return false end[/cut]? (avto_v_Zone.script)
А в bind_stalker.script должен провести "черту" меж функциями? [cut=Так?] ... give_info("spawn_veh_niva_complite") end end end ------------------------------------- avto_v_Zone.spawn_veh_uaz() function spawn_veh_uaz() if not has_alife_info("spawn_veh_uaz_complite") then ... [/cut] P.S. в скриптах я полный невежда.
На пыльных тропинках аномальных полей Заспавнятся наши следы...
Сообщение отредактировал Lazur - Ср, 21.03.2012, 18:39 |
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 21.03.2012, 22:31 | Сообщение # 118 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Lazur, Нет неправильно. 1. Раз уж хотите работать со скриптом то прочитайте урок 3а или 3б и досконально разберитесь что и как происходит в приведенном коде. 2. Не знакомы со скриптами есть урок 29, там разъяснены основные моменты языка LUA в применении к сталкеру.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Lazur | Дата: Чт, 22.03.2012, 14:26 | Сообщение # 119 |
Новичок
Пользователи
Сообщений: 82
| ОЙ ,голова моя голова... Забыл прописать уазик в cars_spawn.script, вот и вылеты ловил. Теперь вспомнил, исправил, наслаждаюсь...
На пыльных тропинках аномальных полей Заспавнятся наши следы...
|
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
xardaslich | Дата: Чт, 22.03.2012, 15:36 | Сообщение # 120 |
Отмычка
Пользователи
Сообщений: 41
| S.T.A.L.K.E.R. Call of Pripyat 1.6.02(лиц) + Sigerous Mod 1.7+ fix 31.08 Всем доброго дня! Захотел заспавнить через all.spawn на локе "ЗАТОН" аномальную зону (скажем из 4-ёх аномалий) с возможностью спавна в ней АРТОВ, на примере того же "СОСНОДУБ' a". . Материала по этой теме "нарыл" предостаточно, да и понятно практически всё- за малым исключением (Собственно по этому и обращаюсь с вопросами!):
[cut noguest]1). Скажите пожайлуста присудствует ли в ресурсах игры аномалия гравитационной природы "КАРУСЕЛЬ"? ( Знаю точно, что в ЧН на локах "СВАЛКА" и "ТЁМНАЯ ДОЛИНА" она точно присудствует, а вот в ЗП если честно- не наблюдал.Просто я точно не знаю как она называется, но принцип действия могу пояснить- это когда "тело" вначале затягивает, поднимает в воздух, раскручивает и в конце-концов разрывает). Если такова аномалия присудствует, то как её вызвать(в смысле на какое англ. имя она откликается)? Что прописать в описании секции "section_name=" [...] ; cse_abstract properties section_name = ... из alife_zaton.ltx распакованного all.spawn? А если "новоиспечённая" аномальная зона будет состоять скажем из 4-ёх однотипных\разнотипных аномалий, то как следствие требуется добавить 4-и уникальных пронумерованных секции(Например: если последняя-[2180], то соответственно добавляем- [2181], [2182], [2183], [2184] для каждой из них. Я прав?);
2). А если к примеру нам требуется, чтобы спавнящиеся АРТЫ блуждали в пределах аномальной зоны, то мы соответственно вносим дополнительную секцию описания в файл way_zaton.ltx из распакованного all.spawn вида: [zaton_testing_af_way] points = p0,p1,p2,p3 p0:name = wp00 p0:position = ... p0:game_vertex_id = ... p0:level_vertex_id = ... p0:links = p1(1)
p1:name = wp01 p1:position = ... p1:game_vertex_id = ... p1:level_vertex_id = ... p1:links = p2(1)
p2:name = wp02 p2:position = ... p2:game_vertex_id = ... p2:level_vertex_id = ... p2:links = p3(1)
p2:name = wp02 p2:position = ... p2:game_vertex_id = ... p2:level_vertex_id = ... p2:links = p0(1) где позиции, гейм и левелвертексы- это координаты центров наших "новоиспечённых" аномалий в пределах которых происходит "блуждания" АРТА. А p0:name = wp00, p1:name = wp01, p2:name = wp02, ... - нетрудно догадаться имена поинтов. Вроде я правильно понимаю? Но тогда откуда дублирование имени поинта третьего и четвёртого столбца из описания? Может это "опечатка" урока на Wiki и правильно будет для 3 -его и 4 -того столбцов соответственно- p2:name = wp02 и p3:name = wp03? Поправте пожайлуста если не так![/cut]
Заранее благодарен за пояснения!
|
|
|
Эти 0 пользователя(ей) поблагодарили xardaslich за это полезное сообщение: |
|
|
|