Настройка логики. Часть 1 — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Настройка логики. Часть 1 — различия между версиями

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

Перейти к: навигация, поиск
(Система флагов (path_walk, path_look))
Строка 16: Строка 16:
 
:Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.<br>
 
:Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.<br>
 
*'''sig=name'''<br>
 
*'''sig=name'''<br>
:Установить сигнал с именем '''''name''''' сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля *'''''on_signal''''' логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути *'''''path_look'''''.<br>
+
:Установить сигнал с именем '''''name''''' сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля '''''on_signal''''' логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути *'''''path_look'''''.<br>
  
  
Строка 115: Строка 115:
 
Пишеться '''''a=anim''''', где '''''anim''''' – название анимации. Если мы напишем '''''a=hide''''', то персонаж сядет в состоянии данжер, если '''''a=guard''''', то встанет  с оружием наизготовку и т.д. <br>
 
Пишеться '''''a=anim''''', где '''''anim''''' – название анимации. Если мы напишем '''''a=hide''''', то персонаж сядет в состоянии данжер, если '''''a=guard''''', то встанет  с оружием наизготовку и т.д. <br>
  
'''''Примечание''''': В точках пути '''''path_look''''' используются анимации '''ТОЛЬКО''' из раздела «Стоячие и сидячие состояния»!<br>
+
'''''Примечание''''': В точках пути '''''path_look''''' используются анимации '''ТОЛЬКО''' из раздела «Стоячие и сидячие состояния»!
  
----
+
==Система флагов для монстров==
 +
Флаги пути движения:<br>
 +
'''''s=имя_звуковой_темы'''''<br>
 +
:Устанавливает звуковую тему на пути в данную точку ('''''idle''''', '''''eat''''', '''''attack''''', '''''attack_hit''''', '''''take_damage''''', '''''die''''', '''''threaten''''', '''''steal''''', '''''panic''''', '''''growling''''').<br>
 +
'''''с'''''<br>
 +
:Устанавливает положение ходьбы вприсядку.<br>
 +
'''''r'''''<br>
 +
:Устанавливает положение ходьбы бег.<br>
 +
'''''sig=name'''''<br>
 +
:Установить сигнал с именем '''''name''''' сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля '''''on_signal''''' логической схемы.<br>
 +
 
 +
Флаги пути обзора:<br>
 +
'''''t=msec'''''<br>
 +
:Время в миллисекундах, которое нужно ждать, смотря в точку.<br>
 +
'''''a=state'''''<br>
 +
:Анимация ('''''stand_idle''''', '''''sit_idle''''', '''''lie_idle''''', '''''eat''''', '''''sleep''''', '''''rest''''', '''''attack''''', '''''look_around''''', '''''turn''''').
  
 
==Случайный выбор пути==
 
==Случайный выбор пути==

Версия 19:53, 1 мая 2012

Содержание

Настройка логики. Часть 0
Настройка логики. Часть 1
Настройка логики. Часть 2
Настройка логики. Часть 3
Настройка логики. Часть 4


Настройки логики

Система флагов (path_walk, path_look)

В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем "wp00":
wp00|flag1|flag2


Флаги точек пути path_walk:

  • a=state
Выбирает состояние тела при перемещении (Только из раздела "Ходячие состояния")
Список состояний можно взять в gamedata\scripts\state_lib.script
  • p=percent
Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.
  • sig=name
Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути *path_look.


Флаги точек пути path_look:

  • a =state
Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов "Стоячие" и "Сидячие" состояния)
Список состояний можно взять в gamedata\scripts\state_lib.script
  • t=msec - время в миллисекундах, которое персонаж должен смотреть в заданную точку.
* – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.
Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.
  • sig=name
После поворота в точку path_look, установить сигнал с именем name.
  • syn
Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.
  • sigtm=signal
Устанавливает сигнал при вызове time_callbackstate manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку.
В пути path_look можно сделать:
wp00|a=press|t=0|sigtm=pressed
А затем переключить схему:
on_signal = pressed | другая_схема

Более подробное описание путей.

Настройка:
Logic 1.JPG

На карту для каждого walker-а нужно поставить:

  1. Путь path_walk, по которому walker ходит.
  2. Путь path_look, состоящий из точек, в которые walker смотрит.

Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.

Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look, хотя и можно не задавать точку взгляда вовсе (игра автоматически определит точку по умолчанию ту, в которую НПС смотрел изначально), делать этого не следует.

