Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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, 20:00 | Сообщение # 751
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.  Интересует такой вопрос. В СГМ много одиночных НПС (базы группировок, неписи для респавна и т.д.)  Они подчиняются логике xr_move. Если этих НПС спавнить как сквады, то будет ли схема xr_move для них работать?

Конечно будет, в крайнем случае ее можно заменить схемой walker. denis2000

Добавлено (25.01.2014, 20:00)
---------------------------------------------
denis2000
Попробовал сделать следующее. На смарте zat_b38 прописал эксклюзивы


Типовая секция работы.



После таких правок имею 

еще до конца загрузки сейва.


Лог ругается на строку v.game_vertex_id = v.alife_task:game_vertex_id() в скрипте. Работы для xr_move брались из кастом-дат одиночных эксклюзивных НПС.  Прямой спавн сквада из этих эксклюзивных НПС вылета не дает, но НПС не хотят выполнять свои работы в xr_move. Если спавнить их не сквадом, а поодиночке, то работы прекрасно выполняются.  Вопрос, можно ли поправить скрипт, чтобы работы в xr_move выполняли НПС на смартах?
 
denis2000Дата: Сб, 25.01.2014, 20:46 | Сообщение # 752
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Попробуй в скрипте gulag_general.script добавить в таблицу job_type_by_scheme, запись:
Код
["move"] = "point_job"


Это как раз, то чего я боялся для внедрения этой логики на смарт придется либо допиливать скрипты или заменить эту логику на walker.


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

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


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

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

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

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

алл спавн



smart


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

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

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


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

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

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


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


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

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

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

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

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


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

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



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


Там не было никаких вылетов. На ВНЗ кто-то из преследователей, вероятнее всего, попадает в оффлайн.
 
makdmДата: Ср, 29.01.2014, 14:44 | Сообщение # 763
Рожденный в СССР
Разработчики
Сообщений: 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 | Сообщение # 764
Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 765
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

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

combat_ignore_cond =  {!check_enemy_name(actor)} true


Терпение......
И все получится!
 
Поиск: