Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Спавн и логика
denis2000Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Спавн и логика

Создание объектов на локации и логика поведения этих объектов

Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Сб, 25.01.2014, 21:23 | Сообщение # 766
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

denis2000,
Спасибо. Вылет на загрузке пропал.  Но НПС не хотят выполнять работу. Сквад остается на смарте. Бойцы сидят, ходят туда-сюда. Работы, как одиночные НПС, выполнять не хотят.


Сообщение отредактировал sergej5500 - Сб, 25.01.2014, 21:57
 
denis2000Дата: Сб, 25.01.2014, 22:49 | Сообщение # 767
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Теперь сначит нужно анализировать работу скрипта smart_terrain.script вроде именно в нем происходит назначение НПС из сквадов на работы на смарте.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
gamerДата: Пн, 27.01.2014, 11:09 | Сообщение # 768
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

Есть такая проблема заспавнил я монстров спавнятса норм на своих местах,только кроме етого спавнятса и окло меня все вместе .подскажите что зделал не правильно

алл спавн



smart


 
denis2000Дата: Пн, 27.01.2014, 18:05 | Сообщение # 769
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Попробовал я запилить логику xr_move на смарте - у меня работает! Моей рекомендации оказалось достаточно.

gamer, В приведенных конфигах проблемы нет.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
gamerДата: Пн, 27.01.2014, 18:09 | Сообщение # 770
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

интересно больше нечего таково не добовлял .... спасибо
 
sergej5500Дата: Пн, 27.01.2014, 20:48 | Сообщение # 771
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

denis2000
Спасибо.  Имею такое результат. Сделал НПС логику. Сидеть возле машины на лесопилке.


После спавна он начинает выполнять работу.


После того, как ГГ поговорит с ним и отойдет метров на 30, НПС "зависает". Стоит на месте, ходит туда-сюда. Если ГГ удаляется от лесопилки на дистанцию загрузки локации и возвращается обратно, то НПС обнаруживается сидящим возле машины.

 
denis2000Дата: Вт, 28.01.2014, 00:52 | Сообщение # 772
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Это в смысле через смарт так, а через индивидуальную логику нормально?

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 28.01.2014, 16:07 | Сообщение # 773
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

denis2000,
В общем, да. Если этого НПС спавнить как одиночку с кастом-датой то он выполняет работу отлично. При добавлении этой логики как эксклюзива на смарт лесопилки работа выполняется неустойчиво".

Добавлено (28.01.2014, 16:07)
---------------------------------------------
Добрый день.  Для квеста по освобождению пленника с ВНЗ добавил 10 НПС, преследующих ГГ и пленного сталкера.
Все НПС находятся под логикой xr_move.





При прохождении инфопорции zat_b38_alfa_plennic_in_zone имею вылет.


Текущий xr_move.  199 строка:
Код
local s_dir,s_dist=scheme_section["pursue_member_"..scheme_param.haved_pursue].dir,scheme_section["pursue_member_"..scheme_param.haved_pursue].dist
utils.send_to_nearest_accessible_vertex(npc,level.vertex_in_direction(scheme_section.pursue_target:level_vertex_id(),s_dir,s_dist))


Файл xr_move правился с целью увеличения кол-ва НПС, одновременно движущихся за актором, до 12. Хотя к вылету это приводить не должно. Для пробы делал 15 тестовых НПС. 12 неписей устремлялись за игроком. 3 оставались на месте.  В момент выдачи инфопорции некоторое кол-во преследователей может находиться в оффлайне. В чем может быть причина вылета и как его можно исправить?
 
denis2000Дата: Ср, 29.01.2014, 12:35 | Сообщение # 774
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
При добавлении этой логики как эксклюзива на смарт лесопилки работа выполняется неустойчиво"

Видимо из-за того что логика написана в расчете на использование через кастомдату, взаимодействие с другими схемами реализовано не совсем корректно, хотя логика move честно пытается сменить положение тела у НПС после диалога это у нее не всегда получается (переход в анимстейт sit_ass гораздо чаще не получается, а вот в give_orders например бес проблем). Для того чтобы решить эту проблему можно в секции meet запретить телодвижения:
Код
close_distance  = 0        
close_anim      = nil        
close_victim      = nil        
far_distance      = 10         
far_anim       = nil        
far_victim      = nil

