Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 05.06.2015, 13:54 | Сообщение # 1201 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата Phorux ( ) если начать новую игру.... можно наблюдать происходящее дальше, при этом поворачивая камеру. Это вас спасает? Если - да, то пользуйтесь на здоровье.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Phorux | Дата: Пт, 05.06.2015, 15:00 | Сообщение # 1202 |
Гражданский
Пользователи
Сообщений: 6
| В том то и дело. Думаю попробовать найти отчего это зависит. Технически это возможно, вот только при не всегда доступных условиях.
АЗАЗА Стрекоза
Сообщение отредактировал Phorux - Пт, 05.06.2015, 15:00 |
|
|
Эти 0 пользователя(ей) поблагодарили Phorux за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 06.06.2015, 17:26 | Сообщение # 1203 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата Phorux ( ) Технически это возможно Найдете решение, обязательно поделитесь с остальными.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 15.07.2015, 13:11 | Сообщение # 1204 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем добрый день.
В одном из модов видел, как сталкеры стреляли в снорка-мишень, подвешенного на тросе. Попробовал сделать что-то подобное. Поставил на локации кровососа.
[cut=Кровосос][431]
; cse_abstract properties section_name = physic_object name = esc_physic_object_0012 position = -132.498580932617, -30.2769718170166, -399.862426757813 direction = 0.0372226275503635, -0.000439248135080561, 0.0118027431890368 id = 65535 version = 128 script_version = 12 spawn_id = 716
; cse_alife_object properties game_vertex_id = 0 level_vertex_id = 25 object_flags = 0xffffff3a custom_data = <<END [story_object] story_id = esc_b1_krovosos END
; cse_visual properties visual_name = monsters\krovosos\krovosos_strong
; cse_ph_skeleton properties
; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = bip01_spine upd:num_items = 0x2d upd:ph_force = -6.01675955542426e+016, 2.71536090779403e+023, -4.19694075048938e-008 upd:ph_torque = 1.64616888567267e-021, 2.65341785808722e+023, -6.97338600905365e-022 upd:ph_position = -1.58198307927985e-023, 4.19692476327782e-008, -1.5272176122467e+031 upd:ph_rotation = 1.59497893160464e-023, 1.49898990997599e-008, -1.57943363860635e-023, 46113046396928 upd:ph_angular_velosity = -4.19696029041461e-008, -6.66893314296e+021, -109446592 upd:ph_linear_velosity = 2.74785005564987e+023, -7.18881055945531e-005, -1.58198307927985e-023
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/cut]
Прописал неписю работу.
[cut=Логика][logic@esc_b1_walker_1] active = walker@esc_b1_krovosos_fire_walker_1 suitable = {=check_npc_name(sim_default_stalker)} true prior = 215 post_combat_time = 0,0
[walker@esc_b1_krovosos_fire_walker_1] path_walk = krovosos_fire_walk path_look = krovosos_fire_look meet = no_meet on_info = remark@esc_b1_krovosos_fire_remark_1
[remark@esc_b1_krovosos_fire_remark_1] target = story | esc_b1_krovosos anim = patrol_fire meet = no_meet[/cut]
Непись стоит и выполняет секцию валкера. На секцию ремарк переходить не хочет.
Секция стрельбы по кровососу была сделана на основе урока. "НПС, стреляющий в другого персонажа".
В каком месте допущено ошибка? Логика сделана для чистого Зова Припяти.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 15.07.2015, 15:51 | Сообщение # 1205 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Не хотите условие перехода на схему remark добавить?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 15.07.2015, 15:55 | Сообщение # 1206 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата denis2000 ( ) Не хотите условие перехода на схему remark добавить?
Пробовал. Результат нулевой.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 15.07.2015, 21:40 | Сообщение # 1207 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Такая логика вроде должна работать но не работает (на самом деле на секцию переключается, но на цель не разворачивается и анимацию не проигрывает). Сделайте в месте установки кровососа точку пути (esc_b1_krovosos_fire_point) и назначите целью ее: Код [remark@esc_b1_krovosos_fire_remark_1] target = path | esc_b1_krovosos_fire_point, 0 anim = patrol_fire
Или сделайте в некоторой точке пути этого НПС анимацию patrol_fire: Код ***_guard_1_walk] points = p0,p1,p2,p3
p0:name = wp00 p0:position = 211.612,16.774,485.548 p0:game_vertex_id = 6 p0:level_vertex_id = 1324424 p0:links = p1(1),p2(1)
p1:name = wp01 p1:position = 231.994,149.922,472.249 p1:game_vertex_id = 6 p1:level_vertex_id = 1361074 p1:links = p2(1),p3(1),p0(1)
p2:name = wp02 p2:position = 246.412,14.552,477.868 p2:game_vertex_id = 6 p2:level_vertex_id = 1387598 p2:links = p3(1),p1(1)
p3:name = wp03 p3:flags = 0x1 p3:position = 237.355,18.079,523.716 p3:game_vertex_id = 292 p3:level_vertex_id = 1371319 p3:links = p0(1),p2(1)
[***_guard_1_look] points = p0
p0:name = name00|a=patrol_fire|t=10000 p0:flags = 0x1 p0:position = 0.880,-4.472,433.705 p0:game_vertex_id = 134 p0:level_vertex_id = 1185573 Тогда в точке пути wp03 НПС будет разворачиваться в точку name00 и проигрывать анимацию стрельбы в течении 10 сек.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 02.08.2015, 23:23 | Сообщение # 1208 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер.
В чистом Зове Припяти на Затоне на мосту Преображенского сделал двух враждебных снайперов.
[cut=Сквад] [zat_b12_bandit_sniper_squad]:online_offline_group sympathy = 0 relationship = enemy faction = bandit npc = zat_b12_bandit_sniper, zat_b12_bandit_sniper target_smart = zat_b12 story_id = zat_b12_bandit_sniper_squad spawn_point = zat_b12_sniper_2_look always_arrived = true [/cut]
[cut=Логика][logic@zat_b12_bandit_sniper_1] active = walker@zat_b12_bandit_sniper_1 suitable = {=check_npc_name(zat_b12_bandit_sniper)} true prior = 200
[walker@zat_b12_bandit_sniper_1] path_walk = sniper_1_walk path_look = sniper_1_look gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false meet = no_meet on_info = {=distance_npc_to_point_le(1:zat_b12_sniper_1_walk:0)} remark@zat_b12_bandit_sniper_1
[remark@zat_b12_bandit_sniper_1] gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false meet = no_meet anim = threat target = story | actor on_info = {=distance_npc_to_point_ge(10:zat_b12_sniper_1_walk:0)} walker@zat_b12_bandit_sniper_1
;
[logic@zat_b12_bandit_sniper_2] active = walker@zat_b12_bandit_sniper_2 suitable = {=check_npc_name(zat_b12_bandit_sniper)} true prior = 190
[walker@zat_b12_bandit_sniper_2] path_walk = sniper_2_walk path_look = sniper_2_look gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false meet = no_meet on_info = {=distance_npc_to_point_le(1:zat_b12_sniper_2_walk:0)} remark@zat_b12_bandit_sniper_2
[remark@zat_b12_bandit_sniper_2] gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false meet = no_meet anim = threat target = story | actor on_info = {=distance_npc_to_point_ge(10:zat_b12_sniper_2_walk:0)} walker@zat_b12_bandit_sniper_2[/cut]
[cut=Пути]
[zat_b12_sniper_1_look] points = p0 p0:name = wp00|a=guard p0:flags = 0x1 p0:position = 426.131561279297,33.4727020263672,-322.755004882813 p0:game_vertex_id = 74 p0:level_vertex_id = 1664060
[zat_b12_sniper_1_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = 426.404266357422,33.4727020263672,-316.189971923828 p0:game_vertex_id = 74 p0:level_vertex_id = 1664070
[zat_b12_sniper_2_look] points = p0 p0:name = wp00|a=guard p0:flags = 0x1 p0:position = 430.541717529297,33.2572250366211,-312.313354492188 p0:game_vertex_id = 74 p0:level_vertex_id = 1671868
[zat_b12_sniper_2_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = 430.683837890625,33.2645454406738,-300.436187744141 p0:game_vertex_id = 74 p0:level_vertex_id = 1671885[/cut]
По замыслу, они должны целится в игрока. Как снайпер у баржи Ноя в СГМ. При подходе к мосту со стороны СПО вижу этих снайперов, целящихся в направлении Лесничества. В этом направлении находится место спавна ГГ в оригинальной игре. Эти снайперы на ГГ не смотрят и позволяют расстрелять себя в спину.
Как можно исправить этот недочет?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 03.08.2015, 08:36 | Сообщение # 1209 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, А почему бы не использовать специально для этого созданную схему camper (снайпер)?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
STALKER_ICEBERG | Дата: Ср, 19.08.2015, 11:00 | Сообщение # 1210 |
Сталкер
Пользователи
Сообщений: 180
| подскажите, как сделать так, что бы НПС спавнились на локации и бродили по ней, патрулируя (как на Земснаряде после квестов, на станции переработки отходов, ВНЗ "Круг", Лесопилке? Тоже хочу такое сделать, только на Лесничестве.
|
|
|
Эти 0 пользователя(ей) поблагодарили STALKER_ICEBERG за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 19.08.2015, 12:47 | Сообщение # 1211 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| STALKER_ICEBERG, Надо сделать там смарт-террейн с разрешением на симуляцию. Создание такого смарта описано в том числе в КМБ Урок 6.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
STALKER_ICEBERG | Дата: Ср, 19.08.2015, 13:20 | Сообщение # 1212 |
Сталкер
Пользователи
Сообщений: 180
| Цитата denis2000 ( ) Надо сделать там смарт-террейн с разрешением на симуляцию Чиво? Я ж не продвинутый, не умею такого. Я просто хочу сделать спавн сталкеров. На подобии тех, что на Земснаряде. Можно ли что-то скопировать оттуда и перенести на Лесничество? Просто не то, что бы западло, а вникнуть не могу. Ну я имею ввиду скопировать текст оттуда (с Земснаряда), изменить колличество сталкеров и маршрут и все. В 6м уроке описаны сквады и создание клана отдельного.
|
|
|
Эти 0 пользователя(ей) поблагодарили STALKER_ICEBERG за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 19.08.2015, 15:39 | Сообщение # 1213 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| STALKER_ICEBERG,
Если делать по аналогии с СГМ, то нужно сделать следующее.
1. В файл gamedata\configs\respawn\respawn_abandoned добавить секцию респавна. По аналогии с имеющимися.
[cut=Параметры секции спавна] [zat_abandoned_respawn1] ;--/Станция переработки отходов cond = {+zat_b40_notebook_saled} true, false ; -- Условие спавна target_smart = zat_b40_smart_terrain ; -- Смарт спавна sections = zat_respawn1_killer1,zat_respawn1_killer2,zat_respawn1_killer3,zat_respawn1_killer4,zat_respawn1_killer5,zat_respawn1_killer6,zat_respawn1_k iller7,zat_respawn1_killer8,zat_respawn1_killer9,zat_respawn1_killer10,zat_respawn1_killer11,zat_respawn1_killer12 ; -- Секции НПС, которых спавним time_of_the_day = night respawn_radius = 7 place = 324.415,33.231,-396.303,1509422,1 ; -- Координаты точки спавна born_info = zat_abandoned_respawn1_spawned ; -- Инфопорции спавна reload_info = zat_respawn1_all_deaths ; -- Инфопорции спавна[/cut]
2. В файл gamedata\configs\creatures\spawn_sections_extended_stalkers прописать спавн-секции НПС
[cut=Пример секции] [zat_respawn1_killer1]:stalker_abandoned $spawn = "respawn\zat_respawn1_killer1" character_profile = respawn_easy_killer1 spec_rank = regular community = killer can_be_wounded = false custom_data = scripts\SGM\zaton\invaders\zat_respawn1_killer1.ltx [/cut]
3. В папке configs\scripts\SGM\zaton\invaders для каждого спавнящегося НПС сделать файл логики с указанием путей движения.
4. В файл gamedata\scripts\xr_effects добавить функцию подсчета убитых на этой точке.
[cut=Код]function zat_respawn1_killers_counter(actor,npc) give_info(npc:section().."_death") if has_several_info("zat_respawn1_killer","_death",1,12) and dont_has_alife_info("zat_respawn1_all_deaths") then give_info("zat_respawn1_all_deaths") end end[/cut]
Сообщение отредактировал sergej5500 - Ср, 19.08.2015, 15:39 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
flame4 | Дата: Ср, 19.08.2015, 20:56 | Сообщение # 1214 |
Отмычка
Пользователи
Сообщений: 43
| Цитата sergej5500 ( ) STALKER_ICEBERG,
Если делать по аналогии с СГМ, то нужно сделать следующее.
1. В файл gamedata\configs\respawn\respawn_abandoned добавить секцию респавна. По аналогии с имеющимися.
[ Параметры секции спавна ]
2. В файл gamedata\configs\creatures\spawn_sections_extended_stalkers прописать спавн-секции НПС
[ Пример секции ]
3. В папке configs\scripts\SGM\zaton\invaders для каждого спавнящегося НПС сделать файл логики с указанием путей движения.
4. В файл gamedata\scripts\xr_effects добавить функцию подсчета убитых на этой точке.
[ Код ]
Простите, а если это дописать в уже начатой игре, все нормально будет работать? Не придется играть все с начала. И так же можно сделать во всех локациях? чтоб более реалистично по нпс.
И подскажите по одному вопросу, кто нибудь кроме разработчиков SGM 2.2. занимался таким вопросом, чтоб сделать так чтоб НПС пряталась и шкирилась* при выбросе и пси-шторме (от Atmosfear) а то только я прячусь =( Ну ведь если вспомнить то в оригинале Зов Припяти - на скадовске нпс так и делала. При выбросе. А в моде нету.
|
|
|
Эти 0 пользователя(ей) поблагодарили flame4 за это полезное сообщение: |
|
|
STALKER_ICEBERG | Дата: Ср, 19.08.2015, 21:52 | Сообщение # 1215 |
Сталкер
Пользователи
Сообщений: 180
| Цитата flame4 ( ) А в моде нету. На стандартных локациях прячутся и умирают. Что касается Кордона, Агропрома, Болот и так далее - там у них смерть от выброса не заскриптована, ровно также, как и не сделаны укрытия. Да и по логике - зачем куда-то бежать, если ты не умираешь? + на этих локах много персонажей, стоящих за возможными укрытиями (к примеру, на Кордоне это и техник, и работодатель (ведь укрытие в самом здании, а не во всех), на Болотах - Леопольд и еще кто-то, на Мех. Дворе - Кощей бандитский, тысячи их). + там нет больших лагерей - со столами, ящиками и т.д, где нпс могут сидеть. Не будут же они толпой в одной точке стоять?
Сообщение отредактировал STALKER_ICEBERG - Ср, 19.08.2015, 21:53 |
|
|
Эти 0 пользователя(ей) поблагодарили STALKER_ICEBERG за это полезное сообщение: |
|
|
|