Правила расстановки флажков в путях рассмотрим на нескольких примерах:

Пример 1:

Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом:
Logic 2.JPG

Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.
У каждого вейпоинта есть имя: wp00, wp01 и т.д.
Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д.

Примечание: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!

Пример 2:

Logic 3.JPG

Разговор персонажа.

Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:
s = имя_звуковой_схемы - (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.

Пример 3:

Logic 4.JPG

В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлемы для большинства скриптов.
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже.
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.

Пример 4:

усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:

Logic 5.JPG

Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.

Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки (в ACDC поле flags). Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.

Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.

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

Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.

По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:

p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой p = 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400). Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100. По умолчанию у всех точек p = 100.

t = 5000 - время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)

Пример 5:

Logic 6.JPG

В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.

По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.

Если требуется другая анимация, можно ее указать с помощью флажка:

a = имя_анимации - (по умолчанию idle).
Пишеться a=anim, где anim – название анимации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет с оружием наизготовку и т.д.

Примечание: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!

Система флагов для монстров

Флаги пути движения:
s=имя_звуковой_темы

Устанавливает звуковую тему на пути в данную точку (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling).

с

Устанавливает положение ходьбы вприсядку.

r

Устанавливает положение ходьбы бег.

sig=name

Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы.

Флаги пути обзора:
t=msec

Время в миллисекундах, которое нужно ждать, смотря в точку.

a=state

Анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn).

Случайный выбор пути

По поводу точек пути path_walk.
Есть ещё один интересный факт: следующую точку пути path_walk можно задавать рандомно.
Например:Random path.jpg

Нам требуется, чтобы НПС стоящий в точке p0 патрулировал территорию по двум цикличным маршрутам:
p0 -> p1 -> p2 -> p0
p0 -> p3 -> p4 -> p0

Чтобы задать вариацию выбора маршрута относительно точки p0, нужно в ссылке на следующую точку пути указать не одну, а две точки:
p0:links = p1(1), p3(1)
Таким не хитрым образом, НПС для продолжения пути рандомно выберет одну из предложенных точек p1 или p3. После возврата в точку p0 выбор проследует вновь. Варьировать выбор можно в любой точки, например, можно сделать так:
p0:links = p1(1), p3(1)
а в точке p1, также задать выбор:
p1:links = p2(1), p3(1)

НО! Не следует делать выбор между двумя путями, если в пути одна точка! Вот такая схема НЕ ПРИЕМЛЕМА и, лично у меня, вызывает вылет:Error random path.jpg

Цифры в скобках, означают ту самую вероятность с которой НПС пойдёт в точку. Если цифры задать одинаковые, то и вероятность выбора для каждой точки будет равная, если же, например, в одной из точек указать значение 0.75, а в другой 0.25:
p1:links = p2(0.75), p3(0.25)
то соответственно в точку p2 НПС будет ходить в три раза чаще.

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

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

Схема walker

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

[walker]
path_walk = <имя_пути> - основной путь, по которому ходит NPC
path_look = <имя_пути> - путь, куда смотрит NPC
team = <имя_команды> - команда для синхронизации
def_state_moving1 = <название_анимации> - состояние, в котором NPC движется к первой точке пути, если она близко (patrol по умолчанию)
def_state_moving2 = <название_анимации> - состояние, в котором NPC движется к первой точке пути, если она не слишком далеко (rush по умолчанию)
def_state_moving3 = <название_анимации> - состояние, в котором NPC движется к первой точке пути, если она далеко (sprint по умолчанию)
def_state_standing = <название_анимации> - дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.

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

Пример использования схемы:
[walker@pri_followers_leader_wave1_wait]
path_walk = wave1_leader_walk2
path_look = wave1_leader_look2
def_state_moving1 = assault
def_state_moving2 = assault
team = followers

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

Схема remark

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

Примечание: не используйте эту схему в качестве активной - это вызовет неправильное поведение NPC.

[remark]
snd_anim_synс = true/false - по умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией.
snd = <название_звуковой_темы> - звук ремарка, берётся из файла sound_theme.script. По умолчанию nil.
anim = <название_анимации> - анимация ремарка, по умолчанию wait.
target = <параметр> - куда смотрит сталкер. Есть следующие варианты:

  • story_id – числовое значение;
  • actor – без комментариев;
  • nil – позиция вычисленная АИ автоматически;
  • <имя работы>,<имя гулага> - смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг NPC, для которого задана данная секция ремарка).
