<?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=78.106.25.142&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=78.106.25.142&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/78.106.25.142"/>
		<updated>2026-04-29T12:08:13Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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</id>
		<title>Шаблон:Настройка логики</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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"/>
				<updated>2007-08-14T21:07:42Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&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]]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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</id>
		<title>Шаблон:Настройка логики</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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"/>
				<updated>2007-08-14T21:03:13Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
Часть 1: [[Настройка_логики]]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_2 Часть вторая]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_3 Часть третья]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_4 Часть четвертая]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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</id>
		<title>Шаблон:Настройка логики</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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"/>
				<updated>2007-08-14T21:01:33Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[[Настройка_логики Часть первая]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_2 Часть вторая]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_3 Часть третья]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_4 Часть четвертая]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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</id>
		<title>Шаблон:Настройка логики</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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"/>
				<updated>2007-08-14T20:57:24Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Настройка_логики Часть первая]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_2 Часть вторая]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_3 Часть третья]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_4 Часть четвертая]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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</id>
		<title>Шаблон:Настройка логики</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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"/>
				<updated>2007-08-14T20:56:22Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
| [http://www.stalkerin.gameru.net/wiki/index.php/Настройка_логики Часть первая]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_2 Часть вторая]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_3 Часть третья]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.stalkerin.gameru.net/wiki/index.php/Часть_4 Часть четвертая]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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>2007-08-14T20:54:56Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &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;
Например&lt;br /&gt;
wp00|sl=esc_sl1&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]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10.5. Ph_gate:==&lt;br /&gt;
&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
==3.10.6. Ph_sound==&lt;br /&gt;
&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
==3.10.7. Ph_force==&lt;br /&gt;
&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
==3.10.8. Ph_on_death==&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
==3.10.9. Ph_car==&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
==3.11.1.1. Стандартные типы смарттеррейнов.==&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
==3.11.3. Новые особенности смарттеррейнов==&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.14.	Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_3</id>
		<title>Настройка логики. Часть 3</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_3"/>
				<updated>2007-08-14T20:54:29Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Шаблон:Настройка логики}}&lt;br /&gt;
&lt;br /&gt;
==3.8.1. Синтаксис скрипта Logic==&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
&lt;br /&gt;
==3.8.2. Вот пример достаточно сложной логики:== &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
==3.9. Схемы логики space_restrictor==&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
&lt;br /&gt;
==3.9.1. Схема [sr_idle]==	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
&lt;br /&gt;
==3.9.2. Секция [sr_no_weapon]==&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.3. Секция [sr_sound]==&lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.4. Секция [sr_tip]==&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
==3.9.5. Sr_light==&lt;br /&gt;
Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
&lt;br /&gt;
==3.9.6. Sr_territory==&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.7. Sr_mapspot==&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.8. Sr_particle==&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
==3.9.9. Sr_sound_act==&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
==3.9.10 Sr_timer==&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
==3.9.11. Sr_psy_antenna==&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.12. Sr_teleport==&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.13. Sr_sleep и настройка снов.==&lt;br /&gt;
&lt;br /&gt;
Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.9.14. Sr_cutscene==&lt;br /&gt;
&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10. Набор дополнительных настроек логики у разных объектов.==&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
==3.10.1. Схема работы двери, секция [ph_door]==&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
==3.10.2. Схема работы кнопки, секция [ph_button]==&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
===[[Часть 4]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_2</id>
		<title>Настройка логики. Часть 2</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_2"/>
				<updated>2007-08-14T20:54:12Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Шаблон:Настройка логики}}&lt;br /&gt;
