Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
yakuti | Дата: Ср, 17.04.2013, 21:01 | Сообщение # 361 |
Отмычка
Пользователи
Сообщений: 46
| Я создал смарт террейн для монстров. У меня вопрос как поставить респавн этих монстров через определенное время?
|
|
|
Эти 0 пользователя(ей) поблагодарили yakuti за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 17.04.2013, 22:27 | Сообщение # 362 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| 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 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
yakuti | Дата: Пт, 26.04.2013, 21:25 | Сообщение # 363 |
Отмычка
Пользователи
Сообщений: 46
| Как перевести сквад или одного нпс из сквада в офф(ЗП)? Как функцией телепортировать актора(ЗП)? Подскажите логику пленника в зов припяти
;Сидорович [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] Не работает.
|
|
|
Эти 0 пользователя(ей) поблагодарили yakuti за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 26.04.2013, 22:25 | Сообщение # 364 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата (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
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
yakuti | Дата: Сб, 27.04.2013, 19:05 | Сообщение # 365 |
Отмычка
Пользователи
Сообщений: 46
| Как заспавнить сквад после выдачи инфопоршня и как перевести в офф(на форумах не нашел) Через рестриктор не работает
КМБ Урок 4. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили yakuti за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 27.04.2013, 19:45 | Сообщение # 366 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата (yakuti) как перевести в офф(на форумах не нашел) Вы не находите ответ на этот вопрос, потому что это никому не нужно.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
yakuti | Дата: Сб, 27.04.2013, 20:52 | Сообщение # 367 |
Отмычка
Пользователи
Сообщений: 46
| Через рестриктор я пробовал. Проблема в том, что сквад спавнится в начале игре (хотя в 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%
|
|
|
Эти 0 пользователя(ей) поблагодарили yakuti за это полезное сообщение: |
|
|
FantomICW | Дата: Сб, 27.04.2013, 21:16 | Сообщение # 368 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| 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 |
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 27.04.2013, 22:14 | Сообщение # 369 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| yakuti, Секция [sr_idle@wait_for_actor] - чушь, а так логика рабочая.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
yakuti | Дата: Вс, 28.04.2013, 18:13 | Сообщение # 370 |
Отмычка
Пользователи
Сообщений: 46
| Такая проблема. Заспавнил нпс с логикой волкера, телепортировал его. После телепорта он должен выполнять секцию из логики 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
|
|
|
Эти 0 пользователя(ей) поблагодарили yakuti за это полезное сообщение: |
|
|
makdm | Дата: Вс, 28.04.2013, 18:41 | Сообщение # 371 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| yakuti, после телепортации логика персов иногда "подвисает". Иногда намертво, а иногда секунд через 10 вдруг НПС оживают, а не стоят, как "истуканы", и начинают выполнять работу. А если после телепортации, например в такое место, куда НПС сами попасть не могут вы переведёте их в OFF - line ( удалитесь за пределы switch_distanсe ) , то при переходе в ON - line ( и как следствие перезагрузка их логики ) вы увидите, что в том месте, где вы их поставили, их не будет. Они просто не смогут туда попасть. Поэтому аккуратнее с teleport_npc ().
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
yakuti | Дата: Вс, 28.04.2013, 18:44 | Сообщение # 372 |
Отмычка
Пользователи
Сообщений: 46
| "удалитесь за пределы switch_distanсe ) , то при переходе в ON - line ( и как следствие перезагрузка их логики ) вы увидите, что в том месте, где вы их поставили, их не будет. Они просто не смогут туда попасть. " Да, было такое.
|
|
|
Эти 0 пользователя(ей) поблагодарили yakuti за это полезное сообщение: |
|
|
Sandwich | Дата: Пт, 03.05.2013, 22:30 | Сообщение # 373 |
Зам. Лидера «Свободы»
Свобода
Сообщений: 4340
| Создавал нпс на новой локе через алл.спавн [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]
А колбасу и батоны нынче хреновые стали делать! (Умнейший неизвестный сталкер)
|
|
|
Эти 0 пользователя(ей) поблагодарили Sandwich за это полезное сообщение: |
|
|
sergej5500 | Дата: Пт, 03.05.2013, 22:44 | Сообщение # 374 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Sandwich, Судя по логу, не находит секцию НПС в character_desc_. Проверь, подключён ли файл в system.ltx.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Sandwich | Дата: Пт, 03.05.2013, 23:19 | Сообщение # 375 |
Зам. Лидера «Свободы»
Свобода
Сообщений: 4340
| sergej5500, он прописан в system
А колбасу и батоны нынче хреновые стали делать! (Умнейший неизвестный сталкер)
|
|
|
Эти 0 пользователя(ей) поблагодарили Sandwich за это полезное сообщение: |
|
|