<?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=Erlik</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=Erlik"/>
		<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/Erlik"/>
		<updated>2026-04-29T17:32:31Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B8%D1%82%D1%8C_%D0%BC%D0%B5%D1%80%D1%82%D0%B2%D0%B5%D1%86%D0%B0</id>
		<title>Как заспавнить мертвеца</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B8%D1%82%D1%8C_%D0%BC%D0%B5%D1%80%D1%82%D0%B2%D0%B5%D1%86%D0%B0"/>
				<updated>2011-02-18T20:38:02Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* в ТЧ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== в ТЧ ====&lt;br /&gt;
Делаем всё так как написано в [[All.spawn. Создание NPC|этой]] статье.&amp;lt;br /&amp;gt;&lt;br /&gt;
только вместо health = 1 и upd:health = 1&amp;lt;br /&amp;gt;&lt;br /&gt;
ставим health = 0 и upd:health = 0&amp;lt;br /&amp;gt;&lt;br /&gt;
--*****************************************************&lt;br /&gt;
&lt;br /&gt;
'''Прим. от Erlik''' ''В ТЧ тоже есть метод для спавна трупа:''&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
local obj= alife():create(&amp;quot;stalker&amp;quot;, pos, lvid, gvid)  -- позиция и вертексы&lt;br /&gt;
obj:on_death()&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== в ЧН ====&lt;br /&gt;
Можно так же как и в ТЧ. Или без редактирования all.spawn:&amp;lt;br /&amp;gt;&lt;br /&gt;
Создать НПС, добавить его в character_desc_*****.xml, npc_profile.xml и spawn_sections.ltx&amp;lt;br /&amp;gt;&lt;br /&gt;
В последнем файле (spawn_sections.ltx) добавить НПС свою логику.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ID_непися]:stalker&lt;br /&gt;
$spawn = &amp;quot;respawn\ID_непися&amp;quot;&lt;br /&gt;
character_profile = ID_непися ;из character_desc_*****.xml&lt;br /&gt;
custom_data = scripts\скриптовая_логика_нпс.ltx ;из gamedata\configs\scripts\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в gamedata\configs\scripts\ создать логику для нашего мертвеца:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker@1&lt;br /&gt;
&lt;br /&gt;
[walker@1]&lt;br /&gt;
path_walk = где_стоит&lt;br /&gt;
path_look = куда_смотрит&lt;br /&gt;
combat_ignore_cond = true&lt;br /&gt;
on_info = %=kill_npc()%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно также сделать, чтобы НПС помер после выдачи инфопорции:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker@1&lt;br /&gt;
&lt;br /&gt;
[walker@1]&lt;br /&gt;
path_walk = где_стоит&lt;br /&gt;
path_look = куда_смотрит&lt;br /&gt;
combat_ignore_cond = true&lt;br /&gt;
on_info = {+инфопорция} %=kill_npc()%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== в ЗП ====&lt;br /&gt;
В ЗП для этого даже есть специальная функция:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
=spawn_corpse(ID_непися:walk_поинт_для_спавна)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логике она может выглядеть вот так:&amp;lt;br /&amp;gt;&lt;br /&gt;
Спавн с самого начала игры&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_info = sr_idle@end %=spawn_corpse(ID_непися:walk_поинт_для_спавна)%&lt;br /&gt;
&lt;br /&gt;
[sr_idle@end]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Или спавн после выдачи определённой инфопрорции&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_info = {+инфопорция} sr_idle@end %=spawn_corpse(ID_непися:walk_поинт_для_спавна)%&lt;br /&gt;
&lt;br /&gt;
[sr_idle@end]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автор [[Участник:THE_ATLAS|THE_ATLAS]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные файлы]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B8%D1%82%D1%8C_%D0%BC%D0%B5%D1%80%D1%82%D0%B2%D0%B5%D1%86%D0%B0</id>
		<title>Как заспавнить мертвеца</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B8%D1%82%D1%8C_%D0%BC%D0%B5%D1%80%D1%82%D0%B2%D0%B5%D1%86%D0%B0"/>
				<updated>2011-02-18T20:36:41Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* в ТЧ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== в ТЧ ====&lt;br /&gt;
Делаем всё так как написано в [[All.spawn. Создание NPC|этой]] статье.&amp;lt;br /&amp;gt;&lt;br /&gt;
только вместо health = 1 и upd:health = 1&amp;lt;br /&amp;gt;&lt;br /&gt;
ставим health = 0 и upd:health = 0&amp;lt;br /&amp;gt;&lt;br /&gt;
--*****************************************************&lt;br /&gt;
&lt;br /&gt;
''В ТЧ тоже есть метод для спавна трупа:''&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
local obj= alife():create(&amp;quot;stalker&amp;quot;, pos, lvid, gvid)  -- позиция и вертексы&lt;br /&gt;
obj:on_death()&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== в ЧН ====&lt;br /&gt;
Можно так же как и в ТЧ. Или без редактирования all.spawn:&amp;lt;br /&amp;gt;&lt;br /&gt;
Создать НПС, добавить его в character_desc_*****.xml, npc_profile.xml и spawn_sections.ltx&amp;lt;br /&amp;gt;&lt;br /&gt;
В последнем файле (spawn_sections.ltx) добавить НПС свою логику.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ID_непися]:stalker&lt;br /&gt;
$spawn = &amp;quot;respawn\ID_непися&amp;quot;&lt;br /&gt;
character_profile = ID_непися ;из character_desc_*****.xml&lt;br /&gt;
custom_data = scripts\скриптовая_логика_нпс.ltx ;из gamedata\configs\scripts\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в gamedata\configs\scripts\ создать логику для нашего мертвеца:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker@1&lt;br /&gt;
&lt;br /&gt;
[walker@1]&lt;br /&gt;
path_walk = где_стоит&lt;br /&gt;
path_look = куда_смотрит&lt;br /&gt;
combat_ignore_cond = true&lt;br /&gt;
on_info = %=kill_npc()%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно также сделать, чтобы НПС помер после выдачи инфопорции:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker@1&lt;br /&gt;
&lt;br /&gt;
[walker@1]&lt;br /&gt;
path_walk = где_стоит&lt;br /&gt;
path_look = куда_смотрит&lt;br /&gt;
combat_ignore_cond = true&lt;br /&gt;
on_info = {+инфопорция} %=kill_npc()%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== в ЗП ====&lt;br /&gt;
В ЗП для этого даже есть специальная функция:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
=spawn_corpse(ID_непися:walk_поинт_для_спавна)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логике она может выглядеть вот так:&amp;lt;br /&amp;gt;&lt;br /&gt;
Спавн с самого начала игры&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_info = sr_idle@end %=spawn_corpse(ID_непися:walk_поинт_для_спавна)%&lt;br /&gt;
&lt;br /&gt;
[sr_idle@end]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Или спавн после выдачи определённой инфопрорции&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_info = {+инфопорция} sr_idle@end %=spawn_corpse(ID_непися:walk_поинт_для_спавна)%&lt;br /&gt;
&lt;br /&gt;
[sr_idle@end]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автор [[Участник:THE_ATLAS|THE_ATLAS]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные файлы]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A0%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_Bind_%D0%B8%D0%BB%D0%B8_%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_Infoportions</id>
		<title>Обсуждение:Разбор Bind или новая замена Infoportions</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A0%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_Bind_%D0%B8%D0%BB%D0%B8_%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_Infoportions"/>
				<updated>2011-01-12T12:27:57Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;А тут обсуждаем статью.&lt;br /&gt;
&lt;br /&gt;
Любопытно было бы  узнать, а чем автора InfoScripts не устраивает запись в pstor? Если, конечно, он он вообще знает об этом.&lt;br /&gt;
Запись &lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
if xr_logic.pstor_retrieve(db.actor, &amp;quot;first_spawn&amp;quot;, 0)==0 then&lt;br /&gt;
тут что делаем&lt;br /&gt;
xr_logic.pstor_store(db.actor, &amp;quot;first_spawn&amp;quot;, 1)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
прекрасно заменяет инфопоршни. И pstor вообще достаточно удобное место для хранения своих данных.&lt;br /&gt;
&lt;br /&gt;
'''Erlik'''&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A0%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_Bind_%D0%B8%D0%BB%D0%B8_%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_Infoportions</id>
		<title>Обсуждение:Разбор Bind или новая замена Infoportions</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A0%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_Bind_%D0%B8%D0%BB%D0%B8_%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0_Infoportions"/>
				<updated>2011-01-12T12:27:38Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;А тут обсуждаем статью.&lt;br /&gt;
&lt;br /&gt;
Любопытно было бы  узнать, а чем автора InfoScripts не устраивает запись в pstor? Если, конечно, он он вообще знает об этом.&lt;br /&gt;
Запись &lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
if xr_logic.pstor_retrieve(db.actor, &amp;quot;first_spawn&amp;quot;, 0)==0 then&lt;br /&gt;
тут что делаем&lt;br /&gt;
xr_logic.pstor_store(db.actor, &amp;quot;first_spawn&amp;quot;, 1)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
прекрасно заменяет инфопоршни. И pstor вообще достаточно удобное место для хранения своих данных.&lt;br /&gt;
'''Erlik'''&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%97%D0%B2%D1%83%D0%BA_%D0%BF%D1%80%D0%B8_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0</id>
		<title>Звук при использовании предмета</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%97%D0%B2%D1%83%D0%BA_%D0%BF%D1%80%D0%B8_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0"/>
				<updated>2011-01-10T15:16:56Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создаете скрипт '''имя_файла.script''', туда пишете:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function use_snd(obj)&lt;br /&gt;
&lt;br /&gt;
local obj_sect = obj:section()&lt;br /&gt;
&lt;br /&gt;
local snd&lt;br /&gt;
&lt;br /&gt;
if obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
if snd then&lt;br /&gt;
&lt;br /&gt;
local snd_obj = xr_sound.get_safe_sound_object(snd)&lt;br /&gt;
&lt;br /&gt;
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Более компактный вариант: (да простит меня '''Gun12''', но я уверен, что он и сам бы сделал  именно так:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
local tSound ={&lt;br /&gt;
medkit       = &amp;quot;interface\\inv_medkit&amp;quot;,&lt;br /&gt;
kolbasa      = &amp;quot;interface\\inv_food&amp;quot;,&lt;br /&gt;
vodka        = &amp;quot;interface\\inv_vodka&amp;quot;,&lt;br /&gt;
energy_drink = &amp;quot;interface\\inv_softdrink&amp;quot;,&lt;br /&gt;
bandage      = &amp;quot;interface\\inv_bandage&amp;quot;,&lt;br /&gt;
antirad      = &amp;quot;interface\\inv_pills&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
(вместо указанных в таблице предметов и звуков разумеется можно указать свои)&lt;br /&gt;
&lt;br /&gt;
function use_snd(obj)&lt;br /&gt;
if obj and tSound[obj:section()]  then &lt;br /&gt;
   local snd = xr_sound.get_safe_sound_object(tSound[obj:section()])&lt;br /&gt;
   if snd then &lt;br /&gt;
   snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0)&lt;br /&gt;
   end&lt;br /&gt;
end   &lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохраняем. &lt;br /&gt;
&lt;br /&gt;
Открываем '''bind_stalker.script''' и в функцию ''function actor_binder:net_destroy()'' пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
    self.object:set_callback(callback.use_object, nil)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и в функцию ''actor_binder:reinit()'' пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
    self.object:set_callback(callback.use_object, self.use_object, self)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и в этом же файле создаем функцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function actor_binder:use_object(obj)&lt;br /&gt;
    имя_вашего_скрипта.use_snd(obj)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все, теперь при использовании предмета будет проигрыватся звук.&lt;br /&gt;
&lt;br /&gt;
Автор статьи: batment&lt;br /&gt;
&lt;br /&gt;
Автор скрипта: Gun12&lt;br /&gt;
&lt;br /&gt;
Переправка оформления: VIKman&lt;br /&gt;
&lt;br /&gt;
Слегка подправил ошибки: гопыч&lt;br /&gt;
&lt;br /&gt;
Второй вариант скрипта: &lt;br /&gt;
Erlik&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%97%D0%B2%D1%83%D0%BA_%D0%BF%D1%80%D0%B8_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0</id>
		<title>Звук при использовании предмета</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%97%D0%B2%D1%83%D0%BA_%D0%BF%D1%80%D0%B8_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0"/>
				<updated>2011-01-10T15:16:18Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создаете скрипт '''имя_файла.script''', туда пишете:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function use_snd(obj)&lt;br /&gt;
&lt;br /&gt;
local obj_sect = obj:section()&lt;br /&gt;
&lt;br /&gt;
local snd&lt;br /&gt;
&lt;br /&gt;
if obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
if snd then&lt;br /&gt;
&lt;br /&gt;
local snd_obj = xr_sound.get_safe_sound_object(snd)&lt;br /&gt;
&lt;br /&gt;
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Более компактный вариант: (да простит меня '''Gun12''', но я уверен, что он и сам бы сделал  именно так:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
local tSound ={&lt;br /&gt;
medkit       = &amp;quot;interface\\inv_medkit&amp;quot;,&lt;br /&gt;
kolbasa      = &amp;quot;interface\\inv_food&amp;quot;,&lt;br /&gt;
vodka        = &amp;quot;interface\\inv_vodka&amp;quot;,&lt;br /&gt;
energy_drink = &amp;quot;interface\\inv_softdrink&amp;quot;,&lt;br /&gt;
bandage      = &amp;quot;interface\\inv_bandage&amp;quot;,&lt;br /&gt;
antirad      = &amp;quot;interface\\inv_pills&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
(вместо указанных в таблице предметов и звуков разумеется можно указать свои)&lt;br /&gt;
&lt;br /&gt;
function use_snd(obj)&lt;br /&gt;
if obj and tSound[obj:section()]  then &lt;br /&gt;
   local snd = xr_sound.get_safe_sound_object(tSound[obj:section()])&lt;br /&gt;
   if snd then &lt;br /&gt;
   snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0)&lt;br /&gt;
   end&lt;br /&gt;
end   &lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохраняем. &lt;br /&gt;
&lt;br /&gt;
Открываем '''bind_stalker.script''' и в функцию ''function actor_binder:net_destroy()'' пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
    self.object:set_callback(callback.use_object, nil)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и в функцию ''actor_binder:reinit()'' пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
    self.object:set_callback(callback.use_object, self.use_object, self)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и в этом же файле создаем функцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function actor_binder:use_object(obj)&lt;br /&gt;
    имя_вашего_скрипта.use_snd(obj)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все, теперь при использовании предмета будет проигрыватся звук.&lt;br /&gt;
&lt;br /&gt;
Автор статьи: batment&lt;br /&gt;
&lt;br /&gt;
Автор скрипта: Gun12&lt;br /&gt;
&lt;br /&gt;
Переправка оформления: VIKman&lt;br /&gt;
&lt;br /&gt;
Слегка подправил ошибки: гопыч&lt;br /&gt;
Второй вариант скрипта: Erlik&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%97%D0%B2%D1%83%D0%BA_%D0%BF%D1%80%D0%B8_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0</id>
		<title>Звук при использовании предмета</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%97%D0%B2%D1%83%D0%BA_%D0%BF%D1%80%D0%B8_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0"/>
				<updated>2011-01-10T15:15:07Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создаете скрипт '''имя_файла.script''', туда пишете:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function use_snd(obj)&lt;br /&gt;
&lt;br /&gt;
local obj_sect = obj:section()&lt;br /&gt;
&lt;br /&gt;
local snd&lt;br /&gt;
&lt;br /&gt;
if obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]]&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
if snd then&lt;br /&gt;
&lt;br /&gt;
local snd_obj = xr_sound.get_safe_sound_object(snd)&lt;br /&gt;
&lt;br /&gt;
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Более компактный вариант: (да простит меня '''Gun12''', но я уверен, что он и сам бы сделал  именно так:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
local tSound ={&lt;br /&gt;
medkit       = &amp;quot;interface\\inv_medkit&amp;quot;,&lt;br /&gt;
kolbasa      = &amp;quot;interface\\inv_food&amp;quot;,&lt;br /&gt;
vodka        = &amp;quot;interface\\inv_vodka&amp;quot;,&lt;br /&gt;
energy_drink = &amp;quot;interface\\inv_softdrink&amp;quot;,&lt;br /&gt;
bandage      = &amp;quot;interface\\inv_bandage&amp;quot;,&lt;br /&gt;
antirad      = &amp;quot;interface\\inv_pills&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
(вместо указанных в таблице предметов и звуков разумеется можно указать свои)&lt;br /&gt;
&lt;br /&gt;
function use_snd(obj)&lt;br /&gt;
if obj and tSound[obj:section()]  then &lt;br /&gt;
   local snd = xr_sound.get_safe_sound_object(tSound[obj:section()])&lt;br /&gt;
   if snd then &lt;br /&gt;
   snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0)&lt;br /&gt;
   end&lt;br /&gt;
end   &lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохраняем. &lt;br /&gt;
&lt;br /&gt;
Открываем '''bind_stalker.script''' и в функцию ''function actor_binder:net_destroy()'' пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
    self.object:set_callback(callback.use_object, nil)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и в функцию ''actor_binder:reinit()'' пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
    self.object:set_callback(callback.use_object, self.use_object, self)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и в этом же файле создаем функцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function actor_binder:use_object(obj)&lt;br /&gt;
    имя_вашего_скрипта.use_snd(obj)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все, теперь при использовании предмета будет проигрыватся звук.&lt;br /&gt;
&lt;br /&gt;
Автор статьи: batment&lt;br /&gt;
&lt;br /&gt;
Автор скрипта: Gun12&lt;br /&gt;
&lt;br /&gt;
Переправка оформления: VIKman&lt;br /&gt;
&lt;br /&gt;
Слегка подправил ошибки: гопыч&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2010-11-29T20:39:33Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
Приведенный ниже скрипт является общей функцией, куда передаются данные.&lt;br /&gt;
Его можно положить в любой скриптовый файл.&lt;br /&gt;
Если же хотите, что бы функцию можно было вызывать также и из логики - то скрипт нужно положить в файл xr_effects.script.&lt;br /&gt;
&lt;br /&gt;
Вызов соответственно нужно делать именно функции с данными - любым удобным\подходящим по ситуации способом - через экшен в диалоге, через другой скрипт, через файл info_portions (если хотите заспавнить, скажем, эктору что-то в инвентарь при старте игры).&lt;br /&gt;
&lt;br /&gt;
Для каждого объекта надо указать кол-во: если нужен один объект то 1, если сто - то 100 и т.д.&lt;br /&gt;
&lt;br /&gt;
Доработанный вариант дает возможностью спавнить по сиду как клиентским так и серверным, то есть находящимся в оффлайне объектам,&lt;br /&gt;
а также есть возможность спавнить NPC по их профильному имени, которое указывается в теге&lt;br /&gt;
&amp;lt;specific_character id =&lt;br /&gt;
в файлах character_desc_локация&lt;br /&gt;
и в файле npc_profile в теге &amp;lt;character id =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt; &lt;br /&gt;
function SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
local count = 0&lt;br /&gt;
local pos, lvid, gvid, id, obj&lt;br /&gt;
&lt;br /&gt;
   local function Compare(id)&lt;br /&gt;
     obj = alife():object(id)&lt;br /&gt;
        return obj and obj.profile_name and obj:profile_name() == tab_where&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for k, v in pairs(tab_items) do&lt;br /&gt;
        if type(tab_where)=='table' then&lt;br /&gt;
            for k, v in pairs (tab_items[k]) do&lt;br /&gt;
            count = k&lt;br /&gt;
                for i=1, count do&lt;br /&gt;
                 alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
                  tab_where['y'],tab_where['z']),&lt;br /&gt;
                   tab_where['lv'],tab_where['gv'])&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
        elseif type(tab_where)=='string' then&lt;br /&gt;
    if tab_where ==&amp;quot;actor&amp;quot; then&lt;br /&gt;
        obj = alife():actor()&lt;br /&gt;
        else&lt;br /&gt;
        for i=1, 65534 do&lt;br /&gt;
            local predicate = Compare(i)&lt;br /&gt;
            if predicate then&lt;br /&gt;
            break&lt;br /&gt;
           end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if obj == nil then return end&lt;br /&gt;
        for k, v in pairs (tab_items[k]) do&lt;br /&gt;
            count = k&lt;br /&gt;
                 for i=1, count do&lt;br /&gt;
                 alife():create(v, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    elseif type(tab_where)=='number' then&lt;br /&gt;
        obj = level_object_by_sid(tab_where)&lt;br /&gt;
            if obj ~= nil then&lt;br /&gt;
             id, pos, lvid, gvid= obj:id(), obj:position(), obj:level_vertex_id(), obj:game_vertex_id()&lt;br /&gt;
             elseif obj == nil then&lt;br /&gt;
             obj = alife():story_object(tab_where)&lt;br /&gt;
             id, pos, lvid, gvid = obj.id, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id&lt;br /&gt;
                for k, v in pairs (tab_items[k]) do&lt;br /&gt;
                    count = k&lt;br /&gt;
                   for i=1, count do&lt;br /&gt;
                   alife():create(v, pos, lvid, gvid, id)&lt;br /&gt;
                   end&lt;br /&gt;
               end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции с передачей данных:&lt;br /&gt;
&lt;br /&gt;
--для спавна по координатам:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function uny_spawn_1()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where ={x=-22,y=-33,z=-66,lv=33333,gv=44}&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--для спавна в инвентарь эктора:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function uny_spawn_2()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
--для спавна в инвентарь NPC по его sid'у:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function uny_spawn_3()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[2]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006 -- это sid волка&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- для спавна в инвентарь NPC по его профильному имени&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function uny_spawn_4()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;ammo_12x70_buck&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;ammo_12x76_dart&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;ammo_12x76_zhekan&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_toz34&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_ak74u&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;stalker_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;mutant_zombie_hand&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;mutant_snork_leg&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
local tab_where = &amp;quot;mil_Svoboda_trader&amp;quot; -- имя из профиля&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A3%D0%BF%D1%80%D0%BE%D1%89%D0%B5%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1_%D0%B2%D1%8B%D0%B4%D0%B0%D1%87%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0</id>
		<title>Упрощеный способ выдачи предмета</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A3%D0%BF%D1%80%D0%BE%D1%89%D0%B5%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1_%D0%B2%D1%8B%D0%B4%D0%B0%D1%87%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0"/>
				<updated>2010-11-29T20:36:11Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой статье не оче хочеться объяснять новичкам как все работает поэтому все будет коротко и понятно(Хотя бы для тех кто умеет давать предметы ГГ)&lt;br /&gt;
Итак.Создаем любой скрипт.Либо вставляем.Кому как удобнее.Лично я его назвал give_item.scripts.Вобщем с этим разобрались.Итак добавляем в скрипт вот такие строчки&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function actor_add_item(section)&lt;br /&gt;
alife():create(section,	&lt;br /&gt;
db.actor:position(),&lt;br /&gt;
db.actor:level_vertex_id(),	&lt;br /&gt;
db.actor:game_vertex_id(),&lt;br /&gt;
db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Окей.А как же их вызывать из игры.Ну например создали вы Васю пупкина.У него диалог...Все уже готово.&amp;lt;action&amp;gt; уже есть а что надо писать в функцию скрипта для &amp;quot;более упращеной выдачи&amp;quot;.А вот что&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
give_item(ну или название вашего скрипта).actor_add_item(&amp;quot;название предмета&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ну например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;wpn_pm&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;wpn_ak74&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;bandage&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;bandage&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;bandage&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;medkit&amp;quot;) &lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_5.45x39_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_5.45x39_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_5.45x39_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_5.45x39_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_5.45x39_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_5.45x39_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_5.45x39_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_5.45x39_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_9x18_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_9x18_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;ammo_9x18_fmj&amp;quot;)&lt;br /&gt;
  give_item.actor_add_item(&amp;quot;stalker_outfit&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Единственный недостаток как все уже поняли.Это то что нельзя заспавнить одним действием сразу несколько предметов.Но так как я плохо знаю функцию for i = do.Поэтому не могу утверждать что ею нельзя пользоваться.Попробуйте.Может и выйдет(но как я понял она повторяет всю функцию а не отдельные её моменты)&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
''Для нормального и удобного спавна любого числа самых разных объектов игры специально был написан''&lt;br /&gt;
[http://stalkerin.gameru.net/wiki/index.php/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2  &amp;quot;Cкрипт  спавна набора объектов&amp;quot;] И кстати там все сделано именно через оператор цикла &amp;lt;lua&amp;gt;for do end&amp;lt;/lua&amp;gt; &lt;br /&gt;
Учите lua, камрады, и будет вам счастье.&lt;br /&gt;
Добавил --[[Участник:Erlik|Erlik]] 20:36, 29 ноября 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2010-09-27T19:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
Приведенный ниже скрипт является общей функцией, куда передаются данные.&lt;br /&gt;
Его можно положить в любой скриптовый файл.&lt;br /&gt;
Если же хотите, что бы функцию можно было вызывать также и из логики - то скрипт нужно положить в файл xr_effects.script.&lt;br /&gt;
&lt;br /&gt;
Вызов соответственно нужно делать именно функции с данными - любым удобным\подходящим по ситуации способом - через экшен в диалоге, через другой скрипт, через файл info_portions (если хотите заспавнить, скажем, эктору что-то в инвентарь при старте игры).&lt;br /&gt;
&lt;br /&gt;
Для каждого объекта надо указать кол-во: если нужен один объект то 1, если сто - то 100 и т.д.&lt;br /&gt;
&lt;br /&gt;
Доработанный вариант дает возможностью спавнить по сиду как клиентским так и серверным, то есть находящимся в оффлайне объектам,&lt;br /&gt;
а также есть возможность спавнить NPC по их профильному имени, которое указывается в теге&lt;br /&gt;
&amp;lt;specific_character id =&lt;br /&gt;
в файлах character_desc_локация&lt;br /&gt;
и в файле npc_profile в теге &amp;lt;character id =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
local count = 0&lt;br /&gt;
local pos, lvid, gvid, id, obj&lt;br /&gt;
&lt;br /&gt;
   local function Compare(id)&lt;br /&gt;
     obj = alife():object(id)&lt;br /&gt;
        return obj and obj.profile_name and obj:profile_name() == tab_where&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for k, v in pairs(tab_items) do&lt;br /&gt;
        if type(tab_where)=='table' then&lt;br /&gt;
            for k, v in pairs (tab_items[k]) do&lt;br /&gt;
            count = k&lt;br /&gt;
                for i=1, count do&lt;br /&gt;
                 alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
                  tab_where['y'],tab_where['z']),&lt;br /&gt;
                   tab_where['lv'],tab_where['gv'])&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
        elseif type(tab_where)=='string' then&lt;br /&gt;
    if tab_where ==&amp;quot;actor&amp;quot; then&lt;br /&gt;
        obj = alife():actor()&lt;br /&gt;
        else&lt;br /&gt;
        for i=1, 65534 do&lt;br /&gt;
            local predicate = Compare(i)&lt;br /&gt;
            if predicate then&lt;br /&gt;
            break&lt;br /&gt;
           end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if obj == nil then return end&lt;br /&gt;
        for k, v in pairs (tab_items[k]) do&lt;br /&gt;
            count = k&lt;br /&gt;
                 for i=1, count do&lt;br /&gt;
                 alife():create(v, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    elseif type(tab_where)=='number' then&lt;br /&gt;
        obj = level_object_by_sid(tab_where)&lt;br /&gt;
            if obj ~= nil then&lt;br /&gt;
             id, pos, lvid, gvid= obj:id(), obj:position(), obj:level_vertex_id(), obj:game_vertex_id()&lt;br /&gt;
             elseif obj == nil then&lt;br /&gt;
             obj = alife():story_object(tab_where)&lt;br /&gt;
             id, pos, lvid, gvid = obj.id, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id&lt;br /&gt;
                for k, v in pairs (tab_items[k]) do&lt;br /&gt;
                    count = k&lt;br /&gt;
                   for i=1, count do&lt;br /&gt;
                   alife():create(v, pos, lvid, gvid, id)&lt;br /&gt;
                   end&lt;br /&gt;
               end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции с передачей данных:&lt;br /&gt;
&lt;br /&gt;
--для спавна по координатам:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function uny_spawn_1()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where ={x=-22,y=-33,z=-66,lv=33333,gv=44}&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--для спавна в инвентарь эктора:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function uny_spawn_2()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--для спавна в инвентарь NPC по его sid'у:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function uny_spawn_3()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[2]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006 -- это sid волка&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- для спавна в инвентарь NPC по его профильному имени&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function uny_spawn_4()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;ammo_12x70_buck&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;ammo_12x76_dart&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;ammo_12x76_zhekan&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_toz34&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_ak74u&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;stalker_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;mutant_zombie_hand&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;mutant_snork_leg&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
local tab_where = &amp;quot;mil_Svoboda_trader&amp;quot; -- имя из профиля&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2010-09-27T19:13:51Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
Приведенный ниже скрипт является общей функцией, куда передаются данные.&lt;br /&gt;
Его можно положить в любой скриптовый файл.&lt;br /&gt;
Если же хотите, что бы функцию можно было вызывать также и из логики - то скрипт нужно положить в файл xr_effects.script.&lt;br /&gt;
&lt;br /&gt;
Вызов соответственно нужно делать именно функции с данными - любым удобным\подходящим по ситуации способом - через экшен в диалоге, через другой скрипт, через файл info_portions (если хотите заспавнить, скажем, эктору что-то в инвентарь при старте игры).&lt;br /&gt;
&lt;br /&gt;
Для каждого объекта надо указать кол-во: если нужен один объект то 1, если сто - то 100 и т.д.&lt;br /&gt;
&lt;br /&gt;
Доработанный вариант дает возможностью спавнить по сиду как клиентским так и серверным, то есть находящимся в оффлайне объектам,&lt;br /&gt;
а также есть возможность спавнить NPC по их профильному имени, которое указывается в теге&lt;br /&gt;
&amp;lt;specific_character id =&lt;br /&gt;
в файлах character_desc_локация&lt;br /&gt;
и в файле npc_profile в теге &amp;lt;character id =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
local count = 0&lt;br /&gt;
local pos, lvid, gvid, id, obj&lt;br /&gt;
&lt;br /&gt;
   local function Compare(id)&lt;br /&gt;
     obj = alife():object(id)&lt;br /&gt;
        return obj and obj.profile_name and obj:profile_name() == tab_where&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for k, v in pairs(tab_items) do&lt;br /&gt;
        if type(tab_where)=='table' then&lt;br /&gt;
            for k, v in pairs (tab_items[k]) do&lt;br /&gt;
            count = k&lt;br /&gt;
                for i=1, count do&lt;br /&gt;
                 alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
                  tab_where['y'],tab_where['z']),&lt;br /&gt;
                   tab_where['lv'],tab_where['gv'])&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
        elseif type(tab_where)=='string' then&lt;br /&gt;
    if tab_where ==&amp;quot;actor&amp;quot; then&lt;br /&gt;
        obj = alife():actor()&lt;br /&gt;
        else&lt;br /&gt;
        for i=1, 65534 do&lt;br /&gt;
            local predicate = Compare(i)&lt;br /&gt;
            if predicate then&lt;br /&gt;
            break&lt;br /&gt;
           end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if obj == nil then return end&lt;br /&gt;
        for k, v in pairs (tab_items[k]) do&lt;br /&gt;
            count = k&lt;br /&gt;
                 for i=1, count do&lt;br /&gt;
                 alife():create(v, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    elseif type(tab_where)=='number' then&lt;br /&gt;
        obj = level_object_by_sid(tab_where)&lt;br /&gt;
            if obj ~= nil then&lt;br /&gt;
             id, pos, lvid, gvid= obj:id(), obj:position(), obj:level_vertex_id(), obj:game_vertex_id()&lt;br /&gt;
             elseif obj == nil then&lt;br /&gt;
             obj = alife():story_object(tab_where)&lt;br /&gt;
             id, pos, lvid, gvid = obj.id, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id&lt;br /&gt;
                for k, v in pairs (tab_items[k]) do&lt;br /&gt;
                    count = k&lt;br /&gt;
                   for i=1, count do&lt;br /&gt;
                   alife():create(v, pos, lvid, gvid, id)&lt;br /&gt;
                   end&lt;br /&gt;
               end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции с передачей данных:&lt;br /&gt;
--для спавна по координатам:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function uny_spawn_1()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where ={x=-22,y=-33,z=-66,lv=33333,gv=44}&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--для спавна в инвентарь эктора:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function uny_spawn_2()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--для спавна в инвентарь NPC по его sid'у:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function uny_spawn_3()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[2]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006 -- это sid волка&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- для спавна в инвентарь NPC по его профильному имени&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function uny_spawn_4()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;ammo_12x70_buck&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;ammo_12x76_dart&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;ammo_12x76_zhekan&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_toz34&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_ak74u&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;stalker_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;mutant_zombie_hand&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;mutant_snork_leg&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
local tab_where = &amp;quot;mil_Svoboda_trader&amp;quot; -- имя из профиля&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2010-09-27T19:12:13Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
Приведенный ниже скрипт является общей функцией, куда передаются данные.&lt;br /&gt;
Его можно положить в любой скриптовый файл.&lt;br /&gt;
Если же хотите, что бы функцию можно было вызывать также и из логики - то скрипт нужно положить в файл xr_effects.script.&lt;br /&gt;
&lt;br /&gt;
Вызов соответственно нужно делать именно функции с данными - любым удобным\подходящим по ситуации способом - через экшен в диалоге, через другой скрипт, через файл info_portions (если хотите заспавнить, скажем, эктору что-то в инвентарь при старте игры).&lt;br /&gt;
&lt;br /&gt;
Для каждого объекта надо указать кол-во: если нужен один объект то 1, если сто - то 100 и т.д.&lt;br /&gt;
&lt;br /&gt;
Доработанный вариант дает возможностью спавнить по сиду как клиентским так и серверным, то есть находящимся в оффлайне объектам,&lt;br /&gt;
а также есть возможность спавнить NPC по их профильному имени, которое указывается в теге&lt;br /&gt;
&amp;lt;specific_character id =&lt;br /&gt;
в файлах character_desc_локация&lt;br /&gt;
и в файле npc_profile в теге &amp;lt;character id =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
local count = 0&lt;br /&gt;
local pos, lvid, gvid, id, obj&lt;br /&gt;
&lt;br /&gt;
   local function Compare(id)&lt;br /&gt;
     obj = alife():object(id)&lt;br /&gt;
        return obj and obj.profile_name and obj:profile_name() == tab_where&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for k, v in pairs(tab_items) do&lt;br /&gt;
        if type(tab_where)=='table' then&lt;br /&gt;
            for k, v in pairs (tab_items[k]) do&lt;br /&gt;
            count = k&lt;br /&gt;
                for i=1, count do&lt;br /&gt;
                 alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
                  tab_where['y'],tab_where['z']),&lt;br /&gt;
                   tab_where['lv'],tab_where['gv'])&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
        elseif type(tab_where)=='string' then&lt;br /&gt;
    if tab_where ==&amp;quot;actor&amp;quot; then&lt;br /&gt;
        obj = alife():actor()&lt;br /&gt;
        else&lt;br /&gt;
        for i=1, 65534 do&lt;br /&gt;
            local predicate = Compare(i)&lt;br /&gt;
            if predicate then&lt;br /&gt;
            break&lt;br /&gt;
           end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if obj == nil then return end&lt;br /&gt;
        for k, v in pairs (tab_items[k]) do&lt;br /&gt;
            count = k&lt;br /&gt;
                 for i=1, count do&lt;br /&gt;
                 alife():create(v, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
    elseif type(tab_where)=='number' then&lt;br /&gt;
        obj = level_object_by_sid(tab_where)&lt;br /&gt;
            if obj ~= nil then&lt;br /&gt;
             id, pos, lvid, gvid= obj:id(), obj:position(), obj:level_vertex_id(), obj:game_vertex_id()&lt;br /&gt;
             elseif obj == nil then&lt;br /&gt;
             obj = alife():story_object(tab_where)&lt;br /&gt;
             id, pos, lvid, gvid = obj.id, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id&lt;br /&gt;
                for k, v in pairs (tab_items[k]) do&lt;br /&gt;
                    count = k&lt;br /&gt;
                   for i=1, count do&lt;br /&gt;
                   alife():create(v, pos, lvid, gvid, id)&lt;br /&gt;
                   end&lt;br /&gt;
               end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Функции с передачей данных:&lt;br /&gt;
&lt;br /&gt;
--для спавна по координатам:&lt;br /&gt;
&lt;br /&gt;
function uny_spawn_1()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where ={x=-22,y=-33,z=-66,lv=33333,gv=44}&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
function uny_spawn_2()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--для спавна в инвентарь NPC по его sid'у:&lt;br /&gt;
&lt;br /&gt;
function uny_spawn_3()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;exo_outfit&amp;quot;},&lt;br /&gt;
{[2]=&amp;quot;af_cristall_flower&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},&lt;br /&gt;
{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006 -- это sid волка&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- для спавна в инвентарь NPC по его профильному имени&lt;br /&gt;
&lt;br /&gt;
function uny_spawn_4()&lt;br /&gt;
local tab_items ={&lt;br /&gt;
{[1]=&amp;quot;ammo_12x70_buck&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;ammo_12x76_dart&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;ammo_12x76_zhekan&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_toz34&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;wpn_ak74u&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;stalker_outfit&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;mutant_zombie_hand&amp;quot;},&lt;br /&gt;
{[1]=&amp;quot;mutant_snork_leg&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
local tab_where = &amp;quot;mil_Svoboda_trader&amp;quot; -- имя из профиля&lt;br /&gt;
this.SpawnToNpcOrToLocation(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-12-16T10:36:03Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='number' then &lt;br /&gt;
local obj = level_object_by_sid(tab_where)&lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, obj:position(), obj:level_vertex_id(), obj:game_vertex_id(), obj:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции (или если это NPC - то его имя из спавн секции: например &amp;quot;agr_stalker_regular&amp;quot;), его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект таблицы '''tab_items''' должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице '''tab_where''' - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
И третий вариант - для спавна в инвентарь непися по его sid'у:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_3()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006  -- это sid волка &lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-12-16T10:12:42Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='number' then &lt;br /&gt;
local obj = level.object_by_sid(tab_where)&lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, obj:position(), obj:level_vertex_id(), obj:game_vertex_id(), obj:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции (или если это NPC - то его имя из спавн секции: например &amp;quot;agr_stalker_regular&amp;quot;), его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект таблицы '''tab_items''' должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице '''tab_where''' - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
И третий вариант - для спавна в инвентарь непися по его sid'у:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_3()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006  -- это sid волка &lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-12-03T14:18:25Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='number' then &lt;br /&gt;
local obj = level_object_by_sid(tab_where)&lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, obj:position(), obj:level_vertex_id(), obj:game_vertex_id(), obj:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции (или если это NPC - то его имя из спавн секции: например &amp;quot;agr_stalker_regular&amp;quot;), его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект таблицы '''tab_items''' должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице '''tab_where''' - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
И третий вариант - для спавна в инвентарь непися по его sid'у:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_3()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006  -- это sid волка &lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-12-03T14:17:56Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k]) do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='number' then &lt;br /&gt;
local obj = level_object_by_sid(tab_where)&lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, obj:position(), obj:level_vertex_id(), obj:game_vertex_id(), obj:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции (или если это NPC - то его имя из спавн секции: например &amp;quot;agr_stalker_regular&amp;quot;), его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект таблицы '''tab_items''' должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице '''tab_where''' - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
И третий вариант - для спавна в инвентарь непися по его sid'у:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_3()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006  -- это sid волка &lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-12-02T21:15:57Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='number' then &lt;br /&gt;
local obj = level_object_by_sid(tab_where)&lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, obj:position(), obj:level_vertex_id(), obj:game_vertex_id(), obj:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции (или если это NPC - то его имя из спавн секции: например &amp;quot;agr_stalker_regular&amp;quot;), его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект таблицы '''tab_items''' должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице '''tab_where''' - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
И третий вариант - для спавна в инвентарь непися по его sid'у:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_3()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = 006  -- это sid волка &lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-11-30T17:46:47Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции, его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект таблицы '''tab_items''' должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице '''tab_where''' - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-11-30T17:46:00Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите нужное вам кол-во объектов и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции, его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект таблицы '''tab_items''' должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице '''tab_where''' - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-11-30T17:38:55Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите нужное вам кол-во объектов и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции, его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект таблицы '''tab_items''' должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице '''tab_where''' - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Скрипт для спавна наборов объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD%D0%B0_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%BE%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-11-30T17:32:19Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю вашему вниманию мой скромный вклад с дело модостроения.&lt;br /&gt;
Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create()  или использование несколько раз подряд операторов цикла для спавна нужного кол-ва объектов.&lt;br /&gt;
В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите нужное вам кол-во объектов и место - либо это конкретные координаты, либо инвентарь эктора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;local count = 0 &lt;br /&gt;
function uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
for k, v in pairs(tab_items) do&lt;br /&gt;
if type(tab_where)=='table' then&lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v,vector():set(tab_where['x'],&lt;br /&gt;
tab_where['y'],tab_where['z']),&lt;br /&gt;
tab_where['lv'],tab_where['gv'])&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
elseif type(tab_where)=='string' then &lt;br /&gt;
for k, v in pairs (tab_items[k])do &lt;br /&gt;
count = k&lt;br /&gt;
for i=1, count do&lt;br /&gt;
alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эту функцию нужно будет просто скопировать в любой скриптовый файл.&lt;br /&gt;
Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции, его кол-во, место спавна.&lt;br /&gt;
&lt;br /&gt;
Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом:&lt;br /&gt;
каждый объект должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. &lt;br /&gt;
(для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита  оператора  цикла).&lt;br /&gt;
Координаты указываем во второй таблице - x,y,z  - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс.&lt;br /&gt;
Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция &lt;br /&gt;
спавнит объект куда нам надо. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_1()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8}&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то же самое, но для спавна в инвентарь эктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function uny_spawn_2()&lt;br /&gt;
local tab_items ={{[1]=&amp;quot;exo_outfit&amp;quot;},{[2]=&amp;quot;af_cristall_flower&amp;quot;}, &lt;br /&gt;
{[1]=&amp;quot;wpn_fn2000&amp;quot;},{[5]=&amp;quot;ammo_5.56x45_ss190&amp;quot;},{[3]=&amp;quot;bread&amp;quot;},&lt;br /&gt;
{[5]=&amp;quot;medkit_army&amp;quot;}}&lt;br /&gt;
local tab_where = &amp;quot;actor&amp;quot;&lt;br /&gt;
this.uni_spawn_new(tab_items,tab_where)&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для спавна в инвентарь эктора просто меняется тип переменной - с &amp;quot;table&amp;quot; на &amp;quot;string&amp;quot;.&lt;br /&gt;
А скрипт, заметив это,  тут же понимает куда ему надо спавнить.&lt;br /&gt;
Кстати, вместо строчки &amp;quot;actor&amp;quot;,  можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
автор &lt;br /&gt;
--[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-18T10:00:46Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* Часть первая. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «повторяю для тупых - отошел к дальней стене камеры…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что-то искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюсь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором, а может Сахарова - впрочем, это не важно). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидывать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть. &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-17T08:13:27Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что-то искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюсь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором, а может Сахарова - впрочем, это не важно). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидывать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть. &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-17T08:08:56Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что-то искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюсь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором, а может Сахарова - впрочем, это не важно). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть. &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T18:34:08Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюсь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором, а может Сахарова - впрочем, это не важно). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть. &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T09:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* Часть первая. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюсь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть. &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T08:08:56Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* Часть первая. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dial&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюсь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть. &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T08:05:47Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* Часть вторая. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dial&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть. &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T08:03:08Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* Часть вторая. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dial&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и пр этом скажет что-то весьма нелицприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть. &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T08:00:58Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dial&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (похоже что кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и пр этом скажет что-то весьма нелицприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T07:46:34Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над &amp;quot;людьми&amp;quot;. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dial&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - тоже анимка Круглова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (тож кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и пр этом скажет что-то весьма нелицприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T07:44:14Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* Часть первая. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Недавно решил поэкспериментировать с анимками НПС,  и теперь выкладываю результаты моих опытов над людьми. Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для  новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку  через логику.  Все анимки взяты из файла state_lib. script.  Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но  с этим  еще надо разобраться.&lt;br /&gt;
&lt;br /&gt;
== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dial&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - тоже анимка Круглова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (тож кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и пр этом скажет что-то весьма нелицприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC</id>
		<title>SoC. Анимации NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC"/>
				<updated>2009-07-16T07:42:05Z</updated>
		
		<summary type="html">&lt;p&gt;Erlik: /* Часть первая. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Часть первая. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный  файл логики любому вашему НПС целиком. Она будет зациклена и  повторяться по кругу  если кое-где поставить другие варианты перехода от одной ремарки к другой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
[meet] &lt;br /&gt;
meet_state = 10|salut@esc_bridge_soldiers| 5|salut_free@esc_lager_killer&lt;br /&gt;
meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi&lt;br /&gt;
victim = 10|actor&lt;br /&gt;
victim_wpn = 10|actor&lt;br /&gt;
use = true&lt;br /&gt;
use_wpn = true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В базовой ремарке мой чувак  использует анимку Волка - hello_wpn –  одной рукой машет ГГ, другой держит ствол.&lt;br /&gt;
Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи.&lt;br /&gt;
В секции meet задается схема реагирования НПС при подходе к нему эктора. &lt;br /&gt;
В строчке meet_state  – реакция при подходе безоружного ГГ. &lt;br /&gt;
На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. &lt;br /&gt;
Это анимка '''salut'''. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». &lt;br /&gt;
Это анимка '''salut_free.''' &lt;br /&gt;
В секции meet можно задавать и то, что НПС будет базарить при виде эктора.&lt;br /&gt;
В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer)&lt;br /&gt;
В строчке meet_state_wpn  - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу '''ward''' – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится).&lt;br /&gt;
В этой позе НПС на дистанции ближе 10 метров орет «а ты с мордой поцарапанной отойди к дальней стеночке…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе -  «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и  еще несколько  рандомных фраз, которые заданы звуковой темой gar_bandits_seryi.&lt;br /&gt;
К начальной  анимке также можно добавлять любую  звуковую тему через строчку snd. В данной ремарке ее нет. &lt;br /&gt;
&lt;br /&gt;
Переходим к следующей схеме.&lt;br /&gt;
Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке &lt;br /&gt;
on_actor_dist_le = 2| remark@sit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@sit]&lt;br /&gt;
anim = sit_ass&lt;br /&gt;
snd = mil_guard_to_max&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
;on_actor_dist_le = 2| remark@raciya&lt;br /&gt;
;on_timer = 30000| remark@ raciya&lt;br /&gt;
on_signal = sound_end| remark@raciya&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итак, что делает НПС в этой ремарке. &lt;br /&gt;
Сидит на заднице  - '''sit_ass''', орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…»&lt;br /&gt;
В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки  заданной звуковой темы  идет переход к к ремарке remark@ raciya.&lt;br /&gt;
Сделано это через строчку on_signal = sound_end| remark@raciya. &lt;br /&gt;
Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.&lt;br /&gt;
&lt;br /&gt;
Следующая схема. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@raciya]&lt;br /&gt;
anim = choose &lt;br /&gt;
snd = bar_arena_public&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@raciya&lt;br /&gt;
on_timer = 120000| remark@work&lt;br /&gt;
;on_actor_dist_ge = 35| remark@work&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@raciya]&lt;br /&gt;
meet_state = 7|binocular@val_escort_guards| 5|guard_rac@mil_pavlik_to_ara&lt;br /&gt;
meet_state_wpn = 7|hide_rac@mil_ara_ambush                                       &lt;br /&gt;
victim = 7|actor &lt;br /&gt;
victim_wpn = 7|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''choose''' – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. &lt;br /&gt;
Звуковая тема – что то там из реплик на арене.&lt;br /&gt;
При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит  - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько).&lt;br /&gt;
На 5 метрах достает рацию (если есть) - анимка '''guard_rac''' и базарит реплики из темы предателя Павлика на милитари  «все чисто можете подходить». &lt;br /&gt;
При  угрозе стволом -  анимка  '''hide_rac''' («сидит с рацией»), базар -  «это засада, уходим»&lt;br /&gt;
Через 120 секунд  - переход к следующей ремарке: on_timer = 120000| remark@work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work]&lt;br /&gt;
anim = caution&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_max_before_collect&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@work2&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''caution''' – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает -  «ребята у нас появилась работа». Видимо, что-то высмотрел интересное.&lt;br /&gt;
Через 30 секунд -  снова переход.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@work2]&lt;br /&gt;
anim = search&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = mil_collect_phrase3&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 30000| remark@zombied&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''search'''  -   поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что искать. Что он при этом произносит – узнаете, когда послушаете. &lt;br /&gt;
Через 30 секунд переход к схеме зомби.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@zombied]&lt;br /&gt;
anim = trans_zombied&lt;br /&gt;
snd = pri_followers_leader_phrase1_1&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@wounded&lt;br /&gt;
meet = meet@zombied&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@zombied]&lt;br /&gt;
meet_state =  5|trans_0@hail&lt;br /&gt;
meet_state_wpn	= 5|trans_1@hail&lt;br /&gt;
victim		= 5|actor  &lt;br /&gt;
victim_wpn	= 5|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dial&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''trans_zombied'''  -  падает на колени, головой двигает вверх-вниз.&lt;br /&gt;
'''trans_1''' - также стоит  на коленях, только головой вращает по кругу.&lt;br /&gt;
'''trans_0''' – то же самое, только более энергичней. Или наоборот - извиняюь если перепутал.&lt;br /&gt;
&lt;br /&gt;
Схема раненый. Тут все понятно. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@wounded]&lt;br /&gt;
anim = wounded_heavy_3&lt;br /&gt;
snd = help_heavy&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@dinner&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''wounded_heavy_3''' – это анимка тяжелораненого. (есть еще и другие анимки раненого).&lt;br /&gt;
Чувак скрючившись, грохнется на землю. Но на ней не остается,  а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места.&lt;br /&gt;
Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы. &lt;br /&gt;
&lt;br /&gt;
Схема обед. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dinner]&lt;br /&gt;
anim = sit_knee&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@dinner&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 15| remark@dynamite&lt;br /&gt;
&lt;br /&gt;
[meet@dinner]&lt;br /&gt;
meet_state	= 5|eat_bread@wait| 3|eat_energy@wait&lt;br /&gt;
meet_state_wpn	= 5|eat_kolbasa@wait| 3|eat_vodka@val_escort_dead&lt;br /&gt;
victim = 8|actor &lt;br /&gt;
victim_wpn = 8|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sit_knee'''  - чувак сидит на заднице, опираясь на руку. &lt;br /&gt;
'''eat_bread, eat_kolbasa, eat_energy,  eat_vodka''' - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом»&lt;br /&gt;
При отходе эктора на дистанцию больше 15 метров -  переход к схеме динамит.&lt;br /&gt;
Звуковая тема wait – это пауза, в которой непись ничего не говорит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@dynamite]&lt;br /&gt;
anim = dynamite&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = no_meet&lt;br /&gt;
on_timer = 30000| remark@claim&lt;br /&gt;
danger = danger_condition&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''dynamite''' – закладка динамита. Как это выглядит – помните долговца на милитари у стены с динамитом? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@claim]&lt;br /&gt;
anim = claim&lt;br /&gt;
snd = esc_wolf_thanks&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@claim&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_timer = 60000| remark@story&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка '''claim''' -  НПС подзывает ГГ рукой.&lt;br /&gt;
snd = esc_wolf_thanks  -  здесь НПС произносит &lt;br /&gt;
фразу волка:  «меченый теперь тебе проход в лагерь открыт, подходи».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[meet@claim]&lt;br /&gt;
meet_state	= 7|refuse@mil_collect_phrase5| 5|probe_2@mil_collect_phrase6 &lt;br /&gt;
meet_state_wpn	= 7|backoff@gar_dm_bandit_demand          &lt;br /&gt;
victim		= 7|actor   &lt;br /&gt;
victim_wpn	= 7|actor&lt;br /&gt;
use			= true&lt;br /&gt;
use_wpn		= true&lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анимка '''refuse'''   - непись  пожимает плечами и произносит mil_collect_phrase5  - «не срать». &lt;br /&gt;
'''probe_2''' -  судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором). Если у вашего НПС будет в руках оружие  - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений.&lt;br /&gt;
Фраза   mil_collect_phrase6 -  «опа – с нами новое мясо».&lt;br /&gt;
&lt;br /&gt;
'''backoff''' -  обычная анимка. Непись начинает  махать стволом в разные стороны – типа  убери ствол, меченый.  Фраза - gar_dm_bandit_demand -  «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная  (с окончанием  rnd в имени темы  в файле sound_script – то и фраз несколько)          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story]&lt;br /&gt;
anim = mode_shlem&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet@story&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&lt;br /&gt;
&lt;br /&gt;
[meet@story]&lt;br /&gt;
meet_state	= 10|probe@wait| 5|probe_1@hail     &lt;br /&gt;
meet_state_wpn	= 10|probe_2@wait| 5|suicide@mil_crazy&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mode_shlem''' - тоже анимка Круглова. Непись будет что то вертеть в руках. &lt;br /&gt;
'''probe_1''' – тоже  самое что и probe_2 , только здесь он плечами вроде бы не дергает. &lt;br /&gt;
'''suicide'''  -  самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy.&lt;br /&gt;
'''probe'''   - укороченный вариант probe_2 и probe_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@story_end]&lt;br /&gt;
anim = probe_3&lt;br /&gt;
no_move = true&lt;br /&gt;
snd = agr_doctor_1        &lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| remark@base&lt;br /&gt;
;on_timer = 180000| remark@ base&lt;br /&gt;
meet = no_meet&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''probe_3'''  -  интересная анимка (тож кругловская)-  чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. &lt;br /&gt;
agr_doctor_1 - базар доктора в тайнике стрелка. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Теперь поясню строчки &lt;br /&gt;
on_actor_dist_ge = 30| %+passage_to_story_end%&lt;br /&gt;
on_info = {+passage_to_story_end} remark@story_end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Когда эктор отойдет от НПС дальше чем 30 метров,  ГГ выдается инфопоршень  passage_to_story_end. &lt;br /&gt;
После его получения - on_info -  произойдет переход к базовой ремарке.  &lt;br /&gt;
Сам инфопоршень необходимо регистрировать в соответствующих   файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.&lt;br /&gt;
&lt;br /&gt;
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию.&lt;br /&gt;
Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.&lt;br /&gt;
&lt;br /&gt;
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том,  что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема  mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. &lt;br /&gt;
Но это еще надо проверить.&lt;br /&gt;
Закоментированные строчки - пред которыми стоит ; - может смело выкидивать - это остатки проб разных вариантов.&lt;br /&gt;
&lt;br /&gt;
== Часть вторая. ==&lt;br /&gt;
 &lt;br /&gt;
Еще одна схема. На этот раз в нее добавлены еще постэффекты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = remark@base &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
meet = meet&lt;br /&gt;
&lt;br /&gt;
[remark@base]&lt;br /&gt;
anim = hello_wpn&lt;br /&gt;
no_move = true&lt;br /&gt;
target = actor&lt;br /&gt;
meet = meet&lt;br /&gt;
on_actor_dist_le = 2| remark@punch&lt;br /&gt;
danger = danger_condition &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С первой ремаркой все понятно. Переход ко второй на дистанции ближе 2 метров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@punch]&lt;br /&gt;
anim = punch&lt;br /&gt;
snd = cit_jail_guard_sneer&lt;br /&gt;
meet = meet@punch&lt;br /&gt;
target = actor&lt;br /&gt;
on_signal = sound_end| %=run_cam_effector(fatigue)% &lt;br /&gt;
on_timer = 60000| remark@doctor_wakeup  %=run_postprocess(deadcity_wake:1777:false)%   &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@punch]&lt;br /&gt;
meet_state	= 5|hide_s_left@wait| 4|hide_s_right@wait&lt;br /&gt;
meet_state_wpn	= 5|backoff2@threat_back&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''punch'''– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно &lt;br /&gt;
как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком.	 &lt;br /&gt;
А если вместо запуска  анимации камеры '''%=run_cam_effector(fatigue)%''' поставите запуск функции '''%=killactor%''', то НПС кинется вас убивать.&lt;br /&gt;
&lt;br /&gt;
'''hide_s_left''' и '''hide_s_right''' - непись присядет с разворотом &lt;br /&gt;
ствола вправо или влево. &lt;br /&gt;
'''backoff2'''  -  более веселая анимка backoff.  &lt;br /&gt;
НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и пр этом скажет что-то весьма нелицприятное.&lt;br /&gt;
'''&lt;br /&gt;
'''%=run_cam_effector(fatigue)%''' - это вызов анимации камеры ''fatigue'' из папки anims.&lt;br /&gt;
Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы &lt;br /&gt;
cit_jail_guard_sneer. &lt;br /&gt;
А ровно через минуту от начала работы схемы – запуск постпроцесса&lt;br /&gt;
'''%=run_postprocess(deadcity_wake:1777:false)%'''  и переход к следующей схеме.&lt;br /&gt;
&lt;br /&gt;
'''deadcity_wake''' – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. &lt;br /&gt;
Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.   &lt;br /&gt;
 &lt;br /&gt;
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@doctor_wakeup]&lt;br /&gt;
anim = doctor_wakeup&lt;br /&gt;
snd = cit_doctor_start_dlg&lt;br /&gt;
meet = meet@doctor_wakeup&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 15000| %=stop_postprocess(1777)%&lt;br /&gt;
on_timer2 = 180000| remark@prisoner &lt;br /&gt;
danger = danger_condition &lt;br /&gt;
&lt;br /&gt;
[meet@doctor_wakeup]&lt;br /&gt;
meet_state	= 3|sleep@cit_jail_guard_sleep| 2|sleep_sit@wait&lt;br /&gt;
meet_state_wpn	= 3|wounded_zombie@wait&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начальная анимация - '''doctor_wakeup''' – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у  меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет.&lt;br /&gt;
Фразу прописанную мною - cit_doctor_start_dlg –  нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка  – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе.&lt;br /&gt;
Через 180 секунд – завершение схемы и переход к следующей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема – пленный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[remark@prisoner]&lt;br /&gt;
anim = prisoner&lt;br /&gt;
snd = agr_krot_fear&lt;br /&gt;
meet = meet@prisoner&lt;br /&gt;
target = actor&lt;br /&gt;
on_timer = 60000| remark@base&lt;br /&gt;
danger = danger_condition&lt;br /&gt;
&lt;br /&gt;
[meet@prisoner]&lt;br /&gt;
meet_state	= 5|help_me@gar_dm_newbie_no_money&lt;br /&gt;
meet_state_wpn	= 5|hands_up@agr_dont_shoot&lt;br /&gt;
victim = 10|actor &lt;br /&gt;
victim_wpn = 10|actor &lt;br /&gt;
use = true &lt;br /&gt;
use_wpn = true &lt;br /&gt;
meet_dialog	= escape_lager_guard_start_dialog&lt;br /&gt;
&lt;br /&gt;
[danger_condition]&lt;br /&gt;
ignore_distance = 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимка – '''prisoner''' – пленный. Помните Шустрого у бандитов? Вот это она и есть &lt;br /&gt;
Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите. &lt;br /&gt;
&lt;br /&gt;
'''help_me''' -  машет рукой сидя на одном колене и орет, что у него &amp;quot;нет денег&amp;quot; - gar_dm_newbie_no_money .&lt;br /&gt;
'''hands_up'''  -  руки кверху  и орет &amp;quot;не убивай дяденька&amp;quot; (или типа того) - agr_dont_shoot. &lt;br /&gt;
&lt;br /&gt;
Через 60 секунд возврат к базовой ремарке.&lt;br /&gt;
&lt;br /&gt;
== Часть третья. ==&lt;br /&gt;
&lt;br /&gt;
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. &lt;br /&gt;
У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна '''bar_sleep'''  - НПС положит голову  на руки сложенные перед лицом и будет  спать стоя. &lt;br /&gt;
&lt;br /&gt;
Анимки - '''barman_talk_freу, barman_shock,  barman_wait_danger,  barman_walk_danger'''  - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами. &lt;br /&gt;
&lt;br /&gt;
Анимка '''psy_pain''' – пораженный  пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.&lt;br /&gt;
&lt;br /&gt;
'''psycho_pain''' – вроде бы тоже самое, только чувак обхватывает голову руками  и так сидит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Анимки '''psy_shoot, psy_armed, psycho_pain, psycho_shoot'''– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''erlik'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Erlik</name></author>	</entry>

	</feed>