SoC. Respawn — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
RedPython (обсуждение | вклад) м (Защищена страница «SoC. Respawn» ([edit=autoconfirmed] (бессрочно) [move=autoconfirmed] (бессрочно))) |
|||
(не показаны 8 промежуточные версии 4 участников) | |||
Строка 1: | Строка 1: | ||
Респаун, один из самых часто задаваемый вопросов на форумах. Вот, решил написать статью, дабы не втирать одно и тоже каждому, кто не может с этим разобраться. | Респаун, один из самых часто задаваемый вопросов на форумах. Вот, решил написать статью, дабы не втирать одно и тоже каждому, кто не может с этим разобраться. | ||
− | + | ----------------------------------------------------------------------------------------------------------------------------------- | |
− | + | == Respawn NPC. == | |
− | Для создания респавна, понадобится два файла | + | Для создания респавна NPC, понадобится два файла: '''all.spawn''' и '''spawn_section.ltx'''. |
+ | <br>Это минимальный набор. Для полной настройки респавнера, нужны ещё '''character_desc_simulation.xml''' и '''npc_profile.xml'''. | ||
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
Строка 11: | Строка 12: | ||
'''1.''' В '''all.spawn''' создаём секцию респавнера: | '''1.''' В '''all.spawn''' создаём секцию респавнера: | ||
− | < | + | <ini> |
+ | [10000] | ||
; cse_abstract properties | ; cse_abstract properties | ||
section_name = respawn | section_name = respawn | ||
Строка 42: | Строка 44: | ||
restrictor_type = 0 | restrictor_type = 0 | ||
− | ; se_respawn properties</ | + | ; se_respawn properties |
+ | </ini> | ||
Если используется программа '''XrSpawner''', то копируем любую секцию "respawn"; меняем имя объекта, координаты, и в окошке "скрипт" прописываем: | Если используется программа '''XrSpawner''', то копируем любую секцию "respawn"; меняем имя объекта, координаты, и в окошке "скрипт" прописываем: | ||
− | < | + | <ini> |
+ | [respawn] | ||
respawn_section = esc_urody_respawn_1,12, esc_urody_respawn_2,9 | respawn_section = esc_urody_respawn_1,12, esc_urody_respawn_2,9 | ||
max_count = 8 | max_count = 8 | ||
Строка 52: | Строка 56: | ||
max_spawn = 2 | max_spawn = 2 | ||
idle_spawn = medium | idle_spawn = medium | ||
− | conditions = 100</ | + | conditions = 100 |
+ | </ini> | ||
Где: | Где: | ||
− | '''respawn_section =''' id респавн-секций из файла '''spawn_section.ltx'''. Цифры после запятой, означают отношение одной секции к другой. Если планируется одинаковое колличество респавна из каждой секции, то цифры ставить не требуется. | + | <br>'''respawn_section =''' id респавн-секций из файла '''spawn_section.ltx'''. Цифры после запятой, означают отношение одной секции к другой. Если планируется одинаковое колличество респавна из каждой секции, то цифры ставить не требуется. |
− | '''max_count =''' колличество респавн-запросов за период времени, пока ГГ находится на | + | <br> |
− | '''min_count =''' минимальное колличество нпс, для экстренного респавна. (ставить не обязательно) | + | <br>'''max_count =''' колличество респавн-запросов за период времени, пока ГГ находится на локации. При переходе на другую локацию, счётчик '''max_count''' сбрасывается. (ставить не обязательно) |
− | '''max_spawn =''' колличество нпс за один цикл респавна. | + | <br> |
− | '''idle_spawn =''' тип спавна. Известно три типа '''medium, often, seldom'''. Обычно, используется тип '''medium'''. | + | <br>'''min_count =''' минимальное колличество нпс, для экстренного респавна. (ставить не обязательно) |
− | '''conditions ='''Условие респавна. Можно установить проверку условий (инфопоршень), где респавн будет происходить только при выполнении условия. Номер означает общий процент выполнения респавна. Например так: | + | <br> |
− | '''conditions = {+инфо} 100, 0''' где, респавн будет происходить со сто-процентной вероятностью, только при наличии установленного инфопоршна. | + | <br>'''max_spawn =''' колличество нпс за один цикл респавна. |
− | + | <br> | |
+ | <br>'''idle_spawn =''' тип спавна. Известно три типа '''medium, often, seldom'''. Обычно, используется тип '''medium'''. | ||
+ | <br> | ||
+ | <br>'''conditions ='''Условие респавна. Можно установить проверку условий (инфопоршень), где респавн будет происходить только при выполнении условия. Номер означает общий процент выполнения респавна. Например так: | ||
+ | <br> | ||
+ | <br>'''conditions = {+инфо} 100, 0''' где, респавн будет происходить со сто-процентной вероятностью, только при наличии установленного инфопоршна. | ||
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
− | + | <br>'''2.''' В файле '''spawn_section.ltx''', создаём респавн-секции: | |
− | '''2.''' В файле '''spawn_section.ltx''', создаём респавн-секции: | + | <ini> |
− | + | [esc_urody_respawn_1]:stalker | |
− | < | + | |
$spawn = "respawn\esc_urody_respawn_1" | $spawn = "respawn\esc_urody_respawn_1" | ||
character_profile = sim_urody_novice | character_profile = sim_urody_novice | ||
Строка 77: | Строка 86: | ||
character_profile = sim_urody_regular | character_profile = sim_urody_regular | ||
spec_rank = regular | spec_rank = regular | ||
− | community = bandit</ | + | community = bandit |
− | + | </ini> | |
Где: | Где: | ||
− | '''esc_urody_respawn_1''' id респавн-секции. | + | <br>'''esc_urody_respawn_1''' id респавн-секции. |
− | '''sim_urody_novice''' и '''sim_urody_regular''' классы профайлов нпс. | + | <br>'''sim_urody_novice''' и '''sim_urody_regular''' классы профайлов нпс. |
− | '''novice''' и '''regular''' ранги нпс. | + | <br>'''novice''' и '''regular''' ранги нпс. |
− | '''bandit''' группировка нпс. | + | <br>'''bandit''' группировка нпс. |
− | + | <br> | |
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
− | |||
'''3.''' В файле '''npc_profile.xml''' регистрируем классы '''sim_urody_regular''' и '''sim_urody_novice''' | '''3.''' В файле '''npc_profile.xml''' регистрируем классы '''sim_urody_regular''' и '''sim_urody_novice''' | ||
− | |||
<pre><character id="sim_urody_regular"> | <pre><character id="sim_urody_regular"> | ||
<class>sim_urody_regular</class> | <class>sim_urody_regular</class> | ||
Строка 101: | Строка 108: | ||
'''4.''' Создаём профили, в файле '''character_desc_simulation.xml''', с классами '''sim_urody_regular''' и '''sim_urody_novice''' и группировкой '''bandit'''. | '''4.''' Создаём профили, в файле '''character_desc_simulation.xml''', с классами '''sim_urody_regular''' и '''sim_urody_novice''' и группировкой '''bandit'''. | ||
− | + | == Respawn монстров. == | |
− | + | ||
− | + | ||
В принципе, респавн мутантов идентичен респавну нпс. Но с одним лишь отличием, которое его значительно упрощает. | В принципе, респавн мутантов идентичен респавну нпс. Но с одним лишь отличием, которое его значительно упрощает. | ||
Строка 111: | Строка 116: | ||
В ней прописываем типы мутантов, из файла "se_respawn.script". Такие как '''flesh_weak, flesh_normal, dog_weak, boar_strong, и т.д.'''. | В ней прописываем типы мутантов, из файла "se_respawn.script". Такие как '''flesh_weak, flesh_normal, dog_weak, boar_strong, и т.д.'''. | ||
− | + | ----------------------------------------------------------------- | |
− | + | '''ОБЩИЕ НАСТРОЙКИ.''' | |
− | + | ||
Обязательные условия респавна: | Обязательные условия респавна: | ||
− | '''1.''' На | + | '''1.''' На локации обязательно должен быть хоть один гулаг для респавнящихся NPC и мутантов, так как количество NPC для респавна, ориентируется по доступным местам в гулагах. |
'''2.''' Респавн производится, только если под гулагами есть доступные работы. | '''2.''' Респавн производится, только если под гулагами есть доступные работы. | ||
− | '''3.''' На | + | '''3.''' На каждой локации, респавн ограничен определёнными типами неписей. Данные ограничения установлены в файле '''misc\smart_terrain_presets.ltx'''. Чтобы сделать возможным респавн неписей, не предусмотренных на данной локации. Надо в указанном файле, в секции нужной локации, дописать требуемые типы неписей. |
− | + | -------------------------------------------------------------------------- | |
− | Для проверки созданного респавнера, можно не ждать когда сработает системный респавн, а вызвать принудительно респавн в нужной секции. Для этого, прописываем в любой логике, вызов функции '''%=respawner_spawn(имя респавнера)%'''. Где, "имя респавнера" - имя секции, | + | Для проверки созданного респавнера, можно не ждать когда сработает системный респавн, а вызвать принудительно респавн в нужной секции. Для этого, прописываем в любой логике, вызов функции '''%=respawner_spawn(имя респавнера)%'''. Где, "имя респавнера" - имя секции, созданной в файле all.spawn. Скобки обязательны. |
Например, можно создать рядом с зоной респавнера, временный рестриктор. И в кастом дате рестриктора, прописать вызов функции принудительного вызова респавна, в нужном респавнере, при входе ГГ в зону рестриктора: | Например, можно создать рядом с зоной респавнера, временный рестриктор. И в кастом дате рестриктора, прописать вызов функции принудительного вызова респавна, в нужном респавнере, при входе ГГ в зону рестриктора: | ||
− | < | + | <ini> |
+ | [logic] | ||
active = sr_idle@in | active = sr_idle@in | ||
Строка 136: | Строка 141: | ||
[sr_idle@out] | [sr_idle@out] | ||
− | on_actor_outside = sr_idle@in</ | + | on_actor_outside = sr_idle@in |
+ | </ini> | ||
Функция принудительного вызова респавна, находится в файле '''xr_effects.script'''. | Функция принудительного вызова респавна, находится в файле '''xr_effects.script'''. | ||
+ | ----------------------------------------------------------------------------------------------------------------------------------- | ||
− | + | == Respawn предметов. == | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | <br>Респавн предметов в инвентарных ящиках, несколько отличается от способа респавна NPC. | ||
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
− | + | <br> | |
− | '''1.''' Первое, что нам нужно сделать, это создать инвентарный ящик в файле "all.spawn": | + | <br>'''1.''' Первое, что нам нужно сделать, это создать инвентарный ящик в файле "all.spawn": |
− | + | <ini> | |
− | < | + | [10000] |
; cse_abstract properties | ; cse_abstract properties | ||
section_name = inventory_box | section_name = inventory_box | ||
Строка 163: | Строка 167: | ||
object_flags = 0xffffffba | object_flags = 0xffffffba | ||
− | story_id = ай-ди ящика | + | story_id = стори ай-ди ящика |
; cse_visual properties | ; cse_visual properties | ||
− | visual_name = equipments\item_box_01</ | + | visual_name = equipments\item_box_01 |
− | + | </ini> | |
+ | <br> | ||
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
− | + | '''2.''' Затем, в файле '''game_story_id.ltx''' регистрируем story_id ящика. (выбираем любое свободное число). | |
− | '''2.''' Затем, в файле '''game_story_id.ltx''' регистрируем | + | <br> |
− | + | <br> | |
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
− | |||
'''3.''' Создаём респавнер в файле '''all.spawn'''. Координаты и размеры зоны респавнера, должны быть такими, чтоб инвентарный ящик поместился внутри зоны респавнера: | '''3.''' Создаём респавнер в файле '''all.spawn'''. Координаты и размеры зоны респавнера, должны быть такими, чтоб инвентарный ящик поместился внутри зоны респавнера: | ||
− | < | + | <ini> |
+ | [10001] | ||
; cse_abstract properties | ; cse_abstract properties | ||
section_name = respawn | section_name = respawn | ||
− | name = | + | name = имя_респавнера |
position = координаты x,y,z | position = координаты x,y,z | ||
direction = 0,0,0 | direction = 0,0,0 | ||
Строка 192: | Строка 197: | ||
respawn_section = список вещей респавна | respawn_section = список вещей респавна | ||
idle_spawn = -1 | idle_spawn = -1 | ||
− | parent = ай-ди ящика | + | parent = стори ай-ди ящика |
item_spawn = true | item_spawn = true | ||
max_count = 7 | max_count = 7 | ||
Строка 200: | Строка 205: | ||
shapes = shape0 | shapes = shape0 | ||
shape0:type = box | shape0:type = box | ||
− | shape0:axis_x = 0.5,0,0 (ширина зоны респавнера, по X) | + | shape0:axis_x = 0.5,0,0 ;(ширина зоны респавнера, по X) |
− | shape0:axis_y = 0,0.5,0 (высота зоны респавнера) | + | shape0:axis_y = 0,0.5,0 ;(высота зоны респавнера) |
− | shape0:axis_z = 0,0,1 (ширина зоны респавнера, по Z) | + | shape0:axis_z = 0,0,1 ;(ширина зоны респавнера, по Z) |
shape0:offset = 0,0,0 | shape0:offset = 0,0,0 | ||
Строка 208: | Строка 213: | ||
restrictor_type = 3 | restrictor_type = 3 | ||
− | ; se_respawn properties</ | + | ; se_respawn properties |
− | + | </ini> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | Где: | ||
+ | <br>'''respawn_section =''' список вещей респавна, в виде их спавн - секций. Как и в респавнерах неписей, возможна прописка соотношений между вещами. | ||
+ | <br>Например: respawn_section = wpn_pm,2, vodka,2, medkit,1, energy_drink,2, ammo_9x18_fmj,3 | ||
+ | <br> | ||
+ | <br>'''idle_spawn =''' тип спавна. Инвентарь не имеет типов спавна, поэтому ставится (-1). | ||
+ | <br> | ||
+ | <br>'''parent =''' Story_id инвентарного ящика (из game_story_id.ltx), в котором производить респавн вещей . | ||
+ | <br> | ||
+ | <br>'''item_spawn =''' (true\false) возможность включения и отключения респавна. Можно задавать условия, например инфопоршнем или функцией (разумеется прописанной в xr_conditions.script). | ||
+ | <br> | ||
+ | <br>'''max_count =''' количество респав-циклов за определённый период времени. (Пока ГГ находится на локации. После перехода ГГ на другую локацию, счётчик сбрасывается). | ||
+ | <br> | ||
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
'''4.''' Создаём вызов респавна. Обычно вызов производится из '''smart_terrain'''. В "custom_data" любого подходящего '''smart_terrain''', под секцией [smart_terrain], вписываем вызов респавна: | '''4.''' Создаём вызов респавна. Обычно вызов производится из '''smart_terrain'''. В "custom_data" любого подходящего '''smart_terrain''', под секцией [smart_terrain], вписываем вызов респавна: | ||
− | + | <ini> | |
− | < | + | [smart_terrain] |
− | respawn = имя респавнера </ | + | respawn = имя респавнера |
− | + | </ini> | |
И респавн будет производиться, при каждом пополнении нпс, под данным смартом. | И респавн будет производиться, при каждом пополнении нпс, под данным смартом. | ||
+ | <br> | ||
+ | ----------------------------------------------------------------------------------------------------------------------------------- | ||
− | + | == Авторы статьи. == | |
− | + | [[Singapur22]] | |
− | + | <br>[[Pihan13]] (дополнил и переоформил) | |
+ | <br>[[Категория:скрипты]] |
Текущая версия на 08:01, 26 марта 2011
Респаун, один из самых часто задаваемый вопросов на форумах. Вот, решил написать статью, дабы не втирать одно и тоже каждому, кто не может с этим разобраться.
Respawn NPC.
Для создания респавна NPC, понадобится два файла: all.spawn и spawn_section.ltx.
Это минимальный набор. Для полной настройки респавнера, нужны ещё character_desc_simulation.xml и npc_profile.xml.
1. В all.spawn создаём секцию респавнера:
[10000] ; cse_abstract properties section_name = respawn name = имя респавнера position = координаты (x,y,z) direction = 0,0,0 ; cse_alife_object properties game_vertex_id = гейм-вертекс distance = 10 level_vertex_id = левел-вертекс object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = esc_urody_respawn_1,12, esc_urody_respawn_2,9 max_count = 8 min_count = 4 max_spawn = 2 idle_spawn = medium conditions = 100 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 0 ; se_respawn properties
Если используется программа XrSpawner, то копируем любую секцию "respawn"; меняем имя объекта, координаты, и в окошке "скрипт" прописываем:
[respawn] respawn_section = esc_urody_respawn_1,12, esc_urody_respawn_2,9 max_count = 8 min_count = 4 max_spawn = 2 idle_spawn = medium conditions = 100
Где:
respawn_section = id респавн-секций из файла spawn_section.ltx. Цифры после запятой, означают отношение одной секции к другой. Если планируется одинаковое колличество респавна из каждой секции, то цифры ставить не требуется.
max_count = колличество респавн-запросов за период времени, пока ГГ находится на локации. При переходе на другую локацию, счётчик max_count сбрасывается. (ставить не обязательно)
min_count = минимальное колличество нпс, для экстренного респавна. (ставить не обязательно)
max_spawn = колличество нпс за один цикл респавна.
idle_spawn = тип спавна. Известно три типа medium, often, seldom. Обычно, используется тип medium.
conditions =Условие респавна. Можно установить проверку условий (инфопоршень), где респавн будет происходить только при выполнении условия. Номер означает общий процент выполнения респавна. Например так:
conditions = {+инфо} 100, 0 где, респавн будет происходить со сто-процентной вероятностью, только при наличии установленного инфопоршна.
2. В файле spawn_section.ltx, создаём респавн-секции:
[esc_urody_respawn_1]:stalker $spawn = "respawn\esc_urody_respawn_1" character_profile = sim_urody_novice spec_rank = novice community = bandit [esc_urody_respawn_2]:stalker $spawn = "respawn\esc_urody_respawn_2" character_profile = sim_urody_regular spec_rank = regular community = bandit
Где:
esc_urody_respawn_1 id респавн-секции.
sim_urody_novice и sim_urody_regular классы профайлов нпс.
novice и regular ранги нпс.
bandit группировка нпс.
3. В файле npc_profile.xml регистрируем классы sim_urody_regular и sim_urody_novice
<character id="sim_urody_regular"> <class>sim_urody_regular</class> </character> <character id="sim_urody_novice"> <class>sim_urody_novice</class> </character>
4. Создаём профили, в файле character_desc_simulation.xml, с классами sim_urody_regular и sim_urody_novice и группировкой bandit.
Respawn монстров.
В принципе, респавн мутантов идентичен респавну нпс. Но с одним лишь отличием, которое его значительно упрощает. Вся настройка респавна мутантов, ограничивается секцией в файле "all.spawn". Вписываем секцию респавнера, как указано в -RESPAWN NPC-. Все настройки идентичны, кроме строки respawn_section = . В ней прописываем типы мутантов, из файла "se_respawn.script". Такие как flesh_weak, flesh_normal, dog_weak, boar_strong, и т.д..
ОБЩИЕ НАСТРОЙКИ.
Обязательные условия респавна:
1. На локации обязательно должен быть хоть один гулаг для респавнящихся NPC и мутантов, так как количество NPC для респавна, ориентируется по доступным местам в гулагах.
2. Респавн производится, только если под гулагами есть доступные работы.
3. На каждой локации, респавн ограничен определёнными типами неписей. Данные ограничения установлены в файле misc\smart_terrain_presets.ltx. Чтобы сделать возможным респавн неписей, не предусмотренных на данной локации. Надо в указанном файле, в секции нужной локации, дописать требуемые типы неписей.
Для проверки созданного респавнера, можно не ждать когда сработает системный респавн, а вызвать принудительно респавн в нужной секции. Для этого, прописываем в любой логике, вызов функции %=respawner_spawn(имя респавнера)%. Где, "имя респавнера" - имя секции, созданной в файле all.spawn. Скобки обязательны.
Например, можно создать рядом с зоной респавнера, временный рестриктор. И в кастом дате рестриктора, прописать вызов функции принудительного вызова респавна, в нужном респавнере, при входе ГГ в зону рестриктора:
[logic] active = sr_idle@in [sr_idle@in] on_actor_inside = %=respawner_spawn(имя респавнера)% sr_idle@out [sr_idle@out] on_actor_outside = sr_idle@in
Функция принудительного вызова респавна, находится в файле xr_effects.script.
Respawn предметов.
Респавн предметов в инвентарных ящиках, несколько отличается от способа респавна NPC.
1. Первое, что нам нужно сделать, это создать инвентарный ящик в файле "all.spawn":
[10000] ; cse_abstract properties section_name = inventory_box name = имя ящика position = координаты x,y,z direction = 0,0,0 ; cse_alife_object properties game_vertex_id = гейм-вертекс distance = 0 level_vertex_id = левел-вертекс object_flags = 0xffffffba story_id = стори ай-ди ящика ; cse_visual properties visual_name = equipments\item_box_01
2. Затем, в файле game_story_id.ltx регистрируем story_id ящика. (выбираем любое свободное число).
3. Создаём респавнер в файле all.spawn. Координаты и размеры зоны респавнера, должны быть такими, чтоб инвентарный ящик поместился внутри зоны респавнера:
[10001] ; cse_abstract properties section_name = respawn name = имя_респавнера position = координаты x,y,z direction = 0,0,0 ; cse_alife_object properties game_vertex_id = гейм-вертекс distance = 2 level_vertex_id = левел-вертекс object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = список вещей респавна idle_spawn = -1 parent = стори ай-ди ящика item_spawn = true max_count = 7 END ; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = 0.5,0,0 ;(ширина зоны респавнера, по X) shape0:axis_y = 0,0.5,0 ;(высота зоны респавнера) shape0:axis_z = 0,0,1 ;(ширина зоны респавнера, по Z) shape0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 3 ; se_respawn properties
Где:
respawn_section = список вещей респавна, в виде их спавн - секций. Как и в респавнерах неписей, возможна прописка соотношений между вещами.
Например: respawn_section = wpn_pm,2, vodka,2, medkit,1, energy_drink,2, ammo_9x18_fmj,3
idle_spawn = тип спавна. Инвентарь не имеет типов спавна, поэтому ставится (-1).
parent = Story_id инвентарного ящика (из game_story_id.ltx), в котором производить респавн вещей .
item_spawn = (true\false) возможность включения и отключения респавна. Можно задавать условия, например инфопоршнем или функцией (разумеется прописанной в xr_conditions.script).
max_count = количество респав-циклов за определённый период времени. (Пока ГГ находится на локации. После перехода ГГ на другую локацию, счётчик сбрасывается).
4. Создаём вызов респавна. Обычно вызов производится из smart_terrain. В "custom_data" любого подходящего smart_terrain, под секцией [smart_terrain], вписываем вызов респавна:
[smart_terrain] respawn = имя респавнера
И респавн будет производиться, при каждом пополнении нпс, под данным смартом.
Авторы статьи.
Singapur22
Pihan13 (дополнил и переоформил)