Схемы физ.объектов, которые работают вне или без схемы logic
"collide" делает объект, у которого указана кость, неподвижным
[collide]
ignore_static
ignore_ragdoll
"drop_box" отвечает за то, что выпадет из ящика
[drop_box]
community = big_box_generic
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.
Схема по сути ничего не делает, представляет некое промежуточное состояние объекта. Аналог схемы sr_idle, только для физического объекта.
[ph_idle]
hit_on_bone = <number>|{+info -info =func !func ~number} %+info -info =func% <название_схемы> - определяет, что произойдёт,
если объект получит хит по кости number.
on_use = {+info -info =func !func ~number} %+info -info =func% <название_схемы> - определяет, что произойдёт, если актор взаимодействует с объектом.
tips = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка при наведении.
nonscript_usable = true/false - возможность стандартных (нескриптовых) действий над объектом: взять объект в интерфейс, открыть инвентарь.
В игре используется в одном случае - для объектов с именем секции inventory_box, то беж тайников.
'Пример использования схемы:
[logic]
active = ph_idle
[ph_idle]
hit_on_bone = 1|%+agroprom_u_light_4%|2|%+agroprom_u_light_4%|3|%+agroprom_u_light_4%|4|%+agroprom_u_light_4%
on_info = {+agroprom_u_light_4} nil %=turn_off_object%
Файл: gamedata\scripts\ph_idle.script
Схема для работы двери.
Примечание: для двустворчатых ворот задается все аналогично.
[ph_door]
locked = true/false - заперта ли дверь. По умолчанию false.
closed = true/false - закрыта ли дверь. По умолчанию true.
show_tips = true/false - нужно ли показывать подсказку при наведении на дверь. По умолчанию true.
tip_open = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text.
Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта. Если locked равен false, то по умолчанию tip_door_open, иначе tip_door_locked.
tip_close = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text.
Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта. Если locked равен false, то по умолчанию tip_door_close, иначе пустое значение.
snd_open_start = <название_звуковой_темы> - имя темы из файла sound_theme.script. Звук, который будет отыгран при попытке открыть дверь.
snd_close_start = <название_звуковой_темы> - имя темы из файла sound_theme.script. Звук, который будет отыгран при попытке закрыть дверь.
snd_close_stop = <название_звуковой_темы> - имя темы из файла sound_theme.script. Звук, который будет отыгран, когда дверь захлопнется до конца.
on_use = {+info -info =func !func ~number} %+info -info =func% <название_схемы> - определяет, что произойдёт, если актор взаимодействует с дверью.
Обычно используется для переключения схемы.
hit_on_bone = <number>|{+info -info =func !func ~number} %+info -info =func% <название_схемы> - определяет, что произойдёт,
если дверь получит хит по кости number.
no_force = true/false - по умолчанию false.
Пример использования схемы:
[logic]
active = ph_door@locked
[ph_door@locked]
locked = true
snd_open_start = trader_door_unlock
on_info = {+esc_trader_can_leave} ph_door@closed %=play_snd(device\door_servomotor)%
[ph_door@closed]
closed = true
locked = false
on_use = ph_door@open %-esc_close_door%
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
[ph_door@open]
closed = false
locked = false
on_use = ph_door@closed
on_info = {+esc_close_door} ph_door@closed
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
Файл: gamedata\scripts\ph_door.script
Схема работы кнопки.
При нажатии на кнопку переключает секции и выдает инфопоршн.
[ph_button]
anim_blend = true/false – плаваня, сглаженная анимация.
anim = <название_анимации> – анимация, которая отыгрывается при нажатии на кнопку.
on_press = {+info -info =func !func ~number} %+info -info =func% <название_схемы> - что произойдёт при нажатии на кнопку.
tooltip = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка при наведении.
Пример использования схемы:
[logic]
active = ph_button@rad_on
[ph_button@rad_on]
anim_blend = true
anim = lab_primary_switcher_idle
tooltip = tips_rad_switcher_press
on_press = ph_button@rad_off % +bar_deactivate_radar_done%
Файл: gamedata\scripts\ph_button.script
Схема для осуществления ввода цифрового пароля. При введении указанного кода выдает инфопоршн.
[ph_code] code = <код> - установка кода.
on_code = {+info -info =func !func ~number}%+info -info =func% - что произойдёт при вводе правильного пароля.
on_check_code = <код> | {+info -info =func !func ~number}%+info -info =func% - что произойдёт при вводе установленного пароля.
tips = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка при наведении.
Пример использования схемы:
[logic]
active = ph_code
[ph_code]
code = 1287975
on_code = nil %+rad_code_door_unlocked%
[logic]
active = ph_code@lock
[ph_code@lock]
on_check_code1 = 2011533 | %+bun_codelock_open%
on_check_code2 = 342089 | %+bun_codelock_open%
Файл: gamedata\scripts\ph_code.script
То же самое, что и ph_door, но для ворот, состоящих из двух дверей:
[ph_gate]
state - <параметр> - состояние, в котором дверь находится при инициализации (по умолчанию none). Возможны следующие значения:
open - в открытом состоянии;
closed - в закрытом состоянии;
none - в текущем (дефолтном или оставшемся от предыдущей схемы).
locking - <параметр> - блокировка дверей (по умолчанию none). Возможны следующие значения:
stick - прилипание дверей к крайним состояниям.
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной. Состояния в этом положении:
open - блокировать в открытом состоянии;
closed - в закрытом;
none - не используется (мягкая блокировка возможна только в крайних положениях);
hard - блокировка двери с помощью границ. Ворота можно только сломать. Состояния в этом положении:
open - блокировать в открытом состоянии;
closed - в закрытом;
none - в текущем.
none - дверь не заблокирована
left_limit/right_limit = <number> - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов.
breakable = true/false - определяет можно ли сломать ворота. По умолчанию true.
Звуковые параметры аналогичны ph_door.
Пример использования схемы:
[logic]
active = ph_gate@locked
[ph_gate@locked]
state = closed
locking = hard
on_info = {+val_chase_start} ph_gate@unlocked
[ph_gate@unlocked]
state = closed
locking = stick
Файл: gamedata\scripts\ph_gate.script
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).
[ph_sound]
snd = <название_звуковой_темы> - имя темы из файла sound_theme.script из таблицы ph_snd_themes.
looped = true/false - зацикленное воспроизведение звука. По умолчанию - false.
min_idle = <number> - минимальное время простоя перед включением звука (мс). По умолчанию - 0.
max_idle = <number> - максимальное время простоя перед включением звука (мс). По умолчанию - 0.
random = true/false - если true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения. По умолчанию - false.
no_hit = true/false - будет ли схема реагировать на нанесённый хит. По умолчанию - true.
Примечание: если задать random = true и looped = true, то схема сыпется.
Поддерживается сигнал sound_end.
Данная схема работает, мягко говоря, через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil.
Специфическим образом создается звуковая схема.
В sound_theme.script в начале файла есть секция ph_themes, в которой и описываются темы для физ объектов.
Например:
ph_snd_themes["gar_seryi_shooting"] = {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.
Однако в оригинале такое встречается, например в бункере Выжигателя мозгов есть рестриктор bun_space_restrictor_sound1 на который как раз и повешан ph_sound.
Пример использования схемы:
[logic]
active = ph_sound
[ph_sound]
snd = gar_bandits_seryi
min_idle = 1000
max_idle = 5000
Файл: gamedata\scripts\ph_sound.script
Схема позволяет пнуть предмет в указанную сторону.
[ph_force]
force = <number> - сила, которая прикладывается к объекту. Измеряется в убитых енотах.
time = <number> - время прикладывания силы к предмету (в миллисекундах).
delay = <number> - задержка (в секундах) перед применением силы.
point = <имя_пути> - имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет).
point_index = <number> - индекс точки патрульного пути, в стону которого полетит предмет.
Пример использования схемы:
[logic]
active = ph_idle
[ph_idle]
on_info = {+rad_here_i_come} ph_force
[ph_force]
force = 1500
time = 500
delay = 0
point = rad_barrel_drop
point_index = 0
Файл: gamedata\scripts\ph_appforce.script
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов.
[ph_on_death]
on_info = {+info -info =func !func ~number} %+info -info =func% - эффекты при разрушении.
Примечание: использовать исключительно с разрушаемыми физическими объектами (physic_destroyable_object).
Пример использования схемы:
[logic]
active = ph_on_death
[ph_on_death]
on_info = %=inc_counter(mon_destroy_generator) =x18_gluk%
Файл: gamedata\scripts\ph_death.script
Настройка управления наземным транспортом.
[ph_car]
usable = {+info -info =func !func ~number} - условия для юзабелености объекта.
show_tips = true/false - отображать ли подсказку. По умолчанию - true.
tip_use = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка, в случае, если условия для usable выполнились.
По умолчанию - tip_car_use.
tip_locked = <имя_текса> - строка с id текста зарегистрированного в папке gamedata\config\text. Подсказка, в случае, если условия для usable не выполнились. По умолчанию - tip_car_locked.
В случае, если параметр usable не установлен, то возможна настройка самостоятельного поведения транспорта, а именно БТР.
path_walk = <имя_пути> - путь движения транспорта.
path_fire = <имя_пути> - вероятно, точки пути по которым возможна стрельба.
auto_fire = true/false - разрешить стрелять на ходу. По умолчанию - false.
fire_time = <number> - время непрерывной стрельбы в миллисекундах. По умолчанию - 0.
fire_repeat = inf/<number> - вероятно, время через которое возможна повторная стрельба. inf = -1.
fire_range = <number> - дальность стрельбы. По умолчанию - 50 метров.
target = <параметр> - цель для стрельбы. Возможны следующие параметры:
points - стрелять в первую точку патрульного пути. Если путь не указан - вылет. Стоит по умолчанию;
actor - без комментариев;
story_id - персонаж с указанным story_id.
track_target = true/false - Некое подобие предупредительной стрельбы, не по цели, а чуть выше. По умолчанию - false.
on_target_vis = <параметр>|{+info -info =func !func ~number} %+info -info =func% <название_схемы> - что произойдёт, если цель будет в прямой видимости.
В качестве параметра возможны два значения: actor, story_id персонажа.
on_target_nvis = <параметр>|{+info -info =func !func ~number} %+info -info =func% <название_схемы> - что произойдёт, если цель пропадёт из
области прямой видимости. В качестве параметра возможны два значения: actor, story_id персонажа.
invulnerable = true/false - неуязвимость. Если true, транспорт игнорирует все хиты. По умолчанию false.
headlights = on/off - вкл./выкл. свет от фар.
on_death_info = info - выдача инфопоршня при уничтожении транспорта.
Поддерживается сигнал arrived.
Пример использования схемы:
[logic]
active = ph_car@fire
[ph_car@fire]
path_walk = pri_wave3_btr_walk
path_fire = pri_wave3_btr_look
fire_repeat = inf
auto_fire = true
on_target_vis = actor | ph_car@fight_actor2
on_death_info = pri_wave3_btr_dead
on_signal = arrived | ph_car@hunt_actor %+pri_wave3_btr_arrived%
Файл: gamedata\scripts\ph_car.script
Схема предназначена для плавного раскачивания физики (лампы, висящие зомби и т.д.)
[ph_oscillate]
joint = <имя_кости> - имя кости объекта к которой будет применена сила.
period = <number> - время прикладывания силы в миллисекундах.
force = <number> - собственно сила прикладывания в ньютонах.
correct_angle = <number> - угол относительно оси Y.
Сила прикладывается к кости объекта с линейным нарастанием. То есть в течении заданного периода времени сила вырастет с 0 до заявленного значения. После этого настает пауза (сила не применяется) на время period/2. После окончания паузы сила применяется так же, как и в начале, но в обратном направлении.
Пример использования схемы:
[logic]
active = ph_oscillate
[ph_oscillate]
joint = bone05
period = 3000
force = 500
correct_angle = 5
Файл: gamedata\scripts\ph_oscillate.script
Прописывается в физ объектах, которые запрещены для швыряния бюрерам и полтергейстам. Например, если они должны лежать на конкретном месте (типа документов сюжетных) или слишком громоздки по габаритам, чтобы их можно было красиво кидать. В кастом дате пишем: [ph_heavy].
В точках look пути, в которые смотрит прожекторщик, нужно прописать: sl=<имя_прожектора>
Например:
wp00|sl=esc_sl1
Тогда при повороте в эту точку персонаж повернет в нее и прожектор.
Общие сведения:
Вертолёт работает на «логике».
На вертолёт реагируют аномалии.
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.
У вертолёта есть универсальная боевая схема на манер сталкеров.
Пилоты вертолета реагируют репликами на события: хит, видит врага, поврежден (задымился), падает.
Позволяет летать вертолёту по патрульному пути, регулировать скорость, зависать, стрелять по различным целям.
Для схемы должен быть задан path_move – путь, по которому будет летать вертолёт. Он может содержать одну вершину, если нужно, чтоб вертолёт висел на месте.
Можно (но не обязательно) задать path_look – путь, в вершины которого вертолет может смотреть.
Вершины этих путей могут быть поставлены где угодно в пределах ограничивающего бокса уровня. Они не зависят от ai-nodes.
По пути вертолёт летает без учёта связей между вершинами. Он летает от вершины к вершине в порядке возрастания их номера (т.е. в порядке, в котором их поставили на уровень).
Вертолёт старается летать точно по вершинам пути. При желании можно сделать ювелирный пролёт под мостом.
Вертолёт старается летать как можно быстрее. Пояснение: если ему задать, что в следующей вершине пути он должен иметь скорость 10 м/с, а его максимальная скорость установлена в 30 м/с, то он не станет сразу лететь 10 м/с. Он сначала будет разгоняться вплоть до 30 м/с и только на подлёте к целевой вершине начнёт тормозить с расчётом прибыть в неё имея 10 м/с.
Если в вершине пути path_move задан набор флажков, то вертолёт будет смотреть в любую из вершин path_look, в которых задан такой же набор флажков. Поворачиваться к этой точке вертолёт начнёт с предыдущей вершины пути. На данном этапе вертолет не может, зависнув в одном месте, смотреть поочередно в несколько точек path_look.
[heli_move]
path_move = <имя_пути> - путь полёта.
path_look = <имя_пути> - точки в которые будет смотреть вертолёт.
engine_sound = true/false - вкл/выкл звук двигателя вертолёта. По умолчанию true.
invulnerable = true/false - неуязвимость. Если true, вертолёт игнорирует все хиты. По умолчанию false.
immortal = true/false - бессмертие. Если true, вертолёт получает повреждения, но не умирает. По умолчанию false.
mute = true/false - отключает универсальные реплики пилотов вертолета. По умолчанию false.
rocket_delay = <number> - задержка, в миллисекундах, между пусками ракет. По умолчанию берется из ltx (сейчас 1250 мсек).
default_velocity = <number> - скорость, в метрах в секунду, с которой летает вертолет, если не заданы другие параметры.
Параметры, задаваемые в именах вершин пути path_move:
e – (сокр. от enemy) задание врага (цели). Стрелять по этой цели вертолёт начнёт уже в предыдущей вершине. Если значение не задано, то будет стрелять в точку из path_look, которая соответствует данной вершине. Если задано e=actor (можно сокращённо e=a), то огонь будет вестись по актору. Если задано e=число, стрелять будет по объекту со story_id равным числу.
w – (сокр. от weapon) каким оружием стрелять.
Возможные значения:
w=1 – стрелять только пулемётом;
w=2 – стрелять только ракетами.
По умолчанию стреляет всем.
v - (сокр. от velocity) задание максимальной скорости (в м/с) на участке пути от данной вершины до следующей. Если этот параметр не задан, то умолчание берётся из файла helicopter.ltx.
dv - (сокр. от destination velocity) задание скорости (в м/с), которую вертолёт должен иметь в момент прибытия в данную вершину.
die - убить вертолёт.
flame - начать дымить (как будто подбили).
Параметры, задаваемые в именах вершин пути path_look:
e - работает так же как и в path_move. Разница в том, что стрелять по указанной цели вертолёт начнёт лишь тогда, когда прибудет в вершину пути path_move, которая соответствует данной вершине path_look.
w – см. такой же параметр для пути path_move.
t - (сокр. от time) длительность времени (в мс реального времени), на протяжении которого вертолёт будет смотреть в данную точку. Если этот параметр не задан, то вертолёт пронесётся без остановки, но постарается на ходу развернуться к этой вершине.
Пример использования схемы:
[logic]
active = heli_move@idle
[heli_move@idle]
path_move = heli_idle_move
engine_sound = false
on_info = {+stalker_go} heli_move@fly
combat_safe_altitude = -50
[heli_move@fly]
path_move = heli_fly
on_signal = fly_end| heli_move@sleep
invulnerable = false
combat_use_rocket = true
combat_safe_altitude = -50
[heli_move@sleep]
path_move = heli_sleep
engine_sound = false
combat_safe_altitude = -50
Файл: gamedata\scripts\heli_move.script
Общие сведения:
В универсальной боевой схеме вертолёт не привязан к путям.
Вертолёт не видит никого. Узнать о враге вертолёт может только при получении хита или из параметра в custom data.
Вертолёт стреляет по врагу, если видит его. Если не видит – ищет, облетая вокруг точки, где последний раз видел. Если долго не видит врага – забывает его. Если врага задали принудительно из текущей секции схемы поведения, то он не забудет его, пока находится в этой секции.
Примечание: отдельной секции для этой схемы поведения нет. Поэтому настройки производятся в секции текущей схемы поведения:
combat_ignore = true/false - true означает игнорирование получения хита. Т.е. вертолёт не будет пытаться "отомстить" тому, от кого он получил хит.
combat_enemy = <параметр> - враг. Возможны следующие значения:
nil - враг отсутствует;
actor - без комментариев;
story_id - персонаж с указанным story_id.
combat_use_rocket = true/false - можно ли вертолёту пользоваться ракетами.
combat_use_mgun = true/false - можно ли вертолёту пользоваться пулемётом.
combat_velocity = <number> - скорость, с которой вертолет будет делать боевые заходы.
combat_safe_altitude = <number> - высота, относительно самой высокой точки геометрии на уровне ниже которой вертолет не будет опускаться в боевой схеме (может быть отрицательным).
К вертолёту подключена схема xr_hit. Работает как у сталкеров. В xr_effects.script есть группа функций для работы с вертолётом из его custom data:
heli_set_enemy_actor - сделать актёра врагом вертолёту;
heli_start_flame - поджечь вертолёт;
heli_die - убить вертолёт.
Файл: gamedata\scripts\heli_combat.script