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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
yakutiДата: Ср, 17.04.2013, 21:01 | Сообщение # 361
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Я создал смарт террейн для монстров. У меня вопрос как поставить респавн этих монстров через определенное время?
 
sergej5500Дата: Ср, 17.04.2013, 22:27 | Сообщение # 362
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

yakuti,
Можно сделать рестриктор и в логике написать что-нибудь типа:
[cut=ЛОГИКА][logic]
active = sr_idle@logic1

[sr_idle@logic1]
on_info = {-mu_info_spawn_monstr} %=create_squad(ваш сквад монстров:ваш смарт) +mu_info_spawn_monstr%
on_info1 = {+mu_info_spawn_monstr} sr_idle@logic2

[sr_idle@logic2]
on_timer = 3600000|sr_idle@logic2 %-mu_info_spawn_monstr%
on_info = {-mu_info_spawn_monstr} sr_idle@logic1[/cut]
Сначала активна секция логики 1. При отсутствии инфопорции mu_info_spawn_monstr спавним сквад монстров, выдаём инфопорцию и переходим на секцию логики 2. Через один игровой час (время в функции on_timer измеряем в миллисекундах сбрасываем инфопорцию mu_info_spawn_monstr и переходим на секцию логики 1. В дальнейшем процесс будет периодически повторяться. Каждый час будет спавнится сквад монстров.


Сообщение отредактировал sergej5500 - Ср, 17.04.2013, 23:00
 
yakutiДата: Пт, 26.04.2013, 21:25 | Сообщение # 363
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Как перевести сквад или одного нпс из сквада в офф(ЗП)?
Как функцией телепортировать актора(ЗП)?
Подскажите логику пленника в зов припяти

;Сидорович [cut=Логика][logic@sidor_prisoner]
suitable = {=check_npc_name(sidor)} true
anim = prisoner
meet = meet@prisoner
target = actor
danger = danger_condition

[meet@prisoner]
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true

[danger_condition]
ignore_distance = 10

;[/cut] Не работает.
 
denis2000Дата: Пт, 26.04.2013, 22:25 | Сообщение # 364
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата (yakuti)
Как перевести сквад или одного нпс из сквада в офф(ЗП)?

Уже обсуждалось. Читаем форум.
Цитата (yakuti)
Как функцией телепортировать актора(ЗП)?

Код
=teleport_actor(<Имя точки пути где находиться>:<Имя точки пути куда смотрит>)

Цитата (yakuti)
Подскажите логику пленника в зов припяти

Код
[logic]
active = walker

[walker]
path_walk = ...
path_look = ...
def_state_standing = prisoner
gather_items_enabled = false
corpse_detection_enabled = false
combat_ignore_keep_when_attacked = true   
combat_ignore_cond = true
meet = no_meet


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
yakutiДата: Сб, 27.04.2013, 19:05 | Сообщение # 365
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Как заспавнить сквад после выдачи инфопоршня и как перевести в офф(на форумах не нашел)
Через рестриктор не работает

КМБ Урок 4. denis2000
 
denis2000Дата: Сб, 27.04.2013, 19:45 | Сообщение # 366
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата (yakuti)
как перевести в офф(на форумах не нашел)

Вы не находите ответ на этот вопрос, потому что это никому не нужно.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
yakutiДата: Сб, 27.04.2013, 20:52 | Сообщение # 367
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Через рестриктор я пробовал. Проблема в том, что сквад спавнится в начале игре (хотя в simulation и simulation_object_props) не прописывал
Логика рестриктора:
Код
[logic]
active = sr_idle@wait_for_actor

[sr_idle@wait_for_actor]
sr_idle@create_squad

[sr_idle@create_squad]
on_info = {-info_created_squad +newtaskmod} %=create_squad(esc_sidorovich:esc_sidor_smart) +info_created_squad% sr_idle@create_second

[sr_idle@create_second]
on_info = {-info_created_lager +newtaskmod} %=create_squad(esc_kolt:esc_zahvat_sidor) +info_created_lager%
 
FantomICWДата: Сб, 27.04.2013, 21:16 | Сообщение # 368
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

yakuti, можно через смарт-террейн прописать. Например, нам нужен сквад на Станции Переработки Отходов. Открываем логику смарта configs/scripts/zaton/smart/zat_b40_smart_terrain.ltx
Видим это
[cut=Файл]
Код
[smart_terrain];zat_b40_smart_terrain
squad_id = 38
max_population = 4

[exclusive]
zat_b40_guard_leader_01 = zaton\zat_b40_mercs.ltx
zat_b40_guard_leader_02 = zaton\zat_b40_mercs.ltx
;leave this for sim - killers only
zat_b40_guard_01 = zaton\zat_b40_mercs.ltx
zat_b40_guard_02 = zaton\zat_b40_mercs.ltx
zat_b40_guard_03 = zaton\zat_b40_mercs.ltx
zat_b40_guard_04 = zaton\zat_b40_mercs.ltx
zat_b40_guard_05 = zaton\zat_b40_mercs.ltx
zat_b40_guard_06 = zaton\zat_b40_mercs.ltx
zat_b40_guard_07 = zaton\zat_b40_mercs.ltx
zat_b40_guard_08 = zaton\zat_b40_mercs.ltx
[/cut]

Думаю, пояснять что есть что не надо. Добавляем под параметром max_population строку
Код
respawn_params = spawn@zat_b40_smart_terrain

Ниже прописываем
Код
[respawn@zat_b40_smart_terrain]
spawn_sidor

[spawn_sidor]
spawn_squads = твой сквад
spawn_num = {+инфопорция} 1, 0

Общий вид
[cut=Измененный файл]
Код
[smart_terrain];zat_b40_smart_terrain
squad_id = 38
max_population = 4
respawn_params = spawn@zat_b40_smart_terrain

[respawn@zat_b40_smart_terrain]
spawn_sidor

[spawn_sidor]
spawn_squads = твой сквад
spawn_num = {+инфопорция} 1, 0

[exclusive]
zat_b40_guard_leader_01 = zaton\zat_b40_mercs.ltx
zat_b40_guard_leader_02 = zaton\zat_b40_mercs.ltx
;leave this for sim - killers only
zat_b40_guard_01 = zaton\zat_b40_mercs.ltx
zat_b40_guard_02 = zaton\zat_b40_mercs.ltx
zat_b40_guard_03 = zaton\zat_b40_mercs.ltx
zat_b40_guard_04 = zaton\zat_b40_mercs.ltx
zat_b40_guard_05 = zaton\zat_b40_mercs.ltx
zat_b40_guard_06 = zaton\zat_b40_mercs.ltx
zat_b40_guard_07 = zaton\zat_b40_mercs.ltx
zat_b40_guard_08 = zaton\zat_b40_mercs.ltx
[/cut]

Только не забывайте что речь идет о спавне, а не о респавне. denis2000





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

yakuti, Секция [sr_idle@wait_for_actor] - чушь, а так логика рабочая.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
yakutiДата: Вс, 28.04.2013, 18:13 | Сообщение # 370
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

Такая проблема. Заспавнил нпс с логикой волкера, телепортировал его. После телепорта он должен выполнять секцию из логики wounded, но он ее не выполняет (пробовал два варианта)
1ый
Код
[logic@esc_otryad3]
active = walker@esc_otryad3
suitable = {=check_npc_name(esc_otryad3)} true
prior = 200
threshold = threshold@mil_fbarier

[walker@esc_otryad3]:walker@def_guarder
path_walk = esc_team3_walk
path_look = esc_team3_look
on_info = {+respawn_npc} walker@team3

[walker@esc_attaker3]:walker@def_guarder
path_walk = esc_bandit3_walk
path_look = esc_bandit3_look
on_info = {+you_in_restr} walker@esc_atake3
meet = no_meet
combat_ignore_cond = {+first_talk_cap -you_in_restr}

[walker@esc_atake3]:walker@def_guarder
path_walk = esc_banda3_walk
path_look = esc_banda3_look

[walker@team3]
path_walk = esc_trety_walk
path_look = esc_banda1_look
def_state_moving = walk_noweap
meet = meet
wounded = wounded@commandy3

[wounded@commandy3]
hp_state = 101|wounded_heavy@help_heavy
hp_state_see = 101|wounded_heavy@help_heavy
hp_victim = 101|nil ;actor
hp_cover = 101|false
hp_fight = 101|false
autoheal = false
not_for_help = true
enable_talk = true


2ой через смарт ковер
Код
[logic@esc_otryad4]
active = walker@esc_otryad4
suitable = {=check_npc_name(esc_otryad4)} true
prior = 200
threshold = threshold@mil_fbarier

[walker@esc_otryad4]:walker@def_guarder
path_walk = esc_team4_walk
path_look = esc_team4_look
on_info = {+first_talk_cap} walker@esc_attaker1
on_info = {+respawn_npc} animpoint@team4

[walker@esc_attaker4]:walker@def_guarder
path_walk = esc_bandit4_walk
path_look = esc_bandit4_look
on_info = {+you_in_restr} walker@esc_atake4
meet = no_meet
combat_ignore_cond = {+first_talk_cap -you_in_restr}

[walker@esc_atake4]:walker@def_guarder
path_walk = esc_banda4_walk
path_look = esc_banda4_look

[animpoint@team4]
cover_name = esc_team4_cover
avail_animations = wounded
meet = meet
use_camp = false
reach_distance = 2
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
 
makdmДата: Вс, 28.04.2013, 18:41 | Сообщение # 371
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

yakuti, после телепортации логика персов иногда "подвисает". Иногда намертво, а иногда секунд через 10 вдруг НПС оживают, а не стоят, как "истуканы", и начинают выполнять работу.
А если после телепортации, например в такое место, куда НПС сами попасть не могут вы переведёте их в OFF - line ( удалитесь за пределы switch_distanсe ) , то при переходе в ON - line ( и как следствие перезагрузка их логики ) вы увидите, что в том месте, где вы их поставили, их не будет. Они просто не смогут туда попасть.
Поэтому аккуратнее с teleport_npc ().


Терпение......
И все получится!
 
yakutiДата: Вс, 28.04.2013, 18:44 | Сообщение # 372
Отмычка
Пользователи
Сообщений: 46
Награды: 0
Репутация: [ 7 ]

"удалитесь за пределы switch_distanсe ) , то при переходе в ON - line ( и как следствие перезагрузка их логики ) вы увидите, что в том месте, где вы их поставили, их не будет. Они просто не смогут туда попасть. "
Да, было такое.
 
SandwichДата: Пт, 03.05.2013, 22:30 | Сообщение # 373
Зам. Лидера «Свободы»
Свобода
Сообщений: 4340
Награды: 16
Репутация: [ 431 ]

Создавал нпс на новой локе через алл.спавн
[cut=Лог]FATAL ERROR

[error]Expression : no_assert
[error]Function : CXML_IdToIndex<class CCharacterInfo>::GetById
[error]File : d:\prog_repository\sources\trunk\xrserverentities\xml_str_id_loader.h
[error]Line : 112
[error]Description : item not found, id
[error]Arguments :


stack trace:[/cut]


А колбасу и батоны нынче хреновые стали делать! (Умнейший неизвестный сталкер)
 
sergej5500Дата: Пт, 03.05.2013, 22:44 | Сообщение # 374
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Sandwich,
Судя по логу, не находит секцию НПС в character_desc_. Проверь, подключён ли файл в system.ltx.
 
SandwichДата: Пт, 03.05.2013, 23:19 | Сообщение # 375
Зам. Лидера «Свободы»
Свобода
Сообщений: 4340
Награды: 16
Репутация: [ 431 ]

sergej5500, он прописан в system

А колбасу и батоны нынче хреновые стали делать! (Умнейший неизвестный сталкер)
 
Поиск: