Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
NIV | Дата: Пт, 20.09.2013, 13:34 | Сообщение # 661 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| [off]sergej5500, не согласен чуть менее, чем полностью. Разрешение спавнить сквад при наличии определённой инфопорции, так же как и target_smart пишется в squad_descr_локация.ltx. Мне нужно не отправить его на другой смарт, а полностью передать управление компьютеру. Хотя, м.б. target = {+условие} nil? Все-таки думаю, что без указания sim_avail = {+инфо} true, false работать не будет.
Будем считать, я немного не разобрался в том, что было написано ранее.[/off]
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
Сообщение отредактировал NIV - Пт, 20.09.2013, 14:10 |
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
sergej5500 | Дата: Пт, 20.09.2013, 13:52 | Сообщение # 662 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| NIV, В squad_descr_ прописывается состав сквада (число НПС, группировка). Сквады движутся по определённым участкам - смартам. Строка target_smart определяет целевой смарт сквада. Сквад будет стремиться на этот смарт попасть. Если указано nil, то сквад попадает под управление движка. Строка sim_avail = true даёт разрешение игре самостоятельно спавнить сквад. Сквады спавнят по разному. В simulation прописаны сквады, которые спвнятся на старте НИ. Команда create_squad в логике рестриктора спавнит сквад по какому-нибудь условию. Симуляционные сквады прописываются в файлах смартов.
Сообщение отредактировал sergej5500 - Пт, 20.09.2013, 13:52 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
NIV | Дата: Пт, 20.09.2013, 13:57 | Сообщение # 663 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Цитата (sergej5500) Строка sim_avail = true даёт разрешение игре самостоятельно спавнить сквад. [off] Спасибо, будем знать. Я что-то думал, что это переключение на симуляцию. Ошибался, наверное...[/off]
Блин, пришёл домой - вспомнил, в чём была проблема. У этого НПС есть эксклюзивная работа на смарте. Я хочу, чтобы после выполнения условия он переключился на другую работу на ЭТОМ же смарте, поработал немного, и ушел в симуляцию. А так, да - target = {+условие} nil, это то, что нужно.
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
Сообщение отредактировал NIV - Пт, 20.09.2013, 14:07 |
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
makdm | Дата: Пт, 20.09.2013, 16:03 | Сообщение # 664 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| NIV, посмотрите, как это сделано в ЗП на примере сквада Валета и его охранников jup_a10_bandit_squad_3. Сначала он выполняет работу на смарте, а после выполнения, по условию - уходит в "свободное плавание".Добавлено (20.09.2013, 16:03) ---------------------------------------------
Цитата (NIV) после выполнения условия он переключился на другую работу на ЭТОМ же смарте Другая работа также,как и первая, состоит из схем поведения НПС. Не проще ли просто переключить на другую схему?
Попробуйте так: В первой логике работы
suitable = {- поршень =check_npc_name(имя_сталкера)} true
Во второй логике работы
suitable = {+ поршень =check_npc_name(имя_сталкера)} true
Выдаёте поршень. По идее должен перейти с первой работы на вторую.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
strelok200 | Дата: Сб, 12.10.2013, 16:52 | Сообщение # 665 |
Бывалый
Свобода
Сообщений: 126
| Почему после перезагрузки игры в скваде становится в два раза больше нпс? Как это устранить?
Добавлено (06.10.2013, 12:19) --------------------------------------------- Я спавнил эти же сквады, с этой же логикой, все нормально было. А теперь заспавнил смарт через сдк и такая фигня получается
Так это все объясняет! denis2000Добавлено (12.10.2013, 16:52) ---------------------------------------------
Цитата strelok200 ( ) Я спавнил эти же сквады, с этой же логикой, все нормально было. А теперь заспавнил смарт через сдк и такая фигня получается
Так это все объясняет! denis2000 Не знаю как это объяснить вам, но это действительно так
Возвращаюсь к старому вопросу по анимациям. Убрал по вашему совету stop at end, сталкер телепортируется в точку начала проигрывания (кость root настроена верно)
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 13.10.2013, 22:05 | Сообщение # 666 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый Вечер. Я сделал квест на зачистку ВНЗ. Описание квеста тут. Квест Меч выдает после выполнения нескольких предварительных квестов. Альфа на ВНЗ спавнится на старте игры. Чтобы ГГ не смог облегчить себе жизнь и вынести Альфу до взятия квеста, в рестрикторе предусмотрен повторный спавн Альфы после гибели. Строки типа: [cut=код]on_info = {+zat_b38_alfa1_death =dist_to_actor_ge(300)} %-zat_b38_alfa1_death =spawn_object(zat_b38_alfa1:zat_b38_alfa1_look)% on_info2 = {+zat_b38_alfa2_death =dist_to_actor_ge(300)} %-zat_b38_alfa2_death =spawn_object(zat_b38_alfa2:zat_b38_alfa2_look)% on_info3 = {+zat_b38_alfa3_death =dist_to_actor_ge(300)} %-zat_b38_alfa3_death =spawn_object(zat_b38_alfa3:zat_b38_alfa3_look)%[/cut] Рестриктор спавна находится на ВНЗ и повторный спавн работает нормально. Спавн Альфы отключается после начала атаки, или если сталкеры штурмового отряда стали враждебны ГГ. Сталкеры штурмовой группы не бессмертны, за исключением командира. Тот бессмертен до начала атаки, или когда он не враг ГГ. Чтобы штурмовая группа стала враждебна, достаточно убить кого-нибудь из сталкеров. Чтобы сталкеры в ожидании ГГ не погибли от бешеных кабанов, например, для них тоже предусмотрен респавн. Код аналогичный. [cut=код]on_info31 = {+zat_b38_stalker2_death =dist_to_actor_ge(300)} %-zat_b38_stalker2_death =spawn_object(zat_b38_stalker2:zat_b38_stalker2_look)%[/cut] Вопрос такой, можно ли объединить респавн альфы и сталкеров в одном рестрикторе. Если респавн нормально работает для альфы, то от ВНЗ до баржи Ноя явно больше 300 метров. Заспавнил на точке сбора сталкеров 10 библиотекарей. Они половину сталкеров вынесли. Сталкеры спавнились прямо на глазах ГГ. Как полагаю, функция dist_to_actor_ge измеряет расстояние от рестриктора (ВНЗ) до ГГ. Есть ли функция, которую можно вызвать из рестриктора, измеряющая расстояние от ГГ до произвольной точки? Можно ли эту точку прописать в way_zaton, или нужно делать спецобъект на локации? default_spot, например. Как эта функция может выглядеть в xr_conditions и в логике рестриктора? В конкретном квесте проблему можно решить, сделав два рестриктора. Просто я планирую для другого квеста сделать на локации 10 бандитских снайперов и респавнить их аналогичным способом. Делать для каждого отдельный рестриктор нежелательно. Нужна функция определения дистанции до произвольной точки на локации. Заранее благодарен за советы.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Пн, 14.10.2013, 01:20 | Сообщение # 667 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, вы сами себе усложняете задачи. У вас в рестрикторе - три проверки. Зачем? Спавните Альфу сквадом на смарте. Тогда можно просто проверить жив ли сквад (в вашем случае из трёх НПС ).
1 вариант: Если нет - спавните новый сквад.
on_info = {!squad_exist(стори_айди_сквада)} переход_на_секцию %=create_squad(секция_сквада:имя_смарта)%
2 вариант:
Или просто перед квестом зачищаете смарт ( не важно есть там сквады или нет) и спавните новые сквады - почти 100% гарантия, что при поялении ГГ в зоне смарта - сквады будут на месте.
on_info = %=clear_smart_terrain(имя_смарта) =create_squad(секция_сквада:имя_смарта)%
Из любого рестриктора можно проверить расстояние от ГГ до смарта, на котором спавните альфу
dist_between_actor_and_smart_ge(имя_смарта:расстояние_от_гг_до_смарта)
Функция пишется в xr_conditions
function dist_between_actor_and_smart_ge(actor, npc, p) local smart = sim_board.get_sim_board():get_smart_by_name(p[1]) local d = p[2] return d and actor:position():distance_to_sqr(smart.position) >= d * d end
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
strelok200 | Дата: Пн, 14.10.2013, 11:59 | Сообщение # 668 |
Бывалый
Свобода
Сообщений: 126
| Я прописал в avail_animations, чтобы сталкер ел хлеб animpoint_sit_normal_eat_bread Сталкер анимку проигрывает, но в руке у него нет хлеба. Как это можно исправить?
Сообщение отредактировал strelok200 - Пн, 14.10.2013, 12:29 |
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
makdm | Дата: Пн, 14.10.2013, 12:36 | Сообщение # 669 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата strelok200 ( ) Как это можно исправить? Попробуйте ему в рюкзак прописать батон хлеба.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
FantomICW | Дата: Сб, 19.10.2013, 23:37 | Сообщение # 670 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| Доброго вечера! Я хотел бы в ЗП запустить anm-файл из ЧН. Так вот вопрос, возможно ли это без особой сложности сделать, или камера строится и запоминает значения вей-поинтов (старых координат)?
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 20.10.2013, 12:45 | Сообщение # 671 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| FantomICW, Запустить не проблема. Только есть два типа анимации и соответственно два типа проигрывания: 1. Анимация привязанная к конкретному месту на локации - например пролет камеры при первом посещении Агропрома. 2. Анимация привязанная к ГГ - например анимация алкогольного опьянения. В первом случае анимация сделана в абсолютных координатах локации, во втором анимация привязана к нулю координат.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
FantomICW | Дата: Вс, 20.10.2013, 12:57 | Сообщение # 672 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| denis2000, спасибо! Еще пара вопросов. 1. Можно ли где-то просмотреть ppe- и anm-файлы, кроме как в игре? В состав СДК входить Postproccess Editor, но либо я чего-то не понимаю, либо там все очень схематично и просмотреть финальный вид нельзя. 2. Есть ли в Сталкере стандартный постпроцесс а-ля световая глушительная граната (экран становится ярко-белым на пару секунд)?
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 20.10.2013, 13:08 | Сообщение # 673 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| FantomICW, 1. Наглядно можно видеть только в игре. ppe-файлы, создаются и редактируются Postproccess Editor. anm-файлы, соответственно в Level Editor. 2. Насколько помню вроде такого постпроцесса нет, разве что в каком-то моде.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
strelok200 | Дата: Ср, 23.10.2013, 18:39 | Сообщение # 674 |
Бывалый
Свобода
Сообщений: 126
| как сделать неписей сквада враждебными к ГГ после сюжетного момента?
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 23.10.2013, 19:01 | Сообщение # 675 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| strelok200, Можно применить функцию =set_squad_goodwill(zat_b103_lost_merc_squad1:enemy)
Вместо zat_b103_lost_merc_squad1 вставляете ID Вашего сквада. Пример кода: on_info = {+zat_b103_merc_fight -zat_b103_angry_6} %=hit_npc_from_actor =set_squad_goodwill(zat_b103_lost_merc_squad1:enemy) +zat_b103_angry_6%
Код из оригинала ЗП. Определяет враждебность к ГГ отряда Тесака.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|