Схемы поведения сталкеров

Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.

В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.

Схема walker

Это базовая схема, в которой персонаж перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия.

[walker]

  • path_walk = имя пути - основной путь, по которому ходит NPC
  • path_look = имя пути - путь, куда смотрит NPC
  • team - команда для синхронизации

В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.

  • def_state_moving1 - состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)
  • def_state_moving2 - состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)
  • def_state_moving3 - состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)
  • def_state_standing - дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.

Файл: \gamedata\scripts\xr_walker.script

Схема remark

Схема используется для синхронизации\связки других схем.

[remark]

  • snd_anim_synс = true/false - Указывает на то необходимо ли синхронизировать звук с анимацией либо нет
  • snd - звук ремарка, по умолчанию nil
  • anim - анимация ремарка, по умолчанию wait
  • target - куда смотрит сталкер. Есть следующие варианты
    • story_id – числовое значение
    • actor – без комментариев
    • nil – позиция вычисленная АИ автоматически
    • <имя работы>,<имя гулага> смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).

Пример:

target = logic@cit_killers_base_guard, cit_killers <path_name>, <point_number> - можно указывать смотреть в вершину патрульного пути (<имя пути>, <имя точки>).

Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает AI.

Стандартные сигналы для remark:

  • sound_end – по окончании проигрывания звуковой схемы
  • anim_end – по окончании проигрывания анимации
  • action_end – по окончании проигрывания и того и другого, если они синхронизированы

Пример синхронизации анимации и звука в схеме remark:

[remark]

  • anim - анимация
  • snd - звук
  • snd_anim_sync = true - синхронизация
  • on_signal = action_end | следующая схема

Схема sleeper

Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из одного поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки.

[sleeper]

  • path_main = ... - имя пути
  • wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)


Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).

Файл: \gamedata\scripts\xr_sleeper.script

Схема kamp

Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.

[kamp]

  • center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.
  • radius = 2 - насколько далеко сталкер будет сидеть от центра лагеря, 2 - по умолчанию.
  • def_state_moving = run - дефолтное состояние, в котором сталкер будет идети к точке кампа.

Файл: \gamedata\scripts\xr_kamp.script

Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой равно:

<path_kamp_name>_task

  • path_walk = <path_kamp_name>_task

Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.

Схема camper

Свойства кемперов:

  • Кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям
  • Кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера.
  • В любых других случаях действуют по собственной скриптовой схеме. Если видим врага - стреляем. Если слышим danger - то смотрим в направление в danger. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага.
  • Кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.

[camper]

  • path_walk = patrol_path
  • path_look = patrol_path
  • radius = ... – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.
  • no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.
  • def_state_moving = ... - (состояние из стейт менеджера), в котором мы движемся на ближайшую точку пути при враге.
  • def_state_moving_fire = ... - (состояние из стейт менеджера (sneak_fire)), в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.
  • def_state_campering = ... - (состояние из стейт менеджера (hide)), в котором мы ожидаем врага, находясь на пути.
  • def_state_campering_fire = ... (состояние из стейт менеджера (hide_fire)), в котором мы отстреливаемся от врага, находясь на пути.
  • attack_sound = имя_звуковой_темы - возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме "fight_attack". Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера пустой атрибут.
  • shoot = ... - Задаем тип стрельбы. Возможные значения:
    • always - значение по умолчанию, стреляет всегда, когда можно
    • none - не стреляет вообще.
    • terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.

У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули. Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.

Схема sniper

Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек. Внимание! Ставить снайперу только 2 точки look.

В кастом дате кемпера прописать:
sniper = true

Файл: \gamedata\scripts\xr_camper.script

Схема follower

В custom_data прописан как follower. NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.

[follower]

  • leader = ... - story_id лидера из game.ltx (число!).
  • formation_line = true - постарается идти сбоку от лидера, в противном случае будет идти сзади.
  • distance = ... - расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.
  • state_if_leader_in_meet - это есть строка с именем состояния из state_manager, которое будет назначено follower'ам, если командир пребывает в состоянии meet.
  • anim_walk = state - состояние, в котором фолловер идет за лидером.
  • anim_run = state - состояние, в котором фолловер бежит за лидером.
  • anim_sprint = state - состояние, в котором фолловер спринтует за лидером.


Файл: \gamedata\scripts\xr_ attendant.script

Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию логики в файле скрипта. Пример:

t = { section = "logic@bar_arena_follower_2", idle = 0, prior = 7, state = {0}, squad = squad, group = groups[0], in_rest = "", out_rest = "", dependent = "logic@bar_arena_leader", predicate = function(obj) return obj:character_community() == "dolg" end}

Схема zoneguard

NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока

[zoneguard]

  • path_walk = ... - путь перемещения
  • path_look = ... - путь обзора
  • team = ... - имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)
  • zone_guard = ... - имя зоны, в пределах которой игрок будет атакован
  • zone_warn = ... - имя зоны, в пределах которой начинать разговор с игроком
  • walker_team = ... - team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)
  • no_move = ... - если true, персонаж окликнет игрока с места и не будет подбегать к нему
  • snd_greet = ... - имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа
  • ignore_friends = ... - true - будет игнорировать дружественных ему персонажей.
  • ignore_cond = {+info -info =func !func} - условия, при которых NPC игнорирует игрока
  • no_danger = ... - если true, то не отыгрывает угрожающую анимацию, нейтралам.
  • anim = ... - какую отыгрывает анимацию, если игрок ему не враждебен.
  • snd_anim_sync = ... - если true, то npc будет синхронизировать звук с анимацией


Файл: \gamedata\scripts\xr_zoneguard.script

Наши рекомендации