&lt;br /&gt;
==3.3.7. Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
==3.3.8. Секция no_smart==&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.9. Секция treshhold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
==3.3.10. Danger==&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
==3.3.11. Байки из склепа (Истории у костра)==&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
==3.3.12. dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
==3.4. Оверрайды:==&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
==3.5. Схемы для монстров==&lt;br /&gt;
&lt;br /&gt;
==3.5.1. Схема mob_walker.==&lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
==3.5.2. Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.3. Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.4. Схема mob_combat, mob_death==&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
&lt;br /&gt;
==3.5.6 Схема mob_jump (монстр-пружинка)==&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
&lt;br /&gt;
==3.5.7. Mob_camp==&lt;br /&gt;
&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
==3.5.8. Mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.5.9. Mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.6. Оверрайды для монстров:==&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
&lt;br /&gt;
==3.7. Секция spawner==&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
==3.7.1. Спавн монстров дневных и ночных.==&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
==3.8. Скрипт logic==&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
&lt;br /&gt;
===[[Часть 3]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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</id>
		<title>Шаблон:Настройка логики</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%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"/>
				<updated>2007-08-14T20:53:17Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
| [http://www.stalkerin.gameru.net/wiki/index.php/Настройка_логики Часть первая]&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stalkerin.gameru.net/wiki/index.php/Часть_2 Часть вторая]&lt;br /&gt;
 |-&lt;br /&gt;
 |[http://www.stalkerin.gameru.net/wiki/index.php/Часть_3 Часть третья]&lt;br /&gt;
 |-&lt;br /&gt;
 |[http://www.stalkerin.gameru.net/wiki/index.php/Часть_4 Часть четвертая]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T20:46:06Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
{{Шаблон:Настройка логики}}&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Настройки логики=&lt;br /&gt;
&lt;br /&gt;
==3.1. Система флагов (path_walk, path_look)==&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.1.1. Более подробное описание путей. ==&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.2. Схемы поведения сталкеров.==&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
==3.2.2. Схема remark==&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.4. Схема kamp==&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
&lt;br /&gt;
==3.2.5. Схема camper==&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
&lt;br /&gt;
==3.2.5.1. Схема sniper==&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.6. Схема follower== &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==3.2.7. Схема zoneguard==&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
==3.2.8. Схема wounded (раненый)==&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
==3.2.9. Схема rest==&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
==3.2.10. Схема heli_hunter==&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
==3.2.11. Patrol==&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
==3.3. Секции.==&lt;br /&gt;
==3.3.1. Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
==3.3.2 Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
==3.3.3. Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.4. Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.5. Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.6. Секция combat_ignore==&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
===[[Часть 2]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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>2007-08-14T20:44:40Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==3.10.3. Схема работы прожектора:==&lt;br /&gt;
&lt;br /&gt;
В точках look пути, в которые смотрит прожекторщик, нужно прописать&lt;br /&gt;
sl=имя_прожектора&lt;br /&gt;
&lt;br /&gt;
Например&lt;br /&gt;
wp00|sl=esc_sl1&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]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10.5. Ph_gate:==&lt;br /&gt;
&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
==3.10.6. Ph_sound==&lt;br /&gt;
&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
==3.10.7. Ph_force==&lt;br /&gt;
&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
==3.10.8. Ph_on_death==&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
==3.10.9. Ph_car==&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
==3.11.1.1. Стандартные типы смарттеррейнов.==&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
==3.11.3. Новые особенности смарттеррейнов==&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.14.	Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_3</id>
		<title>Настройка логики. Часть 3</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_3"/>
				<updated>2007-08-14T20:44:08Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==3.8.1. Синтаксис скрипта Logic==&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
&lt;br /&gt;
==3.8.2. Вот пример достаточно сложной логики:== &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
==3.9. Схемы логики space_restrictor==&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
&lt;br /&gt;
==3.9.1. Схема [sr_idle]==	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
&lt;br /&gt;
==3.9.2. Секция [sr_no_weapon]==&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.3. Секция [sr_sound]==&lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.4. Секция [sr_tip]==&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
==3.9.5. Sr_light==&lt;br /&gt;
Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
&lt;br /&gt;
==3.9.6. Sr_territory==&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.7. Sr_mapspot==&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.8. Sr_particle==&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
==3.9.9. Sr_sound_act==&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
==3.9.10 Sr_timer==&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
==3.9.11. Sr_psy_antenna==&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.12. Sr_teleport==&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.13. Sr_sleep и настройка снов.==&lt;br /&gt;
&lt;br /&gt;
Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.9.14. Sr_cutscene==&lt;br /&gt;
&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10. Набор дополнительных настроек логики у разных объектов.==&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
==3.10.1. Схема работы двери, секция [ph_door]==&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
==3.10.2. Схема работы кнопки, секция [ph_button]==&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
===[[Часть 4]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_2</id>
		<title>Настройка логики. Часть 2</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_2"/>
				<updated>2007-08-14T20:43:00Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==3.3.7. Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
==3.3.8. Секция no_smart==&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.9. Секция treshhold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
==3.3.10. Danger==&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
==3.3.11. Байки из склепа (Истории у костра)==&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
==3.3.12. dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
==3.4. Оверрайды:==&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
==3.5. Схемы для монстров==&lt;br /&gt;
&lt;br /&gt;
==3.5.1. Схема mob_walker.==&lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
==3.5.2. Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.3. Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.4. Схема mob_combat, mob_death==&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
&lt;br /&gt;
==3.5.6 Схема mob_jump (монстр-пружинка)==&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
&lt;br /&gt;
==3.5.7. Mob_camp==&lt;br /&gt;
&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
==3.5.8. Mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.5.9. Mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.6. Оверрайды для монстров:==&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
&lt;br /&gt;
==3.7. Секция spawner==&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
==3.7.1. Спавн монстров дневных и ночных.==&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
==3.8. Скрипт logic==&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
&lt;br /&gt;
===[[Часть 3]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T20:40:53Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
{{Шаблон:Настройка логики}}&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Настройки логики=&lt;br /&gt;
&lt;br /&gt;
==3.1. Система флагов (path_walk, path_look)==&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.1.1. Более подробное описание путей. ==&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.2. Схемы поведения сталкеров.==&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
==3.2.2. Схема remark==&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.4. Схема kamp==&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
&lt;br /&gt;
==3.2.5. Схема camper==&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
&lt;br /&gt;
==3.2.5.1. Схема sniper==&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.6. Схема follower== &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==3.2.7. Схема zoneguard==&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
==3.2.8. Схема wounded (раненый)==&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
==3.2.9. Схема rest==&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
==3.2.10. Схема heli_hunter==&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
==3.2.11. Patrol==&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
==3.3. Секции.==&lt;br /&gt;
==3.3.1. Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
==3.3.2 Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
==3.3.3. Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.4. Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.5. Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.6. Секция combat_ignore==&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
===[[Часть 2]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T20:33:20Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
=Настройки логики=&lt;br /&gt;
&lt;br /&gt;
==3.1. Система флагов (path_walk, path_look)==&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.1.1. Более подробное описание путей. ==&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.2. Схемы поведения сталкеров.==&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
==3.2.2. Схема remark==&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.4. Схема kamp==&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
&lt;br /&gt;
==3.2.5. Схема camper==&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
&lt;br /&gt;
==3.2.5.1. Схема sniper==&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.6. Схема follower== &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==3.2.7. Схема zoneguard==&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
==3.2.8. Схема wounded (раненый)==&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
==3.2.9. Схема rest==&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
==3.2.10. Схема heli_hunter==&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
==3.2.11. Patrol==&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
==3.3. Секции.==&lt;br /&gt;
==3.3.1. Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
==3.3.2 Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
==3.3.3. Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.4. Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.5. Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.6. Секция combat_ignore==&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
===[[Часть 2]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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>2007-08-14T20:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==3.10.3. Схема работы прожектора:==&lt;br /&gt;
&lt;br /&gt;
В точках look пути, в которые смотрит прожекторщик, нужно прописать&lt;br /&gt;
sl=имя_прожектора&lt;br /&gt;
&lt;br /&gt;
Например&lt;br /&gt;
wp00|sl=esc_sl1&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]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10.5. Ph_gate:==&lt;br /&gt;
&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
==3.10.6. Ph_sound==&lt;br /&gt;
&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
==3.10.7. Ph_force==&lt;br /&gt;
&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
==3.10.8. Ph_on_death==&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
==3.10.9. Ph_car==&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
==3.11.1.1. Стандартные типы смарттеррейнов.==&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
==3.11.3. Новые особенности смарттеррейнов==&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.14.	Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_3</id>
		<title>Настройка логики. Часть 3</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_3"/>
				<updated>2007-08-14T20:31:25Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==3.8.1. Синтаксис скрипта Logic==&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
&lt;br /&gt;
==3.8.2. Вот пример достаточно сложной логики:== &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
==3.9. Схемы логики space_restrictor==&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
&lt;br /&gt;
==3.9.1. Схема [sr_idle]==	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
&lt;br /&gt;
==3.9.2. Секция [sr_no_weapon]==&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.3. Секция [sr_sound]==&lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.4. Секция [sr_tip]==&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
==3.9.5. Sr_light==&lt;br /&gt;
Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
&lt;br /&gt;
==3.9.6. Sr_territory==&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.7. Sr_mapspot==&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.8. Sr_particle==&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
==3.9.9. Sr_sound_act==&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
==3.9.10 Sr_timer==&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
==3.9.11. Sr_psy_antenna==&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.12. Sr_teleport==&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.13. Sr_sleep и настройка снов.==&lt;br /&gt;
&lt;br /&gt;
Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.9.14. Sr_cutscene==&lt;br /&gt;
&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10. Набор дополнительных настроек логики у разных объектов.==&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
==3.10.1. Схема работы двери, секция [ph_door]==&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
==3.10.2. Схема работы кнопки, секция [ph_button]==&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
===[[Часть 4]]===&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_2</id>
		<title>Настройка логики. Часть 2</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_2"/>
				<updated>2007-08-14T20:28:43Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==3.3.7. Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
==3.3.8. Секция no_smart==&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.9. Секция treshhold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
==3.3.10. Danger==&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
==3.3.11. Байки из склепа (Истории у костра)==&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
==3.3.12. dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
==3.4. Оверрайды:==&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
==3.5. Схемы для монстров==&lt;br /&gt;
&lt;br /&gt;
==3.5.1. Схема mob_walker.==&lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
==3.5.2. Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.3. Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.4. Схема mob_combat, mob_death==&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
&lt;br /&gt;
==3.5.6 Схема mob_jump (монстр-пружинка)==&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
&lt;br /&gt;
==3.5.7. Mob_camp==&lt;br /&gt;
&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
==3.5.8. Mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.5.9. Mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.6. Оверрайды для монстров:==&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
&lt;br /&gt;
==3.7. Секция spawner==&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
==3.7.1. Спавн монстров дневных и ночных.==&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
==3.8. Скрипт logic==&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
&lt;br /&gt;
===[[Часть 3]]===&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T20:24:53Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
=Настройки логики=&lt;br /&gt;
&lt;br /&gt;
==3.1. Система флагов (path_walk, path_look)==&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.1.1. Более подробное описание путей. ==&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.2. Схемы поведения сталкеров.==&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
==3.2.2. Схема remark==&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.4. Схема kamp==&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
&lt;br /&gt;
==3.2.5. Схема camper==&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
&lt;br /&gt;
==3.2.5.1. Схема sniper==&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.6. Схема follower== &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==3.2.7. Схема zoneguard==&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
==3.2.8. Схема wounded (раненый)==&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
==3.2.9. Схема rest==&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
==3.2.10. Схема heli_hunter==&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
==3.2.11. Patrol==&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
==3.3. Секции.==&lt;br /&gt;
==3.3.1. Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
==3.3.2 Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
==3.3.3. Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.4. Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.5. Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.6. Секция combat_ignore==&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
==3.3.7. Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
==3.3.8. Секция no_smart==&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.9. Секция treshhold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
==3.3.10. Danger==&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
==3.3.11. Байки из склепа (Истории у костра)==&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
==3.3.12. dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
==3.4. Оверрайды:==&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
==3.5. Схемы для монстров==&lt;br /&gt;
&lt;br /&gt;
==3.5.1. Схема mob_walker.==&lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
==3.5.2. Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.3. Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.4. Схема mob_combat, mob_death==&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
&lt;br /&gt;
==3.5.6 Схема mob_jump (монстр-пружинка)==&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
&lt;br /&gt;
==3.5.7. Mob_camp==&lt;br /&gt;
&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
==3.5.8. Mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.5.9. Mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.6. Оверрайды для монстров:==&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
&lt;br /&gt;
==3.7. Секция spawner==&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
==3.7.1. Спавн монстров дневных и ночных.==&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
==3.8. Скрипт logic==&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
&lt;br /&gt;
==3.8.1. Синтаксис скрипта Logic==&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
&lt;br /&gt;
==3.8.2. Вот пример достаточно сложной логики:== &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
==3.9. Схемы логики space_restrictor==&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
&lt;br /&gt;
==3.9.1. Схема [sr_idle]==	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
&lt;br /&gt;
==3.9.2. Секция [sr_no_weapon]==&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.3. Секция [sr_sound]==&lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.4. Секция [sr_tip]==&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
==3.9.5. Sr_light==&lt;br /&gt;
Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
&lt;br /&gt;
==3.9.6. Sr_territory==&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.7. Sr_mapspot==&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.8. Sr_particle==&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
==3.9.9. Sr_sound_act==&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
==3.9.10 Sr_timer==&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
==3.9.11. Sr_psy_antenna==&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.12. Sr_teleport==&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.13. Sr_sleep и настройка снов.==&lt;br /&gt;
&lt;br /&gt;
Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.9.14. Sr_cutscene==&lt;br /&gt;
&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10. Набор дополнительных настроек логики у разных объектов.==&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
==3.10.1. Схема работы двери, секция [ph_door]==&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
==3.10.2. Схема работы кнопки, секция [ph_button]==&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&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;
Например&lt;br /&gt;
wp00|sl=esc_sl1&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]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10.5. Ph_gate:==&lt;br /&gt;
&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
==3.10.6. Ph_sound==&lt;br /&gt;
&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
==3.10.7. Ph_force==&lt;br /&gt;
&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
==3.10.8. Ph_on_death==&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
==3.10.9. Ph_car==&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
==3.11.1.1. Стандартные типы смарттеррейнов.==&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
==3.11.3. Новые особенности смарттеррейнов==&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.14.	Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
===[[Часть 2]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T20:23:01Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
=Настройки логики=&lt;br /&gt;
&lt;br /&gt;
==3.1. Система флагов (path_walk, path_look)==&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.1.1. Более подробное описание путей. ==&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.2. Схемы поведения сталкеров.==&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
==3.2.2. Схема remark==&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.4. Схема kamp==&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
&lt;br /&gt;
==3.2.5. Схема camper==&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
&lt;br /&gt;
==3.2.5.1. Схема sniper==&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.6. Схема follower== &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==3.2.7. Схема zoneguard==&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
==3.2.8. Схема wounded (раненый)==&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
==3.2.9. Схема rest==&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
==3.2.10. Схема heli_hunter==&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
==3.2.11. Patrol==&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
==3.3. Секции.==&lt;br /&gt;
==3.3.1. Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
==3.3.2 Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
==3.3.3. Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.4. Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.5. Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.6. Секция combat_ignore==&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
==3.3.7. Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
==3.3.8. Секция no_smart==&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.9. Секция treshhold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
==3.3.10. Danger==&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
==3.3.11. Байки из склепа (Истории у костра)==&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
==3.3.12. dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
==3.4. Оверрайды:==&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
==3.5. Схемы для монстров==&lt;br /&gt;
&lt;br /&gt;
==3.5.1. Схема mob_walker.==&lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
==3.5.2. Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.3. Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.4. Схема mob_combat, mob_death==&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
&lt;br /&gt;
==3.5.6 Схема mob_jump (монстр-пружинка)==&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
&lt;br /&gt;
==3.5.7. Mob_camp==&lt;br /&gt;
&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
==3.5.8. Mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.5.9. Mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.6. Оверрайды для монстров:==&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
&lt;br /&gt;
==3.7. Секция spawner==&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
==3.7.1. Спавн монстров дневных и ночных.==&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
==3.8. Скрипт logic==&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
&lt;br /&gt;
==3.8.1. Синтаксис скрипта Logic==&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
&lt;br /&gt;
==3.8.2. Вот пример достаточно сложной логики:== &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
==3.9. Схемы логики space_restrictor==&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
&lt;br /&gt;
==3.9.1. Схема [sr_idle]==	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
&lt;br /&gt;
==3.9.2. Секция [sr_no_weapon]==&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.3. Секция [sr_sound]==&lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.4. Секция [sr_tip]==&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
==3.9.5. Sr_light==&lt;br /&gt;
Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
&lt;br /&gt;
==3.9.6. Sr_territory==&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.7. Sr_mapspot==&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.8. Sr_particle==&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
==3.9.9. Sr_sound_act==&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
==3.9.10 Sr_timer==&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
==3.9.11. Sr_psy_antenna==&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.12. Sr_teleport==&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.13. Sr_sleep и настройка снов.==&lt;br /&gt;
&lt;br /&gt;
Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.9.14. Sr_cutscene==&lt;br /&gt;
&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10. Набор дополнительных настроек логики у разных объектов.==&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
==3.10.1. Схема работы двери, секция [ph_door]==&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
==3.10.2. Схема работы кнопки, секция [ph_button]==&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&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;
Например&lt;br /&gt;
wp00|sl=esc_sl1&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]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10.5. Ph_gate:==&lt;br /&gt;
&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
==3.10.6. Ph_sound==&lt;br /&gt;
&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
==3.10.7. Ph_force==&lt;br /&gt;
&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
==3.10.8. Ph_on_death==&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
==3.10.9. Ph_car==&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
==3.11.1.1. Стандартные типы смарттеррейнов.==&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
==3.11.3. Новые особенности смарттеррейнов==&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.14.	Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
===[[Настройка логики #2]]===&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T20:19:18Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
3. Настройки логики&lt;br /&gt;
3.1. Система флагов path_walk, path_look&lt;br /&gt;
	3.1.1. Более подробное описание путей.&lt;br /&gt;
3.2. Схемы поведения сталкеров&lt;br /&gt;
3.2.1. Walker&lt;br /&gt;
3.2.2. Remark&lt;br /&gt;
3.2.3. Sleeper&lt;br /&gt;
3.2.4. Kamp&lt;br /&gt;
3.2.5. Camper&lt;br /&gt;
3.2.5.1. Sniper&lt;br /&gt;
3.2.6. Follower (Отключен)&lt;br /&gt;
3.2.7. Zoneguard&lt;br /&gt;
3.2.8. Wounded&lt;br /&gt;
3.2.9. Rest&lt;br /&gt;
3.2.10. Схема heli_hunter&lt;br /&gt;
3.2.11. Patrol&lt;br /&gt;
3.3. Секции&lt;br /&gt;
3.3.1. Combat&lt;br /&gt;
3.3.2. Death&lt;br /&gt;
3.3.3. Hit&lt;br /&gt;
3.3.4. Actors_dialog&lt;br /&gt;
3.3.5. Use&lt;br /&gt;
3.3.6. Combat_ignore&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
3.3.9. Treshhold&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
3.3.11. Истории у костров &lt;br /&gt;
3.4. Оверрайды&lt;br /&gt;
3.5. Схемы поведения для монстров&lt;br /&gt;
3.5.1. Mob_walker&lt;br /&gt;
3.5.2. Mob_eluder&lt;br /&gt;
3.5.3. Mob_remark&lt;br /&gt;
3.5.4. Mob_combat&lt;br /&gt;
3.5.5. Mob_death&lt;br /&gt;
3.5.6. Mob_jump&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
3.6. Оверрайды для монстров&lt;br /&gt;
3.7. Секция спавнер&lt;br /&gt;
3.7.1. Спавн дневных и ночных монстров&lt;br /&gt;
3.8. Скрипт Logic&lt;br /&gt;
3.8.1. Синтаксис logic-а&lt;br /&gt;
3.8.2. Примеры достаточно сложной логики&lt;br /&gt;
3.9. Схемы space_restictor&lt;br /&gt;
3.9.1. Sr_idle&lt;br /&gt;
3.9.2. Sr_no_weapon&lt;br /&gt;
3.9.3. Sr_sound&lt;br /&gt;
3.9.4. Sr_tip&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
3.9.10. Sr_timer&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
3.10. Дополнительные настройки логики у разных объектов&lt;br /&gt;
3.10.1. Ph_door&lt;br /&gt;
3.10.2. Ph_button&lt;br /&gt;
3.10.3. Работа прожектора&lt;br /&gt;
3.10.4. Ph_code&lt;br /&gt;
3.10.5. Ph_gate&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
3.10.10. Ph_heavy&lt;br /&gt;
3.10.11. Ph_oscillate&lt;br /&gt;
3.11. Смарттерейны и гулаги&lt;br /&gt;
3.11.1. Смарттеррейны&lt;br /&gt;
3.11.1.1 Стандартный набор смарттеррейнов&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
3.11.3. Новые особенности смарттерейнов.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
3.12. Логика вертолета&lt;br /&gt;
	3.12.1. Схема heli_move&lt;br /&gt;
	3.12.2. Универсальная боевая схема&lt;br /&gt;
3.13. Meet_manager&lt;br /&gt;
3.14. Отметки на минимапе&lt;br /&gt;
3.15. Передача параметров в функции.&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
&lt;br /&gt;
==3.1. Система флагов (path_walk, path_look)==&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.1.1. Более подробное описание путей. ==&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.2. Схемы поведения сталкеров.==&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
==3.2.2. Схема remark==&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.4. Схема kamp==&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
&lt;br /&gt;
==3.2.5. Схема camper==&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
&lt;br /&gt;
==3.2.5.1. Схема sniper==&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.6. Схема follower== &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==3.2.7. Схема zoneguard==&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
==3.2.8. Схема wounded (раненый)==&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
==3.2.9. Схема rest==&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
==3.2.10. Схема heli_hunter==&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
==3.2.11. Patrol==&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
==3.3. Секции.==&lt;br /&gt;
==3.3.1. Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
==3.3.2 Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
==3.3.3. Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.4. Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.5. Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.6. Секция combat_ignore==&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
==3.3.7. Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
==3.3.8. Секция no_smart==&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.3.9. Секция treshhold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
==3.3.10. Danger==&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
==3.3.11. Байки из склепа (Истории у костра)==&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
==3.3.12. dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
==3.4. Оверрайды:==&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
==3.5. Схемы для монстров==&lt;br /&gt;
&lt;br /&gt;
==3.5.1. Схема mob_walker.==&lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
==3.5.2. Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.3. Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.5.4. Схема mob_combat, mob_death==&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
&lt;br /&gt;
==3.5.6 Схема mob_jump (монстр-пружинка)==&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
&lt;br /&gt;
==3.5.7. Mob_camp==&lt;br /&gt;
&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
==3.5.8. Mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.5.9. Mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.6. Оверрайды для монстров:==&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
&lt;br /&gt;
==3.7. Секция spawner==&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
==3.7.1. Спавн монстров дневных и ночных.==&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
==3.8. Скрипт logic==&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
&lt;br /&gt;
==3.8.1. Синтаксис скрипта Logic==&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
&lt;br /&gt;
==3.8.2. Вот пример достаточно сложной логики:== &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
==3.9. Схемы логики space_restrictor==&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
&lt;br /&gt;
==3.9.1. Схема [sr_idle]==	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
&lt;br /&gt;
==3.9.2. Секция [sr_no_weapon]==&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.3. Секция [sr_sound]==&lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.4. Секция [sr_tip]==&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
==3.9.5. Sr_light==&lt;br /&gt;
Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
&lt;br /&gt;
==3.9.6. Sr_territory==&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.7. Sr_mapspot==&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.8. Sr_particle==&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
==3.9.9. Sr_sound_act==&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
==3.9.10 Sr_timer==&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
==3.9.11. Sr_psy_antenna==&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.12. Sr_teleport==&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.9.13. Sr_sleep и настройка снов.==&lt;br /&gt;
&lt;br /&gt;
Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
==3.9.14. Sr_cutscene==&lt;br /&gt;
&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10. Набор дополнительных настроек логики у разных объектов.==&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
==3.10.1. Схема работы двери, секция [ph_door]==&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
==3.10.2. Схема работы кнопки, секция [ph_button]==&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&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;
Например&lt;br /&gt;
wp00|sl=esc_sl1&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]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.10.5. Ph_gate:==&lt;br /&gt;
&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
==3.10.6. Ph_sound==&lt;br /&gt;
&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
==3.10.7. Ph_force==&lt;br /&gt;
&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
==3.10.8. Ph_on_death==&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
==3.10.9. Ph_car==&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
==3.11.1.1. Стандартные типы смарттеррейнов.==&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
==3.11.3. Новые особенности смарттеррейнов==&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.14.	Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T20:07:21Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
3. Настройки логики&lt;br /&gt;
3.1. Система флагов path_walk, path_look&lt;br /&gt;
	3.1.1. Более подробное описание путей.&lt;br /&gt;
3.2. Схемы поведения сталкеров&lt;br /&gt;
3.2.1. Walker&lt;br /&gt;
3.2.2. Remark&lt;br /&gt;
3.2.3. Sleeper&lt;br /&gt;
3.2.4. Kamp&lt;br /&gt;
3.2.5. Camper&lt;br /&gt;
3.2.5.1. Sniper&lt;br /&gt;
3.2.6. Follower (Отключен)&lt;br /&gt;
3.2.7. Zoneguard&lt;br /&gt;
3.2.8. Wounded&lt;br /&gt;
3.2.9. Rest&lt;br /&gt;
3.2.10. Схема heli_hunter&lt;br /&gt;
3.2.11. Patrol&lt;br /&gt;
3.3. Секции&lt;br /&gt;
3.3.1. Combat&lt;br /&gt;
3.3.2. Death&lt;br /&gt;
3.3.3. Hit&lt;br /&gt;
3.3.4. Actors_dialog&lt;br /&gt;
3.3.5. Use&lt;br /&gt;
3.3.6. Combat_ignore&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
3.3.9. Treshhold&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
3.3.11. Истории у костров &lt;br /&gt;
3.4. Оверрайды&lt;br /&gt;
3.5. Схемы поведения для монстров&lt;br /&gt;
3.5.1. Mob_walker&lt;br /&gt;
3.5.2. Mob_eluder&lt;br /&gt;
3.5.3. Mob_remark&lt;br /&gt;
3.5.4. Mob_combat&lt;br /&gt;
3.5.5. Mob_death&lt;br /&gt;
3.5.6. Mob_jump&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
3.6. Оверрайды для монстров&lt;br /&gt;
3.7. Секция спавнер&lt;br /&gt;
3.7.1. Спавн дневных и ночных монстров&lt;br /&gt;
3.8. Скрипт Logic&lt;br /&gt;
3.8.1. Синтаксис logic-а&lt;br /&gt;
3.8.2. Примеры достаточно сложной логики&lt;br /&gt;
3.9. Схемы space_restictor&lt;br /&gt;
3.9.1. Sr_idle&lt;br /&gt;
3.9.2. Sr_no_weapon&lt;br /&gt;
3.9.3. Sr_sound&lt;br /&gt;
3.9.4. Sr_tip&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
3.9.10. Sr_timer&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
3.10. Дополнительные настройки логики у разных объектов&lt;br /&gt;
3.10.1. Ph_door&lt;br /&gt;
3.10.2. Ph_button&lt;br /&gt;
3.10.3. Работа прожектора&lt;br /&gt;
3.10.4. Ph_code&lt;br /&gt;
3.10.5. Ph_gate&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
3.10.10. Ph_heavy&lt;br /&gt;
3.10.11. Ph_oscillate&lt;br /&gt;
3.11. Смарттерейны и гулаги&lt;br /&gt;
3.11.1. Смарттеррейны&lt;br /&gt;
3.11.1.1 Стандартный набор смарттеррейнов&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
3.11.3. Новые особенности смарттерейнов.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
3.12. Логика вертолета&lt;br /&gt;
	3.12.1. Схема heli_move&lt;br /&gt;
	3.12.2. Универсальная боевая схема&lt;br /&gt;
3.13. Meet_manager&lt;br /&gt;
3.14. Отметки на минимапе&lt;br /&gt;
3.15. Передача параметров в функции.&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
&lt;br /&gt;
==3.1. Система флагов (path_walk, path_look)==&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.1.1. Более подробное описание путей. ==&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.2. Схемы поведения сталкеров.==&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
==3.2.2. Схема remark==&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.4. Схема kamp==&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
&lt;br /&gt;
==3.2.5. Схема camper==&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
&lt;br /&gt;
==3.2.5.1. Схема sniper==&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.6. Схема follower== &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==3.2.7. Схема zoneguard==&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
==3.2.8. Схема wounded (раненый)==&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
==3.2.9. Схема rest==&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
==3.2.10. Схема heli_hunter==&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
==3.2.11. Patrol==&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
==3.3. Секции.==&lt;br /&gt;
==3.3.1. Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
3.3.2 Секция death&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
3.3.3. Cекция hit&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.4. Секция actor_dialogs&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.5. Секция use&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.6. Секция combat_ignore&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.9. Секция treshhold&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
3.3.11. Байки из склепа (Истории у костра)&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
3.3.12. dont_spawn_loot &lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
3.4. Оверрайды: &lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
3.5. Схемы для монстров&lt;br /&gt;
&lt;br /&gt;
3.5.1. Схема mob_walker. &lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
3.5.2. Схема mob_eluder&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.5.3. Схема mob_remark&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.5.4. Схема mob_combat, mob_death&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
3.5.6 Схема mob_jump (монстр-пружинка)&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
	Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.6. Оверрайды для монстров:&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
3.7. Секция spawner&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
3.7.1. Спавн монстров дневных и ночных.&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
3.8. Скрипт logic&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
3.8.1. Синтаксис скрипта Logic&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
3.8.2. Вот пример достаточно сложной логики: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
3.9. Схемы логики space_restrictor&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
3.9.1. Схема [sr_idle]	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
3.9.2. Секция [sr_no_weapon]&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.3. Секция [sr_sound], &lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.4. Секция [sr_tip]&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
	Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
3.9.10 Sr_timer&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов.&lt;br /&gt;
	Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.10. Набор дополнительных настроек логики у разных объектов.&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
3.10.1. Схема работы двери, секция [ph_door]&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
3.10.2. Схема работы кнопки, секция [ph_button]&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&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;
Например&lt;br /&gt;
wp00|sl=esc_sl1&lt;br /&gt;
&lt;br /&gt;
Тогда при повороте в эту точку персонаж повернет в нее и прожектор.&lt;br /&gt;
&lt;br /&gt;
3.10.4. Кодовые замки:&lt;br /&gt;
При введении указанного кода выдает инфопоршн&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.10.5. Ph_gate:&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
3.11.1.1. Стандартные типы смарттеррейнов.&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
3.11.3. Новые особенности смарттеррейнов&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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;
&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&lt;br /&gt;
  meet = default_meet&lt;br /&gt;
&lt;br /&gt;
 	Саму секцию [default_meet] задавать не надо. Все настройки и так  возьмутся из дефолта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.14.	Отметки на минимапе&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T20:06:02Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; align=&amp;quot;right&amp;quot; width=&amp;quot;250&amp;quot; cellspacing=&amp;quot;1&amp;quot; style=&amp;quot;background:#5e5e5e;&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot; | Содержание&lt;br /&gt;
 |-&lt;br /&gt;
 | style=&amp;quot;background:#ffffff;&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
{{Шаблон:Содержание руководства по настройке}}&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Настройки логики&lt;br /&gt;
3.1. Система флагов path_walk, path_look&lt;br /&gt;
	3.1.1. Более подробное описание путей.&lt;br /&gt;
3.2. Схемы поведения сталкеров&lt;br /&gt;
3.2.1. Walker&lt;br /&gt;
3.2.2. Remark&lt;br /&gt;
3.2.3. Sleeper&lt;br /&gt;
3.2.4. Kamp&lt;br /&gt;
3.2.5. Camper&lt;br /&gt;
3.2.5.1. Sniper&lt;br /&gt;
3.2.6. Follower (Отключен)&lt;br /&gt;
3.2.7. Zoneguard&lt;br /&gt;
3.2.8. Wounded&lt;br /&gt;
3.2.9. Rest&lt;br /&gt;
3.2.10. Схема heli_hunter&lt;br /&gt;
3.2.11. Patrol&lt;br /&gt;
3.3. Секции&lt;br /&gt;
3.3.1. Combat&lt;br /&gt;
3.3.2. Death&lt;br /&gt;
3.3.3. Hit&lt;br /&gt;
3.3.4. Actors_dialog&lt;br /&gt;
3.3.5. Use&lt;br /&gt;
3.3.6. Combat_ignore&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
3.3.9. Treshhold&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
3.3.11. Истории у костров &lt;br /&gt;
3.4. Оверрайды&lt;br /&gt;
3.5. Схемы поведения для монстров&lt;br /&gt;
3.5.1. Mob_walker&lt;br /&gt;
3.5.2. Mob_eluder&lt;br /&gt;
3.5.3. Mob_remark&lt;br /&gt;
3.5.4. Mob_combat&lt;br /&gt;
3.5.5. Mob_death&lt;br /&gt;
3.5.6. Mob_jump&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
3.6. Оверрайды для монстров&lt;br /&gt;
3.7. Секция спавнер&lt;br /&gt;
3.7.1. Спавн дневных и ночных монстров&lt;br /&gt;
3.8. Скрипт Logic&lt;br /&gt;
3.8.1. Синтаксис logic-а&lt;br /&gt;
3.8.2. Примеры достаточно сложной логики&lt;br /&gt;
3.9. Схемы space_restictor&lt;br /&gt;
3.9.1. Sr_idle&lt;br /&gt;
3.9.2. Sr_no_weapon&lt;br /&gt;
3.9.3. Sr_sound&lt;br /&gt;
3.9.4. Sr_tip&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
3.9.10. Sr_timer&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
3.10. Дополнительные настройки логики у разных объектов&lt;br /&gt;
3.10.1. Ph_door&lt;br /&gt;
3.10.2. Ph_button&lt;br /&gt;
3.10.3. Работа прожектора&lt;br /&gt;
3.10.4. Ph_code&lt;br /&gt;
3.10.5. Ph_gate&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
3.10.10. Ph_heavy&lt;br /&gt;
3.10.11. Ph_oscillate&lt;br /&gt;
3.11. Смарттерейны и гулаги&lt;br /&gt;
3.11.1. Смарттеррейны&lt;br /&gt;
3.11.1.1 Стандартный набор смарттеррейнов&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
3.11.3. Новые особенности смарттерейнов.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
3.12. Логика вертолета&lt;br /&gt;
	3.12.1. Схема heli_move&lt;br /&gt;
	3.12.2. Универсальная боевая схема&lt;br /&gt;
3.13. Meet_manager&lt;br /&gt;
3.14. Отметки на минимапе&lt;br /&gt;
3.15. Передача параметров в функции.&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
&lt;br /&gt;
==3.1. Система флагов (path_walk, path_look)==&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.1.1. Более подробное описание путей. ==&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.2. Схемы поведения сталкеров.==&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
==3.2.2. Схема remark==&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.4. Схема kamp==&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
&lt;br /&gt;
==3.2.5. Схема camper==&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
&lt;br /&gt;
==3.2.5.1. Схема sniper==&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
==3.2.6. Схема follower== &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==3.2.7. Схема zoneguard==&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
==3.2.8. Схема wounded (раненый)==&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
==3.2.9. Схема rest==&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
==3.2.10. Схема heli_hunter==&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
==3.2.11. Patrol==&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
==3.3. Секции.==&lt;br /&gt;
==3.3.1. Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
3.3.2 Секция death&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
3.3.3. Cекция hit&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.4. Секция actor_dialogs&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.5. Секция use&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.6. Секция combat_ignore&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.9. Секция treshhold&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
3.3.11. Байки из склепа (Истории у костра)&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
3.3.12. dont_spawn_loot &lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
3.4. Оверрайды: &lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
3.5. Схемы для монстров&lt;br /&gt;
&lt;br /&gt;
3.5.1. Схема mob_walker. &lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
3.5.2. Схема mob_eluder&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.5.3. Схема mob_remark&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.5.4. Схема mob_combat, mob_death&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
3.5.6 Схема mob_jump (монстр-пружинка)&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
	Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.6. Оверрайды для монстров:&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
3.7. Секция spawner&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
3.7.1. Спавн монстров дневных и ночных.&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
3.8. Скрипт logic&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
3.8.1. Синтаксис скрипта Logic&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
3.8.2. Вот пример достаточно сложной логики: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
3.9. Схемы логики space_restrictor&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
3.9.1. Схема [sr_idle]	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
3.9.2. Секция [sr_no_weapon]&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.3. Секция [sr_sound], &lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.4. Секция [sr_tip]&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
	Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
3.9.10 Sr_timer&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов.&lt;br /&gt;
	Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.10. Набор дополнительных настроек логики у разных объектов.&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
3.10.1. Схема работы двери, секция [ph_door]&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
3.10.2. Схема работы кнопки, секция [ph_button]&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&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;
Например&lt;br /&gt;
wp00|sl=esc_sl1&lt;br /&gt;
&lt;br /&gt;
Тогда при повороте в эту точку персонаж повернет в нее и прожектор.&lt;br /&gt;
&lt;br /&gt;
3.10.4. Кодовые замки:&lt;br /&gt;
При введении указанного кода выдает инфопоршн&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.10.5. Ph_gate:&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
3.11.1.1. Стандартные типы смарттеррейнов.&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
3.11.3. Новые особенности смарттеррейнов&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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;
&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&lt;br /&gt;
  meet = default_meet&lt;br /&gt;
&lt;br /&gt;
 	Саму секцию [default_meet] задавать не надо. Все настройки и так  возьмутся из дефолта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.14.	Отметки на минимапе&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T19:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by GSC GameWorld'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Настройки логики&lt;br /&gt;
3.1. Система флагов path_walk, path_look&lt;br /&gt;
	3.1.1. Более подробное описание путей.&lt;br /&gt;
3.2. Схемы поведения сталкеров&lt;br /&gt;
3.2.1. Walker&lt;br /&gt;
3.2.2. Remark&lt;br /&gt;
3.2.3. Sleeper&lt;br /&gt;
3.2.4. Kamp&lt;br /&gt;
3.2.5. Camper&lt;br /&gt;
3.2.5.1. Sniper&lt;br /&gt;
3.2.6. Follower (Отключен)&lt;br /&gt;
3.2.7. Zoneguard&lt;br /&gt;
3.2.8. Wounded&lt;br /&gt;
3.2.9. Rest&lt;br /&gt;
3.2.10. Схема heli_hunter&lt;br /&gt;
3.2.11. Patrol&lt;br /&gt;
3.3. Секции&lt;br /&gt;
3.3.1. Combat&lt;br /&gt;
3.3.2. Death&lt;br /&gt;
3.3.3. Hit&lt;br /&gt;
3.3.4. Actors_dialog&lt;br /&gt;
3.3.5. Use&lt;br /&gt;
3.3.6. Combat_ignore&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
3.3.9. Treshhold&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
3.3.11. Истории у костров &lt;br /&gt;
3.4. Оверрайды&lt;br /&gt;
3.5. Схемы поведения для монстров&lt;br /&gt;
3.5.1. Mob_walker&lt;br /&gt;
3.5.2. Mob_eluder&lt;br /&gt;
3.5.3. Mob_remark&lt;br /&gt;
3.5.4. Mob_combat&lt;br /&gt;
3.5.5. Mob_death&lt;br /&gt;
3.5.6. Mob_jump&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
3.6. Оверрайды для монстров&lt;br /&gt;
3.7. Секция спавнер&lt;br /&gt;
3.7.1. Спавн дневных и ночных монстров&lt;br /&gt;
3.8. Скрипт Logic&lt;br /&gt;
3.8.1. Синтаксис logic-а&lt;br /&gt;
3.8.2. Примеры достаточно сложной логики&lt;br /&gt;
3.9. Схемы space_restictor&lt;br /&gt;
3.9.1. Sr_idle&lt;br /&gt;
3.9.2. Sr_no_weapon&lt;br /&gt;
3.9.3. Sr_sound&lt;br /&gt;
3.9.4. Sr_tip&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
3.9.10. Sr_timer&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
3.10. Дополнительные настройки логики у разных объектов&lt;br /&gt;
3.10.1. Ph_door&lt;br /&gt;
3.10.2. Ph_button&lt;br /&gt;
3.10.3. Работа прожектора&lt;br /&gt;
3.10.4. Ph_code&lt;br /&gt;
3.10.5. Ph_gate&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
3.10.10. Ph_heavy&lt;br /&gt;
3.10.11. Ph_oscillate&lt;br /&gt;
3.11. Смарттерейны и гулаги&lt;br /&gt;
3.11.1. Смарттеррейны&lt;br /&gt;
3.11.1.1 Стандартный набор смарттеррейнов&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
3.11.3. Новые особенности смарттерейнов.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
3.12. Логика вертолета&lt;br /&gt;
	3.12.1. Схема heli_move&lt;br /&gt;
	3.12.2. Универсальная боевая схема&lt;br /&gt;
3.13. Meet_manager&lt;br /&gt;
3.14. Отметки на минимапе&lt;br /&gt;
3.15. Передача параметров в функции.&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
&lt;br /&gt;
3.1. Система флагов (path_walk, path_look)&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.1.1. Более подробное описание путей.&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Схемы поведения сталкеров.&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
3.2.2. Схема remark&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
3.2.4. Схема kamp&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
3.2.5. Схема camper&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
		3.2.5.1. Схема sniper&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
3.2.6. Схема follower &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
3.2.7. Схема zoneguard&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
3.2.8. Схема wounded (раненый)&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
3.2.9. Схема rest&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
3.2.10. Схема heli_hunter&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
3.2.11. Patrol&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
3.3. Секции.&lt;br /&gt;
3.3.1. Секция combat&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
3.3.2 Секция death&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
3.3.3. Cекция hit&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.4. Секция actor_dialogs&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.5. Секция use&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.6. Секция combat_ignore&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.9. Секция treshhold&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
3.3.11. Байки из склепа (Истории у костра)&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
3.3.12. dont_spawn_loot &lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
3.4. Оверрайды: &lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
3.5. Схемы для монстров&lt;br /&gt;
&lt;br /&gt;
3.5.1. Схема mob_walker. &lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
3.5.2. Схема mob_eluder&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.5.3. Схема mob_remark&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.5.4. Схема mob_combat, mob_death&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
3.5.6 Схема mob_jump (монстр-пружинка)&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
	Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.6. Оверрайды для монстров:&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
3.7. Секция spawner&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
3.7.1. Спавн монстров дневных и ночных.&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
3.8. Скрипт logic&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
3.8.1. Синтаксис скрипта Logic&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
3.8.2. Вот пример достаточно сложной логики: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
3.9. Схемы логики space_restrictor&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
3.9.1. Схема [sr_idle]	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
3.9.2. Секция [sr_no_weapon]&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.3. Секция [sr_sound], &lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.4. Секция [sr_tip]&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
	Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
3.9.10 Sr_timer&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов.&lt;br /&gt;
	Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.10. Набор дополнительных настроек логики у разных объектов.&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
3.10.1. Схема работы двери, секция [ph_door]&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
3.10.2. Схема работы кнопки, секция [ph_button]&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&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;
Например&lt;br /&gt;
wp00|sl=esc_sl1&lt;br /&gt;
&lt;br /&gt;
Тогда при повороте в эту точку персонаж повернет в нее и прожектор.&lt;br /&gt;
&lt;br /&gt;
3.10.4. Кодовые замки:&lt;br /&gt;
При введении указанного кода выдает инфопоршн&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.10.5. Ph_gate:&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
3.11.1.1. Стандартные типы смарттеррейнов.&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
3.11.3. Новые особенности смарттеррейнов&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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;
&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&lt;br /&gt;
  meet = default_meet&lt;br /&gt;
&lt;br /&gt;
 	Саму секцию [default_meet] задавать не надо. Все настройки и так  возьмутся из дефолта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.14.	Отметки на минимапе&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<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_1</id>
		<title>Настройка логики. Часть 1</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_1"/>
				<updated>2007-08-14T19:54:02Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3. Настройки логики&lt;br /&gt;
3.1. Система флагов path_walk, path_look&lt;br /&gt;
	3.1.1. Более подробное описание путей.&lt;br /&gt;
3.2. Схемы поведения сталкеров&lt;br /&gt;
3.2.1. Walker&lt;br /&gt;
3.2.2. Remark&lt;br /&gt;
3.2.3. Sleeper&lt;br /&gt;
3.2.4. Kamp&lt;br /&gt;
3.2.5. Camper&lt;br /&gt;
3.2.5.1. Sniper&lt;br /&gt;
3.2.6. Follower (Отключен)&lt;br /&gt;
3.2.7. Zoneguard&lt;br /&gt;
3.2.8. Wounded&lt;br /&gt;
3.2.9. Rest&lt;br /&gt;
3.2.10. Схема heli_hunter&lt;br /&gt;
3.2.11. Patrol&lt;br /&gt;
3.3. Секции&lt;br /&gt;
3.3.1. Combat&lt;br /&gt;
3.3.2. Death&lt;br /&gt;
3.3.3. Hit&lt;br /&gt;
3.3.4. Actors_dialog&lt;br /&gt;
3.3.5. Use&lt;br /&gt;
3.3.6. Combat_ignore&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
3.3.9. Treshhold&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
3.3.11. Истории у костров &lt;br /&gt;
3.4. Оверрайды&lt;br /&gt;
3.5. Схемы поведения для монстров&lt;br /&gt;
3.5.1. Mob_walker&lt;br /&gt;
3.5.2. Mob_eluder&lt;br /&gt;
3.5.3. Mob_remark&lt;br /&gt;
3.5.4. Mob_combat&lt;br /&gt;
3.5.5. Mob_death&lt;br /&gt;
3.5.6. Mob_jump&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
3.6. Оверрайды для монстров&lt;br /&gt;
3.7. Секция спавнер&lt;br /&gt;
3.7.1. Спавн дневных и ночных монстров&lt;br /&gt;
3.8. Скрипт Logic&lt;br /&gt;
3.8.1. Синтаксис logic-а&lt;br /&gt;
3.8.2. Примеры достаточно сложной логики&lt;br /&gt;
3.9. Схемы space_restictor&lt;br /&gt;
3.9.1. Sr_idle&lt;br /&gt;
3.9.2. Sr_no_weapon&lt;br /&gt;
3.9.3. Sr_sound&lt;br /&gt;
3.9.4. Sr_tip&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
3.9.10. Sr_timer&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
3.10. Дополнительные настройки логики у разных объектов&lt;br /&gt;
3.10.1. Ph_door&lt;br /&gt;
3.10.2. Ph_button&lt;br /&gt;
3.10.3. Работа прожектора&lt;br /&gt;
3.10.4. Ph_code&lt;br /&gt;
3.10.5. Ph_gate&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
3.10.10. Ph_heavy&lt;br /&gt;
3.10.11. Ph_oscillate&lt;br /&gt;
3.11. Смарттерейны и гулаги&lt;br /&gt;
3.11.1. Смарттеррейны&lt;br /&gt;
3.11.1.1 Стандартный набор смарттеррейнов&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
3.11.3. Новые особенности смарттерейнов.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
3.12. Логика вертолета&lt;br /&gt;
	3.12.1. Схема heli_move&lt;br /&gt;
	3.12.2. Универсальная боевая схема&lt;br /&gt;
3.13. Meet_manager&lt;br /&gt;
3.14. Отметки на минимапе&lt;br /&gt;
3.15. Передача параметров в функции.&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
&lt;br /&gt;
3.1. Система флагов (path_walk, path_look)&lt;br /&gt;
В точках путей можно задавать флаги, изменяющие поведение персонажа. Флаги задаются прямо в имени waypoint-а, например, для точки с именем &amp;quot;wp00&amp;quot;:&lt;br /&gt;
wp00|flag1|flag2&lt;br /&gt;
Флаги точек пути path_walk:&lt;br /&gt;
a=state&lt;br /&gt;
	Выбирает состояние тела при перемещении (Только из раздела –Ходячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
p=percent&lt;br /&gt;
	Вероятность остановиться в точке в процентах (0 – 100). По умолчанию 100, т.е. сталкер никогда не проходит мимо точек остановки.&lt;br /&gt;
sig=name&lt;br /&gt;
	Установить сигнал с именем name сразу по прибытию в точку (до поворота) для последующей его проверки с помощью поля on_signal логической схемы. Если нужно установить сигнал после поворота – используйте соответствующий флажок пути path_look. &lt;br /&gt;
Флаги точек пути path_look:&lt;br /&gt;
a =state&lt;br /&gt;
	Выбирает состояние тела при стоянии (или сидении) на месте. (Из разделов Стоячие и Сидячие состояния)&lt;br /&gt;
	Список состояний можно взять в gamedata\scripts\state_lib.script&lt;br /&gt;
t=msec&lt;br /&gt;
	- время в миллисекундах, которое персонаж должен смотреть в заданную точку.&lt;br /&gt;
‘*’ – бесконечное время. Допустимы значения в диапазоне [1000, 30000], по умолчанию – 5000.&lt;br /&gt;
	Для конечных (терминальных) вершин пути path_walk, у которых не более 1-й соответствующей точки path_look, значение t всегда считается бесконечным и его явно задавать не нужно.&lt;br /&gt;
sig=name&lt;br /&gt;
	После поворота в точку path_look, установить сигнал с именем name.&lt;br /&gt;
syn&lt;br /&gt;
	Наличие флажка задержит установку сигнала до тех пор, пока в точку с флажком syn не прибудут все персонажи с данным team-ом (team задается в виде текстовой строки в customdata). До тех пор, пока остальные персонажи не прибудут, ожидающей персонаж будет отыгрывать свою idle анимацию.&lt;br /&gt;
sigtm=signal&lt;br /&gt;
Устанавливает сигнал при вызове time_callback-а state manager-ом. Соответственно, если t=0, то сигнал будет установлен после отыгрывания init анимации. Это используется, например, с анимацией press, которая состоит из двух частей: 1 - нажимаем на кнопку, 2 - опускаем руку. &lt;br /&gt;
В пути path_look можно сделать: wp00|a=press|t=0|sigtm=pressed &lt;br /&gt;
А затем переключить схему: on_signal = pressed | другая_схема&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.1.1. Более подробное описание путей.&lt;br /&gt;
&lt;br /&gt;
Walker.&lt;br /&gt;
&lt;br /&gt;
Настройка:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
На карту для каждого walker-а нужно поставить:&lt;br /&gt;
1)	Путь path_walk, по которому walker ходит.&lt;br /&gt;
2)	Путь path_look, состоящий из точек, в которые walker смотрит.&lt;br /&gt;
&lt;br /&gt;
Walker-ов может быть 1 или больше. Они могут действовать независимо, или взаимодействовать друг с другом.&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
team = …&lt;br /&gt;
имя команды, произвольная текстовая строка. Все walker-ы в одной команде должны иметь один и тот же team. Желательно в team задавать имя уровня и имя места, где стоят walker-ы, например: escape_bridge, escape_factory, это уменьшит шанс ошибиться и дать разным командам общее имя.&lt;br /&gt;
path_walk = …&lt;br /&gt;
	имя пути, описанного в п. 1&lt;br /&gt;
path_look = …&lt;br /&gt;
(не обязательно) имя пути, описанного в п. 2. Если персонаж должен только ходить по маршруту, path_look можно не задавать.&lt;br /&gt;
Если персонаж должен стоять на месте, то ему задается одна точка пути path_walk и как минимум одна точка пути path_look&lt;br /&gt;
&lt;br /&gt;
Правила расстановки флажков в путях рассмотрим на нескольких примерах:&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
Персонаж патрулирует территорию вокруг двух домиков. Маршрут строится следующим образом: &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Как сделать, чтобы персонаж между определенными точками бежал или крался? Для этого в пути path_walk существуют флажки.&lt;br /&gt;
	У каждого вейпоинта есть имя: wp00, wp01 и т.д.&lt;br /&gt;
	Флажки задаются в имени. Их нужно отделять от самого имени с помощью символа ‘|’. Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=threat то персонаж пойдет в состоянии данжер, если a=raid то побежит с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_walk используются анимации ТОЛЬКО из раздела «Ходячие состояния»!&lt;br /&gt;
&lt;br /&gt;
	Пример 2:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	Разговор персонажа.&lt;br /&gt;
&lt;br /&gt;
Чтобы персонаж говорил, перемещаясь по маршруту, нужно определить в каждой точке список тем, на которые он может говорить. Для этого существуют следующие поля:&lt;br /&gt;
	s = имя_звуковой_схемы (по умолчанию звук отключен). Несколько тем можно перечислять через запятую.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	Пример 3:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
В примере 3 используется только поле s, чтобы задать тему разговора, и флажок sc, чтобы показать, что звук проигрывается не разово, а периодически.&lt;br /&gt;
Остальные параметры (sp, sf, st) задавать НЕ РЕКОМЕНДУЕТСЯ, значения по умолчанию приемлимы для большинства скриптов.&lt;br /&gt;
Параметр sa также использовать НЕ РЕКОМЕНДУЕТСЯ. Если нужно стартовать звук одновременно с анимацией, лучше воспользоваться полями пути path_look, о котором будет написано ниже в этом документе.&lt;br /&gt;
Если персонаж не только ходит по маршруту, но должен также останавливаться и играть анимации, нужно задать ему путь path_look.&lt;br /&gt;
&lt;br /&gt;
Пример 4: усовершенствуем пример 1, чтобы персонаж, проходя мимо проема между домами, останавливался и заглядывал в него:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что добавилось в этом примере? Путь path_look с двумя точками. Связь между точками этого пути рекомендуется сразу же удалить в редакторе, поскольку она все равно не используется.&lt;br /&gt;
&lt;br /&gt;
Далее, в точках путей path_walk и path_look, которые обведены на рисунке пунктирной линией, в редакторе ставим общие флажки. Например, в верхней паре точек ставим флажок 0, а в нижней паре точек – флажок 1.&lt;br /&gt;
&lt;br /&gt;
Теперь персонаж будет останавливаться в точках path_walk, помеченных флажком, и смотреть в точку path_look, помеченную тем же самым флажком.&lt;br /&gt;
&lt;br /&gt;
Если точка path_walk  не помечена флажком, персонаж проходит ее не останавливаясь.&lt;br /&gt;
&lt;br /&gt;
Одной точке path_walk может соответствовать несколько точек path_look. Тогда персонаж выберем случайно одну из подходящих точек.&lt;br /&gt;
&lt;br /&gt;
По аналогии с path_walk, в точках пути path_look можно использовать различные флажки, меняющие поведение:&lt;br /&gt;
&lt;br /&gt;
	p = 100 – вероятность, с которой персонаж посмотрит именно в эту точку. Значения p всех подходящих точек суммируются, т.е. если у одной точки p = 100, а у другой 300, то персонаж посмотрит в первую с вероятностью 25%! (т.е. 100 из 400).&lt;br /&gt;
Во избежание путаницы, рекомендуется задавать p так, чтобы их сумма составляла 100.&lt;br /&gt;
По умолчанию у всех точек p = 100.&lt;br /&gt;
&lt;br /&gt;
t = время, на которое персонаж задержится в этой точке (по умолчанию 5000 мсек)&lt;br /&gt;
&lt;br /&gt;
Пример 5:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В этом примере проходя через точку wp00, персонаж с вероятностью 30% посмотрит в точку wp00 в течение 5 секунд, но с вероятностью 70% посмотрит в точку wp01 в течении 10 секунд.&lt;br /&gt;
&lt;br /&gt;
По умолчанию при остановках персонаж играет анимацию idle, если он не в состоянии crouch, либо анимацию hide, если он в состоянии crouch.&lt;br /&gt;
&lt;br /&gt;
Если требуется другая анимация, можно ее указать с помощью флажка:&lt;br /&gt;
&lt;br /&gt;
a = имя_анимации (по умолчанию idle). &lt;br /&gt;
Пишеться a=anim, где anim – название анимации из пункта 2.4.4. настоящей документации. Если мы напишем a=hide, то персонаж сядет в состоянии данжер, если a=guard, то встанет  с оружием наизготовку и т.д. &lt;br /&gt;
&lt;br /&gt;
NB: В точках пути path_look используются анимации ТОЛЬКО из раздела «Стоячие и сидячие состояния»!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Схемы поведения сталкеров.&lt;br /&gt;
Есть определенный набор схем, которые описывают поведение персонажа. Они прописываются у него в custom_data или, в случае гулага, в соответствующих файлах, описывающих работы данного гулага. Ниже приведен перечень этих схем.&lt;br /&gt;
В файле \gamedata\scripts\modules.script указаны все загружаемые схемы.&lt;br /&gt;
3.2.1. Схема walker&lt;br /&gt;
Это базовая схема, по которой персонаж, перемещается по патрульному пути (path_walk) и останавливается в определенных точках и выполняет соответствующие действия. &lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = &amp;lt;имя пути&amp;gt;- основной путь, по которому ходит NPC&lt;br /&gt;
*path_look  = &amp;lt;имя пути&amp;gt;- путь, куда смотрит NPC&lt;br /&gt;
*team - команда для синхронизации&lt;br /&gt;
&lt;br /&gt;
В точках path_walk, которым соответствуют точки пути path_look (стоят одинаковые флажки) персонаж останавливается и смотрит в определенную точку, при этом отыгрывая (или не отыгрывая) определенную анимацию.&lt;br /&gt;
* def_state_moving1 = состояние, в котором сталкер движется к первой точке пути, если она близко (patrol по умолчанию)&lt;br /&gt;
* def_state_moving2 = состояние, в котором сталкер движется к первой точке пути, если она не слишком далеко (rush по умолчанию)&lt;br /&gt;
* def_state_moving3 = состояние, в котором сталкер движется к первой точке пути, если она далеко (sprint по умолчанию)&lt;br /&gt;
* def_state_standing = дефолтное состояние в котором он стоит и смотрит на точку, если в этой точке не задана другое состояние.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_walker.script&lt;br /&gt;
3.2.2. Схема remark&lt;br /&gt;
Схема используется для синхронизации\связки других схем.&lt;br /&gt;
&lt;br /&gt;
	[remark]&lt;br /&gt;
*snd_anim_synс = true либо false. По умолчанию false. Указывает на то необходимо ли синхронизировать звук с анимацией либо нет&lt;br /&gt;
*snd  = звук ремарка, по умолчанию nil&lt;br /&gt;
*anim = анимация ремарка, по умолчанию wait&lt;br /&gt;
*target = Куда смотрит сталкер. Есть следующие варианты&lt;br /&gt;
		story_id – числовое значение&lt;br /&gt;
		actor – без комментариев&lt;br /&gt;
		nil – позиция вычисленная АИ автоматически&lt;br /&gt;
		&amp;lt;имя работы&amp;gt;,&amp;lt;имя гулага&amp;gt; смотреть на сталкера который находится на определенной работе под гулагом (второй параметр необязателен. В этом случае берется гулаг сталкера, для которого задана данная секция ремарка).&lt;br /&gt;
Пример:&lt;br /&gt;
target              = logic@cit_killers_base_guard, cit_killers&lt;br /&gt;
		&amp;lt;path_name&amp;gt;, &amp;lt;point_number&amp;gt;  - можно указывать смотреть в вершину патрульного пути (&amp;lt;имя пути&amp;gt;, &amp;lt;имя точки&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Внимание, теперь если значение не задано, то оно равно nil а не actor, как было раньше. То есть если вы хотите чтобы персонаж в ремарке смотрел на актера - необходимо явно прописывать это. Если задано значение nil, то персонаж развернется в позицию, которую посчитает АИ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стандартные сигналы для remark: &lt;br /&gt;
sound_end – по окончании проигрывания звуковой схемы&lt;br /&gt;
anim_end – по окончании проигрывания анимации&lt;br /&gt;
action_end – по окончании проигрывания и того и другого, если они синхронизированы&lt;br /&gt;
&lt;br /&gt;
Пример синхронизации анимации и звука в схеме Remark:&lt;br /&gt;
[remark]&lt;br /&gt;
anim = анимация&lt;br /&gt;
snd = звук&lt;br /&gt;
snd_anim_sync = true&lt;br /&gt;
on_signal = action_end | следующая схема&lt;br /&gt;
3.2.3. Схема sleeper&lt;br /&gt;
Схема сидящего и спящего NPC. Необходимо поставить патрульный путь, минимум из 1 поинта. Спящий будет садиться спать в нулевой точке пути, и разворачиваться при этом в сторону первой точки. &lt;br /&gt;
&lt;br /&gt;
[sleeper]&lt;br /&gt;
path_main = &amp;lt;имя пути&amp;gt;&lt;br /&gt;
*wakeable = true – может ли проснуться быстро (если true, то спит на корточках и во сне бормочет)&lt;br /&gt;
&lt;br /&gt;
NB: Если путь состоит из двух точек, то связь нужно делать от первой точки к нулевой (либо двунаправленную).&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_sleeper.script&lt;br /&gt;
&lt;br /&gt;
3.2.4. Схема kamp&lt;br /&gt;
Схема сталкера, сидящего в определенном радиусе вокруг указанной точки (у костра), и располагающегося лицом к этой точке.&lt;br /&gt;
	&lt;br /&gt;
	[kamp]&lt;br /&gt;
center_point = kamp_center – имя точки вокруг которой NPC будет устраиваться.&lt;br /&gt;
*radius = 2 (насколько далеко сталкер будет сидеть от центра лагеря, 2- по умолчанию)&lt;br /&gt;
*def_state_moving = run (дефолтное состояние, в котором сталкер будет идети к точке кампа)&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_kamp.script&lt;br /&gt;
&lt;br /&gt;
NB! Если точка кампа находится в костре, то в оффлайне сталкера прийдут на нее, а когда они перейдут в онлайн, то окажуться внутри костра, где и получат хит. Чтобы этого не случалось в секции кемпа указывать path_walk из одной точке, название которой = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
*path_walk = &amp;lt;path_kamp_name&amp;gt;_task&lt;br /&gt;
&lt;br /&gt;
Если точка кемпа расположена в чистом поле то, path_walk прописывать не надо.&lt;br /&gt;
3.2.5. Схема camper&lt;br /&gt;
Свойства кемперов:&lt;br /&gt;
- кемпер стоит на точке и смотрит в направлении, куда Вы его поставили в редакторе или передигается по патрульным путям  &lt;br /&gt;
- кемперы переключаются на универсальный комбат, только если видят врага ближе чем в 30 метрах. Если он выжил, он возращается в состояние кемпера. &lt;br /&gt;
- В любых других случаях действуют по собственной скриптовой схеме. Если видим врага -стреляем. Если слышим дэнжер - то смотрим в направление в данжере. Если видим гранату - убегаем от гранаты. Если видели врага, а враг исчез, то смотрим в точку, где видели последний раз врага. &lt;br /&gt;
- кемперы не сражаются в движении. Если они видят врага - они останавливаются, стреляют, а потом продолжают движение.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = patrol_path&lt;br /&gt;
path_look = patrol_path&lt;br /&gt;
*radius = number – расстояние в метрах, если расстояние между кэмпером и противником меньше указанного, кэмпер уходит в универсальный комбат. По умолчанию этот радиус равен 20 метрам.&lt;br /&gt;
*no_retreat = true - персонаж при виде врага не будет ломиться на ближайшую точку path_walk, а сразу перейдет в режим убивания. Нужно это в том случае, если вы хотите сделать сценку, когда одни ребята наезжают на других. Ставите кемперов с вышеуказанным флажком. Они идут по своим патрульным путям и выносят врагов.&lt;br /&gt;
*def_state_moving = состояние из стейт менеджера&lt;br /&gt;
	Состояние, в котором мы движемся на ближайшую точку пути при враге&lt;br /&gt;
*def_state_moving_fire = состояние из стейт менеджера (sneak_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, во время движения на ближайшую точку пути.&lt;br /&gt;
*def_state_campering = состояние из стейт менеджера (hide)&lt;br /&gt;
	Состояние, в котором мы ожидаем врага, находясь на пути&lt;br /&gt;
*def_state_campering_fire = состояние из стейт менеджера (hide_fire)&lt;br /&gt;
	Состояние, в котором мы отстреливаемся от врага, находясь на пути&lt;br /&gt;
*attack_sound = имя_звуковой_темы&lt;br /&gt;
Возможность переопределять снайперам/кемперам звук атаки. По дефолту он равен звуковой теме &amp;quot;fight_attack&amp;quot;. Можно изменить на любое другое (для сценических потребностей) либо вообще отключить, прописав в секции кемпера: attack_sound =&lt;br /&gt;
*shoot = тип.&lt;br /&gt;
Задаем тип стрельбы. Возможные значения - always|none|terminal&lt;br /&gt;
always - значение по умолчанию, стреляет всегда, когда можно&lt;br /&gt;
none - не стреляет вообще.&lt;br /&gt;
terminal - стреляет только когда находится на последней точки патрульного пути. Это сделано для облегчения построение атакующих сцен.&lt;br /&gt;
	&lt;br /&gt;
NB! У кемпера есть один большой минус – когда ему наносится хит и он не знает откуда хит наносится (не видит противника, не слышит выстрела), то он тупо продолжает стоять на старом месте и ждать следующей пули.&lt;br /&gt;
Ввиду этого не стоит расставлять кемперов в случае, когда сталкеры должны защищаться и держать позицию в том случае, если есть несколько направлений, откуда игрок или стелкеры смогут атаковать поставленного кемпера. Используйте walkerов в таких случаях, а кемперов стоить ставить для атак по путям и как снайперов.&lt;br /&gt;
		3.2.5.1. Схема sniper&lt;br /&gt;
	Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.&lt;br /&gt;
	NB! Ставить снайперу только 2 точки look&lt;br /&gt;
&lt;br /&gt;
	В кастом дате кемпера прописать:&lt;br /&gt;
	sniper = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_camper.script&lt;br /&gt;
&lt;br /&gt;
3.2.6. Схема follower &lt;br /&gt;
В custom_data прописан как follower&lt;br /&gt;
NPC идет за NPC лидером. Если до лидера расстояние менее 5 метров, то он идет, если от 5 до 20 – бежит в режиме run, если свыше 20 – догоняет в режиме sprint. Пути не задаются.&lt;br /&gt;
&lt;br /&gt;
[follower]&lt;br /&gt;
leader = story id лидера из game.ltx (число!)&lt;br /&gt;
*formation_line = true (постарается идти сбоку от лидера, в противном случае будет идти сзади&lt;br /&gt;
*distance = расстояние в метрах, на котором будет идти от лидера attendant. По умолчанию – 1,5 метра, если идет цепью, то 5 метров.&lt;br /&gt;
*state_if_leader_in_meet. Это есть строка с именем  состояния из state_manager, которое будет назначено follower-ам, если командир пребывает в состоянии meet.&lt;br /&gt;
*anim_walk = state (состояние, в котором фолловер идет за лидером)&lt;br /&gt;
*anim_run = state (состояние, в котором фолловер бежит за лидером)&lt;br /&gt;
*anim_sprint = state (состояние, в котором фолловер спринтует за лидером)&lt;br /&gt;
Файл: \gamedata\scripts\xr_ attendant.script&lt;br /&gt;
&lt;br /&gt;
Если все это происходит под гулагом, то вместо story_id лидера, мы прописываем его секцию  логики в файле скрипта. Пример:&lt;br /&gt;
&lt;br /&gt;
t = { section = &amp;quot;logic@bar_arena_follower_2&amp;quot;, &lt;br /&gt;
			idle = 0,&lt;br /&gt;
			prior = 7, state = {0}, squad = squad, group = groups[0],&lt;br /&gt;
			in_rest = &amp;quot;&amp;quot;, out_rest = &amp;quot;&amp;quot;,&lt;br /&gt;
			dependent = &amp;quot;logic@bar_arena_leader&amp;quot;,&lt;br /&gt;
			predicate = function(obj)&lt;br /&gt;
				         	return obj:character_community() == &amp;quot;dolg&amp;quot;&lt;br /&gt;
			            end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
3.2.7. Схема zoneguard&lt;br /&gt;
NPC есть две зоны (может быть одна). Он ходит по путям, но когда игрок заходит в зону, отрывает от дел, подбегает к игроку, наставляет на игрока оружие (может кричать, может говорить), если игрок заходит во вторую зону – атакует игрока &lt;br /&gt;
&lt;br /&gt;
[zoneguard]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
*path_look = путь обзора&lt;br /&gt;
team = имя команды синхронизированных zoneguard-ов (из всей команды только 1 будет реагировать на игрока)&lt;br /&gt;
*zone_guard = имя зоны, в пределах которой игрок будет атакован&lt;br /&gt;
zone_warn = имя зоны, в пределах которой начинать разговор с игроком&lt;br /&gt;
*walker_team = team для схемы перемещения его в состоянии walker (если не задан, используется значение из поля team)&lt;br /&gt;
*no_move = если true, персонаж окликнет игрока с места и не будет подбегать к нему&lt;br /&gt;
*snd_greet = имя звуковой схемы, из которой будет проигран звук при обнаружении персонажа&lt;br /&gt;
*ignore_friends = true, будет игнорировать дружественных ему персонажей.&lt;br /&gt;
*ignore_cond = {+info -info =func !func} условия, при которых NPC игнорирует игрока&lt;br /&gt;
*no_danger = если true, то не отыгрывает угрожающую анимацию, нейтралам.&lt;br /&gt;
*anim = какую отыгрывает анимацию, если игрок ему не враждебен.&lt;br /&gt;
*snd_anim_sync = если true, то npc будет синхронизировать звук с анимацией&lt;br /&gt;
Файл: \gamedata\scripts\xr_zoneguard.script&lt;br /&gt;
&lt;br /&gt;
3.2.8. Схема wounded (раненый)&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
wounded = wounded&lt;br /&gt;
&lt;br /&gt;
[wounded]&lt;br /&gt;
hp_state 		= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
hp_state_see	= HP|condstate@condsound|HP|condstate@condsound&lt;br /&gt;
psy_state 		= PSY|condstate@condsound|PSY|condstate@condsound&lt;br /&gt;
hp_victim		= HP|condvictim|HP|condvictim&lt;br /&gt;
hp_cover		= HP|condbool|HP|condbool&lt;br /&gt;
hp_fight		= HP|condbool|HP|condbool&lt;br /&gt;
*syndata		= state@sound|state@sound&lt;br /&gt;
*help_dialog	= story_id &lt;br /&gt;
*help_start_dialog = story_id&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Condstate – кондлист, возвращающий состояние персонажа, либо true. Если он возвращает true – нпс обидится на игрока&lt;br /&gt;
Condsound – кондлист, возвращающий саунд тему.&lt;br /&gt;
HP – пороговые значение здоровья персонажа&lt;br /&gt;
PSY – пороговые значения пси здоровья персонажа&lt;br /&gt;
Condvictim – кондлист, возвращающий направление куда смотреть. Возможные значения: nil, actor, number. В случае числа – будет смотреть на персонажа с указанными стори айди.&lt;br /&gt;
Condbool – кондлист, возвращаюзий true либо false.&lt;br /&gt;
&lt;br /&gt;
Значения полей:&lt;br /&gt;
hp_state – поведение персонажа когда он не видит игрока&lt;br /&gt;
hp_state_see – поведение персонажа, когда он видит игрока&lt;br /&gt;
psy_state – поведение персонажа при псиатаках&lt;br /&gt;
hp_victim – куда смотреть, в зависимости от ХП&lt;br /&gt;
hp_cover – идти в укрытие или нет, в зависимости от ХП&lt;br /&gt;
hp_fight – разрешено воевать или нет, в зависимости от ХП&lt;br /&gt;
syndata – синхропары для красоты.&lt;br /&gt;
help_dialog – story_id диалога вместо дефолтного actor_help_wounded. Если вам по сюжету  необходимо заменить диалог другим, то вы в этом поле прописываете id другого диалога.&lt;br /&gt;
Также мы вставляем стартовый диалог раненого. Если мы его прописываем, то все актёрские диалоги для раненых должны иметь такой precondition: dialogs.allow_wounded_dialog.&lt;br /&gt;
&lt;br /&gt;
Пример. В качестве примера взята дефолтная настройка.&lt;br /&gt;
&lt;br /&gt;
hp_state = 30|help_me@help|10|wounded_heavy@help_heavy&lt;br /&gt;
hp_state_see = 30|wounded@help_see|10|wounded_heavy@help_heavy&lt;br /&gt;
psy_state = 50|{=best_pistol}psy_armed,psy_pain@wounded_psy|20| {=best_pistol}psy_shoot,psy_pain@{=best_pistol}wounded_psy_shoot,wounded_psy&lt;br /&gt;
hp_victim = 30|actor|10|nil&lt;br /&gt;
hp_cover = 30|true|10|false&lt;br /&gt;
hp_fight = 30|true|10|false&lt;br /&gt;
syndata = wounded@help&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
Best_pistol – проверка на то, что лучшее оружие НПС является пистолетом.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_wounded.script&lt;br /&gt;
&lt;br /&gt;
3.2.9. Схема rest&lt;br /&gt;
Чувак гуляет, хавает, спит.&lt;br /&gt;
Пока нормально не работает.&lt;br /&gt;
Файл: \gamedata\scripts\xr_rest.script&lt;br /&gt;
&lt;br /&gt;
3.2.10. Схема heli_hunter&lt;br /&gt;
Хелихантер может стрелять либо не стрелять по вертолету в зависимости от условий. Делается это так:&lt;br /&gt;
&lt;br /&gt;
[camper@bar_freedom_attack_sniper_1]&lt;br /&gt;
path_walk = camper_1_walk&lt;br /&gt;
path_look = camper_1_look&lt;br /&gt;
on_info = {+bar_freedom_attack_ecolog} camper1@bar_freedom_attack_sniper_1 %=bar_freedom_angry_actor%&lt;br /&gt;
meet_talk_enabled = true&lt;br /&gt;
meet_dialog = bar_svoboda_dialog&lt;br /&gt;
heli_hunter = {-bar_ecolog_crush_heli_down} true, false&lt;br /&gt;
&lt;br /&gt;
Если раньше оверрайд хелихантера понимал только значения true либо false, то сейчас он понимает кондлист, который если возвращает true - то стрельба по вертолету в данной схеме разрешена.&lt;br /&gt;
&lt;br /&gt;
3.2.11. Patrol&lt;br /&gt;
  Итак, есть предварительная система патруля. Представляет собой вариацию kamp только в состоянии ходьбы. Для ее работы прописываем в кустовой дате следующее:&lt;br /&gt;
  &lt;br /&gt;
  [patrol]&lt;br /&gt;
  path_walk = path_walk&lt;br /&gt;
  path_look = path_look&lt;br /&gt;
  *formation = back&lt;br /&gt;
  *commander = true (типа назначат командиром, желательно, чтобы такой красивый он был один)&lt;br /&gt;
  *move_type = задает изначальный режим перемещения, по умолчанию patrol. Вообще, значение этого поля есть название ходячей анимации из state_mgr_lib&lt;br /&gt;
&lt;br /&gt;
  formation  - описывет способ построения и не является обязательным. Возможны следующие варианты:&lt;br /&gt;
  back    - мужики идут чуть позади командира в два ряда (по умолчанию)&lt;br /&gt;
  line    - шеренга&lt;br /&gt;
  around  - вокруг командира&lt;br /&gt;
&lt;br /&gt;
При остановке командора в meet мужики останавливаются.&lt;br /&gt;
&lt;br /&gt;
  Если командор помирает, то автоматически будет выбран другой. Командиром становится тот, кто первый попал под схему. Способы построения задаются в вейпоинтах следующим образом:&lt;br /&gt;
  ret=0...2&lt;br /&gt;
  0 - линия&lt;br /&gt;
  1 – вокруг старшего&lt;br /&gt;
  2 – по бокам&lt;br /&gt;
&lt;br /&gt;
При движении командор работает как обычный walker и сопровождающие его кадры повторяют его действия. То есть, если в параметрах вейпоинта прописано a=assault, то командор помчится с орудием убийства на перевес, а остальные его откопируют.&lt;br /&gt;
&lt;br /&gt;
  Что еще не сделано или глючит:&lt;br /&gt;
  - нет возможности автоматически перестроить команду (нужно от Шурика то, что записано в todo листе)&lt;br /&gt;
  - все идут молча (когда будет манагер баек, то сделаем)&lt;br /&gt;
  - командор пока не отдает команд (нет озвучки)&lt;br /&gt;
  - не рекомендуется включать спринт (глючит)&lt;br /&gt;
&lt;br /&gt;
3.3. Секции.&lt;br /&gt;
3.3.1. Секция combat&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
on_info =  %+info -info =func%  эффекты, которые вызываются на каждом раунде боя.&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр combat_type.&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&lt;br /&gt;
 * по-кемперски, если враг=актёр и он дальше Х метров&lt;br /&gt;
 * по-монолитовски, если любой враг дальше Y метров&lt;br /&gt;
 * иначе - движковый бой&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, {=fighting_ge_Y_meters} monolith&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&lt;br /&gt;
function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
	return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&lt;br /&gt;
400 – это 202  . Примечание – мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   combat_type.&lt;br /&gt;
Помните: оверрайд всегда будет перекрывать настройку в секции combat. Т.е., если у вас логика на 5 секций и в четырёх нужен кемперский комбат, а в пятой монолитовский, то можно задать так:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
[walker4]&lt;br /&gt;
...&lt;br /&gt;
[walker5]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&lt;br /&gt;
 (scheme - задает тип боя (monolith, camper, zombied), иначе - универсальный бой)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
disable_combat_handler – функция отключающая секцию combat.&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat.script&lt;br /&gt;
&lt;br /&gt;
3.3.2 Секция death&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
Файл: \gamedata\scripts\xr_death.script&lt;br /&gt;
&lt;br /&gt;
3.3.3. Cекция hit&lt;br /&gt;
Схема показывает, что происходит при, нанесении повреждения NPC. on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как аггрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&lt;br /&gt;
on_hit = hit&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_hit.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.4. Секция actor_dialogs&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialogs]&lt;br /&gt;
id = доступные диалоги через запятую.&lt;br /&gt;
disable = запрещенные диалоги, тоже через запятую.&lt;br /&gt;
Файл: \gamedata\scripts\xr_meet.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.5. Секция use&lt;br /&gt;
Схема показывает, что произойдет, если игрок юзнет NPC.&lt;br /&gt;
&lt;br /&gt;
on_use = use&lt;br /&gt;
&lt;br /&gt;
[use]&lt;br /&gt;
on_info = %+info -info =func%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_use.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.6. Секция combat_ignore&lt;br /&gt;
Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).&lt;br /&gt;
&lt;br /&gt;
В схеме нет дополнительных полей&lt;br /&gt;
[walker]&lt;br /&gt;
combat_ignore = combat_ignore &lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Функции, используемые для работы с кондлистом комбат игнора:&lt;br /&gt;
fighting_dist_ge_20 -- текущий враг на расстоянии больше или равном 20м&lt;br /&gt;
fighting_dist_ge(pасстояние в метрах) – универсальная функция для combat_ignore, проверка расстояния для игрока&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fighting_actor -- текущий враг актёр?&lt;br /&gt;
check_fighting -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\xr_combat_ignore.script&lt;br /&gt;
&lt;br /&gt;
3.3.7. Секция dont_spawn_character_supplies&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в профиле.&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
3.3.8. Секция no_smart&lt;br /&gt;
Если прописана эта секция, то npc не берется под смарттеррейн даже если он походит по всем параметрам.&lt;br /&gt;
[no_smart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3.9. Секция treshhold&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров. Этих параметра два:&lt;br /&gt;
        max_ignore_monster_distance (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&lt;br /&gt;
        ignore_monstre_threshold (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&lt;br /&gt;
&lt;br /&gt;
В секции логики либо в текущей схеме указываете:&lt;br /&gt;
&lt;br /&gt;
threshold = threshold@tratata&lt;br /&gt;
&lt;br /&gt;
[threshold@tratata]&lt;br /&gt;
max_ignore_distance = &amp;lt;number&amp;gt;&lt;br /&gt;
ignore_monster = &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй параметр следует менять ОЧЕНЬ осторожно.&lt;br /&gt;
&lt;br /&gt;
3.3.10. Danger&lt;br /&gt;
&lt;br /&gt;
Настройка может задаваться только в какой-то схеме, например:&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 50 (расстояние указывается в метрах)&lt;br /&gt;
ignore_ distance_grenade = &lt;br /&gt;
ignore_ distance_corpse = &lt;br /&gt;
ignore_ distance_hit = &lt;br /&gt;
ignore_ distance_sound = &lt;br /&gt;
&lt;br /&gt;
Можно также указывать время ожидания для денжера в зависимости от типа:&lt;br /&gt;
&lt;br /&gt;
danger_inertion_time_grenade = &lt;br /&gt;
danger_inertion_time_corpse =&lt;br /&gt;
danger_inertion_time_hit =&lt;br /&gt;
danger_inertion_time_sound =&lt;br /&gt;
&lt;br /&gt;
Дефолтовые настройки:&lt;br /&gt;
danger_inertion_time_grenade  = 20000&lt;br /&gt;
danger_inertion_time_corpse   = 10000&lt;br /&gt;
danger_inertion_time_hit      = 60000&lt;br /&gt;
danger_inertion_time_sound    = 15000&lt;br /&gt;
&lt;br /&gt;
NB!!Также эти настройки теперь распространяются и на схему кемпера. То есть в настройках кемпера перестало работать поле danger_radius. Теперь данные берутся из секции денжера согласно общих правил.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы такой: Сперва проверяется, что расстояние до опасности не отсекается по ignore_danger. Если опасность ближе, то тогда анализируется ее тип, и проверяется по соотвествующему данному типу расстоянию. Если опасность ближе - тогда разрешается реакция на нее.&lt;br /&gt;
&lt;br /&gt;
  В данный момент установлены следующие дефолты:&lt;br /&gt;
&lt;br /&gt;
  ignore_distance = 50&lt;br /&gt;
  ignore_distance_grenade = 15&lt;br /&gt;
  ignore_distance_corpse = 10&lt;br /&gt;
  ignore_distance_hit = 50&lt;br /&gt;
  ignore_distance_sound = 50&lt;br /&gt;
&lt;br /&gt;
NB: если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера danger_condition@1, danger_condition@2 и так далее.&lt;br /&gt;
&lt;br /&gt;
* danger_expiration_time = Через сколько времени денжер перестанет быть акутальным. Дефолт 5000 мс.&lt;br /&gt;
* danger_inertion_time = Через сколько времени персонаж забудет про денжер, на который он отреагировал. Дефолт 10000 мс.&lt;br /&gt;
&lt;br /&gt;
3.3.11. Байки из склепа (Истории у костра)&lt;br /&gt;
Из нового: теперь лагеря автоматически рассказывать истории не будут. Для этого вы должны того или иного сталкера &amp;quot;научить&amp;quot; истории.&lt;br /&gt;
Делается это так: в кастом дате пишется секция:&lt;br /&gt;
&lt;br /&gt;
  [game_info]&lt;br /&gt;
  stories = &amp;quot;story_01, legend_01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  	В кавычках список историй и легенд через запятую. Пока что существуют следующие истории и легенды:&lt;br /&gt;
&lt;br /&gt;
story_01 - Граница зоны и граната за 1 действие.&lt;br /&gt;
story_02 - Про трамплин и про камешки&lt;br /&gt;
story_03 - Про то как группа Вильнова вернулась&lt;br /&gt;
story_04 - Про то как Костя Федорин наткнулся на артефакт и пропал на радаре.&lt;br /&gt;
story_05 - Про то как духманам с контролером стражаться.&lt;br /&gt;
story_06 - Про дверцу, водку и избушку.&lt;br /&gt;
legend_01 - Про эксперимент в Зоне, который производят инопланетяне.&lt;br /&gt;
legend_02 - Об особо засекреченных лабораториях в зоне.&lt;br /&gt;
legend_03 - Легенда о проводнике&lt;br /&gt;
legend_04 - Легенда о темном сталкере&lt;br /&gt;
legend_05 - Легенда о том что глубоко в Зоне спать нельзя.&lt;br /&gt;
&lt;br /&gt;
  О том какие истории и легеды в каком лагере на каком уровня можно и нельзя юзать узнавать о Профа.&lt;br /&gt;
&lt;br /&gt;
3.3.12. dont_spawn_loot &lt;br /&gt;
Всякого рода сюжетные персонажи которые должны быть пустыми после смерти (например раненные или пленные) оказываются не пустыми. Чтобы это исправить необходимо в кастом дате персонажа прописать секцию &lt;br /&gt;
[dont_spawn_loot]&lt;br /&gt;
&lt;br /&gt;
3.4. Оверрайды: &lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны)&lt;br /&gt;
*meet_enabled = true (запускает схему встречи)&lt;br /&gt;
	*meet_talk_enabled = true (в действующую схему поведения добавляет возможность диалога)&lt;br /&gt;
	*meet_dialog  = &amp;lt;название диалога&amp;gt;, который будет запущен при юзе.&lt;br /&gt;
	*meet_state = &amp;lt;название состояния&amp;gt; он определяет, в каком состоянии будет находиться персонаж, если  открылось диалоговое окно общения и торговли&lt;br /&gt;
	*wounded_enabled = true (включает NPC возможность использовать схему раненого)&lt;br /&gt;
	*combat_ignore_cond  = см. выше&lt;br /&gt;
	*combat_ignore_keep_when_attacked = true (игрок продолжает игнорировать бой, даже если в него стреляют – ТОЛЬКО В СЛУЧАЕ СТРЕЛЬБЫ ИГРОКА!!!!)&lt;br /&gt;
	*combat_type = {условие} scheme - тип боя которым будет пользоваться npc из данной схемы&lt;br /&gt;
	*on_combat = см. выше&lt;br /&gt;
*companion_enabled = true (cвободноходящие сталкеры могут наниматься как компаньоны (в будущем они будут брать за это деньги)).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
3.5. Схемы для монстров&lt;br /&gt;
&lt;br /&gt;
3.5.1. Схема mob_walker. &lt;br /&gt;
Работает аналогично схеме обычного walker. Но есть некоторые отличия&lt;br /&gt;
&lt;br /&gt;
Флаги пути движения&lt;br /&gt;
s=звуковая_схема (idle, eat, attack, attack_hit, take_damage, die, threaten, steal, panic, growling) с - идти дальше в присяде r - дальше бежать sig=signal_name - установить заданный сигнал для xr_logic &lt;br /&gt;
Флаги пути обзора:&lt;br /&gt;
t=время_мсек - время в миллисекундах, которое нужно ждать, смотря в точку a=anim_set - анимация (stand_idle, sit_idle, lie_idle, eat, sleep, rest, attack, look_around, turn) &lt;br /&gt;
В customdata персонажа задайте (* отмечены обязательные поля): &lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = путь перемещения&lt;br /&gt;
path_look = путь обзора&lt;br /&gt;
*no_reset = true/false - не сбрасывать action предыдущей схемы (если нужно сохранить, например, звук). По умолчанию false.&lt;br /&gt;
*actor_friendly = true/false - монстр никогда первым не нападает на игрока, но если игрок хоть раз атакует монстра - этот режим навсегда отключится. По умолчанию false.&lt;br /&gt;
*npc_friendly = true/false - монстр никогда первым не нападет на другого монстра (даже враждебного).&lt;br /&gt;
*friendly = true/false - монстр не нападает ни на игрока, ни на монстров. В случае агрессии с их стороны, не запоминает их как врагов и остается дружественным ко всем. По умолчанию false.&lt;br /&gt;
Файл: \gamedata\scripts\mob_walker.script&lt;br /&gt;
&lt;br /&gt;
У кровосососов можно управлять невидимостью:&lt;br /&gt;
[mob_walker]&lt;br /&gt;
  ...&lt;br /&gt;
  state = vis&lt;br /&gt;
  или&lt;br /&gt;
  state = invis&lt;br /&gt;
  Задает значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
  Также в флагах walk пути mob_walker-а можно использовать флажок b&lt;br /&gt;
  (behaviour) с теми же параметрами:&lt;br /&gt;
  wp00|b=vis&lt;br /&gt;
  wp00|b=invis&lt;br /&gt;
  &lt;br /&gt;
3.5.2. Схема mob_eluder&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&lt;br /&gt;
path  = … работает как обычно path_walk. Набор точек патрульного пути.&lt;br /&gt;
*Time_capture = …. (время в секундах) время, которое монстр находится под этой схемой. Default – 10.&lt;br /&gt;
*Time_release = …. (время в секундах) время, которое монстр находится под универсальной схемой. Default – 10.&lt;br /&gt;
*Min_dist = …. (расстояние в метрах, если расстояние до врага меньше этого, то он переходит под универсальную схему). Default – 5.&lt;br /&gt;
*Max_dist = …. (расстояние в метрах, если расстояние до врага больше этого, то он переходит под eluder). Default  - 10&lt;br /&gt;
Замечание – работает нестабильно.&lt;br /&gt;
Файл: \gamedata\scripts\mob_eluder.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.5.3. Схема mob_remark&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&lt;br /&gt;
&lt;br /&gt;
*state = специфическое состояние данного конкретного монстра (для кровососов - невидимость)&lt;br /&gt;
*dialog_cond = {+info, =func, -info, !func} условия для открытия окна диалога&lt;br /&gt;
*anim = анимации монстра, перечисляются через запятую.&lt;br /&gt;
*anim.head = анимации головы монстра, через запятую перечисляются&lt;br /&gt;
*tip = какой значок подсветится, при наведении на него курсора&lt;br /&gt;
*snd = какой звук издает&lt;br /&gt;
*time = время проигрывания анимаций, используется только для отладки.&lt;br /&gt;
Файл \gamedata\scripts\mob_remark.script&lt;br /&gt;
На этой схеме сделан торговец. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.5.4. Схема mob_combat, mob_death&lt;br /&gt;
Работают точно также как и у сталкеров соответствующие схемы.&lt;br /&gt;
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script&lt;br /&gt;
3.5.6 Схема mob_jump (монстр-пружинка)&lt;br /&gt;
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_jump&lt;br /&gt;
&lt;br /&gt;
[mob_jump]&lt;br /&gt;
path_jump = path&lt;br /&gt;
ph_jump_factor =2.8&lt;br /&gt;
offset = 0,10,0&lt;br /&gt;
on_signal = jumped | nil&lt;br /&gt;
&lt;br /&gt;
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.&lt;br /&gt;
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &lt;br /&gt;
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. &amp;quot;on_signal = jumped | имя_схемы_или_nil&amp;quot; – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс)&lt;br /&gt;
3.5.7. Mob_camp&lt;br /&gt;
	Механика:&lt;br /&gt;
  1. Сидит на позиции, смотрит в точку &lt;br /&gt;
  2. Можно задать несколько позиций и время смены позиции.&lt;br /&gt;
  3. Перемещается между позициями бегом&lt;br /&gt;
  4. При виде врага переходит под универсальную схему (комбат/паника и т.д)&lt;br /&gt;
  5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции&lt;br /&gt;
  6. Если враг уходит далеко - монстр возвращается на позицию&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_camp&lt;br /&gt;
&lt;br /&gt;
[mob_camp]&lt;br /&gt;
path_look = way_look&lt;br /&gt;
path_home = way_home&lt;br /&gt;
time_change_point = 30000&lt;br /&gt;
home_min_radius  = 20&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)&lt;br /&gt;
&lt;br /&gt;
Описание параметров:&lt;br /&gt;
*path_home - путь, состоящий из точек, в которых будет находиться монстр &lt;br /&gt;
path_look - путь, состоящий из точек, в которые будет смотреть монстр   &lt;br /&gt;
*time_change_point - время изменения текущей camp-точки  (по-умолчанию10000), мс&lt;br /&gt;
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м&lt;br /&gt;
* home_max_radius - максимальный радиус  от врага до camp-точки (по-умолчанию 40), м&lt;br /&gt;
&lt;br /&gt;
Особенности:&lt;br /&gt;
 Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&lt;br /&gt;
  Выбор текущей позиции производится случайным образом&lt;br /&gt;
  Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является path_look&lt;br /&gt;
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.&lt;br /&gt;
&lt;br /&gt;
Обязательные требования:&lt;br /&gt;
home_min_radius &amp;lt; home_max_radius&lt;br /&gt;
Количество точек путей path_look и path_home должно быть равным&lt;br /&gt;
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами&lt;br /&gt;
&lt;br /&gt;
3.5.8. Mob_home&lt;br /&gt;
	Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[mob_home]&lt;br /&gt;
path_home = path1&lt;br /&gt;
home_min_radius = 10&lt;br /&gt;
home_max_radius = 30&lt;br /&gt;
aggressive_home	- в назначенную точку path_home монстры бегут а не идут.&lt;br /&gt;
&lt;br /&gt;
Описание:&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».&lt;br /&gt;
&lt;br /&gt;
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.&lt;br /&gt;
&lt;br /&gt;
3.5.9. Mob_fake_death&lt;br /&gt;
&lt;br /&gt;
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...&lt;br /&gt;
Использование:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = mob_fake_death&lt;br /&gt;
&lt;br /&gt;
[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.6. Оверрайды для монстров:&lt;br /&gt;
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него&lt;br /&gt;
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него&lt;br /&gt;
friendly = если true, то монстр не атакует никого до первой атаки на него&lt;br /&gt;
braindead = если true, то монстр игнорирует любые атаки.&lt;br /&gt;
&lt;br /&gt;
Секции для монстров&lt;br /&gt;
[mob_death], [mob_hit]&lt;br /&gt;
3.7. Секция spawner&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic&lt;br /&gt;
Работает spawner следующим образом:&lt;br /&gt;
&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+info -info =func  !func}&lt;br /&gt;
&lt;br /&gt;
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&lt;br /&gt;
Пример: &lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day}&lt;br /&gt;
(объект заспавниться днем и уйдет в оффлайн ночью)&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт Logic&lt;br /&gt;
&lt;br /&gt;
3.7.1. Спавн монстров дневных и ночных.&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {=is_day} – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&lt;br /&gt;
check_distance = true – проверка на наличие персонажа рядом.&lt;br /&gt;
min_distance = 100 – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
3.8. Скрипт logic&lt;br /&gt;
&lt;br /&gt;
NB: если хотите заспавнить у npc что-то из вещей из custom data, то описание того, как это делается находится в Общей части в настройке профилей персонажей (только тег supplies писать не надо!)&lt;br /&gt;
&lt;br /&gt;
Скрипт logic управляет переключением схем. &lt;br /&gt;
В customdata любого персонажа (кроме свободных) должна присутствовать секция [logic]. &lt;br /&gt;
&lt;br /&gt;
Функции, на которые ссылается секция [logic] должны находится в файлах \gamedata\scripts\xr_effects.script или \gamedata\scripts\xr_conditions.script.&lt;br /&gt;
&lt;br /&gt;
В секции должно присутствовать одно из полей: &lt;br /&gt;
active = активная схема, запускающаяся первой.&lt;br /&gt;
cfg = имя_ltx_файла_с_настройками&lt;br /&gt;
&lt;br /&gt;
Если задано поле cfg, то в качестве настроек персонажа будет использовано содержимое указанного файла. &lt;br /&gt;
Пример. Настройки простого walker-а: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
&lt;br /&gt;
Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения: &lt;br /&gt;
Список доступных схем перечислен в главе схемы.&lt;br /&gt;
Примечание: если logic переключает между несколькими одноименными схемами (например несколькими walker), то их можно нумеровать (walker1, walker2) или через @ давать более информативные названия walker@day, walker@alarm и т.д.&lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = number | scheme - дистанция до игрока &amp;lt;= number&lt;br /&gt;
on_actor_dist_le_nvis = number | scheme - дистанция до игрока &amp;lt;= number без проверки на видимость&lt;br /&gt;
on_actor_dist_ge = number | scheme - если дистанция до игрока &amp;gt; number&lt;br /&gt;
on_actor_dist_ge_nvis = number | scheme - если дистанция до игрока &amp;gt; number без проверки на видимость&lt;br /&gt;
on_signal = signal | scheme - срабатывает по приходу сигнала signal от текущей активной схемы&lt;br /&gt;
on_info = scheme - срабатывает всегда&lt;br /&gt;
on_timer = msec | scheme - срабатывает через msec мс после включения схемы&lt;br /&gt;
on_game_timer = sec| scheme – срабатывает через sec секунд игрового времени, после включения схемы&lt;br /&gt;
on_actor_in_zone = restrictor_name | scheme – если актер в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_actor_not_in_zone = restrictor_name | scheme – если актер не в зоне, (указывается имя рестриктора)&lt;br /&gt;
on_npc_in_zone = npc_story_id | restrictor_name | scheme – если NPC в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_npc_not_in_zone = npc_story_id | restrictor_name | scheme - если NPC не в зоне, указывается story_id NPC, и имя рестриктора&lt;br /&gt;
on_actor_inside = scheme - зона проверяет, находится ли игрок внутри нее&lt;br /&gt;
on_actor_outside = scheme - зона проверяет, находится ли игрок за ее пределами&lt;br /&gt;
&lt;br /&gt;
NB: с любыми из вышеперечисленных параметров можно работать следующим образом:&lt;br /&gt;
on_info = {….} %...%&lt;br /&gt;
on_info2 = {….} %...%&lt;br /&gt;
on_info3 = {…} %...%&lt;br /&gt;
и так далее до посинения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а также условия для переключения на описанные выше секции.&lt;br /&gt;
combat_ignore_cond = &lt;br /&gt;
on_hit = &lt;br /&gt;
on_death = &lt;br /&gt;
on_combat = &lt;br /&gt;
on_use =&lt;br /&gt;
3.8.1. Синтаксис скрипта Logic&lt;br /&gt;
&lt;br /&gt;
Пример: для того, чтобы персонаж ходил по пути walk1, а при приближении игрока на дистанцию 5 метров, переключался на путь walk2 (но только при условии, что он видит игрока), нужно написать следующее: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
path_walk = walk1&lt;br /&gt;
path_look = look1&lt;br /&gt;
on_actor_dist_le = 5 | walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = walk2&lt;br /&gt;
path_look = look2&lt;br /&gt;
&lt;br /&gt;
Выше рассмотрено безусловное переключение секций. Перед именем секции в фигурных скобках {} можно задавать дополнительные условия, а после имени секции - так называемые &amp;quot;эффекты&amp;quot;, которые заключить в знаки процента: %%. Эффекты будут применены только в случае активации секции. Можно не задавать имя секции, а задать только условия и/или эффекты. Тогда активной останется старая секция, но условия и эффекты будут все равно обработаны. Если все условия в фигурных скобках не выполняются, секция активирована не будет. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {условие} walker2 %эффекты%&lt;br /&gt;
&lt;br /&gt;
Условия могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - требуется присутствие infoportion у actor&lt;br /&gt;
-infoportion  - требуется отсутствие infoportion у actor&lt;br /&gt;
=func  - требуется, чтобы func вернула true&lt;br /&gt;
!func  - требуется, чтобы func вернулся false&lt;br /&gt;
&lt;br /&gt;
Эффекты могут быть следующими: &lt;br /&gt;
&lt;br /&gt;
+infoportion  - в случае включения секции у actor будет установлен infoportion&lt;br /&gt;
-infoportion  - в случае включения секции у actor будет убран infoportion&lt;br /&gt;
=func  - в случае включения секции стартует функция func&lt;br /&gt;
&lt;br /&gt;
Несколько условия или эффектов разделяются проблемами: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1 -info2 +info3} walker2 %+info4 =func%&lt;br /&gt;
&lt;br /&gt;
Можно задавать сразу несколько секций, разделенных запятыми. Порядок обхода при этом - слева направо. После срабатывания первого из условий, обход прекращается. В примере ниже, если установлен info1, будет включена схема walker2, иначе, если установлен info2, будет включена схема walker3, иначе будет включен walker4: &lt;br /&gt;
&lt;br /&gt;
on_actor_dist_le = 5 | {+info1} walker2, {+info2} walker3, walker4&lt;br /&gt;
&lt;br /&gt;
В описанном выше поле active секции logic, можно также задавать условия, например: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = {=actor_friend} walker@friendly, walker@enemy&lt;br /&gt;
В логических условиях теперь принимается ключевое слово never, которое означает, что условие ложно. Например:&lt;br /&gt;
combat_ignore_cond = {=actor_enemy =actor_has_suit} always, {=actor_enemy} never %...эффекты...%&lt;br /&gt;
&lt;br /&gt;
Вышеприведенная конструкция включает игнорирование боя, если у NPC враг - игрок в костюме, но отключит его, если врагом является игрок, но без костюма, при этом сработают эффекты (%%) секции never. Таким образом, выбор секции never равносилен отсутствию секции (несрабатыванию условия), но эффекты в знаках процента при этом срабатывают.&lt;br /&gt;
&lt;br /&gt;
Пример работы с секцией nil. Секция nil выводит из-под скриптовых схем персонажа, монстра или объект и отпускает его под управление движка. Это надо если какое-либо условие выполнившись 1 раз больше не нуждается в проверке, при этом экономятся ресурсы машины, которые на каждом апдейте проверяют это условие.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
То есть, при входе актера в рестриктор выдается инфопоршн и рестриктор уходит в секцию nil, больше не проверяя наличие игрока.&lt;br /&gt;
NB: Обратно из секции nil под скрипты объект вернуть уже невозможно! Учитывайте это, используя &lt;br /&gt;
ее.&lt;br /&gt;
3.8.2. Вот пример достаточно сложной логики: &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
&lt;br /&gt;
[hit]&lt;br /&gt;
on_info = %+alert%&lt;br /&gt;
&lt;br /&gt;
[death]&lt;br /&gt;
on_info = %+alert +trup3%&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = walk_svoboda3&lt;br /&gt;
path_look = look_svoboda3&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
on_timer = 25000 | remark&lt;br /&gt;
&lt;br /&gt;
[remark]&lt;br /&gt;
anim = idle&lt;br /&gt;
snd = stalker_talk_kampfire&lt;br /&gt;
no_move = true&lt;br /&gt;
no_rotate = true&lt;br /&gt;
on_hit = hit&lt;br /&gt;
on_death = death&lt;br /&gt;
combat_ignore_cond = {-alert}&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим ее пошагово. Вначале сталкер работает по схеме walker-a. При этом он игнорирует бой, пока не будет поставлен инфопоршн alert. Он ждет 25 секунд, после чего переходит в схему remark. В ремарке он проигрывает идловую анимацию, говорит на указанные темы, не поворачивается и не двигается и точно также игнорирует бой. Если по нему попадут (on_hit) или убьют (on_death), будет поставлен инфопоршн alert и он перестанет игнорировать бой (понятно, что если он будет трупом, то это ему не поможет, но их в сценке трое, и тогда сорвутся в бой все остальные). Если его убьют, то также будет поставлен инфопоршн trup3 который сообщит о том, что этот сталкер убит.&lt;br /&gt;
&lt;br /&gt;
А  вот логика его противника:&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = soldier_walk1&lt;br /&gt;
path_look = soldier_look1&lt;br /&gt;
combat_ignore_cond = always&lt;br /&gt;
team = assault_group&lt;br /&gt;
on_signal = assault | camper&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = soldier_walk1_2&lt;br /&gt;
path_look = soldier_look1_2&lt;br /&gt;
radius = 5&lt;br /&gt;
on_info = {+trup1 +trup2 +trup3} walker2&lt;br /&gt;
&lt;br /&gt;
[walker2]&lt;br /&gt;
path_walk = soldier_walk1_3&lt;br /&gt;
path_look = soldier_look1_3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&lt;br /&gt;
&lt;br /&gt;
Он идет в схеме walker, игнорируя бой (причем игнорируя в любой ситуации). Идет в составе группы assault_group. Когда он приходит в конечную точку маршрута (там он синхронизируется с остальными из группы, это приписано в путях) и получает сигнал assault, то переходит в схему camper. В этой схеме у него не прописан combat_ignore, поэтому он начинает стрелять по противнику. После того, как все трое противников будут убиты, каждый из них, умирая ставит инфопоршн trup1, trup2 или trup3 и когда все трое будут убиты, то он переключится на схему walker2 (подойдет к костру).&lt;br /&gt;
&lt;br /&gt;
3.9. Схемы логики space_restrictor&lt;br /&gt;
&lt;br /&gt;
Общее замечание: Чтобы исключить ситуацию, когда актёр проскакивает через рестриктор и тот не успевает сработать, старайтесь ставить рестриктор так, чтоб минимальная ширина была больше 2 метров.&lt;br /&gt;
3.9.1. Схема [sr_idle]	&lt;br /&gt;
Предназначение данной схемы – включить другую схему при срабатывании одного из стандартных условий логической схемы.&lt;br /&gt;
	Сама по себе схема ничего не делает.&lt;br /&gt;
	Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = nil %+esc_actor_inside%&lt;br /&gt;
&lt;br /&gt;
	Обратите внимание, что после срабатывания проверки активная схема переключается в nil, чтобы не продолжать бесполезную проверку на каждом апдейте. Можно не задавать nil.&lt;br /&gt;
Часто эта схема работает вместе со спавнером, рестриктор выдает инфопоршн, при входе в зону, а спавнер по нему уже кого-то спавнит.&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_idle.script&lt;br /&gt;
3.9.2. Секция [sr_no_weapon]&lt;br /&gt;
Данная схема убирает оружие у игрока при входе в зону.&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_no_weapon.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.3. Секция [sr_sound], &lt;br /&gt;
&lt;br /&gt;
snd = Перечень имён звуков разделенных запятыми.&lt;br /&gt;
&lt;br /&gt;
type = Типы звуков через запятые. Для удобства введены типы наборов звуков. Т.е., например, чтобы не перечислять каждый раз весь набор звуков скрипа деревянного пола, можно указать тип floor_wooden.&lt;br /&gt;
&lt;br /&gt;
*delay = Задержка перед проигрыванием звука в секундах реального времени, по умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*idle =  Длина периода игнорирования входа в зону после начала последнего проигранного звука. Чтоб, например, завывание было не чаще, чем раз в несколько минут. В секундах игрового времени. По умолчанию 0.&lt;br /&gt;
&lt;br /&gt;
*rnd = Вероятность (в процентах) того, что звук отыграется. По умолчанию 100.&lt;br /&gt;
&lt;br /&gt;
*position = Задает имя пути, в вершинах которого может отыграться звук. Есть зарезервированное значение random. Оно означает случайное место в радиусе 15…50 метров от игрока. Если этот параметр не задан, то подразумевается позиция игрока.&lt;br /&gt;
&lt;br /&gt;
*slide_velocity = Скорость (м/с) передвижения звука по точкам патрульного пути. По умолчанию - 3&lt;br /&gt;
&lt;br /&gt;
*slide_sound_once = true\false&lt;br /&gt;
	true - проиграть звук один раз, даже если он не дошел до последней точки пути.&lt;br /&gt;
	false – если звук закончился, а до последней точки пути не дошел, запустить его ещё раз. По умолчанию false.&lt;br /&gt;
&lt;br /&gt;
*play_at_actor = true/false Заставляет звук играться от позиции актера постоянно. Если он будет&lt;br /&gt;
  равен true и будет задан путь перемещения звука (или рандом), то мы тупо вылетим.&lt;br /&gt;
&lt;br /&gt;
Предназначение данной схемы: отыграть звук при входе актёра в рестриктор.&lt;br /&gt;
&lt;br /&gt;
Поддерживается sound_end.&lt;br /&gt;
&lt;br /&gt;
Обязательно нужно задать либо snd, либо type. Можно их задать вместе. На базе этих параметров составляется список звуков. При входе актёра в рестриктор отыгрывается случайный звук из этого списка.&lt;br /&gt;
&lt;br /&gt;
Место, из которого может отыграться звук, задаётся одним из трёх:&lt;br /&gt;
-	случайное;&lt;br /&gt;
-	случайная вершина заданного пути;&lt;br /&gt;
-	позиция игрока.&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = floor_wooden&lt;br /&gt;
snd = ambient\wind1, ambient\sparks1&lt;br /&gt;
rnd = 50&lt;br /&gt;
position = random&lt;br /&gt;
idle = 120&lt;br /&gt;
delay = 3&lt;br /&gt;
&lt;br /&gt;
Есть возможность сделать «скользящий звук». Необходим патрульный путь. Звук начинает отыгрываться с начала пути и перемещается от одной точки пути к другой (по мере их установки на патрульном пути) со скоростью slide_velocity. &lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_sound&lt;br /&gt;
&lt;br /&gt;
[sr_sound]&lt;br /&gt;
type = random&lt;br /&gt;
position = way&lt;br /&gt;
slide_velocity = 8&lt;br /&gt;
slide_sound_once = true&lt;br /&gt;
&lt;br /&gt;
Файл \gamedata\scripts\sr_sound.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.4. Секция [sr_tip]&lt;br /&gt;
Предназначение данной схемы – давать игроку сообщение (подсказку) при входе в рестриктор&lt;br /&gt;
&lt;br /&gt;
name = Название новости.&lt;br /&gt;
type = по умолчанию «news»&lt;br /&gt;
Тип  новостей: «news» – отсылается как глобальная новость, «tips» - отсылается то имени sender-a&lt;br /&gt;
*sender = если тип = «tips», то от sender задаёт условный строковый идентификатор иконки персонажа, от которого якобы пришло сообщение. По умолчанию это иконка торговца.&lt;br /&gt;
&lt;br /&gt;
*cond = Необходимые логические условия, при которых подсказка сработает. По дефолту, сработает при входе в зону.&lt;br /&gt;
&lt;br /&gt;
*single = true/false (по умолчанию false). Если параметр в true, то типс будет выдан только один раз,&lt;br /&gt;
&lt;br /&gt;
Пример настроек рестриктора:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_tip&lt;br /&gt;
&lt;br /&gt;
[sr_tip]&lt;br /&gt;
name = tips_esc_trader_about_pda&lt;br /&gt;
type = tips&lt;br /&gt;
cond = {+infoportion1 –infoportion2 }&lt;br /&gt;
*showtime = msec – время в миллисекундах, в течение которого сообщение будет находится на экране. – ПОКА НЕ РАБОТАЕТ НОРМАЛЬНО!&lt;br /&gt;
&lt;br /&gt;
Если необходимо проиграть только 1 раз, а это случается часто, то можно добавить следующую строку:&lt;br /&gt;
on_actor_inside = nil &lt;br /&gt;
&lt;br /&gt;
файл \gamedata\scripts\sr_tip.script&lt;br /&gt;
&lt;br /&gt;
3.9.5. Sr_light&lt;br /&gt;
	Зона, в которой фонарики у неписей будут включены независимо от времени суток.&lt;br /&gt;
&lt;br /&gt;
Работает следующим образом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
&lt;br /&gt;
Также работает вместе с кондлистом:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = sr_light&lt;br /&gt;
&lt;br /&gt;
  [sr_light]&lt;br /&gt;
  light_on = true/false (свет включен/выключен)&lt;br /&gt;
  on_info = {+info1} section %+info2% &lt;br /&gt;
3.9.6. Sr_territory&lt;br /&gt;
&lt;br /&gt;
Занимается эта схема тем, что отлавливает всякие события, происходящие внутри рестриктора.&lt;br /&gt;
Пока что она отлавливает только хиты и смерть сталкеров. Пример использования примерно следующий:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_territory@outside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@outside]&lt;br /&gt;
on_actor_inside = sr_territory@inside&lt;br /&gt;
&lt;br /&gt;
[sr_territory@inside]&lt;br /&gt;
on_actor_outside = sr_territory@outside&lt;br /&gt;
territory_hit = {-bar_dolg_territory_1_hit} %+bar_dolg_territory_1_hit%, {-bar_dolg_territory_2_hit}&lt;br /&gt;
%+bar_dolg_territory_2_hit%, {-bar_dolg_territory_3_hit} %+bar_dolg_territory_3_hit%&lt;br /&gt;
territory_death = {-bar_dolg_territory_kill} %+bar_dolg_territory_kill%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть здесь видно, что когда игрок находится внутри рестриктора, то считается количество нанесенных хитов, а также учитывается был ли кто-то убит или нет. Поскольку схема работает только с игроком – то хиты и смерть засчитываются только от игрока.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.7. Sr_mapspot&lt;br /&gt;
&lt;br /&gt;
При входе в рестриктор он сам себя подсвечивает на карте.&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
        hint - id подсказки в string table (обязательный параметр)&lt;br /&gt;
        location - название типа подсветки (не обязательный параметр, по умолчанию &amp;quot;crlc_small&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_mapspot&lt;br /&gt;
&lt;br /&gt;
[sr_mapspot]&lt;br /&gt;
hint = “gar_swamp”&lt;br /&gt;
location = crcl_big&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.8. Sr_particle&lt;br /&gt;
&lt;br /&gt;
Данная система отыгрывает партиклы как статичные так и движущиеся в указанном месте и в указанное время. Работет она следующим образом:&lt;br /&gt;
&lt;br /&gt;
  1) для партикловой системы с путем камеры:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = particle_test.anm          -имя пути камеры&lt;br /&gt;
     mode = 1 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               		-флаг зацикленности партиклов&lt;br /&gt;
&lt;br /&gt;
          (обязательно с расширением ANM !!!) Здесь партиклы будут молча перемещаться по пути.&lt;br /&gt;
          &lt;br /&gt;
  2) для партикловой системы с обычным патрульным путем:&lt;br /&gt;
     [sr_particle]&lt;br /&gt;
     name = explosions\campfire_03          -имя партикловой системы&lt;br /&gt;
     path = part_points                   -имя патрульного пути&lt;br /&gt;
     mode = 2 				(обязательно !!!)&lt;br /&gt;
     looped = true/false               -флаг зацикленности партиклов &lt;br /&gt;
&lt;br /&gt;
    В вейпоинтах можно задавать флаг s=имя_звуковой_темы и d=число время задержки перед проигрыванием (задается в миллисекундах. Если не задано, то 0). s - имя звуковой темы в sound_themes.ph_snd_themes из которой будет случайно выбран звук для проигрывания во время проигрывания партикла. Звук не зацикливается и играет только один раз.. Результат = партиклы отыгрываются во всех вейпоинтах одновременно (или с задержкой см. выше).&lt;br /&gt;
При looped=true по окончании проигрывания партиклов, они будут запускаться сначала, но уже без задержек. Сигнал particle_end выдаваться не будет. При looped=false сигнал будет выдан, когда все  источники партиклов отыграют.      &lt;br /&gt;
Поддерживается кондлист. Если рестриктор переходит в другую секцию, то автоматически перестают отыгрываться партиклы и замолкают звуки при них. Этот рестриктор является объектом, отслеживающим партиклы и нет никакой необходимости чтобы игрок в него заходил.&lt;br /&gt;
&lt;br /&gt;
3.9.9. Sr_sound_act&lt;br /&gt;
  Итого, схема, которая играет саунд в голове актера. Всякие там переговоры по ПДА и прочие фейки&lt;br /&gt;
&lt;br /&gt;
[sr_sound_act]&lt;br /&gt;
snd = ambient\random\new_drone1     --имя звукового файла&lt;br /&gt;
*delay = 2000                          --задержка перед проигрыванием &lt;br /&gt;
*delay_max = 4000		-- между проигрыванием звука будет взят случайный промежуток между delay и delay_max.&lt;br /&gt;
*on_signal = sound_end | nil           --по сигналу можно перейти в другую секцию.&lt;br /&gt;
theme =  &amp;lt;имя темы из ph_sound_themes&amp;gt;&lt;br /&gt;
* stereo = true/false (по умолчанию false). При установке этого параметра к файлу, который&lt;br /&gt;
  задан параметром snd или в звуковой теме будут добавляться (автоматически) суффиксы _r и _l для загрузки левого и правого каналов и, соответственно, вся эта фигня будет играться.&lt;br /&gt;
&lt;br /&gt;
Если указывается тема, то звук будет играть зациклено, случайным образом выбирая один из звуков прописанных в теме, если указывается звук, то он отыгрывается один раз. Схема поддерживает кондлист.&lt;br /&gt;
&lt;br /&gt;
3.9.10 Sr_timer&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_timer@1&lt;br /&gt;
&lt;br /&gt;
[sr_timer@1]&lt;br /&gt;
type = dec&lt;br /&gt;
start_value = 10000&lt;br /&gt;
on_value = 0 | sr_timer@2&lt;br /&gt;
&lt;br /&gt;
[sr_timer@2]&lt;br /&gt;
type = inc&lt;br /&gt;
on_value = 15000 | nil %+info1%&lt;br /&gt;
&lt;br /&gt;
Описания полей:&lt;br /&gt;
type - тип счетчика, инкриментирующий(inc) или декриментирующий(dec).&lt;br /&gt;
Если поле не задано -  счетчик будет инкриментирующий&lt;br /&gt;
start_value - начальное значение счетчика в РЕАЛЬНЫХ милисекундах. Для декриментирующих счетчиков задавать обязательно. Для инкриментирующих, если не задано, то считается с 0.&lt;br /&gt;
&lt;br /&gt;
Переходы из секции sr_timer могут быть как по обычным условиям (on_timer, on_info) так и по специфическому условию on_value. В общем случае on_value Можно использовать для производства каких либо действий в зависимости от состояния счетчика. Например:&lt;br /&gt;
&lt;br /&gt;
on_value = 5000| %+info1% | 1000| %+info2%&lt;br /&gt;
&lt;br /&gt;
3.9.11. Sr_psy_antenna&lt;br /&gt;
Зоны с такой секцией позволяют управлять эффектами от пси-воздействия (на Янтаре и Радаре). Сейчас можно управлять интенсивностью излучения и интенсивностью получения повреждений.&lt;br /&gt;
&lt;br /&gt;
Способ применения: Расставить зоны, в каждой зоне написать, сколько процентов к интенсивности излучения и повреждения она добавляет/отнимает. Зоны могут быть вложены друг в друга, пересекать друг друга. &lt;br /&gt;
&lt;br /&gt;
eff_intensity = 	- увеличение/уменьшение в % от базового значения интенсивности излучения.&lt;br /&gt;
hit_ intensity = 	- увеличение/уменьшение в % от базового значения наносимого повреждения.&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая добавляет 70% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
eff_intensity = 70&lt;br /&gt;
hit_ intensity = 70&lt;br /&gt;
&lt;br /&gt;
Пример зоны, которая убирает 30% излучения:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_psy_antenna&lt;br /&gt;
&lt;br /&gt;
[sr_psy_antenna]&lt;br /&gt;
intensity = -30&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.12. Sr_teleport&lt;br /&gt;
Собственно, телепорт. Настраиваются следующим образом:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_teleport&lt;br /&gt;
&lt;br /&gt;
[sr_teleport]&lt;br /&gt;
timeout = 0&lt;br /&gt;
&lt;br /&gt;
point1 = point1&lt;br /&gt;
look1 = look1&lt;br /&gt;
prob1 = 10&lt;br /&gt;
&lt;br /&gt;
point2 = point2&lt;br /&gt;
look2 = look2&lt;br /&gt;
prob2 = 20  &lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
timeout - задержка в срабатывании телепорта в миллисекундах.&lt;br /&gt;
point - одноточечный патрульный путь куда переместить&lt;br /&gt;
look - одноточечный патрульный путь куда повернуть.&lt;br /&gt;
&lt;br /&gt;
Далее идут настройки точек назначения с удельными весами. То есть в перечисленном выше примере вероятность телепортнутся во вторую точку в два раза выше, чем в первую. Максимальное количество точек назначения - 10. Телепорты необходимо ставить совместно с особой аномальной зоной, которую сейчас делает Проф. Зона добавит визуализацию и создаст эффект втягивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.9.13. Sr_sleep и настройка снов.&lt;br /&gt;
	Появилась возможность задавать зоны сна.&lt;br /&gt;
&lt;br /&gt;
[sr_sleep]&lt;br /&gt;
*cond = &amp;lt;condlist&amp;gt;&lt;br /&gt;
*type = nightmare/normal/happy/all - Задает тип сна разрешенный в данной зоне (по умолчанию all). Влияет (группирует) только на несценарные сны.&lt;br /&gt;
*dream_prob = &amp;lt;число от 0 до 100&amp;gt; - вероятность просмотра несценарных сновидений в данной зоне (по умолчанию 80). В противном случае будет только черный экран.&lt;br /&gt;
&lt;br /&gt;
Необязательное поле cond задает условие(я), при котором в этой зоне можно спать. Сейчас производится индикация зон, где разрешен сон. В левом нижнем углу отображается маленькая иконка легких при входе в такую зону. Вероятно, позже будет изменена на другую.&lt;br /&gt;
Сновидения теперь делятся на сценарные и обычные. Сценарные сновидения отыгрываются один раз при выполнении необходимых условий. Обычные сновидения проигрываются, если нет сценарных или ни одно условие выполнения сценарных не сработало. Можно задавать вероятность отыгрывания обычных сновидений в целом, а также задавать вероятность срабатывания каждого конкретного сновидения в отдельности. Обычным сновидениям можно задавать тип и потом ограничивать по нему сны воспроизводимые в sr_sleep.&lt;br /&gt;
&lt;br /&gt;
В файле misc\dream.ltx задаются настройки снов.&lt;br /&gt;
&lt;br /&gt;
Секция videos.&lt;br /&gt;
Полями задаются пути к видеофайлам со снами.&lt;br /&gt;
&lt;br /&gt;
Секция dreams. Поля:&lt;br /&gt;
regular_probability = &amp;lt;число от 0 до 100&amp;gt; - вероятность проигрывания обычных сновидений в целом &lt;br /&gt;
regular - список секций с настройками для обычных сновидений&lt;br /&gt;
scene - список секций с настройками для сценарных сновидений&lt;br /&gt;
&lt;br /&gt;
Настройки обычных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
probability = &amp;lt;число больше 0&amp;gt; - чем больше, тем больше вероятность проигрывания сна.&lt;br /&gt;
type = nightmare/normal/happy - тип сна.&lt;br /&gt;
&lt;br /&gt;
Настройки сценарных сновидений:&lt;br /&gt;
dream - имя поля из секции videos&lt;br /&gt;
cond = &amp;lt;condlist&amp;gt; - условия срабатывания&lt;br /&gt;
to_regular = &amp;lt;вероятность,тип&amp;gt; - необязательное поле. Дает возможность переводить сценарный сон после первого отыгрыша в разряд обычных. &amp;lt;вероятность, тип&amp;gt; аналогичны probability и type из настроек обычных сновидений соответственно.&lt;br /&gt;
&lt;br /&gt;
3.9.14. Sr_cutscene&lt;br /&gt;
	Эта схема предназначена для проведения анимации камеры c некоторым эффектом &lt;br /&gt;
(pp_effector). Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути point и ориентации его взгляда на начало пути look, потери управления игроком и начала анимации камеры cam_effector по завершении которой игрок вновь получает управление.&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = &amp;lt;имя пути&amp;gt; - путь в первую точку которого переносится игрок&lt;br /&gt;
look = &amp;lt;имя пути&amp;gt; - путь в первую точку которого смотрит игрок&lt;br /&gt;
*pp_effector = &amp;lt;имя файла с эффектом&amp;gt; - файл, расположенный в папке &lt;br /&gt;
gamedata\anims\ и содержащий эффект (имя файла пишется без расширения)&lt;br /&gt;
cam_effector = &amp;lt;имя файла с анимацией камеры&amp;gt; - файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без &lt;br /&gt;
расширения)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.10. Набор дополнительных настроек логики у разных объектов.&lt;br /&gt;
Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.&lt;br /&gt;
&lt;br /&gt;
3.10.1. Схема работы двери, секция [ph_door]&lt;br /&gt;
&lt;br /&gt;
NB! Для двухстворчатых ворот задается все аналогично.&lt;br /&gt;
&lt;br /&gt;
locked = false\true&lt;br /&gt;
	Заперта ли дверь. По дефолту – false.&lt;br /&gt;
&lt;br /&gt;
Closed = false\true&lt;br /&gt;
	Закрыта ли дверь. По дефолту - true&lt;br /&gt;
&lt;br /&gt;
tip_open = (если locked == false, то tip_door_open, иначе tip_door_locked)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь закрыта.&lt;br /&gt;
&lt;br /&gt;
tip_close = (если locked == false, то tip_door_close, иначе пустое значение)&lt;br /&gt;
	Подсказка, которая появляется около прицела при наведении на дверь, если дверь открыта.&lt;br /&gt;
&lt;br /&gt;
snd_init = Звук, который будет отыгран сразу при включении схемы.&lt;br /&gt;
&lt;br /&gt;
snd_open_start = Звук, который будет отыгран при попытке открыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_start = Звук, который будет отыгран при попытке закрыть дверь.&lt;br /&gt;
&lt;br /&gt;
snd_close_stop = Звук, который будет отыгран, когда дверь захлопнется до конца.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
	Если нужно сделать дверь, которая при каком-то событии открывается со щелчком, то можно воспользоваться полем snd_init и переключением схем. В примере ниже при включении схемы ph_door@unlocked проиграется snd_init, т.е. trader_door_unlock:&lt;br /&gt;
&lt;br /&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_locked&lt;br /&gt;
on_info = {+esc_trader_can_leave} ph_door@unlocked&lt;br /&gt;
&lt;br /&gt;
[ph_door@unlocked]&lt;br /&gt;
locked = false&lt;br /&gt;
snd_init = trader_door_unlock&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;
файл \gamedata\scripts\ph_door.script&lt;br /&gt;
&lt;br /&gt;
3.10.2. Схема работы кнопки, секция [ph_button]&lt;br /&gt;
При нажатии на кнопку переключает секции и выдает инфопоршн.&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active      = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim_blend  = false&lt;br /&gt;
anim        = button_false&lt;br /&gt;
on_press    = ph_button@unlocked %+cit_jail_door_opened%&lt;br /&gt;
&lt;br /&gt;
on_press – что происходит при нажатии&lt;br /&gt;
anim – анимация, которая отигрывается при нажатии на кнопку&lt;br /&gt;
anim_blend – плаваня, сглаженная анимация. Может принимать знаечения true\false&lt;br /&gt;
&lt;br /&gt;
Файл \Gamedata\scripts\ph_button.script&lt;br /&gt;
&lt;br /&gt;
*tooltip - gредназначено для того, чтобы задавать текстовую подсказку при наведении на кнопку. Текстовая подсказка нужна для того, чтобы как минимум было понятно, что этот девайс можно нажимать.&lt;br /&gt;
Пример настройки кнопки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@active&lt;br /&gt;
&lt;br /&gt;
[ph_button@active]&lt;br /&gt;
anim = lab_switcher_idle&lt;br /&gt;
tooltip = tips_labx16switcher_press&lt;br /&gt;
on_press = ph_button@deactivated %+terrain_test%&lt;br /&gt;
&lt;br /&gt;
[ph_button@deactivated]&lt;br /&gt;
anim = lab_switcher_off&lt;br /&gt;
&lt;br /&gt;
Для того чтобы сообщение не потеряло адекватность при различных настройках клавиатуры сообщение следует писать с использованием токенов. Например:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;string id=&amp;quot;tips_labx16switcher_press&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Чтобы отключить чудо установку нажмите ($$ACTION_USE$$)&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вот пример кнопки, которая срабатывает не всегда, а по определенному условию:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_button@locked&lt;br /&gt;
&lt;br /&gt;
[ph_button@locked]&lt;br /&gt;
anim = button_false – анимация несрабатывания кнопки.&lt;br /&gt;
on_info = {+val_prisoner_door_unlocked} ph_button@unlocked&lt;br /&gt;
on_press = ph_button@unlocked %+val_prisoner_door_unlocked%&lt;br /&gt;
&lt;br /&gt;
[ph_button@unlocked]&lt;br /&gt;
anim = button_true&lt;br /&gt;
on_info = {-val_prisoner_door_unlocked} ph_button@locked&lt;br /&gt;
on_press = ph_button@locked %-val_prisoner_door_unlocked%&lt;br /&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;
Например&lt;br /&gt;
wp00|sl=esc_sl1&lt;br /&gt;
&lt;br /&gt;
Тогда при повороте в эту точку персонаж повернет в нее и прожектор.&lt;br /&gt;
&lt;br /&gt;
3.10.4. Кодовые замки:&lt;br /&gt;
При введении указанного кода выдает инфопоршн&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_code@lock&lt;br /&gt;
&lt;br /&gt;
[ph_code@lock]&lt;br /&gt;
code = 1243&lt;br /&gt;
on_code = %+infoportion%&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_code.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.10.5. Ph_gate:&lt;br /&gt;
	То же самое, что и ph_door, но для ворот, состоящих из двух дверей:&lt;br /&gt;
Вместо параметров closed и locked сейчас используются параметры:&lt;br /&gt;
state: состояние, в котором дверь находится при инициализации (по умолчанию none)&lt;br /&gt;
    	open - в открытом&lt;br /&gt;
closed - в закрытом&lt;br /&gt;
  	none - в текущем (дефолтном или оставшемся от предыдущей схемы)&lt;br /&gt;
&lt;br /&gt;
locking: блокировка дверей (по умолчанию none)&lt;br /&gt;
stick - прилипание дверей к крайним состояниям (пока в процессе настройки)&lt;br /&gt;
&lt;br /&gt;
soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
   		open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
none - не используется (мягкая блокировка возможна только в крайних положениях) &lt;br /&gt;
&lt;br /&gt;
hard - блокировка двери с помощью границ. Ворота можно только сломать&lt;br /&gt;
Состояния в этом положении:&lt;br /&gt;
            	open - блокировать в открытом состоянии&lt;br /&gt;
            	closed - в закрытом&lt;br /&gt;
            none - в текущем&lt;br /&gt;
    	&lt;br /&gt;
none - дверь не заблокирована&lt;br /&gt;
&lt;br /&gt;
Общие параметры:&lt;br /&gt;
left_limit, right_limit - задают угол [0-180] открытия каждой из створок ворот. По умолчанию - 100 градусов. &lt;br /&gt;
breakable - (true/false) определяет можно ли сломать ворота. По умолчанию true.&lt;br /&gt;
&lt;br /&gt;
Звуковые параметры аналогичны ph_door&lt;br /&gt;
    &lt;br /&gt;
Примеры:&lt;br /&gt;
[ph_gate@locked] ;блокировка в открытом состоянии, неразбиваемые.&lt;br /&gt;
state = opened&lt;br /&gt;
locking = soft&lt;br /&gt;
left_limit = 130&lt;br /&gt;
rigt_limit = 60&lt;br /&gt;
breakable = false&lt;br /&gt;
&lt;br /&gt;
[ph_gate@opened]&lt;br /&gt;
state = opened&lt;br /&gt;
locking = stick&lt;br /&gt;
&lt;br /&gt;
[ph_gate@closed]&lt;br /&gt;
state = closeded&lt;br /&gt;
&lt;br /&gt;
	Файл: \gamedata\scripts\ph_gate.script&lt;br /&gt;
&lt;br /&gt;
3.10.6. Ph_sound&lt;br /&gt;
Прописывается у физического объекта какие звуки он выдает (изначально планировался как матюгальник).&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = имя темы из файла sound_theme.script из таблицы ph_snd_themes&lt;br /&gt;
*looped = true/false зацикленое воспроизведение звука (default - false)&lt;br /&gt;
*min_idle = минимальное время простоя перед включением звука (мс)&lt;br /&gt;
*max_idle = максимальное время простоя перед включением звука (мс)&lt;br /&gt;
*random = true/false (def - false). Если = true, то из темы будет выбран рандомный звук и таким образом звуки будут играться до посинения&lt;br /&gt;
&lt;br /&gt;
NB! Если мы задаем random = true и looped = true, то версия сыпется&lt;br /&gt;
&lt;br /&gt;
Также поддерждивается кондлист.&lt;br /&gt;
Данная схема работает через задницу, поэтому зацикленный звук будет продолжать отыгрываться, даже если объект уходит в nil. В связи с этим надо создавать новую секцию, которая бы отыгрывала одиночный короткий звук, после которого (поскольку он будет точно также играться раз за разом) ставим on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
Пример подобной извращенной логики:&lt;br /&gt;
[logic]&lt;br /&gt;
active = ph_sound&lt;br /&gt;
&lt;br /&gt;
[ph_sound]&lt;br /&gt;
snd = gar_seryi_shooting&lt;br /&gt;
looped = true&lt;br /&gt;
max_idle = 5000&lt;br /&gt;
on_actor_in_zone = gar_seryi_factory| ph_sound@end&lt;br /&gt;
&lt;br /&gt;
[ph_sound@end]&lt;br /&gt;
snd = gar_seryi_shooting_2&lt;br /&gt;
looped = false&lt;br /&gt;
on_signal = sound_end| nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Кроме того специфическим образом создается звуковая схема.&lt;br /&gt;
В sound_theme.script  в начале файла есть секция ph_themes в которой и описываются темы для физ объектов. &lt;br /&gt;
Например:&lt;br /&gt;
ph_snd_themes[&amp;quot;gar_seryi_shooting&amp;quot;]	= {[[characters_voice\human_01\scenario\garbage\distance_shooting]]}&lt;br /&gt;
&lt;br /&gt;
Кроме того (незадекларированная фича) ph_sound можно вешать на рестрикторы. Но за правильность работы в таком случае никто ответственности не несет.&lt;br /&gt;
&lt;br /&gt;
Файл: \gamedata\scripts\ph_sound.script&lt;br /&gt;
&lt;br /&gt;
3.10.7. Ph_force&lt;br /&gt;
	Схема позволяет пнуть предмет в указанную сторону. Прописывается в кастом дате предмета.&lt;br /&gt;
&lt;br /&gt;
	force = сила, которая прикладывается к объекту. Измеряется в убитых енотах&lt;br /&gt;
	time = время прикладывания силы к предмету (в секундах)&lt;br /&gt;
	*delay = задержка (в секундах) перед применением силы&lt;br /&gt;
	point =  имя патрульного пути, точки которого будут использованы как цели (куда направлять предмет)&lt;br /&gt;
	point_index = индекс точки патрульного пути, в стону которого полетит предмет.&lt;br /&gt;
&lt;br /&gt;
3.10.8. Ph_on_death&lt;br /&gt;
&lt;br /&gt;
Схема для отслеживания разрушения физического объекта и выдавания по такому случаю различных эффектов&lt;br /&gt;
  Пример:&lt;br /&gt;
&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_on_death&lt;br /&gt;
&lt;br /&gt;
  [ph_on_death]&lt;br /&gt;
  on_info = %эффекты%&lt;br /&gt;
&lt;br /&gt;
  Юзать исключительно с разрушаемыми физ. Объектами&lt;br /&gt;
&lt;br /&gt;
3.10.9. Ph_car&lt;br /&gt;
&lt;br /&gt;
Настройка возможности игроку управлять машиной.&lt;br /&gt;
  секция: [ph_car]&lt;br /&gt;
  поле:   usable = &amp;lt;condlist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  usable - кондлист возвращающий true (по умолчанию) или false.&lt;br /&gt;
&lt;br /&gt;
  Пример:&lt;br /&gt;
  [logic]&lt;br /&gt;
  active = ph_car&lt;br /&gt;
&lt;br /&gt;
  [ph_car]&lt;br /&gt;
  usable = {+val_actor_has_car_key}&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;
  Пример логики&lt;br /&gt;
&lt;br /&gt;
  [ph_oscillate]&lt;br /&gt;
  joint = provod   - имя кости к которой будет применена сила&lt;br /&gt;
  force = 5         - собственно сила (в ньютонах)&lt;br /&gt;
  period = 1000    - время прикладывания силы.&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;
Под смарттеррейном мы понимаем зону, зайдя в которую, сталкер на некоторое время попадает под гулаг и начинает выполнять работу, предусмотренную этим гулагом. После некоторого времени он выходит из-под гулага и ходит свободно.&lt;br /&gt;
&lt;br /&gt;
Как поставить smart terrain?&lt;br /&gt;
Для всех smart terrain нужно:&lt;br /&gt;
1)	Поставить smart terrain с необходимым shape. Большой shape не рекомендуется (размер влияет на производительность).&lt;br /&gt;
2)	В его custom data прописать настройки.&lt;br /&gt;
3)	Расставить пути для соответствующих схем поведения. &lt;br /&gt;
&lt;br /&gt;
Параметры custom data:&lt;br /&gt;
 [gulag1] &lt;br /&gt;
type = тип гулага&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;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
Имена путей для схем поведения всегда должны начинаться с имени данного smart terrain. Например, esc_smart_ambush_vagon_sleep.&lt;br /&gt;
&lt;br /&gt;
Если пути для smart terrain на нескольких человек (campers, walkers), то их имена должны заканчиваться всегда на цифру (esc_smart_ambush_vagon_walk1, esc_smart_ambush_vagon_walk2) &lt;br /&gt;
&lt;br /&gt;
Гулагов под одним smart terrain может быть несколько. Их можно настраивать в секциях [gulag2], [gulag3] и т.д. При входе сталкера под smart terrain будет случайно выбран один из доступных на данный момент гулагов.&lt;br /&gt;
&lt;br /&gt;
3.11.1.1. Стандартные типы смарттеррейнов.&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтоб сталкер не захватывался, допишите ему в custom data следующую строку:&lt;br /&gt;
	[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
Если сталкер уже под каким-то smart terrain, то остальные smart terrain он будет игнорировать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
campers&lt;br /&gt;
Кемперы. custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = campers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
camper_walk1, camper_look1&lt;br /&gt;
camper_walk2, camper_look2&lt;br /&gt;
camper_walk3, camper_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
walkers&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = walkers&lt;br /&gt;
capacity = от 1 до 3&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
walker_walk1, walker_look1&lt;br /&gt;
walker_walk2, walker_look2&lt;br /&gt;
walker_walk3, walker_look3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
search&lt;br /&gt;
Ходячие. На базе этого можна сделать поиск, обыск и куча всего.&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = search&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
search_walk, search_look&lt;br /&gt;
&lt;br /&gt;
Схема следующая:&lt;br /&gt;
1.	Персонаж ходит по точкам, смотрит по сторонам&lt;br /&gt;
2.	В определенных точках останавливается и что-то высматривает (caution, search, hide)&lt;br /&gt;
3.	При этом говорит определенные реплики (…)&lt;br /&gt;
&lt;br /&gt;
rest&lt;br /&gt;
Отдых. Сталкер по очереди то sleeper, то walker, то rest(ест еду, пьёт водку).&lt;br /&gt;
custom data:&lt;br /&gt;
[gulag1]&lt;br /&gt;
type = rest&lt;br /&gt;
capacity = 1&lt;br /&gt;
&lt;br /&gt;
Пути:&lt;br /&gt;
rest – путь из двух вершинок (возможно из 1). В одной сидит, в другую смотрит.&lt;br /&gt;
sleep - путь из двух вершинок (возможно из 1). В одной спит, в другую смотрит.&lt;br /&gt;
rest_walk, rest_look&lt;br /&gt;
&lt;br /&gt;
3.11.2. Гулаги.&lt;br /&gt;
Гулаг - средство объединения нескольких сталкеров под централизованным управлением. Основные особенности: &lt;br /&gt;
А) Есть список работ гулага. Работа - настроенная схема поведения (или цепочка схем поведения); &lt;br /&gt;
Б) Работы имеют приоритеты; &lt;br /&gt;
В) Гулаг назначает на работы сталкеров входящих в гулаг, начиная с работ с наивысшим приоритетом; &lt;br /&gt;
Г) Гулаг имеет состояния. Каждое состояние характеризуется своим набором работ, отличным от набора работ в любом другом состоянии гулага.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Гулаг создается следующим образом:&lt;br /&gt;
&lt;br /&gt;
1. Необходимо четко определить набор состояний гулага: день, ночь, спокойное, при тревоге и так далее. Для простых гулагов достаточно одного состояния, для крутых и сложных – желательно разные. Это придает разнообразия и смотрится лучше.&lt;br /&gt;
&lt;br /&gt;
2. Определяем  максимальное количество людей, которым гулаг может управлять. То есть определяем вместимость гулага. Она должна быть такой, чтобы в любом состоянии гулага гарантированно нашлось занятие для каждого человека.&lt;br /&gt;
&lt;br /&gt;
3. Для каждого состояния гулага определяется набор работ. Эти работы могут быть как активного плана (часовой, патруль, и так далее), так и пассивного плана (сидят вокруг костра, спят). Каждая работа имеет свой приоритет. Соответственно пассивные работы должны иметь меньший приоритет.&lt;br /&gt;
&lt;br /&gt;
4. Ставится в редакторе количество людей, которые должны быть под гулагом, и накрываются зонкой smart_terrain (источник ошибок – иногда ставят space_restictor). Зонке нужно давать осмысленное название. Это же название будет являться префиксом к названием всех патрульных путей, относящихся к этому же гулагу. Например если вы назвали зонку esc_blockpost, то все патрульные пути должны начинаться с этого префикса, например esc_blockpost_guard_walk. В custom_data зоны необходимо прописать настройку гулага.&lt;br /&gt;
[gulag1] &lt;br /&gt;
type = тип гулага&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;
*respawn = имя респауна (вызывает респаунер с заданым именем каждый раз, когда кто-то из самрттеррейна заступает на работу)&lt;br /&gt;
&lt;br /&gt;
Capacity нужно задавать всегда. Она может быть равна или меньше числа работ.&lt;br /&gt;
Указывать тип гулага нужно без кавычек.&lt;br /&gt;
Полем offline можно задать, чтоб гулаг не образовывался в офлайн. Т.е. существовать в офлайн он может, а образовываться – нет.&lt;br /&gt;
Если не задан squad или groups, то соответствующие свойства сталкеров не будут изменяться.&lt;br /&gt;
Все времена задаются в часах игрового времени и могут быть дробными.&lt;br /&gt;
&lt;br /&gt;
5. В скрипте \gamedata\scripts\gulag_название_уровня.script необходимо прописать условия, при которых сталкеры берутся под конкретный гулаг. В функцию checkNPC необходимо прописать условие:&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;
&lt;br /&gt;
В эту функцию пока передается два параметра, тип гулага и комьюнити персонажа. В данном случае под гулаг с типом gar_dolg будут приниматься все персонажи, относящиеся к группировке Долг.&lt;br /&gt;
&lt;br /&gt;
6. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать переключение состояний гулага. &lt;br /&gt;
&lt;br /&gt;
function loadStates(gname, type)&lt;br /&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;
В данном случае если сейчас между 7 и 22 часов, то гулаг находится в дневном состоянии, иначе в ночном.&lt;br /&gt;
&lt;br /&gt;
8. В файле \gamedata\scripts\gulag_название_уровня.script необходимо описать должности гулага. В функции loadJob загружаются все допустимые работы. В саму функцию передаются следующие параметры:&lt;br /&gt;
function loadJob(sj, gname, type, squad, groups)&lt;br /&gt;
sj – сама табличка работ гулагов,&lt;br /&gt;
gname – имя нашей зонки смар-тиррейна. Оно используется как префикс.&lt;br /&gt;
Type – тип гулага&lt;br /&gt;
Squad, groups – таблички сквадов и групп, если нам нужно переопределять родные группы сталкеров на какие либо другие. В каждой работе можно указать какой сквад и группа сетится сталкеру при установке на работу.&lt;br /&gt;
&lt;br /&gt;
Примерное описание работ гулага:&lt;br /&gt;
Данный гулаг описывает поведение только одного человека, обычно их гораздо больше. Данный человек в нулевом состоянии(день) делает одну работу, в первом состоянии(ночь) делает другую работу.&lt;br /&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 =  “”&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 =  “”&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(sj, t)		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
Описание полей:&lt;br /&gt;
Idle – пауза между повторным выполнениями одного и того же задания. В данном случае паузы нет. Обычно пауза ставится на патруль.&lt;br /&gt;
Prior – приоритет задания. Сперва сталкеры занимают более приоритетные задания. Чем больше число, тем выше приоритет.&lt;br /&gt;
In_rest, out_rest   -  рестрикторы, которые устанавливаются персонажу на данное задание.&lt;br /&gt;
Section – секция в \gamedata\config\misc\gulag_название_уровня.ltx,  где указываются реальные настройки схемы поведения, которая соответствует текущей работе.&lt;br /&gt;
Group сталкера будет выбран из массива groups, который задан в custom data. Массив индексируется начиная с 1.&lt;br /&gt;
Info_rest – задает ся имя рестриктора и все денжеры снаружи этого рестриктора не попадают внутрь для человека, находящегося на этой работе&lt;br /&gt;
Также в описании работы может быть указаны дополнительные условия, при которых сталкер может занять данную работу. Например: &lt;br /&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;
то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. В \gamedata\config\misc\gulag_название_уровня.ltx необходимо указать, какие схемы поведения соответсвуют той или иной работе. Например в случае с вышерассмотренным гулагом gar_maniac:&lt;br /&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;
&lt;br /&gt;
Настройка здесь соответствует настроке в обычной кастом дате сталкера, с разницей:&lt;br /&gt;
1)	пути следует указывать без префикса. То есть если зонка носила название gar_maniac, то пути следует на уровне ставить с названием gar_maniac_walk1, однако в gamedata\config\misc\gulag_название_уровня.ltx следует указывать только walk1.&lt;br /&gt;
2)	в именах секций схем поведения после @ добавлять название гулага и, возможно, дополнительные сведения (например, walker2@rad_antena_gate)&lt;br /&gt;
3)	в именах секций logic для каждой работы добавлять после @ имя гулага, дополнительные сведения и имя секции активной схемы поведения (например, logic@rad_antena_gate_walker2).&lt;br /&gt;
&lt;br /&gt;
В работах для гулагов поля leader больше нет. Есть поле dependent. Работа может быть занята только тогда, когда работа с именем dependent уже занята. Например, follower может быть назначен только тогода, когда уже кто-то назначен на работу лидера (имя работы лидера теперь в поле dependent). Естественно, что приоритет работ, от которых зависят другие, должен быть больше чем у них.&lt;br /&gt;
&lt;br /&gt;
3.11.3. Новые особенности смарттеррейнов&lt;br /&gt;
Возможности нового смарттеррейна (СТ):&lt;br /&gt;
&lt;br /&gt;
1) Не держит сталкеров постоянно в онлайне. Работает стандартный онлайн-радиус.&lt;br /&gt;
2) Сталкеры идут на ближайшие работы.&lt;br /&gt;
3) На места работ сталкеры идут независимо от того, в онлайне они или в оффлайне.&lt;br /&gt;
4) СТ в офлайне работает так же, как и в онлайне: выполняет переключение своих состояний, перераспределение работ.&lt;br /&gt;
5) Сталкерам можно прописать, при каких условиях в какие СТ они могут идти. (см. ниже) Если сталкер попал в СТ, то онбудет находится в нём, пока не истечёт время и выполняется условие.&lt;br /&gt;
6) Работы могут находиться на разных уровнях.&lt;br /&gt;
7) Скриптовая зона СТ теперь не используется для захвата персонажей.&lt;br /&gt;
8) Симуляция заключается в миграции персонажей между разными СТ.&lt;br /&gt;
&lt;br /&gt;
Что нужно переделать:&lt;br /&gt;
&lt;br /&gt;
1) Персонажи могут быть двух типов: либо для СТ, либо для самостоятельной работы под логикой из custom data. У первых логики в custom data не должно быть. У вторых должно быть прописано, что они не хотят ни в один СТ. (см ниже)&lt;br /&gt;
2) Нельзя под СТ отправлять сталкеров в nil. Вместо nil дайте им пути. Например, walker-ы в рестрикторе вместо nil в рестрикторе. (есть abort на такой случай)&lt;br /&gt;
3) Всех участников созданных сцен поставьте рядом с местами работ, а не в кучу. Так им не придётся полчаса разбредаться по местам работ: они сразу позанимают ближайшие. В custom data им пропишите, что до окончания сцены они могут быть только в этом СТ. (см. ниже)&lt;br /&gt;
4) Незначительно переделать функции predicate() и функции переключения состояния СТ. (см. ниже)&lt;br /&gt;
5) Проследите, чтоб под СТ в логиках в поле active было прописано только имя секции и ничего больше (никаких там процентов и фигурных скобок). Для персонажей не предназначенных под СТ это не играет роли.&lt;br /&gt;
6) Переименуйте в custom data СТ секцию [gulag1] в секцию [smart_terrain].&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;. Пример:&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
strn_1 = условие1&lt;br /&gt;
strn_2 = условие2&lt;br /&gt;
&lt;br /&gt;
Если для какого-то smart_terrain условие выполнилось, он называется эксклюзивным.&lt;br /&gt;
Если у объекта появился хоть один эксклюзивный smart terrain, то он будет согласен идти только в него.&lt;br /&gt;
Если не появилось ни одного эксклюзивного, то он согласен идти в любой.&lt;br /&gt;
&lt;br /&gt;
Есть зарезервированное сочетание &amp;quot;none=true&amp;quot;. Если оно указано, то персонаж никогда не пойдёт ни в один СТ. Такой персонаж будет работать только под своей логикой.&lt;br /&gt;
&lt;br /&gt;
Также можно задать, кого принимает СТ. В дополнение к старому механизму (функции checkNpc() в файлах gulag_*.script) можно в custom data СТ написать:&lt;br /&gt;
&lt;br /&gt;
communities = группирвка1, группировка2, ...&lt;br /&gt;
&lt;br /&gt;
Если это поле не задано, то проверяется старым механизмом. Если задано, то под СТ возьмутся только персонажи указанных группировок (учтите, старый механизм тоже вызовется).&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций predicate() ----&lt;br /&gt;
&lt;br /&gt;
В эти функции вместо game_object будет передаваться табличка с информацией о персонаже. Там есть поля:&lt;br /&gt;
name&lt;br /&gt;
community&lt;br /&gt;
class_id&lt;br /&gt;
story_id&lt;br /&gt;
profile_name&lt;br /&gt;
&lt;br /&gt;
Если нужно, чтобы работа занималась только снайперами, то в предикате нужно писать:&lt;br /&gt;
&lt;br /&gt;
predicate = function(npc_info)&lt;br /&gt;
        return npc_info.is_sniper == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Изменение функций переключения состояния СТ ----&lt;br /&gt;
&lt;br /&gt;
Обращайтесь индивидуально. Все переделки связаны с работой этой функции в офлайне. Например, таблица gulag.Object[] не содержит game_object-ы, если персонаж в офлайне и т.п.&lt;br /&gt;
&lt;br /&gt;
---- Состояния работ online/offline&lt;br /&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;
&lt;br /&gt;
Варианты задания этого поля&lt;br /&gt;
online = true - на этой работе персонаж всегда в онлайне,&lt;br /&gt;
online = false - на этой работе персонаж всегда в офлайне,&lt;br /&gt;
online не задано - на этой работе персонаж может прыгать онлайн&amp;lt;-&amp;gt;офлайн по своему усмотрению.&lt;br /&gt;
3.11.3.1. Более доступное описание новых смарттеррейнов&lt;br /&gt;
	Теперь о смарттерейнов для дизанеров, то есть не на LUA, а по-русски.&lt;br /&gt;
Для того, чтобы пренести смарттеррейн на новую схему, делаем следующее:&lt;br /&gt;
1. Пишем в кастом дате где [gulag1] -&amp;gt; [smart_terrain]&lt;br /&gt;
2. В кастом дате товарищей по смарттеррейну пишем &lt;br /&gt;
[smart_terrains]&lt;br /&gt;
sar_monolith_sklad(название гулага) = {кондлист} - если только в 1 смарттеррейн сталкер сможет прийти, то пишем true.&lt;br /&gt;
Если этот товарищ не должен работать под смарттеррейнами, то пишем ему в кастом дату.&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
none = true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.12. Логика вертолёта&lt;br /&gt;
Общие сведения:&lt;br /&gt;
&lt;br /&gt;
Вертолёт работает на «логике».&lt;br /&gt;
На вертолёт реагируют аномалии.&lt;br /&gt;
Вертолёт не обрабатывает столкновения с геометрией и физикой пока он не сбит.&lt;br /&gt;
Попадания в область кабины, где сидит первый пилот, в десятки раз более болезненны для вертолёта.&lt;br /&gt;
 У вертолёта есть универсальная боевая схема на манер сталкеров.&lt;br /&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;
&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]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
meet_state_wpn 	= 30| state@sound| 20| state@sound| 10| state@sound&lt;br /&gt;
victim 			= 30| nil| 20| actor&lt;br /&gt;
victim_wpn 		= 30| nil| 20| actor&lt;br /&gt;
use			= self&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
zone			= name| state@sound&lt;br /&gt;
meet_dialog		= dialog_id&lt;br /&gt;
synpairs		= state@sound|state@sound&lt;br /&gt;
abuse			= true/false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся настройка встречи отныне будет производится в отдельной секции. В секции logic или в текущей схеме можно будет указать, какую именно секцию с настройкой нужно использовать. Секция, которая указана в секции logic будет влиять на обработку встречи свободногулящим сталкером.&lt;br /&gt;
&lt;br /&gt;
Перечень полей:&lt;br /&gt;
meet_state, meet_state_wpn – задает анимацию и озвучку персонажа, в зависимости от расстояния до актера. Для случая если актер безоружен либо вооружен соответственно.&lt;br /&gt;
victim, victim_wpn – задает объект, на который должен будет смотреть персонаж. Возможные параметры: nil – никуда не смотрит, actor – смотрит на игрока, story_id – номер стори айди персонажа, на которого нужно будет смотреть.&lt;br /&gt;
use, use_wpn – настройки юзабельности персонажа. Возможны три варианта: true, false, self. При self НПС сам юзнет игрока, как только сможет дотянуться &lt;br /&gt;
zone – Содержит набор имен рестрикторов, а также анимаций и озвучки, которую НПС будет отыгрывать, если игрок будет замечен в рестрикторе&lt;br /&gt;
meet_dialog – стартовый диалог НПС.&lt;br /&gt;
synpairs – cодержит набор пар состояние_тела@звуковая_тема. Если при каком то наборе условий встреча будет отыгрывать именно это состояние и эту звуковую тему – то они будут синхронизироваться по рандомным анимациям состояния тела.&lt;br /&gt;
аbuse – по умолчанию true, если false, то неюзающийся противник не будет обижаться.&lt;br /&gt;
Любую строку(в общей схеме они написаны строчными буквами) можно задавать кондлистом. ( {+info1 –info2} ward %+info%  )&lt;br /&gt;
&lt;br /&gt;
Для облегчения настройки встречи сделана возможность упрощенного  задания дефолта:&lt;br /&gt;
&lt;br /&gt;
  [walker]&lt;br /&gt;
  meet = default_meet&lt;br /&gt;
&lt;br /&gt;
 	Саму секцию [default_meet] задавать не надо. Все настройки и так  возьмутся из дефолта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&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]&lt;br /&gt;
meet_state 		= 50| hello@talk_hello| 20| wait@wait| 10| ward@wait&lt;br /&gt;
meet_state_wpn 	= 50| hello@talk_hello| 20| threat@threat_weap&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Ситуация 2&lt;br /&gt;
	Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state		= 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state&lt;br /&gt;
meet_state_wpn 	= 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait&lt;br /&gt;
victim 			= 50| actor&lt;br /&gt;
victim_wpn 		= 50| actor&lt;br /&gt;
use			= {-info2} self, false&lt;br /&gt;
use_wpn		= false&lt;br /&gt;
&lt;br /&gt;
Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС&lt;br /&gt;
Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.&lt;br /&gt;
Killactor – функция в xr_effects которая обижает НПС на игрока.&lt;br /&gt;
&lt;br /&gt;
Ситуация 3&lt;br /&gt;
	Персонаж ходит по патрульному пути на заставе лагеря. Если игрок имеет допуск в лагерь – пропускает его и здоровается, иначе сперва отпугивает, а если игрок пробрался в лагерь – то обижается на него. При этом диалог зависит от того, имеет игрок допуск в лагерь или нет.&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
