|
Модостроение. Спавн и логика
|
|
| 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 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вс, 21.12.2014, 13:42 | Сообщение # 1066 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день.
Возник такой вопрос.
[cut=Смарт][smart_terrain];zat_sim_10 squad_id = 26 max_population = 2 respawn_params = respawn@zat_alfa_sim_10
[respawn@zat_alfa_sim_10] zat_alfa_force_novice zat_alfa_force_regular zat_alfa_force_experienced zat_alfa_force_veteran zat_alfa_force_master
[zat_alfa_force_novice] spawn_squads = zat_alfa_squad_2_novice spawn_num = {+opt_activate_alfa_force +secret_lab_quests_start =check_actor_rank(0:1000)} 1, 0
[zat_alfa_force_regular] spawn_squads = zat_alfa_squad_2_regular spawn_num = {+opt_activate_alfa_force +secret_lab_quests_start =check_actor_rank(1000:2000)} 1, 0
[zat_alfa_force_experienced] spawn_squads = zat_alfa_squad_2_experienced spawn_num = {+opt_activate_alfa_force +secret_lab_quests_start =check_actor_rank(2000:3000)} 1, 0
[zat_alfa_force_veteran] spawn_squads = zat_alfa_squad_2_veteran spawn_num = {+opt_activate_alfa_force +secret_lab_quests_start =check_actor_rank(3000:4000)} 1, 0
[zat_alfa_force_master] spawn_squads = zat_alfa_squad_2_master spawn_num = {+opt_activate_alfa_force +secret_lab_quests_start =check_actor_rank(4000)} 1, 0[/cut]
Допустим, что нужные инфопорции выданы и спавн разрешен. Произойдет ли спавн, если игрок в это время находится на другой локации?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| Сахар | Дата: Вс, 21.12.2014, 14:31 | Сообщение # 1067 |
 Гражданский
Пользователи
Сообщений: 2
| sergej5500, Скорее всего да так как ПЫС- ы не зря же писали проверку на нахождение ГГ на локаций actor_on_level.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Сахар за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 21.12.2014, 17:01 | Сообщение # 1068 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Да респавн будет, даже если ГГ не находиться на этой локации. А какая собственно разница? Ведь игрок не узнает о наличие сквадов пока не приблизиться к ним на расстояние не менее алайфа.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Дизель | Дата: Вс, 21.12.2014, 22:36 | Сообщение # 1069 |
 Сталкер
Разработчики
Сообщений: 260
| denis2000, какой логикой в рестрикторе можно отключить(убрать) на худе мини-карту (компас).
andreyholkin
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Дизель за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 21.12.2014, 22:44 | Сообщение # 1070 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Дизель, Код on_info = {+info_disable_ui} sr_idle@qwerty %=disable_ui%
Уберется все с худа, уберется оружие, отключиться ввод пользователя ночное виденье и фонарь. На базе этой функции можно написать свою в которой отключать то, что требуется (но только карту отключить нельзя, можно отключить сразу все индикаторы на экране).
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Дизель | Дата: Вс, 21.12.2014, 22:47 | Сообщение # 1071 |
 Сталкер
