Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 02.05.2015, 10:24 | Сообщение # 1171 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Делайте walker вместо remark в активной логике.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 03.05.2015, 15:49 | Сообщение # 1172 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день.
Имеется смарт. К нему приписано несколько сквадов. Из логики рестриктора нужно проверить, свободен ли смарт. То есть погибли ли все сквады или нет.
Можно воспользоваться проверкой !squad_exist и перебрать все сквады. Есть ли другая функция?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Вс, 03.05.2015, 16:25 | Сообщение # 1173 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 ( ) Есть ли другая функция? Её можно добавить в файл xr_conditions.script
Проверка:
on_info = { =smart_terrain_empty( ИМЯ_СМАРТА ) }
Функция:
function smart_terrain_empty(actor, obj, p) local smart_name = p[1] local board = sim_board.get_sim_board() local smart = board.smarts_by_names[smart_name] local smart_id = smart.id for k,v in pairs(board.smarts[smart_id].squads) do return false end return true end
З.Ы. Но имей ввиду, что если это смарт для симуляции, то если в него идёт сквад, который, например, находится в другой части локации, то смарт уже будет считаться занятым, хотя реально в смарте ещё никого не будет.
Терпение...... И все получится!
Сообщение отредактировал makdm - Вс, 03.05.2015, 16:36 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
Сахар | Дата: Пн, 04.05.2015, 17:18 | Сообщение # 1174 |
Гражданский
Пользователи
Сообщений: 2
| Доброго здравия хотелось бы узнать можно просмотреть так называемы оверрайды то есть необязательные дополнительные ключи в логике?
|
|
|
Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
makdm | Дата: Пн, 04.05.2015, 19:23 | Сообщение # 1175 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Сахар, открой файл xr_logic.script Найди функцию cfg_get_overrides Все оверрайды в ней перечислены.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
Сахар | Дата: Чт, 07.05.2015, 14:45 | Сообщение # 1176 |
Гражданский
Пользователи
Сообщений: 2
| Доброго времени суток. Возможно ли проверить что НПС (без story id) находится в спейс рескрипторе?
|
|
|
Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 07.05.2015, 15:23 | Сообщение # 1177 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Сахар, Чтобы идентифицировать объект, нужно хоть что-то о нем знать.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Сахар | Дата: Чт, 07.05.2015, 16:39 | Сообщение # 1178 |
Гражданский
Пользователи
Сообщений: 2
| denis2000, А если создать таблицу визуалов НПС и проверять все объекты которые попадут в рескриптор на совпадение с таблицей(то есть возвращать визуал get_visual_name()). Это возможно или я бред несу?
|
|
|
Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 07.05.2015, 18:21 | Сообщение # 1179 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата Сахар ( ) проверять все объекты которые попадут в рескриптор Нашелся колбек на вход объекта в зону и выход из зоны: zone_enter и zone_exit. Применяется в скрипте xr_zones.script. Регистрация колбеков: Код self.object:set_callback(callback.zone_enter, self.on_enter, self) self.object:set_callback(callback.zone_exit, self.on_exit, self) Использование: Код function arena_zone_binder:on_enter(zone, obj) function arena_zone_binder:on_exit(zone, obj) Как видим возвращается два параметра зона и попавший объект. Работу на ЗП не проверял.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Сахар | Дата: Вс, 10.05.2015, 10:12 | Сообщение # 1180 |
Гражданский
Пользователи
Сообщений: 2
| Доброго здравия. Код ;=================================================1========================== [logic@e4_no_sim_punitive_1] active = walker@punitive_1_start suitable = {=check_npc_name(esc_e4_punitive_1)} true
[walker@punitive_1_start] path_walk = punitive_1_wait_walk path_look = punitive_1_wait_look on_game_timer = 252000 | %+e4_no_sim_npc_attack_e4_no_actor_info% patrol@punitive_1 on_info = {+e4_talk_gusar_done_info} %=crete_sms(e4_no_sim_punitive_1_dues_start:neutral_1:5000:default)% walker@building_punitive_1 danger = punitive_start_all meet = meet@punitive_1_start show_spot = false
[walker@building_punitive_1] path_walk = punitive_1_dues_walk path_look = punitive_1_dues_look on_signal = punitive_1_dues_path_end | %+e4_no_sim_punitive_1_dues_path_end_info% on_info = {+e4_no_sim_punitive_1_dues_path_end_info +e4_no_sim_punitive_2_dues_path_end_info +e4_no_sim_punitive_3_dues_path_end_info} %=crete_sms(e4_no_sim_punitive_1_attack:neutral_1:5000:default)% patrol@punitive_1 show_spot = false
[patrol@punitive_1] path_walk = e4_no_sim_patrol_punitive_walk commander = true formation = back meet = no_meet show_spot = false
[meet@punitive_1_start] trade_enable = false meet_dialog = e4_gusar_start_talk allow_break = false
;=================================================2============================== [logic@e4_no_sim_punitive_2] active = walker@punitive_2_start suitable = {=check_npc_name(esc_e4_punitive_2)} true
[walker@punitive_2_start] path_walk = punitive_2_wait_walk path_look = punitive_2_wait_look on_info1 = {+e4_no_sim_npc_attack_e4_no_actor_info} patrol@punitive_2_and_3 on_info2 = {+e4_talk_gusar_done_info} walker@building_punitive_2 show_spot = false danger = punitive_start_all
[walker@building_punitive_2] path_walk = punitive_2_dues_walk path_look = punitive_2_dues_look on_signal = punitive_2_dues_path_end | %+e4_no_sim_punitive_2_dues_path_end_info% on_info = {+e4_no_sim_punitive_1_dues_path_end_info +e4_no_sim_punitive_2_dues_path_end_info +e4_no_sim_punitive_3_dues_path_end_info} patrol@punitive_2_and_3 show_spot = false
;=================================================3============================== [logic@e4_no_sim_punitive_3] active = walker@punitive_3_start suitable = {=check_npc_name(esc_e4_punitive_3)} true
[walker@punitive_3_start] path_walk = punitive_3_wait_walk path_look = punitive_3_wait_look on_info1 = {+e4_no_sim_npc_attack_e4_no_actor_info} patrol@punitive_2_and_3 on_info2 = {+e4_talk_gusar_done_info} walker@building_punitive_3 show_spot = false danger = punitive_start_all
[walker@building_punitive_3] path_walk = punitive_3_dues_walk path_look = punitive_3_dues_look on_signal = punitive_3_dues_path_end | %+e4_no_sim_punitive_3_dues_path_end_info% on_info = {+e4_no_sim_punitive_1_dues_path_end_info +e4_no_sim_punitive_2_dues_path_end_info +e4_no_sim_punitive_3_dues_path_end_info} patrol@punitive_2_and_3 show_spot = false
;=================================================2and3=========================== [patrol@punitive_2_and_3] path_walk = e4_no_sim_patrol_punitive_walk commander = false formation = back meet = no_meet ;=================================================other=========================== [punitive_start_all] ignore_distance = 10 При переход на секций patrol происходит вылет. Код stack trace:
0023:07E3E8B3 xrGame.dll, CDialogHolder::CDialogHolder() 0023:07E3FB45 xrGame.dll, CDialogHolder::CDialogHolder() 0023:061E2EA3 lua.JIT.1.1.4.dll, luaopen_io() Заранее спасибо за помощь.
|
|
|
Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 10.05.2015, 13:34 | Сообщение # 1181 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Сахар, on_info = {<Условие>} <Следующя секция> %<Дествия>% Элементы можно пропускать, но не переставлять местами.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Сахар | Дата: Вс, 10.05.2015, 14:29 | Сообщение # 1182 |
Гражданский
Пользователи
Сообщений: 2
| Цитата denis2000 ( ) Элементы можно пропускать, но не переставлять местами. Пол года писал по своему и вылетов не было. Но я всёравно попробовал сделать как вы написали вылет некуда не делся. Вот что удалось выудить благодаря учебника Хована.
Код ! Cannot find saved game ~~~dbg:adding_object_%s ! Cannot find saved game ~~~dbg:adding_object_m_crow2309 ! Cannot find saved game ~~~dbg:*info*:_npc='%s'_id='%s' ! Cannot find saved game ~~~dbg:*info*:_npc='actor'_id='e4_no_sim_punitive_3_dues_path_end_info' ! Cannot find saved game ~~~dbg:reset_invulnerability._npc[%s]_=_[%s] ! Cannot find saved game ~~~dbg:reset_invulnerability._npc[esc_e4_punitive_30582]_=_[false] stack trace:
0023:0773E8B3 xrGame.dll, CDialogHolder::CDialogHolder() 0023:0773FB45 xrGame.dll, CDialogHolder::CDialogHolder() 0023:05AA2EA3 lua.JIT.1.1.4.dll, luaopen_io()
|
|
|
Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 10.05.2015, 15:19 | Сообщение # 1183 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата Сахар ( ) Пол года писал по своему и вылетов не было. Ну вот вам и счастливый момент инициации. Идем далее: покажите патрульный путь. И к стати: Код =crete_sms(e4_no_sim_punitive_1_attack:neutral_1:5000:default) 5000 и default можно и не писать - это значения по умолчанию, а в таблицу иконок neutral_1 вы добавили, если ее используете?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Сахар | Дата: Вс, 10.05.2015, 16:00 | Сообщение # 1184 |
Гражданский
Пользователи
Сообщений: 2
| denis2000, Пожалуйста. Код [e4_no_sim_patrol_punitive_walk] points = p0,p1,p2,p3,p4 p0:name = wp00 p0:position = -3.02870607376099,-5.24072694778442,-70.6412811279297 p0:game_vertex_id = 35 p0:level_vertex_id = 274905 p0:links = p1(1)
p1:name = wp01 p1:position = 26.4389953613281,-0.50626802444458,-64.3615798950195 p1:game_vertex_id = 36 p1:level_vertex_id = 306902 p1:links = p2(1)
p2:name = wp02 p2:position = 59.9830055236816,-10.5589723587036,-50.9293441772461 p2:game_vertex_id = 37 p2:level_vertex_id = 348769 p2:links = p3(1)
p3:name = wp03 p3:position = 79.9495162963867,-8.02896881103516,-47.1616821289063 p3:game_vertex_id = 37 p3:level_vertex_id = 374536 p3:links = p4(1)
p4:name = wp04 p4:position = 104.468391418457,-7.56253576278687,-41.3653335571289 p4:game_vertex_id = 26 p4:level_vertex_id = 405777 Ещё такой вопрос появился на локаций присутствует статический пулемёт. При распаковки спавна получаю ошибку. Код C:\Users\!\Desktop\ACDC>del sections.ini
C:\Users\!\Desktop\ACDC>universal_acdc.pl -d all.spawn -out la -scan configs/ -s ort complex defined(@array) is deprecated at stkutils/ini_file.pm line 146. (Maybe you should just omit the defined()?) defined(@array) is deprecated at stkutils/data_packet.pm line 859. (Maybe you should just omit the defined()?) log inited: console Universal ACDC v.1.38 checking version of all.spawn... This is a spawn of S.T.A.L.K.E.R. Call Of Pripyat (any patch) scanning configs... problems occured while scanning configs. Try again... done! opening all.spawn... reading header... reading alife objects... handling error with m_car, template C
FATAL ERROR! Function: stkutils::data_packet::error_handler Line: 1548 Description: unhandled exception Добавлено (10.05.2015, 16:00) ---------------------------------------------
Цитата denis2000 ( ) а в таблицу иконок neutral_1 вы добавили, если ее используете? Да.
|
|
|
Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 11.05.2015, 09:55 | Сообщение # 1185 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Сахар, В патрульном пути ничего криминального нет. Как добавляли иконку neutral_1?
Цитата sergej5500 ( ) Нужно отследить, не находится ли в шаре рестриктора игрок, сталкер или монстр. К стати в оригинеле мина сделана просто аномалией с эффектами взрыва причем в конфиге выставлена реагировать единажды: blowout_once = true. Но такая "мина" не реагирует на НПС и не подрывается от выстрела, а только на попадание предмета (болта), ГГ или монстра.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|