Теперь НПС не вскакивает без нужды и соответственно схема работает устойчиво.

sergej5500, Я уже выкладывал памятку по логике xr_move вот повторюсь:



Там move_pursue_actor = true - ОХРАНЯТЬ ГГ, так что эту логику для преследователей ГГ вы применяете изначально не корректно. По вылету ничего сказать не могу - логику нужно долго анализировать чтобы понять, где и в чем не стыковка.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Ср, 29.01.2014, 12:50 | Сообщение # 775
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

denis2000
Я не думаю, что схема move_pursue_actor для враждебных НПС ошибочна. Сделал по аналогичной схеме 9 наемников на СПО.


Имею такие результаты

После переключения на секцию преследования за ГГ бегут все 9 НПС.  Тут они пока нейтралы.



После добавления враждебности к ГГ наемники активно пытались завалить игрока из пистолетов. Серьезные стволы для теста у них убрал.


Там не было никаких вылетов. На ВНЗ кто-то из преследователей, вероятнее всего, попадает в оффлайн.
 
makdmДата: Ср, 29.01.2014, 14:44 | Сообщение # 776
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500,   а чем не устраивает схема, которую я предложил здесь?

http://sigerous.ru/forum/17-2822-1219991-16-1384892907

Сделайте переход не с walker, а со схемы move  на схему companion

Если предполагаете что кто-то из нпс переходит в оффлайн, то попробуйте в логике работы на смарте прописать job_online = true  
Я не проверял, но судя по скриптам, "чувак" всегда будет online независимо от switch_distance.


Терпение......
И все получится!
 
sergej5500Дата: Ср, 29.01.2014, 19:44 | Сообщение # 777
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

makdm
В схеме companion нашел 2 недочета.
1. Если НПС дружественные, то они буквально "лезут" на ГГ. Окружают его со всех сторон, не дают применять оружие.
Можно ли им прописать остановку, например в 5 метрах от игрока?
2. Для НПС под логикой move можно прописать move_combat_disable = true.  В таком режиме они ведут себя относительно адекватно. Не реагируют на удаленных врагов. Защищаются, если на них нападают. Актора валят прекрасно.  Если в схеме  companion параметр combat_ignore_cond ограничен 50 метрами, то игрок беспрепятственно валит НПС на больших дистанциях. Если ограничения на  combat_ignore_cond снять, то НПС отвлекаются на ближайших врагов и уделяют актору мало внимания.
 
makdmДата: Ср, 29.01.2014, 22:47 | Сообщение # 778
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, в файле xr_companion попробуйте вместо
local desired_distance = 1
прописать
local desired_distance = 5
Цитата sergej5500 ()
то НПС отвлекаются на ближайших врагов и уделяют актору мало внимания.
Пропишите им

combat_ignore_cond =  {!check_enemy_name(actor)} true


Терпение......
И все получится!
 
denis2000Дата: Чт, 30.01.2014, 11:17 | Сообщение # 779
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
Я не думаю, что схема move_pursue_actor для враждебных НПС ошибочна.

Нет схемы move_pursue_actor, есть схема move и подсхемы: DEPEND, SHOOTER, PATROL (как это определил сам автор).
move_pursue_actor - это параметр в схеме move говорящий что НПС нужно двигаться за ГГ в определенном порядке (pursue_formation), за формирование и поддержание которого отвечает function action_move:pursue_formation_control(npc,target) которая у вас к стати и вылетает. Все вроде хорошо, но есть одно но - этот режим подразумевает ТЕЛЕПОРТ НПС к ГГ в случае удаления от него на расстояние более 60 метров (по умолчанию), а это уж ни как не есть хорошо для логики ПРЕСЛЕДОВАТЕЛЯ.

Да можно использовать логику companion, предварительно ее модернизировав (я и сам это делал когда понадобилась логика охраняемого Главным Героем НПС), или переделать логику move так, чтобы враждебные НПС не могли по волшебству доганять ГГ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Чт, 30.01.2014, 11:43 | Сообщение # 780
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

denis2000
Как я понял, где-то ошибка в таблице.


Я не вижу ошибки в коде.
 
Поиск: