CoP. Симуляция. Параметры смарт-террейнов. — S.T.A.L.K.E.R. Inside Wiki

CoP. Симуляция. Параметры смарт-террейнов.

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

Смарт-террейны

Смарт-террейн - это определенный скриптовый класс в игре, при помощи которого происходит заселение локаций. В смартах организуются работы для НПС, реализуется логика для отдельных эксклюзивных персонажей, происходит респавн НПС и монстров, а также организуются укрытия от выброса для НПС.

Типы смарт-террейнов
default Обычный тип смарт-террейна.
default_resource Смарты с наличием аномальных зон, в которых есть работа для НПС по поиску артефактов.
default_base Главный смарт. Сюда идут все отряды с наступлением ночи.
default_lair Смарт для монстров. Тем не менее сталкеры сюда тоже могут прийти.
default_squad Не смарт. Класс, выделяющий в симуляции уникальные отряды и персонажей.
Параметры смарт-террейнов
  • Необходимые параметры:
Параметр Описание Пример
squad_id Уникальный ID отряда. Никогда не должен повторятся. Для любой локации начинается с единицы. squad_id = 1
max_population Количество отрядов, которые может принять смарт. Определяет для скольких отрядов в симуляции тут найдется работа. max_population = 1
  • Дополнительные параметры:
Параметр Описание Пример
respawn_only_smart Могут ли из смарта удаляться отряды в симуляции. respawn_only_smart = true
respawn_params Ссылка на секцию респауна (параметры этой секции см. ниже). respawn_params = respawn@base_smart
smart_control Ссылка на секцию с параметрами контроля смарта. smart_control = smart_control
def_restr Определяет рестриктор, в пределах которой находится лагерь. def_restr = pri_a16_sr_noweap
safe_restr Определяет рестриктор, в пределах которой НПС бессмертны. safe_restr = pri_surge_hide_a16
spawn_point Имя вейпоинта, в котором происходит респаун. Может иметь значение self. spawn_point = zat_sim_16_spawn_point
arrive_dist Определяет расстояние, на котором отряд считается прибывшим в смарт и регистрируется в нем. arrive_dist = 100
  • Параметры smart_control:
Параметр Описание Пример
noweap_zone Определяет рестриктор, в котором запрещается использовать оружие (в том числе актору). noweap_zone = zat_a2_sr_noweap
ignore_zone Определяет рестриктор, в котором НПС не реагируют на опасности даже если атакованы. ignore_zone = zat_a2_sr_light
alarm_start_sound Воспроизводит звук из script_sound_...ltx, если актор атаковал смарт. alarm_start_sound = zat_a2_base_alarm
alarm_stop_sound Воспроизводит звук из script_sound_...ltx, когда тревога закончилась. alarm_start_sound = zat_a2_base_relax
  • Параметры respawn_params

Данная секция представляет собой список ссылок на секции сквадов, которые будут спауниться в этом смарт-террейне.
Пример секции:

[respawn@base_smart]
spawn_bandit@novice
spawn_bandit@advanced
spawn_bandit@master

Каждая секция сквада имеет следующие параметры:
Параметр Описание Пример
spawn_squads Список имен сквадов из squad_descr_...ltx. Может иметь логические проверки условий. spawn_squads = bandit_sim_squad_veteran, bandit_sim_squad_advanced
spawn_num Количество отрядов, которые будут респаунится. Может иметь логические проверки условий. spawn_num = {+infoportion} 2, 0


  • Параметры секции [exclusive]

Секция позволяет задавать логику для уникальных персонажей, которые находятся в данном смарте.
Пример использования:

[exclusive]
zat_a2_stalker_barmen = zaton\zat_a2_stalker_barmen.ltx

Параметры:

zat_a2_stalker_barmen Сharacter ID НПС
zaton\zat_a2_stalker_barmen.ltx путь к файлу с логикой.

Работа в смарт-террейнах

Под работой стоит понимать пути по которым ходят, стоят и отыгрывают анимации НПС при попадании в смарт. Каждый тип работы должен начинатся с единицы. Предположительно максимальное число каждого типа работ - 20. Каждый тип работы имеет свой приоритет. Чем больше число тем больше вероятность, что НПС пойдет на эту работу.

Имя каждой работы состоит из:

  1. Имени смарта (esc_a1)
  2. Типа работы (walker)
  3. Номера работы (1,2,3..20)
  4. Дополнительные параметры для вейпоинтов (walk,look)

Пример:
esc_a1_walker_1_walk

Типы работ:

Название Приоритет Описание Пример
GENERIC POINT 3 При отсутствии каких-либо работ, сталкер идет в случайное место радиусом от 3 до 8 метров от смарта и садится на корточки. отсутствует
SLEEP 10 Схема сидящего и спящего NPC. Необходимо поставить путь минимум из двух поинтов.
Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки.
esc_a1_sleep_1_walk
WALKER 15 Перемещается по пути (path_walk), останавливается в определенных точках и выполняет соответствующие действия. Для корректной работы желательно наличие look-вейпоинта. esc_a1_walker_1_walk
ANIMPOINT 15 Конечная точка с кастомной анимацией. Доступны следующие анимации: НПС сидит, стоит за стойкой, стоит прислонившись к стене. esc_a1_animpoint_1
PATROL 20 Вейпоинт, по которому будут ходить сталкер и выполнять функцию патруля. Должен быть зациклен. esc_a1_patrol_1_walk
COLLECTOR 25 Вейпоинт, по которому пойдет сталкер отыгрывать анимацию собирания артефактов. esc_a1_collector_1_walk
GUARD 25 Вейпоинт, по которому будут ходить сталкер и выполнять функцию охраны. Должен быть зациклен. esc_a1_guard_1_walk
SNIPER 30 Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними.
Скорость сканирования от точки к точке фиксирована и равна 20 сек. Необходимо ставить снайперу только 2 точки look.
esc_a1_sniper_1_walk
CAMPER 45 Кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям. Переключаются на универсальный комбат,
только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. В любых других случаях действуют по собственной скриптовой схеме.
esc_a1_camper_1_walk
SURGE 50 Вейпоинт, по которому пойдет сталкер в случае выброса. Должно быть разрешено в файле simulation_objects_props.ltx esc_a1_surge_1_walk
MOB HOME 40 Вейпоинт, по которому будут двигаться мутанты в смарте. Только для мутантов! esc_a1_home_1_walk

Некоторые walk-вейпоинты, могут не иметь look-вейпоинтов. Для некоторых наличие look-вейпоинта обязательно.

Чтобы сталкеры могли сидеть возле костра необходимо:

  1. поставить walk-вейпоинт на место где они сядут и look-вейпоинт куда будут смотреть.
  2. установить общий флаг
  3. в параметрах look-вейпоинта задать одну из этих анимаций:
    • sit
    • sit_knee
    • sit_ass

Список остальных анимаций см. в файле scripts\state_lib.script.

Симуляция

Некоторые условия работы симуляции

В файле scripts\sim_board.script для каждой группировки заданы прекондишены:

squad = {	stalker		= { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
bandit = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
dolg = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
freedom = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
killer = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
},
smart = { base = { prec = function(squad, target) return in_time_interval(18,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad)
and (target:name() == "zat_stalker_base_smart" or target:name() == "jup_a6" or target:name() == "pri_a16") end },
surge = { prec = function() return xr_conditions.surge_started() end },
territory = { prec = function() return in_time_interval(8,18) and not xr_conditions.surge_started() end },
resource = { prec = function(squad, target) return in_time_interval(8,18) and not xr_conditions.surge_started() end } -- and squad:has_detector() },
lair = { prec = function() return in_time_interval(6,19) end }
},
actor = { prec = function(squad, target) return has_alife_info("sim_bandit_attack_harder") and simulation_objects.sim_dist_to(squad, target) <= 150 end }
  • squad — набор условий для вражды с другой фракцией.
    • simulation_objects.sim_dist_to(squad, target) <= 150 — проверка расстояния до отряда меньше требуемой.
  • smart - набор условий для выбора того, или иного смарта.
    • base — набор условий для возвращения на базу-смарт (default_base)
      • return in_time_interval(18,8) — проверка находится ли отряд в данном отрезке времени
      • xr_conditions.surge_started() — проверка начала выброса
      • travel_manager.check_squad_for_enemies(squad) — проверка присутствия в отряде врагов.
      • target:name() == "zat_stalker_base_smart" or target:name() == "jup_a6" or target:name() == "pri_a16" — проверка наличия базы.
    • surge — набор условий для поиска укрытия от выброса.
    • territory — набор условий для начала поиска обычного смарта default.
    • resource — набор условий для начала поиска смарта с аномалиями и добычи артефактов (default_resource).
    • lair — набор условий для поиска мутантом смарта-укрытия (default_lair)
  • actor — набор условий для вражды с актором.
    • has_alife_info("sim_bandit_attack_harder") — проверка присутствия инфопоршня

Добавление смарта в общую симуляцию

В файле misc\travel_manager.ltx есть два раздела.

  • [locations]

Секция описание того куда направлются сталкеры. Текст добавляется в text\rus\st_dialog_manager.xml.
Принцип: ваше_название_смарта = st_stalker_ваше_название_смарта.
Например для смарта zat_sim_1 которому соответствует стринг st_stalker_zat_sim_1 НПС на вопрос "Куда вы направляетесь?", ответит: "Иду в направлении аномалии «Котёл». Там рощица за ней - туда и иду."

  • [traveler]

В файле уже все сказано: это перечень точек, куда проводники могут отвести за бабосы. Тут указываем наш смарт, затем создаем секцию:

[ваше_название_смарта]
level = ваш_уровень
name = ваше_название_смарта
condlist = true

ваше_название_смарта указываем в файле text\rus\st_land_names.xml
condlist - условия существования данной точки. Можно использовать стандартные проверки условий.

Добавление базы в общую симуляцию

  1. В misc\simulation_objects_props.ltx назначаем вашему смарту класс default_base.
  2. В файле scripts\state_lib.script для нужной вам группировки в секции base дополняем своей проверкой target:name() == "ваше_название_смарта"

Написал и оформил: Vast
Большое количество фраз и информации было взято отсюда [1], из файла logic_setup.pdf, а также из статей умершего сайта stalker-2.com.ua, поэтому линков никаих нет.
Любые дополнения, критика, угрозы, все приветствуется.


Другие места
LANGUAGE