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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
prohodchikДата: Вс, 10.04.2016, 20:19 | Сообщение # 1231
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

Приветствую всех!
Как заставить сталкеров не сталкиваться, взаимодействовать с объектами (подбирать артефакты и т.д.)? "Обычных" НПС, не "квестовых".


Проект в разработке – "Болотные легенды"
 
denis2000Дата: Пн, 11.04.2016, 08:28 | Сообщение # 1232
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата prohodchik ()
Как заставить сталкеров не сталкиваться

Или переработать в движке функции движения НПС по сетке или придумать скриптовую схему поведения (на счет второго варианта не уверен).
Цитата prohodchik ()
взаимодействовать с объектами (подбирать артефакты и т.д.)?

Сделать соответствующие схемы поведения НПС на подобии например обыска трупов: xr_corpse_detection.script


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
men_stalkerДата: Чт, 14.04.2016, 17:05 | Сообщение # 1233
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

Доброго времени суток,возникла проблема со спавном нпс. Много раз видел похожие проблемы но решения так и не не нашёл.
[cut=Файл сквада:][smart_terrain];esc_c1
squad_id = 1
max_population = 1[/cut]
[cut=simulation_objects_props][esc_c1_militari_squad]:default_squad
sim_avail = true[/cut]

[cut=simulation:]
[start_position_escape]
esc_c1__militari_squad = esc_c1[/cut]

[cut=squad_descr_escape:][esc_c1_militari_squad]:online_offline_group
faction = stalker
npc = sim_default_bandit_1
spawn_point = esc_c1_spawn
target_smart = esc_c1
story_id = esc_c1_militari_squad[/cut]

[cut=лог:]FATAL ERROR