path_walk = path_walk&lt;br /&gt;
path_look = path_look&lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[meet]&lt;br /&gt;
meet_state 		= 30| {+info} wait, threat@ {+info} talk_hello, threat_back&lt;br /&gt;
meet_state_wpn 	= 30| {+info} wait, threat@ {+info} talk_hello, threat_back &lt;br /&gt;
victim 			= 30| actor&lt;br /&gt;
victim_wpn 		= 30| actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
zone			= warnzone| {-info} threat@ {-info} threat_back|kampzone| {-info} true@ {-info} talk_abuse&lt;br /&gt;
meet_dialog		= {+info} dialog1, dialog2&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
True – вместо анимации, атаковать игрока.&lt;br /&gt;
Info – Инфопоршн, который говорит что мы имеем допуск к лагерю&lt;br /&gt;
Warnzone – рестриктор, в котором нас предупреждают&lt;br /&gt;
Kampzone – рестриктор, в котором нас убивают&lt;br /&gt;
Dialog1 – стартовый диалог НПС, если мы имеем допуск в лагерь&lt;br /&gt;
Dialog2 – стартовый диалог НПС, если мы не имеем допуск в лагерь.&lt;br /&gt;
Дефолтные настройки:&lt;br /&gt;
	По дефолту встреча настроена со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
		meet_state		= 30|hello@hail|20|wait@wait&lt;br /&gt;
		meet_state_wpn	= 30|backoff@threat_weap&lt;br /&gt;
		victim		= 30|actor&lt;br /&gt;
		victim_wpn		= 30|actor&lt;br /&gt;
		use			= true&lt;br /&gt;
		use_wpn		= false&lt;br /&gt;
		syndata		= hello@hail|backoff@threat_weap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NB: Если нужно, чтобы сталкер не разговаривал с игроком в данной секции, необходимо прописать ему meet = no_meet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.14.	Отметки на минимапе&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать синие и красные точки). Для этого в секции логики или в текущей схеме указываем параметр:&lt;br /&gt;
&lt;br /&gt;
[camper]&lt;br /&gt;
show_spot = false (будучи в этой секции сталкер не показывается на карте)&lt;br /&gt;
&lt;br /&gt;
[walker]&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) - проверка дистанции до обьекта заданного&lt;br /&gt;
    story_id. &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]&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)&lt;br /&gt;
is_alive_one(sid1:sid2:...)&lt;br /&gt;
is_alive_all(sid1:sid2:...) - проверка того, что один, один из нескольких или все из списка соответственно npc, заданные по story_id живы&lt;br /&gt;
&lt;br /&gt;
is_dead(sid)&lt;br /&gt;
is_dead_one(sid1:sid2:...)&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. Параметры:&lt;br /&gt;
   	 direction - если строка, то считается, что это имя пути и в сторону первой точки производится толчек. Если же это число,  то оно рассматривается как story_id персонажа от которого должен поступить хит.&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:...)&lt;br /&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())&lt;br /&gt;
Дать обьекту, заданому story_id, хит. Отличается тем, что может прописываться в любой кастом дате. Параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]&lt;br /&gt;
    1. sid - story_id обьекта, по которому наносится хит.&lt;br /&gt;
    2. bone - строка. Имя кости, по которой наносится удар.&lt;br /&gt;
    3. power - сила удара&lt;br /&gt;
    4. impulse - импульс&lt;br /&gt;
    5. hit_src (необязательный параметр) - точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.&lt;br /&gt;
&lt;br /&gt;
actor_has_item(section)&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;
Параметры:&lt;br /&gt;
   -- weapon - спрятать/показать руки с оружием&lt;br /&gt;
   -- input - отключить/включить клавиатуру&lt;br /&gt;
   -- hud - спрятать/показать индикаторы на экране&lt;br /&gt;
   -- all - отключить/включить все элементы&lt;br /&gt;
&lt;br /&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 (вызываются без скобок и параметров).&lt;br /&gt;
   Аналогичны вызовам disable_ui_elements(all), enable_ui_elements(all) соответственно.&lt;br /&gt;
&lt;br /&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;
Пример:&lt;br /&gt;
on_info = %=run_cam_effector(prison_0)%&lt;br /&gt;
&lt;br /&gt;
Функция запуска постпроцесса.&lt;br /&gt;
&lt;br /&gt;
В связи с изменением процесса создания постпроцессов были внесены изменения в их запуск.&lt;br /&gt;
  Теперь есть 2 функции для работы с постпроцессами:&lt;br /&gt;
&lt;br /&gt;
  run_postprocess(file_name:id:loop) - запуск постпроцесса.&lt;br /&gt;
&lt;br /&gt;
  -- file_name - имя файла постпроцесса (без расширения) из папки s:\gamedata\anims. Указывается без расширения.&lt;br /&gt;
  -- id - номер постпроцесса. Задается опционально. Используется в stop_postprocess.&lt;br /&gt;
  -- loop - (true/false) определяет зацикленность постпроцесса. Опциональный параметр. По умолчанию false.&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;
Пример:&lt;br /&gt;
on_info = %=drop_actor_inventory(drop_point)%&lt;br /&gt;
3.16. Настройка звуковых групп.&lt;br /&gt;
	Новый принцип создания звуковых групп:&lt;br /&gt;
1. Каждый персонаж по умолчанию считается находящимся в уникальной саундгруппе.&lt;br /&gt;
2. Для того, чтобы объеденить нескольких персонажей в единую саундгруппу, необходимо в секции логики прописать soundgroup = &amp;lt;текстовая строка&amp;gt;&lt;br /&gt;
Звуковые группы должны быть уникальными в пределах уровня, а еще лучше в пределах всей игры. Для этого указывайте в звуковой группе идентификатор уровня и сценки, например:&lt;br /&gt;
soundgroup = bar_dolg_kampfire1&lt;br /&gt;
3. Объеденять в звуковые группы необходимо персонажей сидящих в кемпе и идущих в патрулях. А также при других схожих ситуациях. &lt;br /&gt;
4. Дабы избежать ошибок при обижании, наподобие той, которая сейчас проявляется в лагере на эксейпе, необходимо чтобы все НПС, логически относящиеся к одному лагерю имели одинаковый team, squad, group&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
[kamp@esc_bridge_post1]&lt;br /&gt;
center_point = kamp_point&lt;br /&gt;
soundgroup = esc_bridge_soldiers&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:30:26Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: /* Ссылки и дополнительный материал */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
== Нюансы ==&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
'''ACDC''' - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
'''Added by Loxotron'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:30:14Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: /* Ссылки и дополнительный материал */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
== Нюансы ==&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
'''ACDC''' - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
'''Added by Loxotron'''&lt;br /&gt;
&lt;br /&gt;
'''Added by Loxotron'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:30:05Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: /* Ссылки и дополнительный материал */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
== Нюансы ==&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
'''ACDC''' - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
'''Added by Loxotron'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:27:44Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: /* Нюансы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
== Нюансы ==&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
'''ACDC''' - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:27:29Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: /* Суть идеи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
== Нюансы ==&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
'''ACDC''' - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:26:50Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: /* Ссылки и дополнительный материал */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
'''ACDC''' - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:26:37Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: /* Ссылки и дополнительный материал */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
'''ACDC''' - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:26:07Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: /* Ссылки и дополнительный материал */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
ACDC - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:25:29Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
==Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
ACDC - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:25:00Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Суть идеи ==&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
=Ссылки и дополнительный материал==&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
ACDC - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:22:19Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). &lt;br /&gt;
Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
*Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
*Дополнительная инфа&lt;br /&gt;
ACDC - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:20:22Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn, ссылка в ветке про bfa). Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Здесь пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно):&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же acdc.pl методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
**Дополнительные ссылки&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]&lt;br /&gt;
&lt;br /&gt;
**Дополнительная инфа&lt;br /&gt;
ACDC - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:11:39Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn, ссылка в ветке про bfa). Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Здесь пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно):&lt;br /&gt;
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же acdc.pl методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:05:24Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn, ссылка в ветке про bfa). Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Здесь пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно):&lt;br /&gt;
http://ifolder.ru/2817099&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же acdc.pl методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:03:44Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn, ссылка в ветке про bfa). Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Здесь пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно):&lt;br /&gt;
http://ifolder.ru/2817099&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же acdc.pl методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0</id>
		<title>SoC. Один из методов спавна</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%B8%D0%BD_%D0%B8%D0%B7_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0"/>
				<updated>2007-08-14T19:03:17Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.25.142: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Made by Bardak'''&lt;br /&gt;
&lt;br /&gt;
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.&lt;br /&gt;
&lt;br /&gt;
Идея проста.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lua&amp;gt;1) Создаём объект стандартным методом:&lt;br /&gt;
local obj = alife():create(...)&lt;br /&gt;
&lt;br /&gt;
2) Создаём экземпляр класса net_packet:&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
3) Сохраняем состояние объекта в пакет:&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
4) Считываем _все_ сохраняемые свойства в переменные:&lt;br /&gt;
local property1 = packet:r_u32()&lt;br /&gt;
...&lt;br /&gt;
local propertyN = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:&lt;br /&gt;
packet:w_u32(property1)&lt;br /&gt;
...&lt;br /&gt;
propertyN = new_value&lt;br /&gt;
packet:w_float(propertyN)&lt;br /&gt;
&lt;br /&gt;
6) Считываем модифицированное состояние объекта:&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read &amp;quot;классов&amp;quot; cse_alife_... в acdc.pl (это альтернативный редактор all.spawn, ссылка в ветке про bfa). Но там могут быть ошибки.&lt;br /&gt;
&lt;br /&gt;
Здесь пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно):&lt;br /&gt;
http://ifolder.ru/2817099&lt;br /&gt;
&lt;br /&gt;
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.&lt;br /&gt;
&lt;br /&gt;
Нюансы:&lt;br /&gt;
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же acdc.pl методы update_read (если есть).&lt;br /&gt;
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>78.106.25.142</name></author>	</entry>

	</feed>