<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://stalkerin.gameru.net/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=93.81.199.101&amp;*</id>
		<title>S.T.A.L.K.E.R. Inside Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=93.81.199.101&amp;*"/>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/93.81.199.101"/>
		<updated>2026-04-29T13:41:20Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_4</id>
		<title>Настройка логики. Часть 4</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_4"/>
				<updated>2013-05-25T12:13:25Z</updated>
		
		<summary type="html">&lt;p&gt;93.81.199.101: /* Схема ph_button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Шаблон:Настройка логики}}&lt;br /&gt;
&lt;br /&gt;
=Набор дополнительных настроек логики у разных объектов=&lt;br /&gt;
Для всех физических объектов есть секция '''''ph_idle''''', поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
==Схема ph_idle==&lt;br /&gt;
Схема по сути ничего не делает, представляет некое промежуточное состояние объекта. Аналог схемы '''''sr_idle''''', только для физического объекта.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[ph_idle]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hit_on_bone = &amp;lt;number&amp;gt;|{+info -info =func !func ~number} %+info -info =func% &amp;lt;название_схемы&amp;gt;''''' - определяет, что произойдёт,&lt;br /&gt;
:если объект получит хит по кости '''''number'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_use = {+info -info =func !func ~number} %+info -info =func% &amp;lt;название_схемы&amp;gt;''''' - определяет, что произойдёт, если актор взаимодействует с объектом.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tips = &amp;lt;имя_текса&amp;gt;''''' - строка с '''''id''''' текста зарегистрированного в папке ''gamedata\config\text''. Подсказка при наведении.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''nonscript_usable = true/false''''' - возможность стандартных (нескриптовых) действий над объектом: взять объект в интерфейс, открыть инвентарь.&lt;br /&gt;
:В игре используется в одном случае - для объектов с именем секции '''''inventory_box''''', то беж тайников.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_idle&lt;br /&gt;
&lt;br /&gt;
[ph_idle]&lt;br /&gt;
hit_on_bone = 1|%+agroprom_u_light_4%|2|%+agroprom_u_light_4%|3|%+agroprom_u_light_4%|4|%+agroprom_u_light_4%&lt;br /&gt;
on_info = {+agroprom_u_light_4} nil %=turn_off_object%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_idle.script''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Схема ph_door==&lt;br /&gt;
Схема для работы двери.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Примечание''''': для двустворчатых ворот задается все аналогично.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[ph_door]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''locked = true/false''''' - заперта ли дверь. По умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''closed = true/false''''' - закрыта ли дверь. По умолчанию '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''show_tips = true/false''''' - нужно ли показывать подсказку при наведении на дверь. По умолчанию '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tip_open = &amp;lt;имя_текса&amp;gt;''''' - строка с '''''id''''' текста зарегистрированного в папке ''gamedata\config\text''.&lt;br /&gt;
:Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта. Если '''''locked''''' равен '''''false''''', то по умолчанию '''''tip_door_open''''', иначе '''''tip_door_locked'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tip_close = &amp;lt;имя_текса&amp;gt;''''' - строка с '''''id''''' текста зарегистрированного в папке ''gamedata\config\text''.&lt;br /&gt;
:Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта. Если '''''locked''''' равен '''''false''''', то по умолчанию '''''tip_door_close''''', иначе пустое значение.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''snd_open_start = &amp;lt;название_звуковой_темы&amp;gt;''''' - имя темы из файла ''sound_theme.script''. Звук, который будет отыгран при попытке открыть дверь.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''snd_close_start = &amp;lt;название_звуковой_темы&amp;gt;''''' - имя темы из файла ''sound_theme.script''. Звук, который будет отыгран при попытке закрыть дверь.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''snd_close_stop = &amp;lt;название_звуковой_темы&amp;gt;''''' - имя темы из файла ''sound_theme.script''. Звук, который будет отыгран, когда дверь захлопнется до конца.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_use = {+info -info =func !func ~number} %+info -info =func% &amp;lt;название_схемы&amp;gt;''''' - определяет, что произойдёт, если актор взаимодействует с дверью.&lt;br /&gt;
:Обычно используется для переключения схемы.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''hit_on_bone = &amp;lt;number&amp;gt;|{+info -info =func !func ~number} %+info -info =func% &amp;lt;название_схемы&amp;gt;''''' - определяет, что произойдёт,&lt;br /&gt;
:если дверь получит хит по кости '''''number'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''no_force = true/false''''' - по умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_door@locked&lt;br /&gt;
&lt;br /&gt;
[ph_door@locked]&lt;br /&gt;
locked = true&lt;br /&gt;
snd_open_start = trader_door_unlock&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@closed %=play_snd(device\door_servomotor)%&lt;br /&gt;
&lt;br /&gt;
[ph_door@closed]&lt;br /&gt;
closed = true&lt;br /&gt;
locked = false&lt;br /&gt;
on_use = ph_door@open %-esc_close_door%&lt;br /&gt;
snd_open_start = trader_door_open_start&lt;br /&gt;
snd_close_start = trader_door_close_start&lt;br /&gt;
snd_close_stop = trader_door_close_stop&lt;br /&gt;
&lt;br /&gt;
[ph_door@open]&lt;br /&gt;
closed = false&lt;br /&gt;
locked = false&lt;br /&gt;
on_use = ph_door@closed&lt;br /&gt;
on_info = {+esc_close_door} ph_door@closed&lt;br /&gt;
snd_open_start = trader_door_open_start&lt;br /&gt;
snd_close_start = trader_door_close_start&lt;br /&gt;
snd_close_stop = trader_door_close_stop&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_door.script''&lt;br /&gt;
&lt;br /&gt;
==Схема ph_button==&lt;br /&gt;
&lt;br /&gt;
Схема работы кнопки.&amp;lt;br&amp;gt;&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[ph_button]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''anim_blend = true/false''''' – плаваня, сглаженная анимация.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''anim = &amp;lt;название_анимации&amp;gt;''''' – анимация, которая отыгрывается при нажатии на кнопку.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_press = {+info -info =func !func ~number} %+info -info =func% &amp;lt;название_схемы&amp;gt;''''' - что произойдёт при нажатии на кнопку.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tooltip = &amp;lt;имя_текса&amp;gt;''''' - строка с '''''id''''' текста зарегистрированного в папке ''gamedata\config\text''. Подсказка при наведении.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы:'''''&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_button@rad_on&lt;br /&gt;
&lt;br /&gt;
[ph_button@rad_on]&lt;br /&gt;
anim_blend  = true&lt;br /&gt;
anim        = lab_primary_switcher_idle&lt;br /&gt;
tooltip     = tips_rad_switcher_press&lt;br /&gt;
on_press    = ph_button@rad_off % +bar_deactivate_radar_done%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_button.script''&lt;br /&gt;
&lt;br /&gt;
==Схема ph_code==&lt;br /&gt;
Схема для осуществления ввода цифрового пароля.&lt;br /&gt;
При введении указанного кода выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
'''[ph_code]'''&lt;br /&gt;
'''''code = &amp;lt;код&amp;gt;''''' - установка кода.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_code = {+info -info =func !func ~number}%+info -info =func%''''' - что произойдёт при вводе правильного пароля.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_check_code = &amp;lt;код&amp;gt; | {+info -info =func !func ~number}%+info -info =func%''''' - что произойдёт при вводе установленного пароля.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tips = &amp;lt;имя_текса&amp;gt;''''' - строка с '''''id''''' текста зарегистрированного в папке ''gamedata\config\text''. Подсказка при наведении.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_code&lt;br /&gt;
&lt;br /&gt;
[ph_code]&lt;br /&gt;
code = 1287975&lt;br /&gt;
on_code = nil %+rad_code_door_unlocked%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
on_check_code1 = 2011533 | %+bun_codelock_open%&lt;br /&gt;
on_check_code2 = 342089 | %+bun_codelock_open%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_code.script''&lt;br /&gt;
&lt;br /&gt;
==Схема ph_gate==&lt;br /&gt;
&lt;br /&gt;
То же самое, что и '''''ph_door''''', но для ворот, состоящих из двух дверей:&lt;br /&gt;
&lt;br /&gt;
'''[ph_gate]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''state - &amp;lt;параметр&amp;gt;''''' - состояние, в котором дверь находится при инициализации (по умолчанию '''''none'''''). Возможны следующие значения:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''open''''' - в открытом состоянии;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''closed''''' - в закрытом состоянии;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''none''''' - в текущем (дефолтном или оставшемся от предыдущей схемы).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''locking - &amp;lt;параметр&amp;gt;''''' - блокировка дверей (по умолчанию '''''none'''''). Возможны следующие значения:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''stick''''' - прилипание дверей к крайним состояниям.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''soft''''' - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной. Состояния в этом положении:&amp;lt;br&amp;gt;&lt;br /&gt;
::*'''''open''''' - блокировать в открытом состоянии;&amp;lt;br&amp;gt;&lt;br /&gt;
::*'''''closed''''' - в закрытом;&amp;lt;br&amp;gt;&lt;br /&gt;
::*'''''none''''' - не используется (мягкая блокировка возможна только в крайних положениях);&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''hard''''' - блокировка двери с помощью границ. Ворота можно только сломать. Состояния в этом положении:&amp;lt;br&amp;gt;&lt;br /&gt;
::*'''''open''''' - блокировать в открытом состоянии;&amp;lt;br&amp;gt;&lt;br /&gt;
::*'''''closed''''' - в закрытом;&amp;lt;br&amp;gt;&lt;br /&gt;
::*'''''none''''' - в текущем.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''none''''' - дверь не заблокирована&amp;lt;br&amp;gt;&lt;br /&gt;
'''''left_limit/right_limit = &amp;lt;number&amp;gt;''''' - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''breakable = true/false''''' -  определяет можно ли сломать ворота. По умолчанию '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Звуковые параметры аналогичны ph_door'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_gate@locked&lt;br /&gt;
&lt;br /&gt;
[ph_gate@locked]&lt;br /&gt;
state = closed&lt;br /&gt;
locking = hard&lt;br /&gt;
on_info = {+val_chase_start} ph_gate@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_gate@unlocked]&lt;br /&gt;
state = closed&lt;br /&gt;
locking = stick&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_gate.script''&lt;br /&gt;
&lt;br /&gt;
==Схема ph_sound==&lt;br /&gt;
&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[ph_sound]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''snd = &amp;lt;название_звуковой_темы&amp;gt;''''' - имя темы из файла ''sound_theme.script'' из таблицы '''''ph_snd_themes'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''looped = true/false''''' - зацикленное воспроизведение звука. По умолчанию - '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''min_idle = &amp;lt;number&amp;gt;''''' - минимальное время простоя перед включением звука (мс). По умолчанию - 0.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''max_idle = &amp;lt;number&amp;gt;''''' - максимальное время простоя перед включением звука (мс). По умолчанию - 0.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''random = true/false''''' - если '''''true''''', то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения. По умолчанию - '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''no_hit = true/false''''' - будет ли схема реагировать на нанесённый хит. По умолчанию - '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': если задать '''''random = true''''' и '''''looped = true''''', то схема сыпется.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поддерживается сигнал '''''sound_end'''''.&lt;br /&gt;
&lt;br /&gt;
Данная схема работает, мягко говоря, через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в '''''nil'''''. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим '''''on_signal = sound_end| nil'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специфическим образом создается звуковая схема.&amp;lt;br&amp;gt;&lt;br /&gt;
В ''sound_theme.script'' в начале файла есть секция '''''ph_themes''''', в которой и описываются темы для физ объектов.&amp;lt;br&amp;gt;&lt;br /&gt;
Например:&amp;lt;lua&amp;gt;ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;] = {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) '''''ph_sound''''' можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако в оригинале такое встречается, например в бункере Выжигателя мозгов есть рестриктор '''''bun_space_restrictor_sound1''''' на который как раз и повешан '''''ph_sound'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_bandits_seryi&lt;br /&gt;
min_idle = 1000&lt;br /&gt;
max_idle = 5000&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_sound.script''&lt;br /&gt;
&lt;br /&gt;
==Схема ph_force==&lt;br /&gt;
&lt;br /&gt;
Схема позволяет пнуть предмет в указанную сторону.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[ph_force]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''force = &amp;lt;number&amp;gt;''''' - сила, которая прикладывается к объекту. Измеряется в убитых енотах.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time = &amp;lt;number&amp;gt;''''' - время прикладывания силы к предмету (в миллисекундах).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''delay = &amp;lt;number&amp;gt;''''' - задержка (в секундах) перед применением силы.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''point = &amp;lt;имя_пути&amp;gt;''''' - имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''point_index = &amp;lt;number&amp;gt;''''' - индекс точки патрульного пути, в стону которого полетит предмет.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_idle&lt;br /&gt;
&lt;br /&gt;
[ph_idle]&lt;br /&gt;
on_info = {+rad_here_i_come} ph_force &lt;br /&gt;
&lt;br /&gt;
[ph_force]&lt;br /&gt;
force = 1500&lt;br /&gt;
time = 500&lt;br /&gt;
delay = 0&lt;br /&gt;
point = rad_barrel_drop&lt;br /&gt;
point_index = 0&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_appforce.script''&lt;br /&gt;
&lt;br /&gt;
==Схема ph_on_death==&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[ph_on_death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты при разрушении.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': использовать исключительно с разрушаемыми физическими объектами ('''''physic_destroyable_object''''').&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
[ph_on_death]&lt;br /&gt;
on_info = %=inc_counter(mon_destroy_generator) =x18_gluk%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_death.script''&lt;br /&gt;
&lt;br /&gt;
==Схема ph_car==&lt;br /&gt;
&lt;br /&gt;
Настройка управления наземным транспортом.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[ph_car]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''usable = {+info -info =func !func ~number}''''' - условия для юзабелености объекта. &lt;br /&gt;
'''''show_tips = true/false''''' - отображать ли подсказку. По умолчанию - '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tip_use = &amp;lt;имя_текса&amp;gt;''''' - строка с '''''id''''' текста зарегистрированного в папке ''gamedata\config\text''. Подсказка, в случае, если условия для '''''usable''''' выполнились.&lt;br /&gt;
:По умолчанию - '''''tip_car_use'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tip_locked = &amp;lt;имя_текса&amp;gt;''''' - строка с '''''id''''' текста зарегистрированного в папке ''gamedata\config\text''. Подсказка, в случае, если условия для '''''usable''''' не выполнились. По умолчанию - '''''tip_car_locked'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В случае, если параметр '''''usable''''' не установлен, то возможна настройка самостоятельного поведения транспорта, а именно БТР.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''path_walk = &amp;lt;имя_пути&amp;gt;''''' - путь движения транспорта.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_fire = &amp;lt;имя_пути&amp;gt;''''' - вероятно, точки пути по которым возможна стрельба.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''auto_fire = true/false''''' - разрешить стрелять на ходу. По умолчанию - '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''fire_time = &amp;lt;number&amp;gt;''''' - время непрерывной стрельбы в миллисекундах. По умолчанию - 0.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''fire_rep = inf/&amp;lt;number&amp;gt;''''' - вероятно, время через которое возможна повторная стрельба. '''''inf = -1'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''fire_range = &amp;lt;number&amp;gt;''''' - сектор стрельбы. По умолчанию - 50 градусов.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''target = &amp;lt;параметр&amp;gt;''''' - цель для стрельбы. Возможны следующие параметры:&lt;br /&gt;
:*'''''points''''' - стрелять в первую точку патрульного пути. Если путь не указан - вылет. Стоит по умолчанию;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''actor''''' - без комментариев;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_id''''' - персонаж с указанным '''''story_id'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''track_target = true/false''''' - Некое подобие предупредительной стрельбы, не по цели, а чуть выше. По умолчанию - '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_target_vis = &amp;lt;параметр&amp;gt;|{+info -info =func !func ~number} %+info -info =func% &amp;lt;название_схемы&amp;gt;''''' - что произойдёт, если цель будет в прямой видимости.&lt;br /&gt;
:В качестве параметра возможны два значения: '''''actor''''', '''''story_id''''' персонажа.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_target_nvis = &amp;lt;параметр&amp;gt;|{+info -info =func !func ~number} %+info -info =func% &amp;lt;название_схемы&amp;gt;''''' - что произойдёт, если цель пропадёт из&lt;br /&gt;
:области прямой видимости. В качестве параметра возможны два значения: '''''actor''''', '''''story_id''''' персонажа.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''invulnerable = true/false''''' - неуязвимость. Если '''''true''''', транспорт игнорирует все хиты. По умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''headlights = on/off''''' - вкл./выкл. свет от фар.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_death_info = {+info -info =func !func ~number} %+info -info =func%''''' - что произойдёт при уничтожении транспорта.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поддерживается сигнал '''''arrived'''''.&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_car@fire&lt;br /&gt;
&lt;br /&gt;
[ph_car@fire]&lt;br /&gt;
path_walk = pri_wave3_btr_walk&lt;br /&gt;
path_fire = pri_wave3_btr_look&lt;br /&gt;
fire_repeat = inf&lt;br /&gt;
auto_fire = true&lt;br /&gt;
on_target_vis = actor | ph_car@fight_actor2&lt;br /&gt;
on_death_info = pri_wave3_btr_dead&lt;br /&gt;
on_signal = arrived | ph_car@hunt_actor %+pri_wave3_btr_arrived%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_car.script''&lt;br /&gt;
&lt;br /&gt;
==Схема ph_oscillate==&lt;br /&gt;
&lt;br /&gt;
Схема предназначена для плавного раскачивания физики (лампы, висящие зомби и т.д.)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[ph_oscillate]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''joint = &amp;lt;имя_кости&amp;gt;''''' - имя кости объекта к которой будет применена сила.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''period = &amp;lt;number&amp;gt;''''' - время прикладывания силы в миллисекундах.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''force = &amp;lt;number&amp;gt;''''' - собственно сила прикладывания в ньютонах.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''correct_angle = &amp;lt;number&amp;gt;''''' - угол относительно оси Y.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сила прикладывается к кости объекта с линейным нарастанием. То есть в течении заданного периода времени сила вырастет с 0 до заявленного значения. После этого настает пауза (сила не применяется) на время '''''period/2'''''. После окончания паузы сила применяется так же, как и в начале, но в обратном направлении.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_oscillate&lt;br /&gt;
&lt;br /&gt;
[ph_oscillate]&lt;br /&gt;
joint = bone05&lt;br /&gt;
period = 3000&lt;br /&gt;
force = 500&lt;br /&gt;
correct_angle = 5&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\ph_oscillate.script''&lt;br /&gt;
&lt;br /&gt;
==Секция ph_heavy==&lt;br /&gt;
Прописывается в физ объектах, которые запрещены для швыряния бюрерам и полтергейстам. Например, если они должны лежать на конкретном месте (типа документов сюжетных) или слишком громоздки по габаритам, чтобы их можно было красиво кидать.&lt;br /&gt;
В кастом дате пишем:&lt;br /&gt;
'''[ph_heavy]'''.&lt;br /&gt;
&lt;br /&gt;
==Принцип работы прожектора:==&lt;br /&gt;
&lt;br /&gt;
В точках '''''look''''' пути, в которые смотрит прожекторщик, нужно прописать:&lt;br /&gt;
'''''sl=&amp;lt;имя_прожектора&amp;gt;'''''&lt;br /&gt;
&lt;br /&gt;
Например:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;wp00|sl=esc_sl1&amp;lt;/ini&amp;gt;&lt;br /&gt;
Тогда при повороте в эту точку персонаж повернет в нее и прожектор.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Логика вертолёта==&lt;br /&gt;
Общие сведения:&amp;lt;br&amp;gt;&lt;br /&gt;
*Вертолёт работает на «логике».&amp;lt;br&amp;gt;&lt;br /&gt;
*На вертолёт реагируют аномалии.&amp;lt;br&amp;gt;&lt;br /&gt;
*Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&amp;lt;br&amp;gt;&lt;br /&gt;
*Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&amp;lt;br&amp;gt;&lt;br /&gt;
*У вертолёта есть универсальная боевая схема на манер сталкеров.&amp;lt;br&amp;gt;&lt;br /&gt;
*Пилоты вертолета реагируют репликами на события: хит, видит врага, поврежден (задымился), падает.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Схема heli_move===&lt;br /&gt;
&lt;br /&gt;
Позволяет летать вертолёту по патрульному пути, регулировать скорость, зависать, стрелять по различным целям.&amp;lt;br&amp;gt;&lt;br /&gt;
Для схемы должен быть задан '''''path_move''''' – путь, по которому будет летать вертолёт. Он может содержать одну вершину, если нужно, чтоб вертолёт висел на месте.&amp;lt;br&amp;gt;&lt;br /&gt;
Можно (но не обязательно) задать '''''path_look''''' – путь, в вершины которого вертолет может смотреть.&amp;lt;br&amp;gt;&lt;br /&gt;
Вершины этих путей могут быть поставлены где угодно в пределах ограничивающего бокса уровня. Они не зависят от '''''ai-nodes'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
По пути вертолёт летает без учёта связей между вершинами. Он летает от вершины к вершине в порядке возрастания их номера (т.е. в порядке, в котором их поставили на уровень).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертолёт старается летать точно по вершинам пути. При желании можно сделать ювелирный пролёт под мостом.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертолёт старается летать как можно быстрее. Пояснение: если ему задать, что в следующей вершине пути он должен иметь скорость 10 м/с, а его максимальная скорость установлена в 30 м/с, то он не станет сразу лететь 10 м/с. Он сначала будет разгоняться вплоть до 30 м/с и только на подлёте к целевой вершине начнёт тормозить с расчётом прибыть в неё имея 10 м/с.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в вершине пути '''''path_move''''' задан набор флажков, то вертолёт будет смотреть в любую из вершин '''''path_look''''', в которых задан такой же набор флажков. Поворачиваться к этой точке вертолёт начнёт с предыдущей вершины пути. На данном этапе вертолет не может, зависнув в одном месте, смотреть поочередно в несколько точек '''''path_look'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[heli_move]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_move = &amp;lt;имя_пути&amp;gt;''''' - путь полёта.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_look = &amp;lt;имя_пути&amp;gt;''''' - точки в которые будет смотреть вертолёт.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''engine_sound = true/false''''' - вкл/выкл звук двигателя вертолёта. По умолчанию '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''invulnerable = true/false''''' - неуязвимость. Если '''''true''''', вертолёт игнорирует все хиты. По умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''immortal = true/false''''' - бессмертие. Если '''''true''''', вертолёт получает повреждения, но не умирает. По умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''mute = true/false''''' -  отключает универсальные реплики пилотов вертолета. По умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''rocket_delay = &amp;lt;number&amp;gt;''''' - задержка, в миллисекундах, между пусками ракет. По умолчанию берется из ltx (сейчас 1250 мсек).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''default_velocity = &amp;lt;number&amp;gt;''''' - скорость, в метрах в секунду, с которой летает вертолет, если не заданы другие параметры.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры, задаваемые в именах вершин пути '''''path_move''''':&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''e''''' – (сокр. от ''enemy'') задание врага (цели). Стрелять по этой цели вертолёт начнёт уже в предыдущей вершине. Если значение не задано, то будет стрелять в точку из '''''path_look''''', которая соответствует данной вершине. Если задано '''''e=actor''''' (можно сокращённо '''''e=a'''''), то огонь будет вестись по актору. Если задано '''''e=число''''', стрелять будет по объекту со '''''story_id''''' равным числу.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''w''''' – (сокр. от ''weapon'') каким оружием стрелять.&amp;lt;br&amp;gt;&lt;br /&gt;
::Возможные значения:&amp;lt;br&amp;gt;&lt;br /&gt;
:::*'''''w=1''''' – стрелять только пулемётом;&amp;lt;br&amp;gt;&lt;br /&gt;
:::*'''''w=2''''' – стрелять только ракетами.&amp;lt;br&amp;gt;&lt;br /&gt;
::По умолчанию стреляет всем.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''v''''' - (сокр. от ''velocity'') задание максимальной скорости (в м/с) на участке пути от данной вершины до следующей. Если этот параметр не задан, то умолчание берётся из файла ''helicopter.ltx''.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''dv''''' - (сокр. от ''destination velocity'') задание скорости (в м/с), которую вертолёт должен иметь в момент прибытия в данную вершину.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''die''''' - убить вертолёт.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''flame''''' - начать дымить (как будто подбили).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры, задаваемые в именах вершин пути path_look:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''e''''' - работает так же как и в '''''path_move'''''. Разница в том, что стрелять по указанной цели вертолёт начнёт лишь тогда, когда прибудет в вершину пути '''''path_move''''', которая соответствует данной вершине '''''path_look'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''w''''' – см. такой же параметр для пути '''''path_move'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''t''''' - (сокр. от ''time'') длительность времени (в мс реального времени), на протяжении которого вертолёт будет смотреть в данную точку. Если этот параметр не задан, то вертолёт пронесётся без остановки, но постарается на ходу развернуться к этой вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\heli_move.script''&lt;br /&gt;
&lt;br /&gt;
===Универсальная боевая схема: heli_combat===&lt;br /&gt;
Общие сведения:&amp;lt;br&amp;gt;&lt;br /&gt;
В универсальной боевой схеме вертолёт не привязан к путям.&amp;lt;br&amp;gt;&lt;br /&gt;
Вертолёт не видит никого. Узнать о враге вертолёт может только при получении хита или из параметра в '''''custom data'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
Вертолёт стреляет по врагу, если видит его. Если не видит – ищет, облетая вокруг точки, где последний раз видел. Если долго не видит врага – забывает его. Если врага задали принудительно из текущей секции схемы поведения, то он не забудет его, пока находится в этой секции.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': отдельной секции для этой схемы поведения нет. Поэтому настройки производятся в секции текущей схемы поведения:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''combat_ignore = true/false''''' - '''''true''''' означает игнорирование получения хита. Т.е. вертолёт не будет пытаться &amp;quot;отомстить&amp;quot; тому, от кого он получил хит.&lt;br /&gt;
'''''combat_enemy = &amp;lt;параметр&amp;gt;''''' - враг. Возможны следующие значения:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''nil''''' - враг отсутствует;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''actor''''' - без комментариев;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_id''''' - персонаж с указанным '''''story_id'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_use_rocket = true/false''''' - можно ли вертолёту пользоваться ракетами.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_use_mgun = true/false''''' - можно ли вертолёту пользоваться пулемётом.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_velocity = &amp;lt;number&amp;gt;''''' - скорость, с которой вертолет будет делать боевые заходы.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_safe_altitude = &amp;lt;number&amp;gt;''''' - высота, относительно самой высокой точки геометрии на уровне ниже которой вертолет не будет опускаться в боевой схеме (может быть отрицательным).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
К вертолёту подключена схема '''''xr_hit'''''. Работает как у сталкеров. В ''xr_effects.script'' есть группа функций для работы с вертолётом из его '''''custom data''''':&amp;lt;br&amp;gt;&lt;br /&gt;
'''''heli_set_enemy_actor''''' - сделать актёра врагом вертолёту;&amp;lt;br&amp;gt;&lt;br /&gt;
'''''heli_start_flame''''' - поджечь вертолёт;&amp;lt;br&amp;gt;&lt;br /&gt;
'''''heli_die''''' - убить вертолёт.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\heli_combat.script''&lt;br /&gt;
&lt;br /&gt;
=Смарттерейны и гулаги.=&lt;br /&gt;
&lt;br /&gt;
==Smart Terrein==&lt;br /&gt;
Под смарттеррейном понимается зона, зайдя в которую, сталкер попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. Если установлены условия выполнения работы, то при не выполнении этих условий он выходит из-под гулага и ходит свободно.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&amp;lt;br&amp;gt;&lt;br /&gt;
Для всех smart terrain нужно:&amp;lt;br&amp;gt;&lt;br /&gt;
#Поставить '''''smart_terrain''''' с необходимым '''''shape'''''. Размер шейпа влияет только на производительность, поэтому его задаём как можно меньше;&amp;lt;br&amp;gt;&lt;br /&gt;
#В его '''''custom_data''''' прописать настройки;&amp;lt;br&amp;gt;&lt;br /&gt;
#Расставить пути для соответствующих схем поведения.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры '''''custom_data''''':&amp;lt;br&amp;gt;&lt;br /&gt;
'''[smart_terrain]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''type = &amp;lt;имя_гулага&amp;gt;''''' - тип гулага, как правило это его имя.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''capacity = &amp;lt;number&amp;gt;''''' - максимальная вместимость в людях.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''offline = true/false''''' - может ли гулаг образоваться в оффлайне. По умолчанию - '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''squad = &amp;lt;squad&amp;gt;''''' - сквад, который будет проставлен всем сталкерам под гулагом (№ уровня).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''groups = &amp;lt;groups&amp;gt;''''' - набор '''''group''''' через запятые.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''stay = min, max''''' - время пребывания NPC под '''''smart_terrain''''' (по умлочанию – навсегда).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''idle = min, max''''' - время бездействия '''''smart_terrain''''' после ухода последнего NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''cond = {+info -info =func !func ~number}''''' - список условий, которые необходимы для создания гулага.&lt;br /&gt;
:Если условие не выполняется, то гулаг распускается, а все его подопечные начинают управляться прописанной в '''''custom_data''''' логикой.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&amp;lt;br&amp;gt;&lt;br /&gt;
Если не задан '''''squad''''' или '''''groups''''', то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3.11.2. Гулаги.==&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &amp;lt;br&amp;gt;&lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &amp;lt;br&amp;gt;&lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&amp;lt;br&amp;gt;&lt;br /&gt;
[gulag1] &amp;lt;br&amp;gt;&lt;br /&gt;
type = тип гулага&amp;lt;br&amp;gt;&lt;br /&gt;
capacity = макс. вместимость в людях&amp;lt;br&amp;gt;&lt;br /&gt;
*offline = может ли гулаг образоваться в offline (true/false)&lt;br /&gt;
*squad = squad, который будет проставлен всем сталкерам под гулагом&lt;br /&gt;
*groups = набор group через запятые&lt;br /&gt;
*stay = min, max время пребывания npc под smart_terrain&lt;br /&gt;
*idle = min, max время бездействия smart_terrain после ухода последнего npc&lt;br /&gt;
*cond = список условий, которые необходимы для создания гулага {+info –info =func !func} – если условие не выполняется, то гулаг распускается, а все его подопечные начинают управляться прописанной в custom_data логикой.&lt;br /&gt;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&amp;lt;br&amp;gt;&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&amp;lt;br&amp;gt;&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&amp;lt;br&amp;gt;&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&amp;lt;br&amp;gt;&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&lt;br /&gt;
&amp;lt;lua&amp;gt;if gulag_type == &amp;quot;gar_dolg&amp;quot; then&lt;br /&gt;
	return npc_community == &amp;quot;dolg&amp;quot;&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&amp;lt;br&amp;gt;&lt;br /&gt;
в нее передается имя зонки и тип гулага. Состояние гулага описывается в виде функции, возвращающей номер состояния гулага. Например:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lua&amp;gt;if type == &amp;quot;gar_maniac&amp;quot; then&lt;br /&gt;
	return function(gulag)&lt;br /&gt;
	   if level.get_time_hours() &amp;gt;= 7 and level.get_time_hours() &amp;lt;= 22 then&lt;br /&gt;
			return 0  -- день&lt;br /&gt;
		else&lt;br /&gt;
			return 1  -- ночь&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&amp;lt;br&amp;gt;&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&amp;lt;br&amp;gt;&lt;br /&gt;
sj – сама табличка работ гулагов,&amp;lt;br&amp;gt;&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&amp;lt;br&amp;gt;&lt;br /&gt;
Type – тип гулага&amp;lt;br&amp;gt;&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&amp;lt;br&amp;gt;&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lua&amp;gt;--' Garbage maniac&lt;br /&gt;
if type == &amp;quot;gar_maniac&amp;quot; then&lt;br /&gt;
	t = { section   = &amp;quot;logic@gar_maniac_camper&amp;quot;,&lt;br /&gt;
	      idle      = 0,&lt;br /&gt;
	      prior     = 5,&lt;br /&gt;
	      state     = {0},&lt;br /&gt;
	      squad     = squad,&lt;br /&gt;
	      groups    = groups[1],&lt;br /&gt;
	      in_rest   = &amp;quot;&amp;quot;, &lt;br /&gt;
	      out_rest  = &amp;quot;&amp;quot;,&lt;br /&gt;
	      info_rest = &amp;quot;&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	table.insert(sj, t)&lt;br /&gt;
	t = { section   = &amp;quot;logic@gar_maniac_sleeper&amp;quot;,&lt;br /&gt;
	      idle      = 0,&lt;br /&gt;
	      prior     = 5,&lt;br /&gt;
	      state     = {1},&lt;br /&gt;
	      squad     = squad,&lt;br /&gt;
	      groups    = groups[1],&lt;br /&gt;
	      in_rest   = &amp;quot;&amp;quot;,&lt;br /&gt;
	      out_rest  = &amp;quot;&amp;quot;,&lt;br /&gt;
	      info_rest = &amp;quot;&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	table.insert(sj, t)		&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
Описание полей:&amp;lt;br&amp;gt;&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&amp;lt;br&amp;gt;&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&amp;lt;br&amp;gt;&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&amp;lt;br&amp;gt;&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&amp;lt;br&amp;gt;&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&amp;lt;br&amp;gt;&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&amp;lt;br&amp;gt;&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lua&amp;gt;predicate = function(obj) &lt;br /&gt;
        return obj:profile_name() == &amp;quot;soldier_commander&amp;quot;			           &lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;;----------------------------&lt;br /&gt;
;-- GARBAGE MANIAC&lt;br /&gt;
;----------------------------&lt;br /&gt;
[logic@gar_maniac_camper]&lt;br /&gt;
active = camper@gar_maniac_camper&lt;br /&gt;
&lt;br /&gt;
[camper@gar_maniac_camper]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
[logic@gar_maniac_sleeper]&lt;br /&gt;
active = sleeper@gar_maniac_sleeper&lt;br /&gt;
&lt;br /&gt;
[sleeper@gar_maniac_sleeper]&lt;br /&gt;
path_main = sleep&lt;br /&gt;
wakeable = true&amp;lt;/ini&amp;gt;&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&amp;lt;br&amp;gt;&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&amp;lt;br&amp;gt;&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&amp;lt;br&amp;gt;&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3.11.3. Новые особенности смарттеррейнов==&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&amp;lt;br&amp;gt;&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&amp;lt;br&amp;gt;&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&amp;lt;br&amp;gt;&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&amp;lt;br&amp;gt;&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&amp;lt;br&amp;gt;&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&amp;lt;br&amp;gt;&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&amp;lt;br&amp;gt;&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&amp;lt;br&amp;gt;&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&amp;lt;br&amp;gt;&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
------------- Настройки: -------------&lt;br /&gt;
&lt;br /&gt;
---- Разрешения персонажам идти в определённые СТ ----&lt;br /&gt;
&lt;br /&gt;
Разрешения персонажам идти в определённые СТ задаются в custom data секцией [smart_terrains]. В ней можно задавать пары &amp;quot;имя_СТ = condlist&amp;quot;. Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&amp;lt;br&amp;gt;&lt;br /&gt;
strn_1 = условие1&amp;lt;br&amp;gt;&lt;br /&gt;
strn_2 = условие2&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&amp;lt;br&amp;gt;&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&amp;lt;br&amp;gt;&lt;br /&gt;
name&amp;lt;br&amp;gt;&lt;br /&gt;
community&amp;lt;br&amp;gt;&lt;br /&gt;
class_id&amp;lt;br&amp;gt;&lt;br /&gt;
story_id&amp;lt;br&amp;gt;&lt;br /&gt;
profile_name&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
t = { section = &amp;quot;logic@ЧЧЧЧЧЧЧЧ&amp;quot;, &lt;br /&gt;
        idle = 0,&lt;br /&gt;
        prior = 5, state = {0}, squad = squad, group = groups[1],&lt;br /&gt;
        online = true,&lt;br /&gt;
        in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
table.insert(sj, t)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Варианты задания этого поля&amp;lt;br&amp;gt;&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&amp;lt;br&amp;gt;&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&amp;lt;br&amp;gt;&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&amp;lt;br&amp;gt;&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&amp;lt;br&amp;gt;&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&amp;lt;br&amp;gt;&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&amp;lt;br&amp;gt;&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &amp;lt;br&amp;gt;&lt;br /&gt;
[smart_terrains]&amp;lt;br&amp;gt;&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&amp;lt;br&amp;gt;&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&amp;lt;br&amp;gt;&lt;br /&gt;
[smart_terrains]&amp;lt;br&amp;gt;&lt;br /&gt;
none = true&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.15.	Передача параметров в функции.==&lt;br /&gt;
Ниже перечислен набор функций к которым можно обращаться из кастом даты и при этом передавать в них переменные.&lt;br /&gt;
&lt;br /&gt;
NB! Во всех функциях xr_conditions и xr_effects, которые обращались к гулагам по имени, теперь можно использовать как имя, так и story id. Причем если мы указываем имя, то использовать функцию можно только, когда гулаг находится в онлайне, а если мы вешаем на самрттеррейн story_id, то можем обращаться к гулагу и в оффлайне.&lt;br /&gt;
&lt;br /&gt;
Описание функций с параметрами присутствующих в '''xr_conditions''' и '''xr_effects'''.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot; | &amp;lt;big&amp;gt;xr_conditions.script&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|actor_in_zone(restr)|| Функция проверки, что актёр в рестрикторе restr&lt;br /&gt;
|-&lt;br /&gt;
|actor_out_zone(restr)|| Функция проверки, что актёр не в рестрикторе restr&lt;br /&gt;
|- &lt;br /&gt;
|actor_enemy|| Функция проверки что актор - враг. Например: {=actor_enemy} означает &amp;quot;если актёр враг&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
|killactor|| Функция обижающая НПС на игрока. Например: on_info = {+failed} %=killactor% то при появлении поршня failed, НПС станет врагом актору&lt;br /&gt;
|- &lt;br /&gt;
|fighting_dist_ge(p)||Универсальная функция для combat_ignore, проверка расстояния для игрока(в метрах).&lt;br /&gt;
|-&lt;br /&gt;
|distance_to_obj_le(sid:dist)||Проверка дистанции до обьекта заданного story_id.&lt;br /&gt;
Можно использовать, например, в секции follower для определения того, что сталкер подошел на нужную дистанцию к лидеру&amp;lt;br&amp;gt;и переключать в другую секцию (лидер при этом стоит где-то в ремарке). Эта ситуация возникает, когда после боя надо&lt;br /&gt;
&amp;lt;br&amp;gt;подогнать одного сталкера к другому, а ихних позиций мы не знаем. Если используется в секции follower, то dist надо ставить&amp;lt;br&amp;gt; большим distance фолловера, поскольку если поставить их одинаковыми, то данная функция не всегда будет срабатывать.&lt;br /&gt;
|-&lt;br /&gt;
|health_le(health)||Проверка того, что здоровье npc &amp;lt;= health.&lt;br /&gt;
|-&lt;br /&gt;
|heli_health_le(health)||Аналогично предыдущему, только для вертолета.&lt;br /&gt;
|-&lt;br /&gt;
|enemy_group(group1:group2:...)||Проверка на принадлежность врага к одной из групп (правильность работы пока не проверялась).&lt;br /&gt;
|-&lt;br /&gt;
|health_le(health)||Проверка того, что здоровье npc &amp;lt;= health.&lt;br /&gt;
|-&lt;br /&gt;
|hitted_by(sid1:sid2:...)||Проверка того, что удар был нанесен кем-то из npc, указанных в списке. npc задаются с помощью story_id. Функцию удобно использовать в секции hit.&lt;br /&gt;
Пример:&lt;br /&gt;
   [hit]&lt;br /&gt;
   on_info = {=hitted_by(407:408)} %+val_escort_combat%.&lt;br /&gt;
|-&lt;br /&gt;
|killed_by(sid1:sid2:...)||Аналогично предыдущему, но для случая смерти npc. Используется в секции death..&lt;br /&gt;
|-&lt;br /&gt;
|is_alive(sid)&amp;lt;br\&amp;gt;is_alive_one(sid1:sid2:...)&amp;lt;br\&amp;gt;is_alive_all(sid1:sid2:...) || Проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы.&lt;br /&gt;
|-&lt;br /&gt;
|is_dead(sid)&amp;lt;br&amp;gt;is_dead_one(sid1:sid2:...)&amp;lt;br&amp;gt;is_dead_all(sid1:sid2:...)||Аналогично предыдущему, только проверка на &amp;quot;мертвость&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|check_fighting(sid1:sid2:...)||Проверка того, не является ли кто-то из перечисленных (с помощью story_id) npc врагом данного. Как правило используется в combat_ignore_cond.&lt;br /&gt;
|-&lt;br /&gt;
|gulag_empty(gulag_name)||Проверка того, что гулаг пуст или вообще не существует.&lt;br /&gt;
|-&lt;br /&gt;
|gulag_population_le(gulag_name:num)||Проверка того, что количество народу в гулаге &amp;lt;= num.&lt;br /&gt;
|-&lt;br /&gt;
|gulag_casualities_ge(gulag_name:num)||Проверка того, что гулаг понес потери =&amp;gt; num.&lt;br /&gt;
NB! Потери гулага не обнуляются, так что с этой функцией работать аккуратно.&lt;br /&gt;
|-&lt;br /&gt;
|signal(строка)||Проверяет, установлен ли у данного НПС в текущей схеме указанный сигнал.&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot; | &amp;lt;big&amp;gt;xr_effects.script&amp;lt;/big&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|heli_set_enemy(story_id)||Cделать npc с указанным story_id врагом веротелу. В одной секции можно задавать только 1 врага.&lt;br /&gt;
|- &lt;br /&gt;
|set_gulag_enemy_actor(gulag_name)||Сделать актера врагом для данного гулага&lt;br /&gt;
|- &lt;br /&gt;
|hit_npc(direction:bone:power:impulse:reverse)||Нанести хит по npc.&lt;br /&gt;
Параметры:&lt;br /&gt;
   direction - если строка, то считается, что это имя пути и в сторону первой точки производится &amp;lt;br&amp;gt;толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен &amp;lt;br&amp;gt;поступить хит.&lt;br /&gt;
   bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
   power - сила удара&lt;br /&gt;
   impulse - импульс&lt;br /&gt;
   reverse (true/false) - изменение направления удара на противоположное. по умолчанию false.&lt;br /&gt;
Пример:&lt;br /&gt;
   [death]&lt;br /&gt;
   on_info = {=killed_by(404)} %=hit_npc(404:bip01_spine1:100:2000)%, {=killed_by(405)} %=hit_npc(405:bip01_spine1:100:2000)%&lt;br /&gt;
|- &lt;br /&gt;
|set_friends(sid1:sid2:...)&amp;lt;br&amp;gt;set_enemies(sid1:sid2:...)||Установить друзьями/врагами данного npc и указанных в списке по story_id.&lt;br /&gt;
|- &lt;br /&gt;
|play_snd(snd_name:delay=0)||Играть звук в голове актёра.&lt;br /&gt;
snd_name - путь к звуку относительно папки sounds&lt;br /&gt;
delay - задержка перед проигрыванием. По умолчанию 0 – проигрываем сразу.&lt;br /&gt;
|- &lt;br /&gt;
|play_snd_now (sid:snd_name)||Играть звук от указанного объекта.&lt;br /&gt;
*звук играется об объекта с указанным story id, без задержки с громкостью 1. Указывается не имя звуковой схемы, а имя файла.&lt;br /&gt;
|- &lt;br /&gt;
|hit_obj(sid, bone, power, impulse, hit_src=npc:position())||Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. &lt;br /&gt;
Параметры: &lt;br /&gt;
actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
   sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
   bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
   power - сила удара.&lt;br /&gt;
   impulse - импульс.&lt;br /&gt;
   hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. &amp;lt;br&amp;gt;Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
|- &lt;br /&gt;
|actor_has_item(section)||Проверка на наличие у игрока соответствующего предмета. Проверка проходит по секции в ltx.&lt;br /&gt;
|- &lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot; | '''Функции для работы с HUD'ом.'''&lt;br /&gt;
|- &lt;br /&gt;
|disable_ui_elements(...)&amp;lt;br\&amp;gt;enable_ui_elements(...)||Отключение/включение элементов HUD'а.&lt;br /&gt;
Параметры:&lt;br /&gt;
   weapon - спрятать/показать руки с оружием.&lt;br /&gt;
   input - отключить/включить клавиатуру.&lt;br /&gt;
   hud - спрятать/показать индикаторы на экране.&lt;br /&gt;
   all - отключить/включить все элементы.&lt;br /&gt;
Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
   on_info = %=disable_ui_elements(weapon:input)%&lt;br /&gt;
|- &lt;br /&gt;
|disable_ui&amp;lt;br\&amp;gt;enable_ui||Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно, только сокращённые. Вызываются без скобок и параметров.&lt;br /&gt;
Пример:&lt;br /&gt;
   on_info = %=enable_ui%&lt;br /&gt;
|- &lt;br /&gt;
|run_cam_effector(file_name)|| Функция запуска camera_effector'а. file_name (указывается без расширения) - это имя анимационного файла (с расширением anm) из папки gamedata\anims\camera_effects\.&lt;br /&gt;
Пример:&lt;br /&gt;
   on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
|- &lt;br /&gt;
|run_postprocess(file_name:id:loop)||Запуск постпроцесса.&lt;br /&gt;
Параметры:&lt;br /&gt;
   file_name - имя файла постпроцесса (без расширения) из папки gamedata\anims. Указывается без расширения.&lt;br /&gt;
   id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
   loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&lt;br /&gt;
|- &lt;br /&gt;
|stop_postprocess(id)||Принудительная остановка постпроцесса. id - номер постпроцесса заданный в run_postprocess.&lt;br /&gt;
|- &lt;br /&gt;
|drop_actor_inventory(имя_пути)||Выбрасываем все предметы из инвентаря актера в первую точку заданного&lt;br /&gt;
пути.&lt;br /&gt;
Пример:&lt;br /&gt;
   on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==3.16. Настройка звуковых групп.==&lt;br /&gt;
	Новый принцип создания звуковых групп:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&amp;lt;br&amp;gt;&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&amp;lt;br&amp;gt;&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &amp;lt;br&amp;gt;&lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
[kamp@esc_bridge_post1]&amp;lt;br&amp;gt;&lt;br /&gt;
center_point = kamp_point&amp;lt;br&amp;gt;&lt;br /&gt;
soundgroup = esc_bridge_soldiers&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
Оригинальный doc ([http://stalkerin.gameru.net//downloads/other/for_wiki_articles/logic_setup.doc Ссылка])&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доки скриптеров 1935([http://stalkerin.gameru.net//downloads/other/for_wiki_articles/doc_scripters.rar Ссылка])&lt;br /&gt;
&lt;br /&gt;
[[Категория:A-Life]][[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>93.81.199.101</name></author>	</entry>

	</feed>