[error]Expression : !m_error_code
[error]Function : raii_guard::~raii_guard
[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line : 748
[error]Description : ... - Зов Припяти\gamedata\scripts\smart_terrain.script:1139: attempt to perform arithmetic on field 'arrive_dist' (a nil value)

stack trace:[/cut]

з.ы.
заменив нпс на монстров всё нормально


Сообщение отредактировал men_stalker - Чт, 14.04.2016, 17:06
 
denis2000Дата: Чт, 14.04.2016, 18:56 | Сообщение # 1234
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

men_stalker, Явно пропишите:
Код
[smart_terrain];esc_c1
squad_id = 1
max_population = 1
arrive_dist = 30


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
men_stalkerДата: Пт, 15.04.2016, 10:28 | Сообщение # 1235
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

Код
[smart_terrain];esc_c1
squad_id = 1
max_population = 1
arrive_dist = 30

Не помогло более того я окончательно запутался. При изменении _g.script как рекомендует Хован в логе написано что отсутсвует конфигурация смарта, причём в любом случае: будь то нпс или мутант

[cut=лог]FATAL ERROR

[error]Expression : 0
[error]Function : ErrorLog
[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
[error]Line : 49
[error]Description : [smart_terrain esc_c1] no configuration!


stack trace:[/cut]


Сообщение отредактировал men_stalker - Пт, 15.04.2016, 13:48
 
denis2000Дата: Пт, 15.04.2016, 14:38 | Сообщение # 1236
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

men_stalker, Странное поведение, могу только предположить кривизну сборки игры.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
men_stalkerДата: Пн, 02.05.2016, 15:21 | Сообщение # 1237
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

Спасибо за помощь. Начал всё с нуля: создал новый смарт всё работает. Путём эксперементов понял, что система не видела конфигурацию смарта. Только одно не понятно почему в первом случае с монстрами прокатывало)

Добавлено (02.05.2016, 15:21)
---------------------------------------------
Здравствуйте, такой вот вопрос. Можно ли эксклюзивного нпс сделать без звёздочки, чтобы не откликался на актора (типо говорил чтоб отстал)
А и есть ли инфоршень выброса (чтоб когда начинался выброс он убегал в укрытие)

 
СахарДата: Пн, 02.05.2016, 17:53 | Сообщение # 1238
Гражданский
Пользователи
Сообщений: 2
Награды: 4
Репутация: [ 69 ]

men_stalker,
Цитата men_stalker ()
А и есть ли инфоршень выброса (чтоб когда начинался выброс он убегал в укрытие)

В логику НПС прописываешь переход на другой тип логики:
Код
on_info = {=surge_started} дргуй блок логики

А чтобы НПС вернулся обратно после того как выброс закончится нужно прописать условие
Код
on_info = {=surge_complete} дргуй блок логики


 
men_stalkerДата: Ср, 04.05.2016, 12:40 | Сообщение # 1239
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

Сахар, ещё раз здравствуйте.
Не могли бы вы написать пример такой логики. К примеру к эксклюзиву


Сообщение отредактировал men_stalker - Чт, 05.05.2016, 08:39
 
СахарДата: Пт, 06.05.2016, 04:37 | Сообщение # 1240
Гражданский
Пользователи
Сообщений: 2
Награды: 4
Репутация: [ 69 ]

Здравствуй, извини что пишу с задержкой были проблемы с интернетом.
[cut=Вот как-то так]
Код
[logic]
active = walker@1 ;схема которая запускается первой
suitable = {=check_npc_name(профиль НПС)} true ;здесь мы указываем условия при которых можно занять эту работу, в нашем случай мы проверяем профиль НПС
prior = 100 ;приоритет чем больше число тем предпочтительней будет работа для НПС (по идей этот параметр в нашем случай не нужен, но я не помню (все-таки год в армий сказался на моих знания в области модинга) обезательно нужно его прописывать или нет)
meet = no_meet ; запрещаем НПС говорить с ГГ совсем
level_spot = quest_npc ; тип отметки и подписи на карте: quest_npc – важный персонаж, mechanic – техник, trader - торговец. можно также в теорий поставить nil но не факт что сработает, а если  и сработает то НПС на карте отмечаться не будет

[walker@1]
path_walk = <имя пути>
on_info1 = {!is_day} sleeper ; ночь идем спать
on_info2 = {=surge_started} walker@surge_cover ;при выбросе прячемся в укрытия

[walker@surge_cover]
path_walk = <имя пути>
on_info1 = {!is_day} sleeper ; ночь идем спать
on_info2 = {=surge_complete} ; выброс кончился идём обратно

[sleeper]
path_main = <имя пути>
on_info1 = {=is_day =surge_started} walker@surge_cover ;если день и начался выброс то бежим сразу в укрытие
on-info2 = {=is_day} walker@1 ;днем едём обратно на свое место
[/cut]


 
men_stalkerДата: Пн, 09.05.2016, 17:03 | Сообщение # 1241
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

Доброго времени суток, снова вопрос: можно ли члена сквада состоящего из одного нпс сделать без звёздочки, если нет, то можно ли эксклюзиву в логику прописать точку спавна, а то спавнить на одной точке три человека не вариант.
 
denis2000Дата: Пн, 09.05.2016, 18:44 | Сообщение # 1242
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата men_stalker ()
можно ли эксклюзиву в логику прописать точку спавна

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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
men_stalkerДата: Вт, 17.05.2016, 16:36 | Сообщение # 1243
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

denis2000, здравствуйте
Цитата denis2000 ()
тогда и звезды не будет

А как тогда для этого надо прописать параметр Level_spot?

А и ещё, наблюдается такой баг: когда нпс спавнится через точку пути то он сначала нарезает круги вокруг неё, а только потом идёт по этому пути. Можно ли это как то исправить?
 
denis2000Дата: Вт, 17.05.2016, 19:45 | Сообщение # 1244
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата men_stalker ()
А как тогда для этого надо прописать параметр Level_spot?

А в чем проблема?
Цитата men_stalker ()
Можно ли это как то исправить?

Если АИ-сетка в этом месте идеально ровная то спавн в начальной точке пути все решает, если сетка не идеальная то НПС нужно некоторое время чтобы занять указанную позицию.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
men_stalkerДата: Ср, 18.05.2016, 13:53 | Сообщение # 1245
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

denis2000, допустим вот логика эксклюзива
[logic@esc_c1_millitary_guard_4]
suitable = {=check_npc_name(esc_c1_millitary_guard_4)}
active = walker@guard_4
prior = 200

[walker@guard_4]
path_walk = guard_4_walk
path_look = guard_4_look
meet = no_meet

А на мини карте всё равно отображается как лидер отряда (с звездой)


Сообщение отредактировал men_stalker - Ср, 18.05.2016, 13:55
 
Поиск: