Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
Ааз | Дата: Чт, 22.03.2012, 16:37 | Сообщение # 121 |
Хозяин Зоны
Зомби
| Чистый ЗП 1.6.02 В КМБ был урок по спавну нового НПС через кнопку F6. А через all.spawn как? Может я плохо искал и не нашел нужную информацию?
Не дошли до 5-го урока. XOBAH
В ЧН и ЗП данный метод не применяется! Хотя и работает. Более того одиночные НПС не спвняться - спавняться только сквады. Поэтому единственным методом фактически стал спавн через скрипт. denis2000
Понятно, спасибо за ответ!
Сообщение отредактировал Faktor - Чт, 22.03.2012, 19:01 |
|
|
Эти 0 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 22.03.2012, 17:52 | Сообщение # 122 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| xardaslich, 1. В ЗП эту аномалию убрали, что бы возродить поковыряй конфиги аномальных зон из ЧН (вроде [zone_mincer]) 2. Да верно мыслите - видимо опечатка.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Lazur | Дата: Вс, 25.03.2012, 16:52 | Сообщение # 123 |
Новичок
Пользователи
Сообщений: 82
| Здравствуйте. Пара вопросов возникло: "Если собираюсь спавнить аномалию, то в каком файле прописывать её спавн?" и "Если я в bind_stalker.script спавню авто, то как я узнаю, на какой локации она заспавнится? За это отвечает Level vertex?". Заранее благодарен.
На пыльных тропинках аномальных полей Заспавнятся наши следы...
|
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 25.03.2012, 17:25 | Сообщение # 124 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Lazur, 1. Проще через all.spawn 2. Level vertex и game vertex
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Lazur | Дата: Пн, 26.03.2012, 08:36 | Сообщение # 125 |
Новичок
Пользователи
Сообщений: 82
| denis2000, Через All.spawn нашёл только как зону аномальную делать, а я хочу одиночную (кисель, например). Чем их постановка отличается?
anomal_zone - накрывает группу одиночных аномалий, образуя из этого зону, в которой спавнятся артефакты, меняется позиция од. аномалий после выброса. А простая аномалия - и есть простая аномалия, просто ставите ее, и ничем не накрываете. Информация по теме: link раз, link два. XOBAH
Благодарю! ------------ Ещё вопрос: как по английски название аномалии "трамплин" (на какой "позывной" откликается аномалия)?
На пыльных тропинках аномальных полей Заспавнятся наши следы...
Сообщение отредактировал Lazur - Ср, 28.03.2012, 14:11 |
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
Kosha | Дата: Вс, 01.04.2012, 23:46 | Сообщение # 126 |
Отмычка
Пользователи
Сообщений: 32
| тупой наверное вопрос, но: можно ли создать смарт-террайн на новой локаций (игра ЧН) не пользуясь СДК? (через ACDC к примеру)
Только два пути и есть через SDK или ACDC. denis2000
Добавлено (01.04.2012, 22:39) --------------------------------------------- каков путь через acdc?
КМБ! denis2000
Добавлено (01.04.2012, 23:46) --------------------------------------------- во время компиляций алл.спавна получил: unknown section 'camp_zone' - там в примере идет для ЗП описание а в ЧН есть аналог этой функций?
В ЧН такой секции нет. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили Kosha за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 03.04.2012, 13:43 | Сообщение # 127 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем добрый день. Изучая курс молодого бойца, сделал на Кордоне сквад долговцев на примере генерации сквада подонков.
[cut=Создал смарт-террайн вида][1241]
; cse_abstract properties section_name = smart_terrain name = dolg_1_smart position = -205.273529052734, -33.2182197570801, -337.049224853516 direction = 0, 0, 0 version = 128 script_version = 12
; cse_alife_object properties game_vertex_id = 2063 distance = 24 level_vertex_id = 47411 object_flags = 0xffffff3e custom_data = <<END [story_object] story_id = zat_stalker_base_smart [smart_terrain] cfg = scripts\dolg\smart_1.ltx END END
; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2
; cse_alife_space_restrictor properties restrictor_type = 3
; se_smart_terrain properties[/cut] Запаковал all.spawn. [cut=В файле scripts\dolg\smart_1 прописал логику][smart_terrain];dolg_1_smart squad_id = 251 respawn_params = respawn@dolg_1_smart max_population = 2 [respawn@dolg_1_smart] spawn_stalker@dolg [spawn_stalker@dolg] spawn_squads = dolg_squad_1 spawn_num = 1[/cut] [cut=В файле squad_descr_extended прописал][dolg_squad_1]:online_offline_group faction = dolg npc = dolg_s_1, dolg_s_2, dolg_s_3, dolg_s_4, dolg_s_5, dolg_s_6 story_id = dolg_sguad_1 target_smart = dolg_1_smart[/cut] Прописал спавн, класс и профили НПС. Запустил игру. 6 долговцев сидят на Кордоне на своем смарте, никуда не уходят. С командиром можно поторговать. Вроде все нормально. Подложил им дистанционную взрывчатку. Взрывом убило всех шестерых. В КМБ указано "Условием рождения будет смерть предыдущего сквада. Запустим их на маршрут по Затону" . Бегал на другой конец Кордона, спал сутки, но долговцы не спавнятся. Как сделать, чтобы сквад спавнился по новой после гибели предыдущего. Заранее благодарен за советы.
Симуляция разрешена? Попробуй убрать target_smart. denis2000 target_smart удалил. Спавн долговцев заработал. У меня была идея расположить сквады долговцев на важных точках Кордона, Болот, Затона и Юпитера. Они должны были отвлекать внимание мутантов и бандитов от важных НПС, таких, как сталкеры на Шевченко, механики на Кордоне и на Болоте, часовой наемников на Юпитере. Главное требование к долговцам, чтобы они не уходили от точек спавна. Если удалить target_smart из конфига сквада, не пойдут ли они самостоятельно гулять по локации.
Сообщение отредактировал sergej5500 - Вт, 03.04.2012, 16:38 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 03.04.2012, 17:03 | Сообщение # 128 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Свалят как пить дать. Тогда нужно делать по другому: [cut]1. В секции сквада ставить target_smart. 2. В секции сквада добавть on_death = %+dolg_squad_1_dead% 3. сделать рестриктор с подобной логикой: Code [logic] active = sr_idle@respawn
;------------------Респавн сквадов------------------------------------------- [sr_idle@respawn] on_info = {+dolg_squad_1_dead !squad_exist(dolg_squad_1)} %=create_squad(dolg_squad_1:dolg_1_smart) -dolg_squad_1_dead% Логика предельно упрощенная.[/cut]
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 08.04.2012, 09:26 | Сообщение # 129 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем Добрый День. После получения задания на поиск георадара, на подходе к насосной станции услышал интенсивную стрельбу. На станции нашел массу трупов сталкеров и бандитов. [cut=Просмотрев файлы, нашел сквады] Файл squad_descr_marsh.ltx [mar_b2_bandit_invaders_1_squad]:online_offline_group faction = bandit_enemy assault_squad = true npc = sim_default_bandit_enemy_0, sim_default_bandit_enemy_1, sim_default_bandit_enemy_2 target_smart = mar_smart_terrain_2 spawn_point = mar_smart_terrain_11_spawn_point story_id = mar_b2_bandit_invaders_1_squad on_death = %+mar_b2_bandit_invaders_1_squad_death%
[mar_b2_bandit_invaders_2_squad]:online_offline_group faction = bandit_enemy assault_squad = true npc = sim_default_bandit_enemy_1, sim_default_bandit_enemy_2, sim_default_bandit_enemy_3 target_smart = mar_smart_terrain_2 spawn_point = mar_smart_terrain_14_spawn_point story_id = mar_b2_bandit_invaders_2_squad on_death = %+mar_b2_bandit_invaders_2_squad_death%
И условие их генерации: Файл sgm tasks.skripts --/Квест:Армейская поклажа if has_alife_info("mar_army_cargo_talk_mechanic") and dont_has_alife_info("mar_army_cargo_georadar_timer") then give_info("mar_army_cargo_georadar_timer") start_game_timer("mar_georadar_timer",50) create_force("mar_b2_bandit_invaders_1_squad","mar_smart_terrain_11") create_force("mar_b2_bandit_invaders_2_squad","mar_smart_terrain_14") end [/cut] В файлах mar_smart_terrain_11 и mar_smart_terrain_11 упоминания об этих сквадах нет. На каких смартах генерируются бандитские сквады? Если генерация происходит на 11 и 14 смартах, то бандитов должны были обнаружить и расстрелять еще на подходе к станции. У меня они, видимо, спавнятся на самой станции, так как трупы бандитов лежали прямо в помещениях. Что нужно подправить в логике, чтобы бандиты гарантированно спавнились на 11 и 14 смартах. Заранее благодарен за советы.
P.S. Вопрос снимаю. Переигровка с заменой сквада бандитов на сквад сталкеров показала, что спавн происходит на 11 и 14 смартах.
Сообщение отредактировал sergej5500 - Вс, 08.04.2012, 12:48 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Geonezis | Дата: Вс, 08.04.2012, 13:41 | Сообщение # 130 |
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
| sergej5500, они спавняться все как прописаны (11 и 14). но логика заставит их перемещаться в Code target_smart = mar_smart_terrain_2
Смерти Вопреки Spectrum Project AP_Prodaction
|
|
|
Эти 0 пользователя(ей) поблагодарили Geonezis за это полезное сообщение: |
|
|
Lazur | Дата: Сб, 14.04.2012, 13:44 | Сообщение # 131 |
Новичок
Пользователи
Сообщений: 82
| Здравствуйте. Создал аномальную зону на Свалке (ЗП)при компиляции вижу [cut=Это]ссылка скрина на народе[/cut] кусьман из all.[cut=spawn][6532] ; cse_abstract properties section_name = zone_mine_steam_weak name = xim_garbage9 position = 98.787094,-2.055592,-99.886077 direction = 0,0,0
; cse_alife_object properties game_vertex_id = 1189 distance = 32.0 level_vertex_id = 246951 object_flags = 0xffffff3e
; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 3
; cse_alife_space_restrictor properties restrictor_type = 3 ;Тип рестриктора
; cse_alife_custom_zone properties max_power = 0
; cse_alife_anomalous_zone properties offline_interactive_radius = 30 artefact_spawn_count = 5 artefact_position_offset = 0x460
; se_zone_anom properties
[6533] ; cse_abstract properties section_name = anomal_zone name = gar_xim_anomal_zone position = 98.787084,-2.055592,-99.886077 direction = 0,0,0
; cse_alife_object properties game_vertex_id = 1189 distance = 0 level_vertex_id = 246951 object_flags = 0xffffff3e custom_data = <<END [anomal_zone] cfg = scripts\garbage\anomaly\gar_xim_zone.ltx END
; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2
; cse_alife_space_restrictor properties restrictor_type = 3
[6534] ; cse_abstract properties section_name = space_restrictor name = gar_xim_anomaly_spot position = 98.787194,-2.055592,-99.886077 direction = 0,0,0
; cse_alife_object properties game_vertex_id = 1189 distance = 0 level_vertex_id = 246951 object_flags = 0xffffff3e custom_data = <<END [story_object] story_id = gar_xim_anomaly_spot END
; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1
; cse_alife_space_restrictor properties restrictor_type = 3[/cut]
В представленных строках ошибок нет кроме комментария после назначения параметра (;Тип рестриктора), плюс дубликаты секций возможны. denis2000
На пыльных тропинках аномальных полей Заспавнятся наши следы...
Сообщение отредактировал Lazur - Сб, 14.04.2012, 13:45 |
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
Бабай | Дата: Ср, 18.04.2012, 21:51 | Сообщение # 132 |
Ветеран
Пользователи
Сообщений: 483
| Всем Привет! Какой параметр отвечает за реакцию НПС на выброс?
Никакой. Ручками-ручками. denis2000
В смысле "ручками"?
В смысле в логике НПС настраиваются его действия при выбросе. denis2000 Вот для примера логика Мстителя [cut noguest] [logic] active = move@avenger
[move@avenger] move_avail_speak = 15|wait|false|true move_dest_number = 1147189 move_look_vertex = 1147196 move_state_when_center = sit move_state_when_move = walk move_combat_disable = true move_home_teleport = true meet = meet invulnerable = true on_info = {+zat_danger_parcel_otdano} nil %=remove_npc% on_info2 = {=dist_to_actor_ge(80) +zat_danger_parcel_fail} nil %=release_npc%
[meet] abuse = false use = true allow_break = false meet_on_talking = false trade_enable = true [/cut] Какие действия тут описаны?
Правильно заданный вопрос - половина правильного ответа!
Сообщение отредактировал Бабай - Ср, 18.04.2012, 22:19 |
|
|
Эти 0 пользователя(ей) поблагодарили Бабай за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 18.04.2012, 23:58 | Сообщение # 133 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Бабай, Вот логика прятаться в укрытии: Code [walker@work] on_info ={=surge_started} walker@surge
[walker@surge] path_walk = surge_walk path_look = surge_look def_state_moving1 = sprint def_state_moving2 = sprint def_state_moving3 = sprint on_info = {!surge_started} walker@work
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
lychagin0 | Дата: Чт, 26.04.2012, 12:54 | Сообщение # 134 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Добрый день,подскажите что в этой логике за что отвечает,а то боюсь упустить что ни будь. [cut noguest=Логика рестриктора] [logic] active = sr_universal
[sr_universal] scheme_type = level_change_zone level_change_cond = {+esc_key_from_gate_founded} true, false level_change_on_use = %+level_change_to_marsh_from_escape% level_change_travel_coord = 15.017832756042,19.779502868652,712.16851806641 level_change_throw_coord = 18.188539505005,16.269477844238,676.32806396484,3.187,esc_key_from_gate_needed level_change_travel_time = 2,30 level_change_spot = level_change_up_location,st_level_change_to_marsh,false level_change_autosave = st_save_travel_escape_to_marsh level_change_silent_travel = false level_change_hidden_mode = {+esc_uncoupling_halt_searched} false, true level_change_message_impossible = st_level_change_zone_ok_need_key_text[/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 26.04.2012, 21:53 | Сообщение # 135 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| [cut][logic] - Базовая секция active = sr_universal - Ссылка на активную секцию (то есть ту которая работает сразу после появления рестриктора)
[sr_universal] - логика универсального рестриктора из файла sr_universal.script scheme_type = level_change_zone - тип схемы (универсальный имеет несколько схем в одном скрипте sound_zone, noweap_zone, throw_zone и тд. и тп.) level_change_cond = {+esc_key_from_gate_founded} true, false - условие при котором рестриктор работает (true) или не работает (false) level_change_on_use = %+level_change_to_marsh_from_escape% - действия при срабатывании рестриктора (скрипт или выдача/отбор инфопорций) level_change_travel_coord = 15.017832756042,19.779502868652,712.16851806641 - координаты точки в которой происходит сохранение, прокрутка времени и подготовка к телепортации (затемнение отбор управления у игрока и тп.) и в этих координатах собственно и расположен сам левел ченджер заспавненый через all.spawn level_change_throw_coord = 18.188539505005,16.269477844238,676.32806396484,3.187,esc_key_from_gate_needed - координаты точки, направление взгляда при телепортации на йтекущую локацию и инфопорции которые выдаются. level_change_travel_time = 2,30 - время в пути (час, мин) level_change_spot = level_change_up_location,st_level_change_to_marsh,false - три параметра: имя тега с иконкой перехода, подпись под иконкой, скрывать иконку в случае скрытого перехода (true) или нет (false) level_change_autosave = st_save_travel_escape_to_marsh - имя тега с названием автосохранения при активации рестриктора level_change_silent_travel = false - показывать (false) или нет (true) окно разрешения игроком перехода level_change_hidden_mode = {+esc_uncoupling_halt_searched} false, true - условие при котором иконка рестриктора скрыта (true) или присутствует на карте (false) level_change_message_impossible = st_level_change_zone_ok_need_key_text - имя тега с названием причины неработоспособности перехода, например нет ключа от ворот.[/cut]
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
|