Пример:
target = logic@cit_killers_base_guard, cit_killers
  • <path_name>,<point_number> - можно указывать смотреть в вершину патрульного пути (<имя пути>,<имя точки>).
Пример:
target = cit_killers_kamp5,0


Примечание: теперь если значение не задано, то оно равно nil а не actor, как было раньше.

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


Стандартные сигналы remarkа для параметра переключения схемы on_signal:

  • sound_end – по окончании проигрывания звуковой схемы
  • anim_end – по окончании проигрывания анимации
  • action_end – по окончании проигрывания и того и другого, если они синхронизированы
Пример использования схемы:
[remark@esc_lager_volk2]
anim = guard_rac
snd = esc_wolf_radio
target = actor
on_signal = sound_end| remark@esc_lager_volk3

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

Схема sleeper

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

[sleeper]
path_main = <имя_пути> - точка в которой NPC будет спать - второй поинт, развернувшись в нулевой поинт.
wakeable = true/false – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет).


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

Пример использования схемы:
[sleeper@esc_blockpost_sleep1]
path_main = sleep1
wakeable = false

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

Схема kamp

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

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


Примечание: Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит.

Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой <path_kamp_name>_task:
path_walk = <имя_пути>_task
Если точка кемпа расположена в чистом поле то, path_walk прописывать необязательно.
Пример использования схемы:
[kamp@esc_blockpost_kamp1]
center_point = kamp_center
path_walk = kamp_center_task
def_state_moving = raid

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

Схема camper

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

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

[camper]
path_walk = <имя_пути> - путь по которому ходит NPC.
path_look = <имя_пути> - точки в которые смотрит NPC.
radius = number – если расстояние между NPC и противником меньше указанного, то он уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.
no_retreat = true/false - NPC при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите камперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.
def_state_moving = <название_анимации> - состояние, в котором NPC движется на ближайшую точку пути при враге. По умолчанию assault.
def_state_moving_fire = <название_анимации> - состояние, в котором NPC отстреливается от врага, во время движения на ближайшую точку пути. По умолчанию sneak_fire.
def_state_campering = <название_анимации> - состояние, в котором NPC ожидает врага, находясь на пути. По умолчанию hide.
def_state_campering_fire = <название_анимации> - состояние, в котором NPC отстреливается от врага, находясь на пути. По умолчанию hide_fire.
attack_sound = <имя_звуковой_темы> - возможность переопределять снайперам/камперам звук атаки. По дефолту он равен звуковой теме fight_attack. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав значение false.
shoot = <тип_стрельбы> - возможны следующие значения:

  • always - значение по умолчанию, стреляет всегда, когда можно;
  • none - не стреляет вообще;
  • terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.


Примечание: У кампера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела),

то он тупо продолжает стоять на старом месте и ждать следующей пули.
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кампера. Используйте walker в таких случаях, а камперов стоить ставить для атак по путям и как снайперов.
Пример использования схемы:
[camper@dar_military_scout_hide]
path_walk = walk_hide
path_look = look_hide
radius = 10
no_retreat = true
def_state_moving = assault
def_state_campering = hide_na
shoot = always

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

Схема sniper

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

В кастом дате кемпера прописать:
sniper = true
Пример:
[camper@esc_blockpost_camper_day]
path_walk = camper_day_walk
path_look = camper_day_look
sniper = true
def_state_campering = threat


Примечание: Ставить снайперу только 2 точки look.

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

Схема follower

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

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


Примечание: Не забыть прописать:

[smart_terrains]
 none = true
Иначе NPC засосёт в гулаг и никуда он не пойдёт.

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

Пример:
t = { section = "logic@bar_arena_follower_2", 
      idle    = 0,
      prior   = 7,
      state   = {0},
      squad   = squad,
      group   = groups[0],
      ...
    }
В данном случае для параметра leader необоходимо указать строку bar_arena_follower_2.

Примечание: в релизе игры данная схема не используется.

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

Схема zoneguard

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

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


Пример использования схемы:
[zoneguard]
path_walk = mil_freedom_zoneguard_walk_kill2
path_look = mil_freedom_zoneguard_look_kill2
zone_warn = mil_freedom_leader_warn_zone
zone_guard = mil_freedom_leader_kill_zone
no_move = true
team = freedom_bodyguards3

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

