<?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=95.59.36.67&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=95.59.36.67&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/95.59.36.67"/>
		<updated>2026-04-29T19:31:59Z</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>2009-12-05T18:18:50Z</updated>
		
		<summary type="html">&lt;p&gt;95.59.36.67: /* 3.10.6. Ph_sound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Шаблон:Настройка логики}}&lt;br /&gt;
&lt;br /&gt;
==3.10.3. Схема работы прожектора:==&lt;br /&gt;
&lt;br /&gt;
В точках look пути, в которые смотрит прожекторщик, нужно прописать&lt;br /&gt;
sl=имя_прожектора&lt;br /&gt;
&lt;br /&gt;
Например&amp;lt;br&amp;gt;&lt;br /&gt;
wp00|sl=esc_sl1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда при повороте в эту точку персонаж повернет в нее и прожектор.&lt;br /&gt;
&lt;br /&gt;
==3.10.4. Кодовые замки:==&lt;br /&gt;
&lt;br /&gt;
При введении указанного кода выдает инфопоршн&lt;br /&gt;
&lt;br /&gt;
[logic]&amp;lt;br&amp;gt;&lt;br /&gt;
active = ph_code@lock&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&amp;lt;br&amp;gt;&lt;br /&gt;
code = 1243&amp;lt;br&amp;gt;&lt;br /&gt;
on_code = %+infoportion%&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
==3.10.5. Ph_gate:==&lt;br /&gt;
&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&amp;lt;br&amp;gt;&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию 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;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&amp;lt;br&amp;gt;&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&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;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&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;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &amp;lt;br&amp;gt;&lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
Примеры:&amp;lt;br&amp;gt;&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&amp;lt;br&amp;gt;&lt;br /&gt;
state = opened&amp;lt;br&amp;gt;&lt;br /&gt;
locking = soft&amp;lt;br&amp;gt;&lt;br /&gt;
left_limit = 130&amp;lt;br&amp;gt;&lt;br /&gt;
rigt_limit = 60&amp;lt;br&amp;gt;&lt;br /&gt;
breakable = false&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&amp;lt;br&amp;gt;&lt;br /&gt;
state = opened&amp;lt;br&amp;gt;&lt;br /&gt;
locking = stick&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&amp;lt;br&amp;gt;&lt;br /&gt;
state = closeded&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3.10.6. 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 = имя темы из файла sound_theme.script из таблицы ph_snd_themes&amp;lt;br&amp;gt;&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&amp;lt;br&amp;gt;&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&amp;lt;br&amp;gt;&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&amp;lt;br&amp;gt;&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&amp;lt;br&amp;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;
[logic]&amp;lt;br&amp;gt;&lt;br /&gt;
active = ph_sound&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&amp;lt;br&amp;gt;&lt;br /&gt;
snd = gar_seryi_shooting&amp;lt;br&amp;gt;&lt;br /&gt;
looped = true&amp;lt;br&amp;gt;&lt;br /&gt;
max_idle = 5000&amp;lt;br&amp;gt;&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&amp;lt;br&amp;gt;&lt;br /&gt;
snd = gar_seryi_shooting_2&amp;lt;br&amp;gt;&lt;br /&gt;
looped = false&amp;lt;br&amp;gt;&lt;br /&gt;
on_signal = sound_end| nil&amp;lt;br&amp;gt;&lt;br /&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;br&amp;gt;&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&amp;lt;br&amp;gt; Однако в оригинале такое встречается, например в бункере Выжигателя мозгов есть рестриктор bun_space_restrictor_sound1 на который как раз и повешан ph_sound.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3.10.7. Ph_force==&lt;br /&gt;
&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&amp;lt;br&amp;gt;&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&amp;lt;br&amp;gt;&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&amp;lt;br&amp;gt;&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&amp;lt;br&amp;gt;&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3.10.8. Ph_on_death==&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;
[logic]&amp;lt;br&amp;gt;&lt;br /&gt;
active = ph_on_death&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ph_on_death]&amp;lt;br&amp;gt;&lt;br /&gt;
on_info = %эффекты%&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Юзать исключительно с разрушаемыми физ. Объектами&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3.10.9. Ph_car==&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&amp;lt;br&amp;gt;&lt;br /&gt;
секция: [ph_car]&amp;lt;br&amp;gt;&lt;br /&gt;
поле:   usable = &amp;lt;condlist&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
usable - кондлист возвращающий true (по умолчанию) или false. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
[logic]&amp;lt;br&amp;gt;&lt;br /&gt;
active = ph_car&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ph_car]&amp;lt;br&amp;gt;&lt;br /&gt;
usable = {+val_actor_has_car_key}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На основе этой схемы можно сделать машину, которая зведется только если у актера есть ключ именно от нее.&lt;br /&gt;
&lt;br /&gt;
==3.10.10. Ph_heavy==&lt;br /&gt;
Прописывается в физ объектах, которые запрещены для швыряния бюрерам и полтергейстам. Например, если они должны лежать на конкретном месте (типа документов сюжетных) или слишком громоздки по габаритам, чтобы их можно было красиво кидать.&lt;br /&gt;
В кастом дате пишем:&lt;br /&gt;
&lt;br /&gt;
[ph_heavy]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10.11. 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 = provod   - имя кости к которой будет применена сила&amp;lt;br&amp;gt;&lt;br /&gt;
force = 5         - собственно сила (в ньютонах)&amp;lt;br&amp;gt;&lt;br /&gt;
period = 1000    - время прикладывания силы.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сила прикладывается к кости объекта с линейным наростанием. То есть в течении заданого периода времени сила вырастет с 0 до заявленого значения. После этого настает пауза (сила не применяется) на время period/2. После окончания паузы сила применяется так же, как и в начале, но в обратном направлении.&lt;br /&gt;
&lt;br /&gt;
==3.11. Смарттерейны и гулаги.==&lt;br /&gt;
==3.11.1. Смарттеррейн.==&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;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&amp;lt;br&amp;gt;&lt;br /&gt;
2)	В его custom data прописать настройки.&amp;lt;br&amp;gt;&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры 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 = макс. вместимость в людях&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;
&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;
Пути:&amp;lt;br&amp;gt;&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3.11.1.1. Стандартные типы смарттеррейнов.==&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&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;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===campers===&lt;br /&gt;
Кемперы. custom data:&amp;lt;br&amp;gt;&lt;br /&gt;
[gulag1]&amp;lt;br&amp;gt;&lt;br /&gt;
type = campers&amp;lt;br&amp;gt;&lt;br /&gt;
capacity = от 1 до 3&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пути:&amp;lt;br&amp;gt;&lt;br /&gt;
camper_walk1, camper_look1&amp;lt;br&amp;gt;&lt;br /&gt;
camper_walk2, camper_look2&amp;lt;br&amp;gt;&lt;br /&gt;
camper_walk3, camper_look3&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===walkers===&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&amp;lt;br&amp;gt;&lt;br /&gt;
custom data:&amp;lt;br&amp;gt;&lt;br /&gt;
[gulag1]&amp;lt;br&amp;gt;&lt;br /&gt;
type = walkers&amp;lt;br&amp;gt;&lt;br /&gt;
capacity = от 1 до 3&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пути:&amp;lt;br&amp;gt;&lt;br /&gt;
walker_walk1, walker_look1&amp;lt;br&amp;gt;&lt;br /&gt;
walker_walk2, walker_look2&amp;lt;br&amp;gt;&lt;br /&gt;
walker_walk3, walker_look3&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&amp;lt;br&amp;gt;&lt;br /&gt;
custom data:&amp;lt;br&amp;gt;&lt;br /&gt;
[gulag1]&amp;lt;br&amp;gt;&lt;br /&gt;
type = search&amp;lt;br&amp;gt;&lt;br /&gt;
capacity = 1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пути:&amp;lt;br&amp;gt;&lt;br /&gt;
search_walk, search_look&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&amp;lt;br&amp;gt;&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&amp;lt;br&amp;gt;&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&amp;lt;br&amp;gt;&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===rest===&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&amp;lt;br&amp;gt;&lt;br /&gt;
[gulag1]&amp;lt;br&amp;gt;&lt;br /&gt;
type = rest&amp;lt;br&amp;gt;&lt;br /&gt;
capacity = 1&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пути:&amp;lt;br&amp;gt;&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&amp;lt;br&amp;gt;&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&amp;lt;br&amp;gt;&lt;br /&gt;
rest_walk, rest_look&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;code&amp;gt;&lt;br /&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&lt;br /&gt;
&amp;lt;/code&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;code&amp;gt;&lt;br /&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&lt;br /&gt;
&amp;lt;/code&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;code&amp;gt;&lt;br /&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, state = {0},&lt;br /&gt;
			squad = squad, groups = groups[1],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, 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, state = {1},&lt;br /&gt;
squad = squad, groups = groups[1],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, 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&lt;br /&gt;
&amp;lt;/code&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;code&amp;gt;&lt;br /&gt;
predicate = function(obj) &lt;br /&gt;
        	return obj:profile_name() == &amp;quot;soldier_commander”			           &lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/code&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;code&amp;gt;&lt;br /&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;
&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&lt;br /&gt;
&amp;lt;/code&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.12. Логика вертолёта==&lt;br /&gt;
Общие сведения:&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;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;
==3.12.1. Схема heli_move:==&lt;br /&gt;
Общие сведения:&lt;br /&gt;
Позволяет летать вертолёту по патрульному пути, регулировать скорость, зависать, стрелять по различным целям.&lt;br /&gt;
&lt;br /&gt;
Для схемы должен быть задан path_move – путь, по которому будет летать вертолёт. Он может содержать одну вершину, если нужно, чтоб вертолёт висел на месте.&lt;br /&gt;
&lt;br /&gt;
Можно (но не обязательно) задать path_look – путь, в вершины которого вертолет может смотреть.&lt;br /&gt;
&lt;br /&gt;
Вершины этих путей могут быть поставлены где угодно в пределах ограничивающего бокса уровня. Они не зависят от ai-nodes.&lt;br /&gt;
&lt;br /&gt;
По пути вертолёт летает без учёта связей между вершинами. Он летает от вершины к вершине в порядке возрастания их номера (т.е. в порядке, в котором их поставили на уровень). &lt;br /&gt;
&lt;br /&gt;
Вертолёт старается летать точно по вершинам пути. При желании можно сделать ювелирный пролёт под мостом.&lt;br /&gt;
&lt;br /&gt;
Вертолёт старается летать как можно быстрее. Пояснение: если ему задать, что в следующей вершине пути он должен иметь скорость 10 м/с, а его максимальная скорость установлена в 30 м/с, то он не станет сразу лететь 10 м/с. Он сначала будет разгоняться вплоть до 30 м/с и только на подлёте к целевой вершине начнёт тормозить с расчётом прибыть в неё имея 10 м/с.&lt;br /&gt;
 &lt;br /&gt;
Если в вершине пути path_move задан набор флажков, то вертолёт будет смотреть в любую из вершин path_look, в которых задан такой же набор флажков. Поворачиваться к этой точке вертолёт начнёт с предыдущей вершины пути. На данном этапе вертолет не может, зависнув в одном месте, смотреть поочередно в несколько точек path_look&lt;br /&gt;
&lt;br /&gt;
Настройки:&lt;br /&gt;
&lt;br /&gt;
*engine_sound = true/false (по умолчанию true)&lt;br /&gt;
Вкл/выкл звук двигателя вертолёта.&lt;br /&gt;
&lt;br /&gt;
*invulnerable = true/false (по умолчанию false)&lt;br /&gt;
Неуязвимость. Если true, вертолёт игнорирует все хиты.&lt;br /&gt;
&lt;br /&gt;
*immortal = true/false (по умолчанию false)&lt;br /&gt;
Бессмертие. Если true, вертолёт получает повреждения, но не умирает.&lt;br /&gt;
&lt;br /&gt;
*mute = true/false (по умолчанию false)&lt;br /&gt;
Отключает универсальные реплики пилотов вертолета.&lt;br /&gt;
&lt;br /&gt;
*rocket_delay = msec (время в миллисекундах реального времени)&lt;br /&gt;
	Задержака между пусками ракет. По дефолту берется из ltx (сейчас 1250 мсек)&lt;br /&gt;
&lt;br /&gt;
*default_velocity = m/sec (скорость с которой летает вертолет, если не заданы другие параметры)&lt;br /&gt;
&lt;br /&gt;
Параметры, задаваемые в именах вершин пути path_move:&lt;br /&gt;
&lt;br /&gt;
«e» – (сокр. от enemy) задание врага (цели). Стрелять по этой цели вертолёт начнёт уже в предыдущей вершине. Если значение не задано, то будет стрелять в точку из path_look, которая соответствует данной вершине. Если задано «e=actor» (можно сокращённо «e=a»), то огонь будет вестись по актёру. Если задано «e=число», стрелять будет по объекту со story id равным числу.&lt;br /&gt;
&lt;br /&gt;
«w» – (сокр. от weapon) каким оружием стрелять. Возможные значения: w=1 – стрелять только пулемётом; w=2 – стрелять только ракетами. По умолчанию стреляет из всего.&lt;br /&gt;
&lt;br /&gt;
«v» - (сокр. от velocity) задание максимальной скорости (в м/с) на участке пути от данной вершины до следующей. Если этот параметр не задан, то умолчание берётся из файла helicopter.ltx.&lt;br /&gt;
&lt;br /&gt;
«dv» - (сокр. от destination velocity) задание скорости (в м/с), которую вертолёт должен иметь в момент прибытия в данную вершину.&lt;br /&gt;
&lt;br /&gt;
«die» - убить вертолёт.&lt;br /&gt;
&lt;br /&gt;
«flame» - начать дымить (как будто подбили).&lt;br /&gt;
&lt;br /&gt;
Параметры, задаваемые в именах вершин пути path_look:&lt;br /&gt;
&lt;br /&gt;
«e» - работает так же как и в path_move. Разница в том, что стрелять по указанной цели вертолёт начнёт лишь тогда, когда прибудет в вершину пути path_move, которая соответствует данной вершине path_look.&lt;br /&gt;
&lt;br /&gt;
«w» – см. такой же параметр для пути path_move.&lt;br /&gt;
&lt;br /&gt;
«t» - (сокр. от time) длительность времени (в мс реального времени), на протяжении которого вертолёт будет смотреть в данную точку. Если этот параметр не задан, то вертолёт пронесётся без остановки, но постарается на ходу развернуться к этой вершине.&lt;br /&gt;
&lt;br /&gt;
==3.12.2. Универсальная боевая схема:==&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
В универсальной боевой схеме вертолёт не привязан к путям.&lt;br /&gt;
&lt;br /&gt;
Вертолёт не видит никого. Узнать о враге вертолёт может только при получении хита или из параметра в custom data.&lt;br /&gt;
&lt;br /&gt;
Вертолёт стреляет по врагу, если видит его. Если не видит – ищет, облетая вокруг точки, где последний раз видел. Если долго не видит врага – забывает его. Если врага задали принудительно из текущей секции схемы поведения, то он не забудет его, пока находится в этой секции.&lt;br /&gt;
&lt;br /&gt;
Настройки:&lt;br /&gt;
&lt;br /&gt;
Отдельной секции для этой схемы поведения нет. Поэтому настройки производятся в секции текущей схемы поведения:&lt;br /&gt;
&lt;br /&gt;
combat_ignore = true/false&lt;br /&gt;
true означает игнорирование получения хита. Т.е. вертолёт не будет пытаться «отомстить» тому, от кого он получил хит.&lt;br /&gt;
&lt;br /&gt;
combat_enemy = nil/actor/StoryID&lt;br /&gt;
С помощью этого параметра можно задать вертолёту конкретного врага. nil – нету врага; actor – игрок; SID – числовое story id врага.&lt;br /&gt;
&lt;br /&gt;
combat_use_rocket = true/false&lt;br /&gt;
Можно ли вертолёту пользоваться рокетами.&lt;br /&gt;
&lt;br /&gt;
combat_use_mgun = true/false&lt;br /&gt;
Можно ли вертолёту пользоваться пулемётом.&lt;br /&gt;
&lt;br /&gt;
combat_velocity = &amp;lt;число&amp;gt;&lt;br /&gt;
Скорсть, с которой вертолет будет делать боевые заходы&lt;br /&gt;
&lt;br /&gt;
combat_safe_altitude = &amp;lt;число&amp;gt;&lt;br /&gt;
Высота, относительно самой высокой точки геометрии на уровне ниже которой вертолет не будет опускаться в боевой схеме (может быть отрицательным)&lt;br /&gt;
&lt;br /&gt;
К вертолёту подключена схема xr_hit. Работает как у сталкеров. В xr_effects есть группа функций для работы с вертолётом из его custom data:&lt;br /&gt;
&lt;br /&gt;
heli_set_enemy_actor - сделать актёра врагом вертолёту&lt;br /&gt;
heli_start_flame - поджечь вертолёт&lt;br /&gt;
heli_die - убить вертолёт&lt;br /&gt;
&lt;br /&gt;
combat_velocity =	- боевая скорость в этой секции указывается в м/с&lt;br /&gt;
combat_safe_altitude =	- высота боевая в метрах, может принимать отрицательные значения&lt;br /&gt;
combat_use_rocket =	- true/false использовать ли ракеты в этой секции&lt;br /&gt;
combat_use_mgun = 	- true/false использовать ли пулемет в этой секции&lt;br /&gt;
&lt;br /&gt;
==3.13. Meet_manager==&lt;br /&gt;
&lt;br /&gt;
Синтаксис:&lt;br /&gt;
&lt;br /&gt;
[logic]&amp;lt;br&amp;gt;&lt;br /&gt;
meet = meet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[walker]&amp;lt;br&amp;gt;&lt;br /&gt;
meet = meet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[meet]&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&amp;lt;br&amp;gt;&lt;br /&gt;
victim 			= 30| nil| 20| actor&amp;lt;br&amp;gt;&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&amp;lt;br&amp;gt;&lt;br /&gt;
use			= self&amp;lt;br&amp;gt;&lt;br /&gt;
use_wpn		= false&amp;lt;br&amp;gt;&lt;br /&gt;
zone			= name| state@sound&amp;lt;br&amp;gt;&lt;br /&gt;
meet_dialog		= dialog_id&amp;lt;br&amp;gt;&lt;br /&gt;
synpairs		= state@sound|state@sound&amp;lt;br&amp;gt;&lt;br /&gt;
abuse			= true/false&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&amp;lt;br&amp;gt;&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&amp;lt;br&amp;gt;&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &amp;lt;br&amp;gt;&lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&amp;lt;br&amp;gt;&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&amp;lt;br&amp;gt;&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&amp;lt;br&amp;gt;&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&amp;lt;br&amp;gt;&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
[walker]&amp;lt;br&amp;gt;&lt;br /&gt;
meet = default_meet&lt;br /&gt;
&lt;br /&gt;
Саму секцию [default_meet] задавать не надо. Все настройки и так  возьмутся из дефолта.&lt;br /&gt;
&lt;br /&gt;
Теперь о том, как с помощью этого конструктора собрать ту реакцию на актера, которая вам нужна (Во всех примерах зеленым цветом выделены состояния state_manager, синим – звуковые темы):&lt;br /&gt;
&lt;br /&gt;
===Ситуация 1===&lt;br /&gt;
	Игрок вдалеке подзывает нас рукой, при приближении просит убрать оружие, потом согласен говорить.&lt;br /&gt;
&lt;br /&gt;
[meet]&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&amp;lt;br&amp;gt;&lt;br /&gt;
victim 			= 50| actor&amp;lt;br&amp;gt;&lt;br /&gt;
victim_wpn 		= 50| actor&amp;lt;br&amp;gt;&lt;br /&gt;
use			= true&amp;lt;br&amp;gt;&lt;br /&gt;
use_wpn		= false&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ситуация 2===&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&amp;lt;br&amp;gt;&lt;br /&gt;
victim 			= 50| actor&amp;lt;br&amp;gt;&lt;br /&gt;
victim_wpn 		= 50| actor&amp;lt;br&amp;gt;&lt;br /&gt;
use			= {-info2} self, false&amp;lt;br&amp;gt;&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&amp;lt;br&amp;gt;&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&amp;lt;br&amp;gt;&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
===Ситуация 3===&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&amp;lt;br&amp;gt;&lt;br /&gt;
path_walk = path_walk&amp;lt;br&amp;gt;&lt;br /&gt;
path_look = path_look&amp;lt;br&amp;gt;&lt;br /&gt;
meet = meet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[meet]&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&amp;lt;br&amp;gt;&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &amp;lt;br&amp;gt;&lt;br /&gt;
victim 			= 30| actor&amp;lt;br&amp;gt;&lt;br /&gt;
victim_wpn 		= 30| actor&amp;lt;br&amp;gt;&lt;br /&gt;
use			= true&amp;lt;br&amp;gt;&lt;br /&gt;
use_wpn		= true&amp;lt;br&amp;gt;&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&amp;lt;br&amp;gt;&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь:&amp;lt;br&amp;gt;&lt;br /&gt;
True – вместо анимации, атаковать игрока.&amp;lt;br&amp;gt;&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&amp;lt;br&amp;gt;&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&amp;lt;br&amp;gt;&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&amp;lt;br&amp;gt;&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&amp;lt;br&amp;gt;&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&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;
		meet_state		= 30|hello@hail|20|wait@wait&amp;lt;br&amp;gt;&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&amp;lt;br&amp;gt;&lt;br /&gt;
		victim		= 30|actor&amp;lt;br&amp;gt;&lt;br /&gt;
		victim_wpn		= 30|actor&amp;lt;br&amp;gt;&lt;br /&gt;
		use			= true&amp;lt;br&amp;gt;&lt;br /&gt;
		use_wpn		= false&amp;lt;br&amp;gt;&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
==3.14.	Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&amp;lt;br&amp;gt;&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&amp;lt;br&amp;gt;&lt;br /&gt;
show_spot = {+info1} false&lt;br /&gt;
&lt;br /&gt;
Сталкер не будет показываться, если у игрока есть инфопоршн info1 и т.д.&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;
---------------------------------------------------------------------&lt;br /&gt;
xr_conditions:&lt;br /&gt;
&lt;br /&gt;
fighting_dist_ge(p) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
(в метрах)&lt;br /&gt;
&lt;br /&gt;
distance_to_obj_le(sid:dist) - проверка дистанции до обьекта заданного story_id. &amp;lt;br&amp;gt;&lt;br /&gt;
Можно использовать, например, в секции follower для определения того, что сталкер подошел на нужную дистанцию к лидеру и     переключать в другую секцию (лидер при этом стоит где-то в ремарке). Эта ситуация возникает, когда после боя надо подогнать одного сталкера к другому, а ихних позиций мы не знаем. Если используется в секции follower, то dist надо ставить большим    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;
hitted_by(sid1:sid2:...) - Проверка того, что удар был нанесен кем-то из npc, указанных в списке. npc задаются с помощью story_id. Функцию удобно использовать в секции hit.&lt;br /&gt;
Пример:&lt;br /&gt;
[hit]&amp;lt;br&amp;gt;&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;&lt;br /&gt;
is_alive_one(sid1:sid2:...)&amp;lt;br&amp;gt;&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&amp;lt;br&amp;gt;&lt;br /&gt;
is_dead_one(sid1:sid2:...)&amp;lt;br&amp;gt;&lt;br /&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;
--------------------------------------------------------------------&lt;br /&gt;
xr_effects:&lt;br /&gt;
&lt;br /&gt;
heli_set_enemy(story_id) – сделать 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=false) - нанести хит по npc. Параметры:&amp;lt;br&amp;gt;&lt;br /&gt;
direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&amp;lt;br&amp;gt;&lt;br /&gt;
bone - строка. Имя кости, по которой наносится удар.&amp;lt;br&amp;gt;&lt;br /&gt;
power - сила удара&amp;lt;br&amp;gt;&lt;br /&gt;
impulse - импульс&amp;lt;br&amp;gt;&lt;br /&gt;
reverse (true/false) - изменение направления удара на противоположное. по умолчанию false.&lt;br /&gt;
Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
[death]&amp;lt;br&amp;gt;&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;&lt;br /&gt;
set_enemies(sid1:sid2:...) - установить друзьями/врагами данного npc и указанных в списке по story_id.&lt;br /&gt;
&lt;br /&gt;
play_snd(snd_name:delay=0) - играть звук в голове актёра.&amp;lt;br&amp;gt;&lt;br /&gt;
snd_name - путь к звуку относительно папки sounds&amp;lt;br&amp;gt;&lt;br /&gt;
delay - задержка перед проигрыванием. По умолчанию 0 – проигрываем сразу.&lt;br /&gt;
&lt;br /&gt;
play_snd_now (sid:snd_name) – играть звук от указанного объекта&amp;lt;br&amp;gt;&lt;br /&gt;
*звук играется об объекта с указанным story id, без задержки с громкостью 1. Указывается не имя звуковой схемы, а имя файла&lt;br /&gt;
&lt;br /&gt;
hit_obj(sid, bone, power, impulse, hit_src=npc:position())&amp;lt;br&amp;gt;&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&amp;lt;br&amp;gt;&lt;br /&gt;
1. sid - story_id обьекта, по которому наносится хит.&amp;lt;br&amp;gt;&lt;br /&gt;
2. bone - строка. Имя кости, по которой наносится удар.&amp;lt;br&amp;gt;&lt;br /&gt;
3. power - сила удара&amp;lt;br&amp;gt;&lt;br /&gt;
4. impulse - импульс&amp;lt;br&amp;gt;&lt;br /&gt;
5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&amp;lt;br&amp;gt;&lt;br /&gt;
Проверка на наличие у игрока соответствующего предмета. Проверка проходит по секции в ltx&lt;br /&gt;
&lt;br /&gt;
Функции для работы с HUD'ом.&lt;br /&gt;
&lt;br /&gt;
disable_ui_elements(...), enable_ui_elements(...) - отключение/включение елементов HUD'а.&lt;br /&gt;
&lt;br /&gt;
Параметры:&amp;lt;br&amp;gt;&lt;br /&gt;
-- weapon - спрятать/показать руки с оружием&amp;lt;br&amp;gt;&lt;br /&gt;
-- input - отключить/включить клавиатуру&amp;lt;br&amp;gt;&lt;br /&gt;
-- hud - спрятать/показать индикаторы на экране&amp;lt;br&amp;gt;&lt;br /&gt;
-- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&gt;
Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
on_info = %=disable_ui_elements(weapon:input)%&lt;br /&gt;
&lt;br /&gt;
Есть также сокращенные варианты:&lt;br /&gt;
&lt;br /&gt;
disable_ui, enable_ui (вызываются без скобок и параметров).&amp;lt;br&amp;gt;&lt;br /&gt;
Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&gt;
Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
on_info = %=enable_ui%&lt;br /&gt;
&lt;br /&gt;
Функция запуска camera_effector'а.&lt;br /&gt;
&lt;br /&gt;
run_cam_effector(имя_файла)&lt;br /&gt;
   &lt;br /&gt;
имя_файла (указывается без расширения) - это имя анимационного файла (с расширением anm)&lt;br /&gt;
из папки S:\GameData\anims\camera_effects\.&lt;br /&gt;
&lt;br /&gt;
Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&amp;lt;br&amp;gt;&lt;br /&gt;
Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
run_postprocess(file_name:id:loop) - запуск постпроцесса.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&amp;lt;br&amp;gt;&lt;br /&gt;
-- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&amp;lt;br&amp;gt;&lt;br /&gt;
-- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
stop_postprocess(id) - принудительная остановка постпроцесса.&lt;br /&gt;
&lt;br /&gt;
-- id - номер постпроцесса заданный в run_postprocess.&lt;br /&gt;
 &lt;br /&gt;
Функция выброса содержимого инвентаря актера в определенную точку.&lt;br /&gt;
&lt;br /&gt;
drop_actor_inventory(имя_пути)&lt;br /&gt;
&lt;br /&gt;
выбрасываем все предметы из инвентаря актера в первую точку заданного&lt;br /&gt;
пути.&lt;br /&gt;
&lt;br /&gt;
Пример:&amp;lt;br&amp;gt;&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&amp;lt;br&amp;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;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>95.59.36.67</name></author>	</entry>

	</feed>