Разработчики
Сообщений: 260
| Цитата denis2000 (  ) on_info = {+info_disable_ui} sr_idle@qwerty %=disable_ui%
У меня такое подозрение, что это убирает всё с экрана, а есть ли строго на мини-карту?
andreyholkin
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Дизель за это полезное сообщение: |
|
|
| denis2000 | Дата: Пн, 22.12.2014, 00:30 | Сообщение # 1072 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата Дизель (  ) а есть ли строго на мини-карту? Нет.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Ср, 24.12.2014, 20:11 | Сообщение # 1073 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер.
Хочу вернуться к проблеме, описанной тут. Красные надписи в консоли типа: ! Cannot find saved game ~#i#:wm:return_items[rasvet_add_clofelin_stalker23416(Макс Верный)]:not se_npc!!!
Наблюдал за их появлением. Установил, что надписи появляются всякий раз при удалении сквада командой remove_squad. Надписи появляются, если сквад перед удалением был в онлайне. Если удаляемый сквад был в оффлайне (на другом конце локации), то таких надписей нет.
Установил так же, что в чистом ЗП или СГМ 2.1 таких проблем нет. Тест проводил на Шустром. Заказал ему пистолет. Отошел на 10 метров. Прошла команда remove_squad. Надписей не было.
Есть предположение, что проблемы создает дополнение: Улучшенный интеллект НПС.
Есть несколько вопросов: 1. Можно ли подправить дополнение, чтобы проблем не было? 2. Можно ли принудительно перевести сквад в оффлайн? Потом применить к нему команду remove_squad?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| makdm | Дата: Чт, 25.12.2014, 13:40 | Сообщение # 1074 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 (  ) Можно ли принудительно перевести сквад в оффлайн? Потом применить к нему команду remove_squad? sergej5500, переписываем часть функции в xr_effects.script Вместо
board:remove_squad(squad)
пишем
if not squad.online then board:remove_squad(squad) else alife ():set_switch_online ( squad.id, false ) alife ():set_switch_offline ( squad.id, true ) local wait_offline = function() if not squad.online then return true end end local squad_remove = function() board:remove_squad(squad) end level.add_call( wait_offline, squad_remove ) end
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 28.12.2014, 15:50 | Сообщение # 1075 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Попробуйте сделать точки look индивидуальными для каждого НПС (координаты могут быть одинаковыми). Если не поможет еще попробуйте закоментировать в секциях walker@zat_b5_firepos_stalker_ строки def_state_standing, def_state_moving - хотя это уже очень странно будет.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Пн, 29.12.2014, 20:27 | Сообщение # 1076 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер.
Известно, что труп Глухаря часто прибирает уборщик. Решил исправить этот недостаток.
Написал строку для рестриктора:
on_info = {!object_exist(zat_b38_stalker_cop_dead)} %=spawn_object(zat_b38_stalker_cop_dead:zat_medic_home_smart_zat_b22_stalker_medic_look)%
[cut=Спавн-секция][zat_b38_stalker_cop_dead]:stalker_silent,avoid_stalker $spawn = "respawn\zat_b38_stalker_cop_dead" character_profile = zat_b38_stalker_cop spec_rank = novice community = stalker story_id = zat_b38_stalker_cop_dead custom_data = scripts\zaton\zat_b22_stalker_cop_body.ltx sound_death =[/cut]
[cut=Кастом-дата][dont_spawn_loot]
[dont_spawn_character_supplies]
[logic] active = animpoint
[animpoint] cover_name = zat_b22_sc_cop_dead avail_animations = zat_b38_cop_dead reach_distance = 0.5 on_info = {=animpoint_reached +zat_b38_cop_dead} %=kill_npc +zat_b22_trick_done% ;on_game_timer = 2000 | {-zat_b22_can_go_in} %=kill_npc +zat_b22_can_go_in% ;on_info2 = {+zat_b38_disappearance_stalkers_find_cop_near_port_krans_give -zat_b22_can_go_in} %+zat_b22_can_go_in =kill_npc% ;on_info3 = {+zat_b22_can_go_in} %=kill_npc% out_restr = zat_b22_stalker_medic_identified show_spot = false[/cut]
Рестриктор после активации наспавнил штук сто Глухарей, после чего игра вылетела.
После этого я заспавнил Глухаря как сквад, прописал ему бессмертие и работу - лежать на столе. В момент открытия двери - отключение бессмертия и команда kill_squad. Результат меня устроил. Интересует вопрос - почему движок не захотел читать стори-ид?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| denis2000 | Дата: Пн, 29.12.2014, 21:07 | Сообщение # 1077 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Если объект в офлайне, функция object_exist дает nil. Вот и спавн пачки НПС пока они в офлайне...
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Пн, 29.12.2014, 21:47 | Сообщение # 1078 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер.
При тестировании сборки обнаружился глюк.
ссылка
Во время диалога непись, с которым говорил игрок, погиб.
Возникли вопросы.
1. Можно ли принудительно отключить диалог при гибели непися? 2. Можно ли сделать непися, с которым говорит игрок, бессмертным на время диалога?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| denis2000 | Дата: Пн, 29.12.2014, 23:54 | Сообщение # 1079 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата sergej5500 (  ) Можно ли принудительно отключить диалог при гибели непися? Попробуй в скрипте xr_motivator.script в функции motivator_binder:death_callback(victim, who)после: Код local npc = self.object добавить: Код if npc:is_talking() then npc:stop_talk() end
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 30.12.2014, 20:37 | Сообщение # 1080 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер. Хочу вернуться к проблеме, описанной в посте 1096.
Я сделал свой квест на поиск 3-х КПК с 3-х квестовых трупов. Для страховки от уборщика написал код.
[cut=Код][sr_idle@task7] on_info = {!squad_exist(zat_b104_alfa_squad_1) =actor_has_item(zat_b104_zombied_notebook) -zat_b104_zombied_notebook_naiden} %+zat_b104_zombied_notebook_naiden =scenario_autosave(st_save_zat_b104_zombied_notebook_naiden)% on_info2 = {+zat_b104_zombied_notebook_naiden} sr_idle@task8
[sr_idle@task8] on_info = {=distance_to_smart_ge(zat_b104_zombied:130)} sr_idle@task9 %=zat_quests_proverka_start =create_squad(zat_b33_alfa_squad:zat_b33) =create_squad(zat_b14_alfa_squad_1:zat_b14_smart_terrain) =create_squad(zat_b100_alfa_squad:zat_b100)%
[sr_idle@task9] on_game_timer = 120 | sr_idle@task10
[sr_idle@task10] on_info = {-zat_proverka_1_totshka_end !object_exist(zat_army_agent_dead_body_1)} %=zat_army_agent_dead_body_1_spawn1% on_info2 = {-zat_proverka_2_totshka_end !object_exist(zat_army_agent_dead_body_2)} %=zat_army_agent_dead_body_2_spawn1% on_info3 = {-zat_proverka_3_totshka_end !object_exist(zat_army_agent_dead_body_3)} %=zat_army_agent_dead_body_3_spawn1% on_info4 = {+zat_proverka_1_totshka_end +zat_proverka_2_totshka_end +zat_proverka_3_totshka_end -zat_alfa_proverka_final} %+zat_alfa_proverka_final =scenario_autosave(st_save_zat_alfa_proverka_final)% on_info5 = {+zat_alfa_proverka_final} sr_idle@task12[/cut]
После нахождения квестового предмета на Лесопилке происходит автосейв. При удалении от смарта происходит выдача новых квестов. Затем запускается проверка наличия квестовых трупов.
[cut=Код]on_info = {-zat_proverka_1_totshka_end !object_exist(zat_army_agent_dead_body_1)} %=zat_army_agent_dead_body_1_spawn1% on_info2 = {-zat_proverka_2_totshka_end !object_exist(zat_army_agent_dead_body_2)} %=zat_army_agent_dead_body_2_spawn1% on_info3 = {-zat_proverka_3_totshka_end !object_exist(zat_army_agent_dead_body_3)} %=zat_army_agent_dead_body_3_spawn1%
[/cut]
[cut=Спавн-секции][zat_army_agent_dead_body_1]:stalker $spawn = "respawn\zat_army_agent_dead_body_1" character_profile = zat_army_agent_dead_body_1 spec_rank = experienced community = army story_id = zat_army_agent_dead_body_1
[zat_army_agent_dead_body_2]:stalker $spawn = "respawn\zat_army_agent_dead_body_2" character_profile = zat_army_agent_dead_body_2 spec_rank = experienced community = army story_id = zat_army_agent_dead_body_2
[zat_army_agent_dead_body_3]:stalker $spawn = "respawn\zat_army_agent_dead_body_3" character_profile = zat_army_agent_dead_body_3 spec_rank = experienced community = army story_id = zat_army_agent_dead_body_3 [/cut]
Код отлично работает. Квестовые трупы спавнятся на Земснаряде, Заправке и в Железном Лесу. Рестриктору без разницы, в онлайне объект или в оффлайне. В онлайне могут оказаться одновременно Железный Лес и Заправка. Одна, две или все три точки обязательно будут в оффлайне. При неоднократных прохождениях мною и тестерами на точке всегда только один квестовый труп.
В случае с Глухарем применение аналогичного кода приводит к бесконечному спавну. На окраине Затона можно бегать свободно. При подходе к Портовым Кранам начинаются жуткие тормоза.
Собственно, вопрос. Почему в одном случае код работает, а в другом нет?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|