Схема wounded

Схема раненного. Определяет поведение NPC в состоянии "раненный".
Примечание: не рекомендуется задавать схему в качестве активной.

[wounded]
hp_state = <HP>|<название_анимации>@<название_звуковой_темы> - поведение NPC при значении уровня его здоровья равному HP, когда он не видит игрока.
hp_state_see = <HP>|<название_анимации>@<название_звуковой_темы> - поведение NPC при значении уровня его здоровья равному HP, когда он видит игрока.
psy_state = <PSY>|<название_анимации>@<название_звуковой_темы> - поведение NPC при псиатаках, в зависимости от уровня пси-здоровья равному PSY.
hp_victim = <HP>|<параметр> - куда будет смотреть NPC при значении уровня его здоровья равному HP, возможные параметры:

  • story_id - числовое значение;
  • actor - без комментариев;
  • nil - позиция вычисленная АИ автоматически.

hp_cover = <HP>|true/false - идти в укрытие или нет, в зависимости от значения уровня здоровья равному HP.
hp_fight = <HP>|true/false - разрешено воевать или нет, в зависимости от значения уровня здоровья равному HP.
syndata = <название_анимации>@<название_звуковой_темы> - синхропары для красоты.
help_dialog = <название_диалога> - возможность установить диалог, вместо стандартного actor_help_wounded.
help_start_dialog = <название_диалога> - возможность установить стартовый диалог.


Примечание: желательно, чтобы все установленные актёрские диалоги для раненых имели условие их появления следующего вида:

<precondition>dialogs.allow_wounded_dialog</precondition>

Примечание: если необходимо поставить несколько состояний, в зависимости от разного значения уровня здоровья, то сами состояния нужно разделять символом ‘|’:

hp_state= 30|help_me@help|10|wounded_heavy@help_heavy
Здесь определятся два состояния при уровне здоровья 30 и 10 соответственно.
Для параметров hp_state_see, psy_state, hp_victim, hp_cover, hp_fight способ такой же.
Пример использования схемы (в качестве примера взята дефолтная настройка):
hp_state= 30|help_me@help|10|wounded_heavy@help_heavy
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20|psy_shoot,psy_pain@wounded_psy_shoot,wounded_psy
hp_victim = 30|actor|10|nil
hp_cover = 30|true|10|false
hp_fight = 30|true|10|false
syndata = wounded@help
;best_pistol – проверка на то, что лучшее оружие NPC является пистолетом.

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

Схема rest

Чувак гуляет, хавает, спит.
Нормально не работает, посему в релизе не используется.

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

Схема heli_hunter

Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:

В активную схему вставляется параметр:
heli_hunter = {+info -info =func !func ~number}true/false
Пример:
[camper@bar_freedom_attack_sniper_1]
path_walk = camper_1_walk
path_look = camper_1_look
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 <br>%=bar_freedom_angry_actor%
meet_talk_enabled = true
meet_dialog = bar_svoboda_dialog
heli_hunter = {-bar_ecolog_crush_heli_down} true

Если раньше оверрайд понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.

Схема Patrol

Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в custom_data следующее:

[patrol]
path_walk = <имя_пути> - путь по которому ходит NPC.
path_look = <имя_пути> - точки в которые смотрит NPC.
formation = <параметр> - описывет способ построения и не является обязательным. Возможны следующие варианты:

  • back - мужики идут чуть позади командира в два ряда (по умолчанию);
  • line - шеренга;
  • around - вокруг командира.

commander = true/false - будет ли NPC назначен командиром, желательно, чтобы такой красивый он был один. false - по умолчанию.
move_type = <название_анимации> - задает изначальный режим перемещения, по умолчанию patrol.

При остановке командора в meet мужики останавливаются.

Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:

ret=0...2
  • 0 - линия;
  • 1 – вокруг старшего;
  • 2 – по бокам.

При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.


Примечание: что еще не сделано или глючит:

  • нет возможности автоматически перестроить команду;
  • все идут молча;
  • командор пока не отдает команд;
  • не рекомендуется включать спринт.
Пример использования схемы:
[patrol@val_escort_captive_wait]
path_walk           = captive_wait_walk
path_look           = captive_wait_look
commander           = true
formation           = back

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

Часть 2

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