<?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=Deathdoor</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=Deathdoor"/>
		<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/Deathdoor"/>
		<updated>2026-04-30T03:28:06Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=Prior_to_try_using_a_new</id>
		<title>Prior to try using a new</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=Prior_to_try_using_a_new"/>
				<updated>2012-12-27T19:07:15Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: переименовал «Prior to try using a new» в «Spam»: spam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Spam]]&lt;/div&gt;</summary>
		<author><name>Deathdoor</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_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_xrSpawner_(%D0%B4%D0%BB%D1%8F_%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%D0%BA%D0%BE%D0%B2)</id>
		<title>Обсуждение:Разбор программы xrSpawner (для новичков)</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_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_xrSpawner_(%D0%B4%D0%BB%D1%8F_%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%D0%BA%D0%BE%D0%B2)"/>
				<updated>2012-06-16T19:54:10Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Новая страница: «удалите эту статью как противоестественную на сегодняшний день»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;удалите эту статью как противоестественную на сегодняшний день&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%D1%8F_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8F_%D0%BF%D0%BE_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%BC%D1%83_%D0%B8_%D0%BB%D1%91%D0%B3%D0%BA%D0%BE%D0%BC%D1%83_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8E_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80_%D1%81_%D1%80%D0%B6%D0%B0%D0%B2%D1%87%D0%B8%D0%BD%D0%BE%D0%B9</id>
		<title>Небольшая статья по быстрому и лёгкому созданию текстур с ржавчиной</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%D1%8F_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8F_%D0%BF%D0%BE_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%BC%D1%83_%D0%B8_%D0%BB%D1%91%D0%B3%D0%BA%D0%BE%D0%BC%D1%83_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8E_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80_%D1%81_%D1%80%D0%B6%D0%B0%D0%B2%D1%87%D0%B8%D0%BD%D0%BE%D0%B9"/>
				<updated>2012-06-01T04:21:11Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Поводом написать эту статейку послужило давнишнее желание &amp;quot;заселить&amp;quot; ЗОНУ дорожными и иными указателями. Найти изображения/нарисовать сами указатели не особенно трудно, а вот придать им вид старины чуть посложней. Здесь я опишу простой способ как это сделать. Всё делаеться в Paint.NET (в Фотошопе делаеться аналогично, главное нужен редактор со слоями. Просто в паинте делаеться на порядок быстрей)&lt;br /&gt;
Итак, имеем исходник (в моём случае указатель к станции техобслуживания, который хочу повесить перед поворотом к АТП на Кордоне)&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ukazatel 1.jpg|200px|thumb|centre]]&lt;br /&gt;
&lt;br /&gt;
в Интеренете находим наиболее подходящую к нашей задумке текстуру ржавчины&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ukazatel 2.jpg|200px|thumb|centre]]&lt;br /&gt;
&lt;br /&gt;
Подгоняем изображения под единые размеры. На основном изображении создаем '''Новый слой''', в который копи-пастом вставляем второе изображение.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ukazatel 3.jpg|200px|thumb|centre]]&lt;br /&gt;
&lt;br /&gt;
а теперь самое интересное :-)&lt;br /&gt;
используюя возможности '''Свойства слоя (1)''' выбираем режим '''Умножение (2)'''. Пользуясь ползунком прозрачности '''(3)''' и порядком слоёв '''(4)''', доводим результат до нужной кондиции. Выполяем сведение слоёв (5) и сохраняем получишийся результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ukazatel 4.jpg|200px|thumb|centre]]&lt;br /&gt;
&lt;br /&gt;
На всё про всё не более 5 минут с отличным результатом.&lt;br /&gt;
&lt;br /&gt;
'''Deathdoor''' (OGSE Team)&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%D1%8F_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8F_%D0%BF%D0%BE_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%BC%D1%83_%D0%B8_%D0%BB%D1%91%D0%B3%D0%BA%D0%BE%D0%BC%D1%83_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8E_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80_%D1%81_%D1%80%D0%B6%D0%B0%D0%B2%D1%87%D0%B8%D0%BD%D0%BE%D0%B9</id>
		<title>Небольшая статья по быстрому и лёгкому созданию текстур с ржавчиной</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%D1%8F_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8F_%D0%BF%D0%BE_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%BC%D1%83_%D0%B8_%D0%BB%D1%91%D0%B3%D0%BA%D0%BE%D0%BC%D1%83_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8E_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80_%D1%81_%D1%80%D0%B6%D0%B0%D0%B2%D1%87%D0%B8%D0%BD%D0%BE%D0%B9"/>
				<updated>2012-06-01T04:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Новая страница: «Поводом написать эту статейку послужило давнишнее желание &amp;quot;заселить&amp;quot; ЗОНУ дорожными и ины...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Поводом написать эту статейку послужило давнишнее желание &amp;quot;заселить&amp;quot; ЗОНУ дорожными и иными указателями. Найти изображения/нарисовать сами указатели не особенно трудно, а вот придать им вид старины чуть посложней. Здесь же я опишу простой способ как это сделать. Всё делаеться в Paint.NET (в Фотошопе делаеться аналогично, главное нужен редактор со слоями. Просто в паинте всё делаеться на порядок быстрей)&lt;br /&gt;
Итак, имеем исходник (в моём случае указатель к станции техобслуживания, который хочу повесить перед поворотом к АТП на Кордоне)&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ukazatel 1.jpg|200px|thumb|centre]]&lt;br /&gt;
&lt;br /&gt;
в Интеренете находим наиболее подходящую к нашей задумке текстуру ржавчины&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ukazatel 2.jpg|200px|thumb|centre]]&lt;br /&gt;
&lt;br /&gt;
Подгоняем изображения под единые размеры. На основном изображении создаем '''Новый слой''', в который копи-пастом вставляем второе изображение.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ukazatel 3.jpg|200px|thumb|centre]]&lt;br /&gt;
&lt;br /&gt;
а теперь самое интересное :-)&lt;br /&gt;
используюя возможности '''Свойства слоя (1)''' выбираем режим '''Умножение (2)'''. Пользуясь ползунком прозрачности '''(3)''' и порядком слоёв '''(4)''', доводим результат до нужной кондиции. Выполяем сведение слоёв (5) и сохраняем получишийся результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ukazatel 4.jpg|200px|thumb|centre]]&lt;br /&gt;
&lt;br /&gt;
На всё про всё не более 5 минут с отличным результатом.&lt;br /&gt;
&lt;br /&gt;
'''Deathdoor''' (OGSE Team)&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ukazatel_4.jpg</id>
		<title>Файл:Ukazatel 4.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ukazatel_4.jpg"/>
				<updated>2012-06-01T04:15:20Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ukazatel_3.jpg</id>
		<title>Файл:Ukazatel 3.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ukazatel_3.jpg"/>
				<updated>2012-06-01T04:14:39Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ukazatel_2.jpg</id>
		<title>Файл:Ukazatel 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ukazatel_2.jpg"/>
				<updated>2012-06-01T04:14:06Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ukazatel_1.jpg</id>
		<title>Файл:Ukazatel 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ukazatel_1.jpg"/>
				<updated>2012-06-01T04:10:53Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5_%D1%81%D1%82%D0%B0%D1%80%D0%BE%D0%B9_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8%2B%D0%BC%D0%BE%D0%B4</id>
		<title>Создание оружия на основе старой модели+мод</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5_%D1%81%D1%82%D0%B0%D1%80%D0%BE%D0%B9_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8%2B%D0%BC%D0%BE%D0%B4"/>
				<updated>2012-04-20T12:28:49Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Содержимое страницы заменено на «Автора темы в школу, а тему в топку, в том числе за использование хрСпавне...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автора темы в школу, а тему в топку, в том числе за использование хрСпавнера&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5_%D1%81%D1%82%D0%B0%D1%80%D0%BE%D0%B9_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8%2B%D0%BC%D0%BE%D0%B4</id>
		<title>Обсуждение:Создание оружия на основе старой модели+мод</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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5_%D1%81%D1%82%D0%B0%D1%80%D0%BE%D0%B9_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8%2B%D0%BC%D0%BE%D0%B4"/>
				<updated>2012-04-20T12:27:43Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Новая страница: «Автора темы в школу нах, а тему в топку, в том числе за использование хрСпавнера»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автора темы в школу нах, а тему в топку, в том числе за использование хрСпавнера&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D1%87%D0%B8%D0%BD%D1%8B_%D0%B2%D1%8B%D0%BB%D0%B5%D1%82%D0%BE%D0%B2_%D0%B8%D0%B3%D1%80%D1%8B_(%D1%80%D0%B0%D0%B7%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D0%BC_%D0%BB%D0%BE%D0%B3%D0%B8)</id>
		<title>Причины вылетов игры (разбираем логи)</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D1%87%D0%B8%D0%BD%D1%8B_%D0%B2%D1%8B%D0%BB%D0%B5%D1%82%D0%BE%D0%B2_%D0%B8%D0%B3%D1%80%D1%8B_(%D1%80%D0%B0%D0%B7%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D0%BC_%D0%BB%D0%BE%D0%B3%D0%B8)"/>
				<updated>2011-12-04T05:41:10Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Привет всем! Игра сталкер, а конкретно сам движок X-ray довольно капризный, и зачастую как в процессе модификации, так и во время игры игра «вылетает». Чтобы мы знали причину вылета, движок нам оставляет лог вылета. Лог вылета можно посмотреть несколькими способами:&lt;br /&gt;
* В текстовом редакторе нажать Ctrl+V (Вставить)&lt;br /&gt;
* Посмотреть лог игры включая лог вылета в файле xray_имя_пользователя.log в папке C:\Documents and Settings\All Users\Документы\STALKER-***\logs&lt;br /&gt;
* Посмотреть непосредственно в окне багтрекера (только в ЧН и ЗП).&lt;br /&gt;
Ну приступим. Начнём с простых:&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : wave&amp;amp;&amp;amp;wave-&amp;gt;length()&lt;br /&gt;
Function      : CSoundRender_Source::LoadWave&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xrSound\SoundRender_Source_loader.cpp&lt;br /&gt;
Line          : 65&lt;br /&gt;
Description   : Can't open wave file:&lt;br /&gt;
Arguments     : d:\stalker\gamedata\sounds\music\sound.ogg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Здесь игра не может открыть звуковой OGG-файл под названием sound в папке d:\stalker\gamedata\sounds\music\&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CRender::texture_load&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\xrRender\Texture.cpp&lt;br /&gt;
Line          : 295&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Can't find texture 'act\act_corp_monolit'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не может найти текстуру act_corp_monolit из папки textures\act&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CModelPool::Instance_Load&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\xrRender\ModelPool.cpp&lt;br /&gt;
Line          : 111&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Can't find model file 'physics\mesh.ogf'.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не найдена трёхмерная OGF-модель mesh.ogf из папки meshes\physics.&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : SG&lt;br /&gt;
Function      : CRender::model_CreateParticles&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\xrRender_R2\r2.cpp&lt;br /&gt;
Line          : 330&lt;br /&gt;
Description   : Particle effect or group doesn't exist&lt;br /&gt;
Arguments     : hit_fx\hit_water_00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не найдена система частиц (партикл) hit_water_00 в директории hit_fx файла particles.xr (подробно опишу позже).&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CResourceManager::_GetBlender&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\ResourceManager.cpp&lt;br /&gt;
Line          : 49&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Shader 'models\antigas_glass' not found in library.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не найден шейдер models\antigas_glass в библиотеке шейдеров.&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fs&lt;br /&gt;
Function      : CResourceManager::_CreateVS&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\ResourceManager_Resources.cpp&lt;br /&gt;
Line          : 185&lt;br /&gt;
Description   : shader file doesnt exist&lt;br /&gt;
Arguments     : d:\stalker\gamedata\shaders\r2\deffer_impl_flat.vs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не найден файл шейдера deffer_impl_flat.vs.&lt;br /&gt;
&amp;lt;tt&amp;gt;--Added by Герр. Роммель&lt;br /&gt;
Да нет. Тут проблема вся в том, что неправильно закомпилился шейдер, при компиляции уровня на качестве, более высоком чем Draft. Нужно скачивать исправление шейдеров от товарища Haron.&lt;br /&gt;
Для ЗП (ЧН) это может ещё быть из-за отсутствия thm&amp;quot;ок для текстур терраина уровня!&amp;lt;/tt&amp;gt;&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression : fatal error&lt;br /&gt;
Function : out_of_memory_handler&lt;br /&gt;
File : D:\prog_repository\sources\trunk\xrCore\xrDebugNew.cpp&lt;br /&gt;
Line : 336&lt;br /&gt;
Description : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments : Out of memory. Memory request: 55965 K &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;
Expression : fatal error&lt;br /&gt;
Function : CInifile::r_string&lt;br /&gt;
File :E:\stalker\sources\trunk\xrCore\Xr_ini.cpp&lt;br /&gt;
Line : 352&lt;br /&gt;
Description : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments : Can't find variable ammo_mag_size in [wpn_addon_grenade_launcher]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не найдена переменная ammo_mag_size в секции [wpn_addon_grenade_launcher].&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CScriptEngine::lua_error&lt;br /&gt;
File          : D:\xray-svn\xr_3da\xrGame\script_engine.cpp&lt;br /&gt;
Line          : 74&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : LUA error: C stack overflow&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Переполнение стека. Смотрим внимательно: lua_error. Ошибка возможно в скриптах.&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression : vertex || show_restrictions(m_object)&lt;br /&gt;
Function : CPatrolPathManager::select_point&lt;br /&gt;
File : E:\stalker\sources\trunk\xr_3da\xrGame\patrol_path_manager.cpp&lt;br /&gt;
Line : 155&lt;br /&gt;
Description : any vertex in patrol path [sniper_3_walk] in inaccessible for object [stalker_0002]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Какая то вершина (вейпоинт) пути sniper_3_walk стоит в неположенном месте (например не на аи-сетке). Объект stalker_0002 (в данном случае сталкер) который якобы двигался по пути sniper_3_walk попал на эту точку, а заодно ушёл за аи-сетку. Этого движок не терпит.&lt;br /&gt;
&lt;br /&gt;
Тоже самое произойдет если координаты(вейпоинт) пути sniper_3_walk совпадет с координатами места где нпс запрешенно находится буть то рестриктор или аномалия в схеме обхода аномалий.&lt;br /&gt;
Также этот вылет набюдается при попытке отправить нпс за пределы места работ параметр out_rest = &amp;quot;имя_рестриктора&amp;quot;,&lt;br /&gt;
в файле загрузки работ гулага&lt;br /&gt;
&lt;br /&gt;
попробуйте любого сталкера из лагеря новичков отправить допустим к остановке&lt;br /&gt;
получите этот самый вылет&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression : e_entity&lt;br /&gt;
Function : xrServer::Process_event_reject&lt;br /&gt;
File : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cpp&lt;br /&gt;
Line : 12&lt;br /&gt;
Description : entity not found. id_parent=7540 id_entity=44047 frame=2075050&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;
Expression : fatal error&lt;br /&gt;
Function : CScriptEngine::lua_error&lt;br /&gt;
File : D:\xray-svn\xr_3da\xrGame\script_engine.cpp&lt;br /&gt;
Line : 74&lt;br /&gt;
Description : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments : LUA error: e:\stalker\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ошибка распространённая. На первый взгляд кажется, что ошибка как раз в скриптах, но всё может быть иначе. Делаем так: открываем файл _g.script блокнотом, закоменчиваем 20 строку (ставим перед строкой --) и идём к тому месту где поймали вылет. Так мы получим более развёрнутый ответ.&lt;br /&gt;
[[Участник:Призрак]]: Автор прав в том что вылет очень распространен, но так его исправлять нельзя, т.к. nil передается в эту функцию только при каком-то форс мажоре. Поэтому необходимо перейти в _g.script в функцию printf и перед log1(string.format(fmr,..)) дописать: get_console():execute(&amp;quot;load &amp;quot;..fmt). После этого запустить еще раз игру и посмотреть при передачи какой строки игра вылетает. Потом найти эту строку в скриптах игры и прикинуть почему аргумент (у нас это аргумент №2 (bad argument #2)) равен nil&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : assertion failed&lt;br /&gt;
Function      : _VertexStream::Lock&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\R_DStreams.cpp&lt;br /&gt;
Line          : 44&lt;br /&gt;
Description   : (bytes_need&amp;lt;=mSize) &amp;amp;&amp;amp; vl_Count&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Проблема возникает при убийстве НПС\мутанта. Типичный вылет по нехватке ресурсов. &lt;br /&gt;
[[Участник:Призрак]] - Встречается в основном на больших локациях. Но не на всех. На болотах из ЧН такой вылет встречается, а вот с локации aver от Кости V такого вылета нет. Однако для данного вылета есть таблетка, в виде правленого экзешника. Искать на АМК-форум&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : IRender_Visual::Load&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\FBasicVisual.cpp&lt;br /&gt;
Line          : 58&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Invalid visual&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;
Expression    : !phrase_dialog-&amp;gt;m_PhraseVector.empty()&lt;br /&gt;
Function      : CPhraseDialog::SayPhrase&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\PhraseDialog.cpp&lt;br /&gt;
Line          : 140&lt;br /&gt;
Description   : No available phrase to say, dialog[esc_dialog]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В диалоге esc_dialog нет доступной для отображения фразы (скажем все заткнуты инфопоршенами).&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : motion_ID.valid()&lt;br /&gt;
Function      : CKinematicsAnimated::ID_Cycle&lt;br /&gt;
File          : D:\prog_repository\sources\trunk\Layers\xrRender\SkeletonAnimated.cpp&lt;br /&gt;
Line          : 210&lt;br /&gt;
Description   : ! MODEL: can't find cycle:&lt;br /&gt;
Arguments     : death_init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Игра не нашла в модели трёхмерную анимацию с именем death_init.&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
--------------&lt;br /&gt;
* Автор статьи — '''Pihan13'''&lt;br /&gt;
* Дополнил статью — '''Fireman3000'''&lt;br /&gt;
* Частично использовалась информация с сайта http://forum.stalker-simbion.ru/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; '''Не стесняемся — дополняем, если знаем о чём идёт речь.''' &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дополнение к статье(От Fireman3000):&lt;br /&gt;
Извините, если я где-нибудь неправильно пишу. Уж не родился я Колмогором :(&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CScriptEngine::lua_error&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp&lt;br /&gt;
Line          : 73&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : LUA error: ...hadow of chernobyl\gamedata\scripts\xr_danger.script:116: attempt to index field 'ignore_types' (a nil value)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Причина вылета в том что игра не понимает значения 0 в danger_ignore.Проще говоря в логике какого то персонажа параметр danger_ignore = 0 либо в минусовом значении. Либо его вообще нету&lt;br /&gt;
&lt;br /&gt;
P.S. Также может быть причина в том, что в логике у какого-то АИ что-то неправильно указано. Для исправления рекомендую вставить строчку перед 116: get_console():execute(self.object:name()). То имя в логе, которое будет последним после вылета, указывает на персонажа с кривой логикой. --[[Участник:Rekongstor|Rekongstor]] 14:01, 2 июня 2011 (UTC)&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CInifile::r_string&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp&lt;br /&gt;
Line          : 352&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Can't find variable class in [test_no_klass_npc]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не найден класс персонажа. Возможно, нпс не прописан под своим классом в gamedata\npc_profile.xml, либо в creatures\spawn_section.ltx, либо в gameplay\character_desc.xml&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CInifile::r_section&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp&lt;br /&gt;
Line          : 342&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Can't open section 'bandage_test_kick1'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Игра не может найти секцию. Это может быть предмет, нпс и многое другое. Возможно, вы написали название с ошибками. Либо когда добавляли его в: продажу, скрипт, нпс, выпадение из нпс а в редких случиях это может быть иммунитет чего либо(определить пото трудно). Часто такое бывает связано с названием&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CInifile::r_string&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp&lt;br /&gt;
Line          : 352&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Can't find variable remove_time in [vehicle_btr]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Не найдена переменная remove_time в секции [vehicle_btr]. А в данном случае ошибка в том что если вы делали предмет как физическую модель(тобишь которую нельзя использовать, говорить и вообще он похож на декорации типа деревьев, столов и прочего хлама) то необходимо указывать remove_time в его секции&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : fatal error&lt;br /&gt;
Function      : CScriptEngine::lua_error&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp&lt;br /&gt;
Line          : 73&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : LUA error: ...dow of chernobyl\gamedata\scripts\test_kick.script:34: attempt to call method 'section' (a nil value)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Метод обращения в игре не предусмотрен. Возможно, стоит пересмотреть подход к тому или иному скрипту&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Expression    : rpoints[0].size()&lt;br /&gt;
Function      : game_sv_Deathmatch::Create&lt;br /&gt;
File          : D:\prog_repository\sources\trunk\xrGame\game_sv_deathmatch.cpp&lt;br /&gt;
Line          : 99&lt;br /&gt;
Description   : rpoints for players not found&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
На мультиплеерной карте не найдены точки респавна игроков. В SDK должен быть красный пацанчик. Настроить Team = 0&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Expression    : fatal error&lt;br /&gt;
Function      : xrServer::Process_update&lt;br /&gt;
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_update.cpp&lt;br /&gt;
Line          : 37&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Beer from the creator of 'WP_SHOTG'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Такое иногда бывает, когда ты (ГГ) или НПС заряжает дробовик или другое оружие со значением tri_state_reload = true.&lt;br /&gt;
Это глюк. в игре что-то сбивается, и когда у дробовика максимальное количество заряженых патронов скажем 6, он заряжается за 6 и дальше.. дальше.. дальше.. и так пока не произойдёт вылет с вышеуказанным логом. вылет не значительный и редкий, но если он случается слишком часто, можно в конфигах всех дробовиков и ружей поменять значение tri_state_reload = true на tri_state_reload = false.&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Expression    : fatal error&lt;br /&gt;
Function      : CInifile::r_string&lt;br /&gt;
File          : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp&lt;br /&gt;
Line          : 477&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Can't find variable bound_rect in [level_map]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Такой лог бывает когда подключаешь локу с ТЧ в ЗП. Причина проста в ЗП уровнях файл строчка bound_rect пишется в файле gamedata\levels\имя_уровня\level.ltx , а в ТЧ строка bound_rect для каждого уровня непосредствено в файле gamedata\config\game_maps_single.ltx ... &lt;br /&gt;
&amp;lt;br /&amp;gt; Исправить просто, нужно изменить файл gamedata\levels\имя_уровня\level.ltx в подключеной локации, просто перенести строку bound_rect из game_maps_single.ltx в level.ltx перед строчкой texture .   &lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
By Призрак&lt;br /&gt;
&amp;lt;pre&amp;gt;Expression : hGame&lt;br /&gt;
Function : CEngineAPI::Initialize&lt;br /&gt;
File : E:\stalker\patch_1_0004\xr_3da\EngineAPI.cpp&lt;br /&gt;
Line : 65&lt;br /&gt;
Description : Game DLL raised exception during loading or there is no game DLL at all &amp;lt;/pre&amp;gt;&lt;br /&gt;
Случается когда одна из dll некорректна. Например такой вылет бывает если подсунуть в ТЧ 1.0004 xrGame от 6 патча&lt;br /&gt;
------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Expression    : assertion failed&lt;br /&gt;
Function      : CInventory::Eat&lt;br /&gt;
File          : E:\stalker\sources\trunk\xr_3da\xrGame\Inventory.cpp&lt;br /&gt;
Line          : 892&lt;br /&gt;
Description   : pIItem-&amp;gt;m_pCurrentInventory==this&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вылет встречается только на 6 патче при попытке хаванья из трупа. Ищите, исправленную Kholmogorom, xrGame.dll в Интернете&lt;br /&gt;
-----------------&lt;br /&gt;
&amp;lt;pre&amp;gt;Expression : !m_error_code&lt;br /&gt;
Function : raii_guard::~raii_guard&lt;br /&gt;
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp&lt;br /&gt;
Line : 748&lt;br /&gt;
Description : d:\stalker cop\gamedata\scripts\bind_stalker.script:231: attempt to index global 'ИМЯ_ФАЙЛА' (a nil value)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вылет происходит в двух случаях - когда скрипт пытается вызвать функцию из несуществующего файла или когда в файле допущена синтаксическая ошибка&lt;br /&gt;
-----------------&lt;br /&gt;
&amp;lt;pre&amp;gt;Expression    : fatal error&lt;br /&gt;
Function      : CScriptEngine::lua_error&lt;br /&gt;
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp&lt;br /&gt;
Line          : 73&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : LUA error: attempt to call a nil value&amp;lt;/pre&amp;gt;&lt;br /&gt;
Происходит при попытке вызвать класс, которого не существует&lt;br /&gt;
-----------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Небольшой пример из практики по определению ошибки в особых случаях(для начинающих):&lt;br /&gt;
Игра зависла, картинка на экране не меняется, на Ctrl + Alt+ Delete не реагирует. Только &amp;quot;Холодная перезагрузка&amp;quot; reset. Но при этом обычно в логе нет записи и обычным Ctrl + V ошибку не увидеть.&lt;br /&gt;
Я пользуюсь программой Punto Switcher. Есть в ней опция &amp;quot;дневник&amp;quot;, она ведёт запись всех нажатий клавиш и по нажатию сочетаний клавиш содержимое памяти может записывать в дневник.&lt;br /&gt;
теперь когда игра зависла и картинка на экране не меняется, нажимаете Ctrl + Alt+ Delete. Внешне ничего не изменится, но ОС будет реагировать&lt;br /&gt;
на клавиши, нажимаете сочетание клавиш &amp;quot;записать в дневник&amp;quot;. Делаете перезагрузку, открываете дневник - Ваша ошибка записана.&lt;br /&gt;
&amp;quot;дядя Саша&amp;quot;&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
--------------&lt;br /&gt;
By tracker.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Expression    : bone_id!=BI_NONE&lt;br /&gt;
Function      : SArtefactDetectorsSupport::SetVisible&lt;br /&gt;
File          : D:\prog_repository\sources\trunk\xrGame\Artefact.cpp&lt;br /&gt;
Line          : 525&lt;br /&gt;
Description   : link&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возникает при создании или добавлении чужих артефактов. В artefacts.ltx, в секции af_base есть параметр particles_bone=link. Это имя косточки, которая принимается за центр при проигрывании партикла. Если кость в артефакте называется по иному, например joint2, и это не указанно в секции нового арта, которая наследуется от базовой и подаразумевает естественно наличие link, получаем вылет. Решается конвертированием модели арта в .object, просмотром в sdk и выяснением имени косточки с занесением в конфиг.&lt;br /&gt;
--------------&lt;br /&gt;
&lt;br /&gt;
[[Категория:FAQ]]&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B8%D0%BD%D0%B3%D0%BB_%D0%BB%D0%BE%D0%BA%D0%B0%D1%86%D0%B8%D0%B8_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%A1%D0%94%D0%9A_%D0%A7%D0%9D</id>
		<title>Обсуждение:Создание сингл локации через СДК ЧН</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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B8%D0%BD%D0%B3%D0%BB_%D0%BB%D0%BE%D0%BA%D0%B0%D1%86%D0%B8%D0%B8_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%A1%D0%94%D0%9A_%D0%A7%D0%9D"/>
				<updated>2011-10-29T08:18:34Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Новая страница: «Всё ссылки на картинки мертвые»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Всё ссылки на картинки мертвые&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%90%D0%98-%D0%A1%D0%B5%D1%82%D0%BA%D0%B8</id>
		<title>Сборка АИ-Сетки</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%90%D0%98-%D0%A1%D0%B5%D1%82%D0%BA%D0%B8"/>
				<updated>2011-08-09T05:33:20Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве мы пошагово объясним вам базовые принципы предварительной сборки и к каждой картинке обязательно добавим пояснение. Надеюсь этот мануал поможет вам понять как все работает и даст возможность собрать собственную АИ-сетку для вашего синглплеерного уровня. Здесь мы не будем касаться всех тонкостей добавления нодов по одному и изменения их настроек, но обещаю, что вскоре появится расширенный туриал. Большинство мапперов автоматически учатся генерировать аи сетку, и если они хотят узнать больше, то просто сами исследуют оставшуюся непознанную часть редактора уровня.&lt;br /&gt;
&lt;br /&gt;
Создание АИ сетки необходимо только для сингплеерных карт. Если вам нужно создать мультиплеерный уровень, то можете спокойно пропустить данный туриал. АИ сетка контролирует движение нпс и всех существ на уровне. Когда вы закончите базу для своей карты и разместите каждый объект как хотели, то:&lt;br /&gt;
&lt;br /&gt;
===Шаг 1:===&lt;br /&gt;
&lt;br /&gt;
Перед вами простая карта, которая уже подготовлена для создания АИ сетки. Как вы видите у нее есть границы(ограждения). На панели справа в свитке Edit Mode давайте нажмем на кнопку AI Map. (она подсвечена редактором)&lt;br /&gt;
{|&lt;br /&gt;
|valign=left|[[Изображение:1aimap.JPG|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Шаг 2:===&lt;br /&gt;
&lt;br /&gt;
После того как вы ее нажали, убедитесь, что на панели сверху выбрана стрелка (смотрим картинку)&lt;br /&gt;
{|&lt;br /&gt;
|valign=left|[[Изображение:2aimapru.jpg|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
===Шаг 3:===&lt;br /&gt;
&lt;br /&gt;
Когда вы выделите чтото, то сможете осуществить привязку нажав кнопку add в разделе snaps list +/-, и добавлять объекты в этот список(смотрите скрин) или сделать так- во вкладке Tools&amp;gt;selection&amp;gt;select_all и во вкладке commands&amp;gt;add_selektet_to_list, тем самым мы добавим все обьекты на уровне в список и аи-карта сгенерируется для всех предметов&lt;br /&gt;
{|&lt;br /&gt;
|valign=left|[[Изображение:3aimapru.JPG|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Шаг 4:===&lt;br /&gt;
&lt;br /&gt;
Когда вы выбираете объект он будет добавлен к этому списку привязанных объектов и станет красного цвета, так что вы будете знать, что он уже добавлен. Как правило, добавление объектов за пределами огражения не требуется, так как логично, что вы будете спавнить нпс только внутри уровня, а не снаружи, также не забудьте выделить сами ограждения, чтобы нпс не пытались через них перебраться. :) (смотрим скрин)&lt;br /&gt;
{|&lt;br /&gt;
|valign=left|[[Изображение:4aimapru.JPG|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
===Шаг 5:===&lt;br /&gt;
&lt;br /&gt;
Когда вы выделили все необходимые объекты на уровне, вам нужно собственноручно разместить на карте хотя бы 1 аи-нод. Так что кликаем на иконку &amp;quot;add&amp;quot; на панели аи-нодов (смотреть картинку)&lt;br /&gt;
{|&lt;br /&gt;
|valign=left|[[Изображение:5aimapru.JPG|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
===Шаг 6:===&lt;br /&gt;
&lt;br /&gt;
Нажмите снова кнопку &amp;quot;add&amp;quot;, но только на верхней панели инструментов и выберите тип аи-нода, а потом разместите его на карте(смотреть скрин)&lt;br /&gt;
{|&lt;br /&gt;
|valign=left|[[Изображение:6aimapru.JPG|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
===Шаг 7:===&lt;br /&gt;
&lt;br /&gt;
Теперь, когда вы разместили АИ ноду и добавили все необходимые объекты в список привязки(Snaps list), мы сможете сгенерировать АИ Сетку. Нажмите кнопку &amp;quot;generate full&amp;quot; чуть ниже AI Map Commands. Процесс генерации может длиться долго если у вас большая карта, также это зависит от характеристик вашего компа. Когда это все закончится, вы можете снова переключиться в режим добавления объектов(object), чтобы окрашенные красным цветом они снова выглядели нормально для дальнейшей работы (смотреть картинку)&lt;br /&gt;
{|&lt;br /&gt;
|valign=left|[[Изображение:7aimapru.JPG|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
===Шаг 8:===&lt;br /&gt;
&lt;br /&gt;
Итак, АИ Сетка создана, как вы видите она была сгенерирована правильно, и нпс не будут пытаться долбиться в стены.&lt;br /&gt;
{|&lt;br /&gt;
|valign=left|[[Изображение:8aimapru.JPG|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Мои поздравления! Теперь вы можете собрать вашу карту и потом скомпилировать ее. Используя компиляторы аи от бардака и вы сможете создать свою собственную полноценную синглплеерную карту :)&lt;br /&gt;
&lt;br /&gt;
===Дополнение:===&lt;br /&gt;
&lt;br /&gt;
Я уверен, что вы заметили, что сталкеры любят идти прямо в огонь, может для них вода слишком холодная? :) На самом деле это не так. Проблема в том что генератор аи-сетки не срабатывает нормально на мелких объектах, таких как костры и нпсы могут ходить сквозь них (естественно при этом умирая). Чтобы избежать подобных проблем на уровне, надо сделать так: выделить на карте неправильные аи-ноды и нажать кнопку &amp;quot;delete&amp;quot; в подразделе AI-Map Nodes (или нажать &amp;quot;Delete&amp;quot; на клавиатуре).&lt;br /&gt;
&lt;br /&gt;
Так же вы можете вручную редактировать АИ сетку используя режим Add, при зажатой Alt аи-ноды можно укладывать сколько нужно и где нужно&lt;br /&gt;
[http://savepic.net/1809364.htm] [http://savepic.net/1808340.htm] без необходимости каждый раз нажимать Add (после укладки единочного нода СДК автоматически переключается в режим Select)&lt;br /&gt;
&lt;br /&gt;
P.S. Перевод немного вольный с некоторыми исправленными моментами&lt;br /&gt;
&lt;br /&gt;
P.S.S при добавлении НПС на уровень нужно чтоб НПС находились на АИ сетке иначе при переноске в игру будет вылет&lt;br /&gt;
&lt;br /&gt;
Автор: dezodor&lt;br /&gt;
&lt;br /&gt;
Перевод: loxotron&lt;br /&gt;
&lt;br /&gt;
Дополнил: Deathdoor (OGSE Team)&lt;br /&gt;
&lt;br /&gt;
[[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%9A%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%9D%D0%9F%D0%A1_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7</id>
		<title>Обсуждение:Конвертация НПС из ЧН/ЗП в ТЧ</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%9A%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%9D%D0%9F%D0%A1_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7"/>
				<updated>2011-06-30T21:35:35Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Раздел '''Редактирование User Data для модели''' абсолютно неверен. Прежде чем писать статью, посмотрите что там у нормальных сталкеров и постарайтесь понять назначение там написанного!!;&amp;lt;br /&amp;gt;&lt;br /&gt;
Раздел '''Работа с костями''' должен стоять ДО '''Экспорт анимаций в .omf сборник''', иначе при СДК вам не даст сохранить .omf лог будет пестрить ошибками;&amp;lt;br /&amp;gt;&lt;br /&gt;
Так же у вас ошибки в этом разделе. Всё вместе и приводит к безлоговым вылетам;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Deathdoor (OGSE Team)]]&lt;br /&gt;
&lt;br /&gt;
Мои глубочайшие. Исправил.  [[Участник:Baklan|Baklan]] 11:56, 25 июня 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
Начну с конца: в ЧН и ЗП НЕТ файла textures.ltx, вместо него используются файлы настройки .thm;&amp;lt;br /&amp;gt; &lt;br /&gt;
В '''Работе с костями''': кости разделены на группы: '''legs, torso, head''';&amp;lt;br /&amp;gt;&lt;br /&gt;
В '''Присвоение модели любому НПС''': вместо целой &amp;quot;простыни&amp;quot;, в которой крайне сложно разглядеть разницу, достаточно было указать, что визуал персонажей меняеться в строке ограниченной тегами &amp;lt;visual&amp;gt;&amp;lt;/visual&amp;gt;;&amp;lt;br /&amp;gt;&lt;br /&gt;
типа было так: &amp;lt;visual&amp;gt;actors\neytral\stalker_neytral_balon_1&amp;lt;/visual&amp;gt;;&amp;lt;br /&amp;gt; &lt;br /&gt;
стало так: &amp;lt;visual&amp;gt;actors\nebo\stalker_nebo_2&amp;lt;/visual&amp;gt;;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Deathdoor (OGSE Team)]]&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:MilkShape_3D_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D1%80%D0%BE%D0%B7%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D0%BA_%D0%B2_%D0%BE%D0%B4%D0%BD%D1%83</id>
		<title>Обсуждение:MilkShape 3D сборка нескольких розверток в одну</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:MilkShape_3D_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D1%80%D0%BE%D0%B7%D0%B2%D0%B5%D1%80%D1%82%D0%BE%D0%BA_%D0%B2_%D0%BE%D0%B4%D0%BD%D1%83"/>
				<updated>2011-06-20T04:27:28Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Новая страница: «Хорошая, правильная статья. Единственное можно было чуть побольше расказать про сам интер...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Хорошая, правильная статья. Единственное можно было чуть побольше расказать про сам интерфейс Texture Coordinate Editor. Да и фотки делать с развернутым экраном, а не scale 0.28 :-)&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%9A%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%9D%D0%9F%D0%A1_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7</id>
		<title>Обсуждение:Конвертация НПС из ЧН/ЗП в ТЧ</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%9A%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%9D%D0%9F%D0%A1_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7"/>
				<updated>2011-06-15T17:28:17Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Новая страница: «Раздел '''Редактирование User Data для модели''' абсолютно неверен. Прежде чем писать статью, по...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Раздел '''Редактирование User Data для модели''' абсолютно неверен. Прежде чем писать статью, посмотрите что там у нормальных сталкеров и постарайтесь понять назначение там написанного!!&lt;br /&gt;
Раздел '''Работа с костями''' должен стоять ДО '''Экспорт анимаций в .omf сборник''', иначе при СДК вам не даст сохранить .omf лог будет пестрить ошибками&lt;br /&gt;
Так же у вас ошибки в этом разделе. Всё вместе и приводит к безлоговым вылетам &lt;br /&gt;
'''Deathdoor (OGSE Team)'''&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:Sound_Editor_-_OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5</id>
		<title>Обсуждение:Sound Editor - OGG комментирование</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:Sound_Editor_-_OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"/>
				<updated>2011-06-03T13:30:29Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Моё мнение: нельзя &amp;quot;стандарты ТЧ&amp;quot; воспринимать как истину в последней дистанции.&lt;br /&gt;
Насколько помню в одном из билдов были тоже thm с настройками звука.&lt;br /&gt;
Идём далее: у звуковых коментов максимальнео значение - это шестнадцатиричное FF - то бишь 255. Всё что выше будет обрезано на эти 255 и на выходе получится ху..а! Т.е. если стояло типа 400, то в реальности в игре будет 145 метров. А если 300 - то вообще 45&lt;br /&gt;
&lt;br /&gt;
:*Неипёт... .thm извлечены из оригинала ТЧ версии 1.0006&lt;br /&gt;
:*В любом случае это ближе к истинне, чем &amp;quot;Шаблоны для начинающих&amp;quot; из статьи про Sound Editor, где умники повыставляли значение Quality равным 1&lt;br /&gt;
&lt;br /&gt;
Мне кажется параметр Quality является именно тем, чем является т.е. качеством (сжатие), и соответственно влияет на размер конечного файла (сжатие меньше - файл больше - качество выше и наоборот). Для части звуков вполне позволительно его выставлять в 1.&lt;br /&gt;
И походу звук кодируется лишним байтом, так как после декомпиляции действительно возможно увидеть числа 300 или 400&lt;br /&gt;
&lt;br /&gt;
*:: &amp;quot;декомпиляции&amp;quot; - каким методом?&lt;br /&gt;
:*178.44.254.54, декомпиляции с помощью X-Ray game asset converter&lt;br /&gt;
:*Deathdoor, какая разница, какие значения стоят в Max Dist? Min Dist по-важнее будет.&lt;br /&gt;
&lt;br /&gt;
Не скажи, Max Dist влияет на затухание звука. Не будешь же ты ставить для разговора 300 метров? Этак все байки сталкеров далеко от костра будут слышны. Например на кордоне ТЧ, если удачно встать, можно слышать фразы из мегафона блокпоста военных, стоя в бункере Сидоровича: это как раз ошибка в Max Dist, которую нужно было сделать на пару метров меньше.&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:Sound_Editor_-_OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5</id>
		<title>Обсуждение:Sound Editor - OGG комментирование</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:Sound_Editor_-_OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"/>
				<updated>2011-06-02T13:53:49Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Моё мнение: нельзя &amp;quot;стандарты ТЧ&amp;quot; воспринимать как истину в последней дистанции.&lt;br /&gt;
Насколько помню в одном из билдов были тоже thm с настройками звука.&lt;br /&gt;
Идём далее: у звуковых коментов максимальнео значение - это шестнадцатиричное FF - то бишь 255. Всё что выше будет обрезано на эти 255 и на выходе получится ху..а! Т.е. если стояло типа 400, то в реальности в игре будет 145 метров. А если 300 - то вообще 45&lt;br /&gt;
&lt;br /&gt;
:*Неипёт... .thm извлечены из оригинала ТЧ версии 1.0006&lt;br /&gt;
:*В любом случае это ближе к истинне, чем &amp;quot;Шаблоны для начинающих&amp;quot; из статьи про Sound Editor, где умники повыставляли значение Quality равным 1&lt;br /&gt;
&lt;br /&gt;
Мне кажется параметр Quality является именно тем, чем является т.е. качеством (сжатие), и соответственно влияет на размер конечного файла (сжатие меньше - файл больше - качество выше и наоборот). Для части звуков вполне позволительно его выставлять в 1.&lt;br /&gt;
И походу звук кодируется лишним байтом, так как после декомпиляции действительно возможно увидеть числа 300 или 400&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:Sound_Editor_-_OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5</id>
		<title>Обсуждение:Sound Editor - OGG комментирование</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:Sound_Editor_-_OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"/>
				<updated>2011-06-02T13:52:49Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Моё мнение: нельзя &amp;quot;стандарты ТЧ&amp;quot; воспринимать как истину в последней дистанции.&lt;br /&gt;
Насколько помню в одном из билдов были тоже thm с настройками звука.&lt;br /&gt;
&lt;br /&gt;
Идём далее: '''у звуковых коментов максимальнео значение - это шестнадцатиричное FF - то бишь 255. Двести, мммать, пятьдесят пять! Всё что выше будет обрезано на эти 255 и на выходе получится ху..а! Т.е. если стояло типа 400, то в реальности в игре будет 145 метров. А если 300 - то вообще 45 '''&lt;br /&gt;
:*Неипёт... .thm извлечены из оригинала ТЧ версии 1.0006&lt;br /&gt;
:*В любом случае это ближе к истинне, чем &amp;quot;Шаблоны для начинающих&amp;quot; из статьи про Sound Editor, где умники повыставляли значение Quality равным 1&lt;br /&gt;
&lt;br /&gt;
Мне кажется параметр Quality является именно тем, чем является т.е. качеством (сжатие), и соответственно влияет на размер конечного файла (сжатие меньше - файл больше - качество выше и наоборот). Для части звуков вполне позволительно его выставлять в 1.&lt;br /&gt;
И походу звук кодируется лишним байтом, так как после декомпиляции действительно возможно увидеть числа 300 или 400&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:Sound_Editor_-_OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5</id>
		<title>Обсуждение:Sound Editor - OGG комментирование</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:Sound_Editor_-_OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"/>
				<updated>2011-06-01T05:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Новая страница: «Моё мнение: нельзя &amp;quot;стандарты ТЧ&amp;quot; воспринимать как истину в последней дистанции. Насколько...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Моё мнение: нельзя &amp;quot;стандарты ТЧ&amp;quot; воспринимать как истину в последней дистанции.&lt;br /&gt;
Насколько помню в одном из билдов были тоже thm с настройками звука.&lt;br /&gt;
&lt;br /&gt;
Идём далее: '''у звуковых коментов максимальнео значение - это шестнадцатиричное FF - то бишь 255. Двести, мммать, пятьдесят пять! Всё что выше будет обрезано на эти 255 и на выходе получится ху..а! Т.е. если стояло типа 400, то в реальности в игре будет 145 метров. А если 300 - то вообще 45 '''&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_NPC_(%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9)</id>
		<title>Обсуждение:Создание моделей NPC (исправление костей)</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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_NPC_(%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9)"/>
				<updated>2011-04-21T05:49:46Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Раздел касающийся поворота модели в милке вообще лишний и ненужный в принципе, его надо удалить и перенести статью в раздел работы с СДК (Deathdoor)&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_NPC_(%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9)</id>
		<title>Создание моделей NPC (исправление костей)</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_NPC_(%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9)"/>
				<updated>2011-04-21T05:49:16Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак, я (Scarabay) хочу рассказать вам очень простой способ, которым можно исправить вышеописанный баг с неестественным выгибом суставов у моделей НПС, без использования программы milkshape.&lt;br /&gt;
Как вы могли заметить, выворот происходит в тазобедренных суставах, коленях и локтях моделей. Как это исправить:&lt;br /&gt;
&lt;br /&gt;
Запускаем Actor Editor (см. примечание), открываем проблемную модель. Далее кликаем на вкладку Bones справа.&lt;br /&gt;
Тут нам нужно настроить 6 джоинтов - bip01_l_thigh и bip01_r_thigh (тазобедр. суст.), bip01_l_calf и bip01_r_calf (колени), bip01_l_forearm и bip01_r_forearm (локти). Выделяем, например, джоинт bip01_l_calf. Снизу должны появиться настройки.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Joints.PNG]]&lt;br /&gt;
&lt;br /&gt;
Ищем поле Axis Y, и меняем в нем параметры Min и Max местами. &lt;br /&gt;
&lt;br /&gt;
Допустим, было:&lt;br /&gt;
&lt;br /&gt;
Min: 0.00&lt;br /&gt;
&lt;br /&gt;
Max: 110.00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А станет:&lt;br /&gt;
&lt;br /&gt;
Min: -110.00&lt;br /&gt;
&lt;br /&gt;
Max: 0.00&lt;br /&gt;
&lt;br /&gt;
И так для всех 6-ти джоинтов (возможно, нужно настроить еще и плечи). Все.&lt;br /&gt;
&lt;br /&gt;
*''Примечание: если вы делаете модель под ТЧ, то АЕ нужно использовать из СДК 0.4, для ЧН и ЗП соответственно СДК 0.5 + апдейт до 0.6 + фикс групп сглаживания, можно конечно и СДК 0.7, но в нем бьются группы сглаживания, а фикса нету. Найти все это добро можно на этом сайте.''&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:Senator|Senator]]&lt;br /&gt;
&lt;br /&gt;
Правка:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:MegaFenix|MegaFenix]]&lt;br /&gt;
* [[Участник:Scarabay|Scarabay]]&lt;br /&gt;
* [[Участник:Deathdoor|Deathdoor]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Wireframe]]&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_NPC_(%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9)</id>
		<title>Обсуждение:Создание моделей NPC (исправление костей)</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%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_NPC_(%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9)"/>
				<updated>2011-04-21T05:47:09Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Новая страница: «Раздел касающийся поворота модели в милке вообще лишний и ненужный в принципе, его надо уд...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Раздел касающийся поворота модели в милке вообще лишний и ненужный в принципе, его надо удалить (Deathdoor)&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B4%D0%B5%D0%BD%D0%B5%D0%B3_%D1%81_%D1%82%D1%80%D1%83%D0%BF%D0%BE%D0%B2</id>
		<title>SoC. Снятие денег с трупов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B4%D0%B5%D0%BD%D0%B5%D0%B3_%D1%81_%D1%82%D1%80%D1%83%D0%BF%D0%BE%D0%B2"/>
				<updated>2011-03-04T04:54:36Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Отмена правки 9056 участника 168.216.29.89 (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой теме я напишу как сделать так что бы можно было снимать деньги с трупов.&lt;br /&gt;
Нам надо файл treasure_manager.script&lt;br /&gt;
В этом файле находим такие строки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;--' Юзание инициатора (возможность выдать тайник)&lt;br /&gt;
function CTreasure:use(npc)&lt;br /&gt;
	printf(&amp;quot;TREASURE USE&amp;quot;)&lt;br /&gt;
После строки --printf(&amp;quot;TREASURE USE&amp;quot;)-- пишем&lt;br /&gt;
&lt;br /&gt;
	if (npc and db.actor) then&lt;br /&gt;
		lootmoney.lootmoney(npc)&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
У нас должно выйти&lt;br /&gt;
&amp;lt;pre&amp;gt;--' Юзание инициатора (возможность выдать тайник)&lt;br /&gt;
function CTreasure:use(npc)&lt;br /&gt;
	printf(&amp;quot;TREASURE USE&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if (npc and db.actor) then&lt;br /&gt;
		lootmoney.lootmoney(npc)&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь создаём файл lootmoney.script&lt;br /&gt;
и в нём пишем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function lootmoney(npc)&lt;br /&gt;
	if npc ~= nil and not string.find(npc:section(),&amp;quot;arena&amp;quot;) and npc:character_community()~=&amp;quot;arena_enemy&amp;quot; then&lt;br /&gt;
		local money = npc:money()&lt;br /&gt;
		if money ~= nil and money ~=0 then&lt;br /&gt;
				local deadmoney = money&lt;br /&gt;
&lt;br /&gt;
                                local npc_rank&lt;br /&gt;
		npc_rank = ranks.get_obj_rank_name(npc)&lt;br /&gt;
		if npc_rank ~= nil then&lt;br /&gt;
			if npc_rank == &amp;quot;novice&amp;quot; and deadmoney &amp;gt;=400 then deadmoney=math.random(25,400)    &lt;br /&gt;
			elseif npc_rank == &amp;quot;experienced&amp;quot; and deadmoney &amp;gt;=500 then deadmoney=math.random(50,500)  &lt;br /&gt;
			elseif npc_rank == &amp;quot;veteran&amp;quot; and deadmoney &amp;gt;=600 then deadmoney=math.random(100,600) &lt;br /&gt;
			elseif npc_rank == &amp;quot;master&amp;quot; and deadmoney &amp;gt;=700 then deadmoney=math.random(200,700)  &lt;br /&gt;
                          end&lt;br /&gt;
						  end&lt;br /&gt;
				local news_texti = &amp;quot;\\n%c[255,255,0,0]Мёртвый сталкер: %c[default]&amp;quot;..npc:character_name()..&amp;quot;\\n%c[255,255,0,0]Обнаружено денег: %c[default]&amp;quot;..game.translate_string(tostring(deadmoney)..&amp;quot;руб.&amp;quot;)&lt;br /&gt;
				db.actor:give_game_news(news_texti, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(0,0,83,47), 1, 4000)&lt;br /&gt;
				db.actor:give_money(deadmoney)&lt;br /&gt;
				game_stats.money_quest_update(deadmoney) &lt;br /&gt;
				npc:give_money(-money)&lt;br /&gt;
				game_stats.money_quest_update(-money)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
теперь создаем файл watcher_act.script и впишем в него&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-- Red75 (c) 2008&lt;br /&gt;
-- Marauder scheme v 1.1&lt;br /&gt;
-- Part of AMK MOD&lt;br /&gt;
&lt;br /&gt;
evid_see_stuff=6931&lt;br /&gt;
evid_near_stuff=evid_see_stuff+1&lt;br /&gt;
evid_see_body=evid_see_stuff+2&lt;br /&gt;
evid_position_corrected=evid_see_stuff+3&lt;br /&gt;
&lt;br /&gt;
actid_reach_item=evid_see_stuff&lt;br /&gt;
actid_grab_item=evid_see_stuff+1&lt;br /&gt;
actid_grab_body=evid_see_stuff+2&lt;br /&gt;
actid_correct_position=evid_see_stuff+3&lt;br /&gt;
&lt;br /&gt;
-- Вызывает closure раз в period, obj[var] хранит время следующего срабатывания&lt;br /&gt;
function timed(obj,var,period,closure)&lt;br /&gt;
	if obj[var] and obj[var]&amp;lt;time_global() then&lt;br /&gt;
		obj[var]=time_global()+period&lt;br /&gt;
		closure()&lt;br /&gt;
	elseif not obj[var] then&lt;br /&gt;
		obj[var]=time_global()+period&lt;br /&gt;
--		closure()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function trigger_timed(obj,var)&lt;br /&gt;
	obj[var]=time_global()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local disabled_objects={}&lt;br /&gt;
&lt;br /&gt;
local corpse_checked={} -- true - has loot, false - hasn't loot, nil - not checked&lt;br /&gt;
&lt;br /&gt;
function checkCorpse(obj)&lt;br /&gt;
	if (IsStalker(obj) or IsMonster(obj)) and obj:alive()==false then&lt;br /&gt;
		if corpse_checked[obj:id()]~=nil then&lt;br /&gt;
			return corpse_checked[obj:id()]&lt;br /&gt;
		end&lt;br /&gt;
		local cnt=0&lt;br /&gt;
		obj:iterate_inventory(function (dummy, item)&lt;br /&gt;
        if item:section()~=&amp;quot;bolt&amp;quot; then&lt;br /&gt;
          cnt=cnt+1&lt;br /&gt;
        end&lt;br /&gt;
			end, nil)&lt;br /&gt;
		corpse_checked[obj:id()]=cnt&amp;gt;0&lt;br /&gt;
		return corpse_checked[obj:id()]&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local valuable_clsid={&lt;br /&gt;
    [clsid.art_bast_artefact]=true,&lt;br /&gt;
    [clsid.art_black_drops]=true,&lt;br /&gt;
    [clsid.art_dummy]=true,&lt;br /&gt;
    [clsid.art_electric_ball]=true,&lt;br /&gt;
    [clsid.art_faded_ball]=true,&lt;br /&gt;
    [clsid.art_galantine]=true,&lt;br /&gt;
    [clsid.art_gravi]=true,&lt;br /&gt;
    [clsid.art_gravi_black]=true,&lt;br /&gt;
    [clsid.art_mercury_ball]=true,&lt;br /&gt;
    [clsid.art_needles]=true,&lt;br /&gt;
    [clsid.art_rusty_hair]=true,&lt;br /&gt;
    [clsid.art_thorn]=true,&lt;br /&gt;
    [clsid.art_zuda]=true,&lt;br /&gt;
    [clsid.artefact_s]=true,&lt;br /&gt;
    [clsid.device_detector_simple]=true,&lt;br /&gt;
    [clsid.device_pda]=true,&lt;br /&gt;
    [clsid.device_torch_s]=true,&lt;br /&gt;
    [clsid.equ_exo]=true,&lt;br /&gt;
    [clsid.equ_military]=true,&lt;br /&gt;
    [clsid.equ_scientific]=true,&lt;br /&gt;
    [clsid.equ_stalker_s]=true,&lt;br /&gt;
    [clsid.obj_antirad]=true,&lt;br /&gt;
    [clsid.obj_attachable]=true,&lt;br /&gt;
    [clsid.obj_bandage]=true,&lt;br /&gt;
    [clsid.obj_bolt]=true,&lt;br /&gt;
    [clsid.obj_bottle]=true,&lt;br /&gt;
    [clsid.obj_food]=true,&lt;br /&gt;
    [clsid.obj_medkit]=true,&lt;br /&gt;
    [clsid.wpn_ak74_s]=true,&lt;br /&gt;
    [clsid.wpn_ammo]=true,&lt;br /&gt;
    [clsid.wpn_ammo_m209]=true,&lt;br /&gt;
    [clsid.wpn_ammo_og7b]=true,&lt;br /&gt;
    [clsid.wpn_ammo_vog25]=true,&lt;br /&gt;
    [clsid.wpn_binocular_s]=true,&lt;br /&gt;
    [clsid.wpn_bm16_s]=true,&lt;br /&gt;
    [clsid.wpn_fn2000]=true,&lt;br /&gt;
    [clsid.wpn_fort]=true,&lt;br /&gt;
    [clsid.wpn_groza_s]=true,&lt;br /&gt;
    [clsid.wpn_hpsa_s]=true,&lt;br /&gt;
    [clsid.wpn_knife_s]=true,&lt;br /&gt;
    [clsid.wpn_lr300_s]=true,&lt;br /&gt;
    [clsid.wpn_pm_s]=true,&lt;br /&gt;
    [clsid.wpn_rg6_s]=true,&lt;br /&gt;
    [clsid.wpn_rpg7_s]=true,&lt;br /&gt;
    [clsid.wpn_scope_s]=true,&lt;br /&gt;
    [clsid.wpn_shotgun_s]=true,&lt;br /&gt;
    [clsid.wpn_silencer]=true,&lt;br /&gt;
    [clsid.wpn_svd_s]=true,&lt;br /&gt;
    [clsid.wpn_svu_s]=true,&lt;br /&gt;
    [clsid.wpn_usp45_s]=true,&lt;br /&gt;
    [clsid.wpn_val_s]=true,&lt;br /&gt;
    [clsid.wpn_vintorez_s]=true,&lt;br /&gt;
    [clsid.wpn_walther_s]=true,&lt;br /&gt;
    [clsid.wpn_wmagaz]=true,&lt;br /&gt;
    [clsid.wpn_wmaggl]=true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local obj_owner={}&lt;br /&gt;
&lt;br /&gt;
function bgwith(str,ptr)&lt;br /&gt;
	local ps=string.find(str,ptr)&lt;br /&gt;
	return ps~=nil and ps==1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function isValuable(obj)&lt;br /&gt;
	local sec=obj:section()&lt;br /&gt;
  if sec==&amp;quot;amk_metka&amp;quot; then&lt;br /&gt;
    return false,false&lt;br /&gt;
  end&lt;br /&gt;
	if valuable_clsid[obj:clsid()] then&lt;br /&gt;
		return true, false&lt;br /&gt;
	end&lt;br /&gt;
	return bgwith(sec,&amp;quot;af_&amp;quot;) or bgwith(sec,&amp;quot;ammo_&amp;quot;) or bgwith(sec,&amp;quot;wpn_&amp;quot;) or bgwith(sec,&amp;quot;energy_&amp;quot;) or checkCorpse(obj), IsStalker(obj) or IsMonster(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function objValue(obj)&lt;br /&gt;
	local sec=obj:section()&lt;br /&gt;
  local multiplier=1&lt;br /&gt;
  if bgwith(sec,&amp;quot;ammo_&amp;quot;) then&lt;br /&gt;
    multiplier=30&lt;br /&gt;
  elseif sec==&amp;quot;vodka&amp;quot; then&lt;br /&gt;
    multiplier=20&lt;br /&gt;
  end&lt;br /&gt;
	if system_ini():section_exist(sec) and system_ini():line_exist(sec,&amp;quot;cost&amp;quot;) then&lt;br /&gt;
		return system_ini():r_float(sec,&amp;quot;cost&amp;quot;)*multiplier&lt;br /&gt;
	end&lt;br /&gt;
	return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function claimGObject(npc,st,obj)&lt;br /&gt;
	if st.grabitemid then&lt;br /&gt;
		obj_owner[st.grabitemid]=nil&lt;br /&gt;
	end&lt;br /&gt;
	st.grabitemid=obj:id()&lt;br /&gt;
	obj_owner[obj:id()]=npc:id()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function freeGObject(st)&lt;br /&gt;
	if st.grabitemid then&lt;br /&gt;
		obj_owner[st.grabitemid]=nil&lt;br /&gt;
		st.grabitemid=nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function clearGObject(st)&lt;br /&gt;
	st.grabitemid=nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getGObject(st)&lt;br /&gt;
	if st.grabitemid then&lt;br /&gt;
		local ret=level.object_by_id(st.grabitemid)&lt;br /&gt;
		if ret==nil then&lt;br /&gt;
			st.grabitemid=nil&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mypGObject(npc,st)&lt;br /&gt;
	return st.grabitemid~=nil and obj_owner[st.grabitemid]~=nil and obj_owner[st.grabitemid]==npc:id()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;ev_see_stuff&amp;quot; (property_evaluator)&lt;br /&gt;
&lt;br /&gt;
function ev_see_stuff:__init(st,name) super(nil, name)&lt;br /&gt;
	self.st=st&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local bad_dangers={&lt;br /&gt;
  [danger_object.hit]=true,&lt;br /&gt;
  [danger_object.attacked]=true,&lt;br /&gt;
  [danger_object.bullet_ricochet]=true,&lt;br /&gt;
  [danger_object.grenade]=true,&lt;br /&gt;
  [danger_object.entity_death]=true,&lt;br /&gt;
  [danger_object.enemy_sound]=true&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
local inertion_time=30000&lt;br /&gt;
&lt;br /&gt;
function bad_danger(npc)&lt;br /&gt;
  local danger=npc:best_danger()&lt;br /&gt;
  if danger then&lt;br /&gt;
    return bad_dangers[danger:type()] and time_global()-danger:time()&amp;lt;inertion_time&lt;br /&gt;
  end&lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
  &lt;br /&gt;
function ev_see_stuff:evaluate()&lt;br /&gt;
	local res=getGObject(self.st)~=nil&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
  local actsch=db.storage[npc:id()].active_scheme&lt;br /&gt;
  if actsch and db.actor then&lt;br /&gt;
    xr_logic.try_switch_to_another_section(npc, db.storage[npc:id()][actsch], db.actor)&lt;br /&gt;
  end&lt;br /&gt;
	local act_sec=db.storage[npc:id()].active_section or &amp;quot;&amp;quot;&lt;br /&gt;
	if (not npc:alive()) or xr_wounded.is_wounded(npc) or npc:best_enemy() or &lt;br /&gt;
      bad_danger(npc) or (actsch and db.storage[npc:id()][actsch].no_loot) then&lt;br /&gt;
		if res then&lt;br /&gt;
			freeGObject(self.st)&lt;br /&gt;
			amk.mylog(npc:name() .. &amp;quot; distracted. sect &amp;quot;..act_sec,&amp;quot;grb&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
  local dist_limit=1000&lt;br /&gt;
  if bgwith(act_sec,&amp;quot;camper&amp;quot;) then&lt;br /&gt;
    dist_limit=5&lt;br /&gt;
  end&lt;br /&gt;
	local busy=bgwith(act_sec,&amp;quot;walker&amp;quot;) or bgwith(act_sec,&amp;quot;combat&amp;quot;) or bgwith(act_sec,&amp;quot;danger&amp;quot;) -- or npc:best_danger()&lt;br /&gt;
	if res and self.st.block_search then&lt;br /&gt;
	  -- NPC собрался взять вещь. Временно прекратим поиск.&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	timed(self.st,&amp;quot;tm1&amp;quot;,5000+math.random()*10000,&lt;br /&gt;
		function ()&lt;br /&gt;
--			amk.mylog(npc:name() .. &amp;quot; is going to search stuff&amp;quot;,&amp;quot;grb&amp;quot;)&lt;br /&gt;
			local min_dist=100000&lt;br /&gt;
			local function check_item(o)&lt;br /&gt;
				local obj=o:object()&lt;br /&gt;
				if obj_owner[obj:id()] and (level.object_by_id(obj_owner[obj:id()])==nil or level.object_by_id(obj_owner[obj:id()]):alive()==false) then&lt;br /&gt;
					obj_owner[obj:id()]=nil&lt;br /&gt;
				end&lt;br /&gt;
				if (not self.st.disabled_objects[obj:id()]) and (obj:parent()==nil or not IsStalker(obj:parent())) and &lt;br /&gt;
           (obj_owner[obj:id()]==nil or obj_owner[obj:id()]==npc:id()) and npc:accessible(obj:level_vertex_id()) and&lt;br /&gt;
           (db.actor==nil or db.actor:alive()==false or db.actor:position():distance_to_sqr(obj:position())&amp;gt;6) then&lt;br /&gt;
					local valuable,corpse=isValuable(obj)&lt;br /&gt;
					if valuable then &lt;br /&gt;
						local value=3000&lt;br /&gt;
						if not corpse then&lt;br /&gt;
							value=objValue(obj)&lt;br /&gt;
						end&lt;br /&gt;
						if value&amp;lt;=0 then value=0 end&lt;br /&gt;
						local max_dist=5+math.sqrt(value)&lt;br /&gt;
						if busy then&lt;br /&gt;
							max_dist=max_dist/5&lt;br /&gt;
						end&lt;br /&gt;
						local dist=level.vertex_position(obj:level_vertex_id()):distance_to(npc:position())&lt;br /&gt;
            local corrected_dist=dist&lt;br /&gt;
            if dist&amp;gt;5 then&lt;br /&gt;
              corrected_dist=5+(dist-5)/math.sqrt(value)&lt;br /&gt;
            end&lt;br /&gt;
						if dist&amp;lt;max_dist and corrected_dist&amp;lt;min_dist and dist&amp;lt;dist_limit then&lt;br /&gt;
              min_dist=corrected_dist&lt;br /&gt;
							claimGObject(npc,self.st,obj)&lt;br /&gt;
							res=true&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end -- function check_item&lt;br /&gt;
			for o in npc:memory_visible_objects() do&lt;br /&gt;
				check_item(o)&lt;br /&gt;
			end&lt;br /&gt;
			for o in npc:memory_sound_objects() do&lt;br /&gt;
				check_item(o)&lt;br /&gt;
			end&lt;br /&gt;
--			for o in npc:not_yet_visible_objects() do&lt;br /&gt;
--				check_item(o)&lt;br /&gt;
--			end&lt;br /&gt;
			if res then &lt;br /&gt;
				amk.mylog(npc:name() .. &amp;quot; claimed &amp;quot;..getGObject(self.st):name()..&amp;quot; cact &amp;quot;..tostring(npc:motivation_action_manager():current_action_id()),&amp;quot;grb&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	return res -- false -- res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;ev_near_stuff&amp;quot; (property_evaluator)&lt;br /&gt;
&lt;br /&gt;
function ev_near_stuff:__init(st,name) super(nil, name)&lt;br /&gt;
	self.st=st&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ev_near_stuff:evaluate()&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	local gi=getGObject(self.st)&lt;br /&gt;
  if gi then&lt;br /&gt;
    if self.st.dest_lvid then&lt;br /&gt;
      return npc:level_vertex_id()==self.st.dest_lvid&lt;br /&gt;
    end&lt;br /&gt;
    return level.vertex_position(gi:level_vertex_id()):distance_to_sqr(npc:position())&amp;lt;1&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;ev_see_body&amp;quot; (property_evaluator)&lt;br /&gt;
&lt;br /&gt;
function ev_see_body:__init(st) super(nil, &amp;quot;ev_see_body&amp;quot;)&lt;br /&gt;
	self.st=st&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ev_see_body:evaluate()&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	local gi=getGObject(self.st)&lt;br /&gt;
	if gi then&lt;br /&gt;
    return IsStalker(gi) or IsMonster(gi)&lt;br /&gt;
  end&lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;ev_position_corrected&amp;quot; (property_evaluator)&lt;br /&gt;
&lt;br /&gt;
function ev_position_corrected:__init(st) super(nil, &amp;quot;ev_position_corrected&amp;quot;)&lt;br /&gt;
	self.st=st&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ev_position_corrected:evaluate()&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
  return self.st.position_corrected==true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;act_grab_item&amp;quot; (action_base)&lt;br /&gt;
&lt;br /&gt;
function act_grab_item:__init (action_name, st) super (nil, action_name)&lt;br /&gt;
  self.st = st&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function act_grab_item:initialize()&lt;br /&gt;
	action_base.initialize(self)&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	npc:set_item(object.idle,nil)&lt;br /&gt;
	npc:set_movement_type(move.walk)&lt;br /&gt;
	npc:set_mental_state(anim.danger)&lt;br /&gt;
	npc:set_body_state(move.crouch)&lt;br /&gt;
  npc:movement_enabled(true)&lt;br /&gt;
	local gi=getGObject(self.st)&lt;br /&gt;
--	if gi then npc:set_sight(gi,true,true) end&lt;br /&gt;
	npc:set_sight(look.danger,nil,0)&lt;br /&gt;
	amk.mylog(self.object:name()..&amp;quot; is going to grab item&amp;quot;,&amp;quot;stmt&amp;quot;)&lt;br /&gt;
	self.st.block_search=true&lt;br /&gt;
	if gi then&lt;br /&gt;
    if(IsStalker(gi) or IsMonster(gi)) then&lt;br /&gt;
  		self.tt=time_global()+3000&lt;br /&gt;
  	else&lt;br /&gt;
  		self.tt=time_global()+1000&lt;br /&gt;
    	utils.send_to_nearest_accessible_vertex(npc,gi:level_vertex_id())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
	end&lt;br /&gt;
	--npc:set_dest_level_vertex_id(1)&lt;br /&gt;
	self.force=vector():set(0,0,0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function act_grab_item:execute()&lt;br /&gt;
	action_base.execute(self)&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	local gi=getGObject(self.st)&lt;br /&gt;
  if not gi then&lt;br /&gt;
    return&lt;br /&gt;
  end&lt;br /&gt;
	if self.tt&amp;lt;time_global() then&lt;br /&gt;
		if gi and gi:parent()==nil then&lt;br /&gt;
			gi:transfer_item(gi,npc)&lt;br /&gt;
			npc:enable_memory_object(gi,false)&lt;br /&gt;
			amk.mylog(npc:name() .. &amp;quot; has taken &amp;quot;..gi:name(),&amp;quot;grb&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		-- Тут нельзя освобождать объект. transfer_item выполняется асинхронно. Поэтому делаем clearGObject&lt;br /&gt;
		clearGObject(self.st)&lt;br /&gt;
		--freeGObject(self.st) &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function act_grab_item:finalize()&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	self.st.block_search=nil&lt;br /&gt;
	npc:set_sight(look.danger,nil,0)&lt;br /&gt;
	trigger_timed(self.st,&amp;quot;tm1&amp;quot;)&lt;br /&gt;
  self.st.dest_lvid=nil -- Очищаем скорректированную точку назначения&lt;br /&gt;
	action_base.finalize(self)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;act_grab_body&amp;quot; (action_base)&lt;br /&gt;
&lt;br /&gt;
function act_grab_body:__init (st) super (nil, &amp;quot;act_grab_body&amp;quot;)&lt;br /&gt;
  self.st = st&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function act_grab_body:initialize()&lt;br /&gt;
	action_base.initialize(self)&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	local gi=getGObject(self.st)&lt;br /&gt;
	amk.mylog(self.object:name()..&amp;quot; is going to grab body&amp;quot;,&amp;quot;stmt&amp;quot;)&lt;br /&gt;
	self.st.block_search=true&lt;br /&gt;
	if gi then&lt;br /&gt;
 		self.tt=time_global()+6000&lt;br /&gt;
    state_mgr.set_state(npc,&amp;quot;search&amp;quot;,nil,nil,{look_object=gi})&lt;br /&gt;
  else&lt;br /&gt;
    self.st.dest_lvid=nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function act_grab_body:execute()&lt;br /&gt;
	action_base.execute(self)&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	local gi=getGObject(self.st)&lt;br /&gt;
  if not gi then&lt;br /&gt;
    self.st.dest_lvid=nil&lt;br /&gt;
    return&lt;br /&gt;
  end&lt;br /&gt;
	if self.tt&amp;lt;time_global() then&lt;br /&gt;
		if gi and gi:parent()==nil then&lt;br /&gt;
      gi:iterate_inventory(function (d,item)&lt;br /&gt;
          if item:section()~=&amp;quot;bolt&amp;quot; then &lt;br /&gt;
            gi:transfer_item(item,npc)&lt;br /&gt;
          end&lt;br /&gt;
        end, nil)&lt;br /&gt;
		local num=gi:money() &lt;br /&gt;
		if num and num &amp;gt;0 then &lt;br /&gt;
				local deadmoney = num&lt;br /&gt;
				local gi_rank&lt;br /&gt;
		gi_rank = ranks.get_obj_rank_name(gi)&lt;br /&gt;
		if gi_rank ~= nil then&lt;br /&gt;
			if gi_rank == &amp;quot;novice&amp;quot; and deadmoney &amp;gt;=100 then deadmoney=math.random(25,100)    &lt;br /&gt;
			elseif gi_rank == &amp;quot;experienced&amp;quot; and deadmoney &amp;gt;=200 then deadmoney=math.random(50,200)  &lt;br /&gt;
			elseif gi_rank == &amp;quot;veteran&amp;quot; and deadmoney &amp;gt;=300 then deadmoney=math.random(100,300) &lt;br /&gt;
			elseif gi_rank == &amp;quot;master&amp;quot; and deadmoney &amp;gt;=400 then deadmoney=math.random(200,400)  &lt;br /&gt;
		end&lt;br /&gt;
		end&lt;br /&gt;
		npc:give_money(deadmoney) &lt;br /&gt;
		game_stats.money_quest_update(deadmoney) &lt;br /&gt;
		gi:give_money(-num) &lt;br /&gt;
		game_stats.money_quest_update(-num) &lt;br /&gt;
		end&lt;br /&gt;
      corpse_checked[gi:id()]=false&lt;br /&gt;
			amk.mylog(npc:name() .. &amp;quot; has taken &amp;quot;..gi:name(),&amp;quot;grb&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		-- Тут нельзя освобождать объект. transfer_item выполняется асинхронно. Поэтому делаем clearGObject&lt;br /&gt;
		clearGObject(self.st)&lt;br /&gt;
		--freeGObject(self.st) &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function act_grab_body:finalize()&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	self.st.block_search=nil&lt;br /&gt;
	trigger_timed(self.st,&amp;quot;tm1&amp;quot;)&lt;br /&gt;
  self.st.dest_lvid=nil -- Очищаем скорректированную точку назначения&lt;br /&gt;
	action_base.finalize(self)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function correct_position(gi,npc)&lt;br /&gt;
  if IsStalker(gi) then&lt;br /&gt;
    -- Вычисляем вектор разницы между координатами кости и level vertex. Пытаемся найти level vertex наиболее близкий к кости&lt;br /&gt;
    local diff=gi:bone_position(&amp;quot;bip01_head&amp;quot;):sub(level.vertex_position(gi:level_vertex_id()))&lt;br /&gt;
    local len=diff:magnitude()&lt;br /&gt;
    local diffp=vector():set(diff.z,0,-diff.x):mul(0.5)&lt;br /&gt;
    -- Сдвигаем целевую точку вбок, чтобы непись не залазил ногами в труп&lt;br /&gt;
    diff:add(diffp)&lt;br /&gt;
    return npc:vertex_in_direction(gi:level_vertex_id(),diff,len)&lt;br /&gt;
  else&lt;br /&gt;
    return gi:level_vertex_id()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;act_reach_item&amp;quot; (action_base)&lt;br /&gt;
&lt;br /&gt;
function act_reach_item:__init (action_name, st) super (nil, action_name)&lt;br /&gt;
  self.st = st&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function act_reach_item:initialize()&lt;br /&gt;
	action_base.initialize(self)&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	local gi=getGObject(self.st)&lt;br /&gt;
  self.st.dest_lvid=nil&lt;br /&gt;
  self.tgt_lvid=0&lt;br /&gt;
	if gi then&lt;br /&gt;
		if npc:accessible(gi:level_vertex_id()) then&lt;br /&gt;
		  npc:set_detail_path_type(move.curve)&lt;br /&gt;
		  npc:set_path_type(game_object.level_path)&lt;br /&gt;
      if npc:best_danger() and time_global()-npc:best_danger():time()&amp;lt;inertion_time then&lt;br /&gt;
        npc:set_mental_state(anim.danger)&lt;br /&gt;
        npc:set_body_state(move.crouch)&lt;br /&gt;
        npc:set_movement_type(move.walk)&lt;br /&gt;
--        npc:set_sight(gi,true,true)&lt;br /&gt;
      else&lt;br /&gt;
        npc:set_body_state(move.standing)&lt;br /&gt;
        npc:set_mental_state(anim.free)&lt;br /&gt;
        npc:set_movement_type(move.walk)&lt;br /&gt;
      end&lt;br /&gt;
      npc:movement_enabled(true)&lt;br /&gt;
      if npc:best_weapon() and isWeapon(npc:best_weapon()) then&lt;br /&gt;
--        npc:set_item(object.idle,npc:best_weapon())&lt;br /&gt;
      end&lt;br /&gt;
--			npc:set_dest_level_vertex_id(gi:level_vertex_id())&lt;br /&gt;
			npc:set_sight(look.danger,nil,0)&lt;br /&gt;
      self.st.dest_lvid=correct_position(gi,npc) --gi:level_vertex_id()&lt;br /&gt;
      self.tgt_lvid=gi:level_vertex_id()&lt;br /&gt;
      npc:set_dest_level_vertex_id(self.st.dest_lvid)&lt;br /&gt;
		else&lt;br /&gt;
			freeGObject(self.st)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	self.ct=time_global()&lt;br /&gt;
	self.clvid=npc:level_vertex_id()&lt;br /&gt;
  self.st.position_corrected=false&lt;br /&gt;
	amk.mylog(self.object:name()..&amp;quot; is going to reach item&amp;quot;,&amp;quot;stmt&amp;quot;)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function act_reach_item:execute()&lt;br /&gt;
	action_base.execute(self)&lt;br /&gt;
	local npc=self.object&lt;br /&gt;
	local gi=getGObject(self.st)&lt;br /&gt;
	if gi and gi:parent()~=nil then&lt;br /&gt;
		-- ГГ забрал вкусность. Можно добавить наезд на ГГ.&lt;br /&gt;
    self.st.dest_lvid=nil&lt;br /&gt;
		freeGObject(self.st)&lt;br /&gt;
	elseif gi then&lt;br /&gt;
		if self.clvid==npc:level_vertex_id() then&lt;br /&gt;
			if time_global()-self.ct&amp;gt;10000 then&lt;br /&gt;
			-- не можем добраться до нняки&lt;br /&gt;
				self.st.disabled_objects[gi:id()]=true&lt;br /&gt;
        self.st.dest_lvid=nil&lt;br /&gt;
				freeGObject(self.st)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			self.clvid=npc:level_vertex_id()&lt;br /&gt;
			self.ct=time_global()&lt;br /&gt;
		end&lt;br /&gt;
    if self.tgt_lvid~=gi:level_vertex_id() then&lt;br /&gt;
      self.tgt_lvid=gi:level_vertex_id()&lt;br /&gt;
      self.st.dest_lvid=correct_position(gi,npc) -- gi:level_vertex_id()&lt;br /&gt;
			npc:set_dest_level_vertex_id(self.st.dest_lvid)&lt;br /&gt;
    end&lt;br /&gt;
				--npc:set_sight(gi)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function add_to_binder(object, char_ini, scheme, section, st)&lt;br /&gt;
--	amk.mylog(&amp;quot;addtb &amp;quot;..object:name(),&amp;quot;pln&amp;quot;)&lt;br /&gt;
	local npc=object&lt;br /&gt;
	st.disabled_objects={}&lt;br /&gt;
  local manager = object:motivation_action_manager()&lt;br /&gt;
&lt;br /&gt;
  local zombi=npc:character_community()==&amp;quot;zombied&amp;quot; or npc:character_community()==&amp;quot;trader&amp;quot; or&lt;br /&gt;
          npc:character_community()==&amp;quot;arena_enemy&amp;quot; or npc:name()==&amp;quot;mil_stalker0012&amp;quot; or npc:name()==&amp;quot;yantar_ecolog_general&amp;quot; or -- сумашедший на милитари и Сахаров&lt;br /&gt;
          npc:name()==&amp;quot;mil_freedom_member0021&amp;quot; -- Скрягу в зомби!&lt;br /&gt;
	&lt;br /&gt;
	local prop_idlecombat=xr_evaluators_id.state_mgr + 3&lt;br /&gt;
  local prop_contact=xr_evaluators_id.stohe_meet_base + 1&lt;br /&gt;
  -- Evaluators&lt;br /&gt;
	if npc:story_id()~=4294967296 or zombi then&lt;br /&gt;
	  manager:add_evaluator(evid_see_stuff, property_evaluator_const(false))&lt;br /&gt;
	  manager:add_evaluator(evid_see_body, property_evaluator_const(false))&lt;br /&gt;
	  manager:add_evaluator(evid_near_stuff, property_evaluator_const(false))&lt;br /&gt;
	  manager:add_evaluator(evid_position_corrected, property_evaluator_const(false))&lt;br /&gt;
	else&lt;br /&gt;
	  manager:add_evaluator(evid_see_stuff, ev_see_stuff(st,&amp;quot;ev_see_stuff&amp;quot;))&lt;br /&gt;
	  manager:add_evaluator(evid_see_body, ev_see_body(st))&lt;br /&gt;
	  manager:add_evaluator(evid_position_corrected, ev_position_corrected(st))&lt;br /&gt;
	  manager:add_evaluator(evid_near_stuff, ev_near_stuff(st,&amp;quot;ev_near_stuff&amp;quot;))&lt;br /&gt;
	  -- Actions&lt;br /&gt;
	  local action = act_grab_item(&amp;quot;act_grab_item&amp;quot;, st)&lt;br /&gt;
		action:add_precondition(world_property(stalker_ids.property_alive,true))&lt;br /&gt;
		action:add_precondition(world_property(stalker_ids.property_enemy,false))&lt;br /&gt;
--		action:add_precondition(world_property(stalker_ids.property_danger,false))&lt;br /&gt;
		action:add_precondition(world_property(xr_evaluators_id.sidor_wounded_base,false))&lt;br /&gt;
	  action:add_precondition(world_property(blowout_scheme.evid_anomaly,false))&lt;br /&gt;
	  action:add_precondition(world_property(blowout_scheme.evid_blowout,false))&lt;br /&gt;
	  action:add_precondition(world_property(evid_see_stuff,true))&lt;br /&gt;
	  action:add_precondition(world_property(evid_near_stuff,true))&lt;br /&gt;
	  action:add_precondition(world_property(evid_see_body,false))&lt;br /&gt;
	  action:add_precondition(world_property(prop_idlecombat,true)) -- отключим стэйт менеджер&lt;br /&gt;
	  action:add_effect(world_property(evid_near_stuff, false))&lt;br /&gt;
	  action:add_effect(world_property(evid_see_stuff, false))&lt;br /&gt;
	  action:add_effect(world_property(evid_see_body,true)) -- для переключения на обыск трупа&lt;br /&gt;
	  manager:add_action (actid_grab_item, action)&lt;br /&gt;
&lt;br /&gt;
	  action = act_grab_body(st)&lt;br /&gt;
		action:add_precondition(world_property(stalker_ids.property_alive,true))&lt;br /&gt;
		action:add_precondition(world_property(stalker_ids.property_enemy,false))&lt;br /&gt;
--		action:add_precondition(world_property(stalker_ids.property_danger,false))&lt;br /&gt;
		action:add_precondition(world_property(xr_evaluators_id.sidor_wounded_base,false))&lt;br /&gt;
	  action:add_precondition(world_property(blowout_scheme.evid_anomaly,false))&lt;br /&gt;
	  action:add_precondition(world_property(blowout_scheme.evid_blowout,false))&lt;br /&gt;
	  action:add_precondition(world_property(evid_see_stuff,true))&lt;br /&gt;
	  action:add_precondition(world_property(evid_see_body,true))&lt;br /&gt;
	  action:add_precondition(world_property(evid_near_stuff,true))&lt;br /&gt;
--	  action:add_precondition(world_property(evid_position_corrected,true))&lt;br /&gt;
	  action:add_effect(world_property(evid_near_stuff, false))&lt;br /&gt;
	  action:add_effect(world_property(evid_see_stuff, false))&lt;br /&gt;
	  action:add_effect(world_property(evid_see_body,false)) -- переключаемся на подъём вещички&lt;br /&gt;
	  manager:add_action (actid_grab_body, action)&lt;br /&gt;
&lt;br /&gt;
	  action = act_reach_item(&amp;quot;act_reach_item&amp;quot;, st)&lt;br /&gt;
		action:add_precondition(world_property(stalker_ids.property_alive,true))&lt;br /&gt;
		action:add_precondition(world_property(stalker_ids.property_enemy,false))&lt;br /&gt;
	  action:add_precondition(world_property(prop_contact,false))&lt;br /&gt;
--		action:add_precondition(world_property(stalker_ids.property_danger,false))&lt;br /&gt;
		action:add_precondition(world_property(xr_evaluators_id.sidor_wounded_base,false))&lt;br /&gt;
	  action:add_precondition(world_property(blowout_scheme.evid_anomaly,false))&lt;br /&gt;
	  action:add_precondition(world_property(blowout_scheme.evid_blowout,false))&lt;br /&gt;
	  action:add_precondition(world_property(evid_see_stuff,true))&lt;br /&gt;
	  action:add_precondition(world_property(evid_near_stuff,false))&lt;br /&gt;
	  action:add_precondition(world_property(prop_idlecombat,true))&lt;br /&gt;
	  action:add_effect (world_property(evid_near_stuff, true))&lt;br /&gt;
	  manager:add_action (actid_reach_item, action)&lt;br /&gt;
		&lt;br /&gt;
	  action = manager:action(xr_actions_id.alife) &lt;br /&gt;
	  action:add_precondition(world_property(evid_see_stuff,false))&lt;br /&gt;
    action = manager:action(stalker_ids.action_danger_planner)&lt;br /&gt;
	  action:add_precondition(world_property(evid_see_stuff,false))&lt;br /&gt;
--    action:add_precondition(world_property(evid_near_stuff,false))&lt;br /&gt;
--	  action = manager:action(xr_actions_id.stohe_kamp_base + 1) &lt;br /&gt;
--	  action:add_precondition(world_property(evid_see_stuff,false))&lt;br /&gt;
--	  action = manager:action(xr_actions_id.stohe_kamp_base + 3) &lt;br /&gt;
--	  action:add_precondition(world_property(evid_see_stuff,false))&lt;br /&gt;
		&lt;br /&gt;
--	  action = manager:action(xr_actions_id.stohe_meet_base+1) &lt;br /&gt;
--	  action:add_precondition(world_property(evid_see_stuff,false))	&lt;br /&gt;
--	amk.mylog(&amp;quot;addtb end &amp;quot;..object:name(),&amp;quot;pln&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_scheme(npc, ini, scheme, section)&lt;br /&gt;
--	amk.mylog(&amp;quot;set scheme &amp;quot;..npc:name()..&amp;quot; story_id &amp;quot;..npc:story_id(),&amp;quot;pln&amp;quot;)&lt;br /&gt;
  local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)&lt;br /&gt;
  st.ini=ini&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Теперь осталось содать скрипт amk.script --у кого есть ненадо--&lt;br /&gt;
и вписываем в него&lt;br /&gt;
&lt;br /&gt;
local npc_spawner={}  --служебный массив, работает автоматически - не трогать шаловливыми русками&lt;br /&gt;
&lt;br /&gt;
local timers={}   --хранит реал-тайм таймеры&lt;br /&gt;
local g_timers={} --хранит таймеры в игровом времени&lt;br /&gt;
local markers={}  --хранит маркеры на карте&lt;br /&gt;
local x_objs={}     --хранит ИДшники объектов&lt;br /&gt;
local timer_trigger=nil&lt;br /&gt;
convert_npc={}&lt;br /&gt;
g_kick=false&lt;br /&gt;
&lt;br /&gt;
is_debug = false&lt;br /&gt;
ver = &amp;quot;0&amp;quot;&lt;br /&gt;
oau_watchdog=0&lt;br /&gt;
oau_reason=&amp;quot;&amp;quot;&lt;br /&gt;
--переменные для типсов&lt;br /&gt;
pda_news = xr_sound.get_safe_sound_object([[device\pda\pda_news]])&lt;br /&gt;
pda_tips = xr_sound.get_safe_sound_object([[device\pda\pda_tip]])&lt;br /&gt;
pda_task = xr_sound.get_safe_sound_object([[device\pda\pda_objective]])&lt;br /&gt;
&lt;br /&gt;
tips_icons = {&lt;br /&gt;
  default  = { 0, 658},&lt;br /&gt;
  trader   = { 332, 893},&lt;br /&gt;
  dolg     = { 0, 658},&lt;br /&gt;
  freedom  = { 0, 658},&lt;br /&gt;
  ecolog   = { 498, 0},&lt;br /&gt;
  arena    = { 332, 141},&lt;br /&gt;
  stalker  = { 0, 658},&lt;br /&gt;
  krot     = { 332, 47},&lt;br /&gt;
  barman   = { 332, 235},&lt;br /&gt;
  wolf   = { 332, 940},&lt;br /&gt;
  o_soznanie = { 498, 893},&lt;br /&gt;
  monolith = { 0, 658},&lt;br /&gt;
    saharov  = { 332, 470},&lt;br /&gt;
    prizrak  = { 0, 658},&lt;br /&gt;
    killer   = { 0, 658},&lt;br /&gt;
  death     = { 0, 752},&lt;br /&gt;
  gen_info  = { 0, 658},&lt;br /&gt;
	trade 		= { 0, 0},&lt;br /&gt;
  uniq  =  {  498, 47}    --{ 498, 188}&lt;br /&gt;
}&lt;br /&gt;
----------------&lt;br /&gt;
local bufferedmessages={}&lt;br /&gt;
&lt;br /&gt;
function logct(msg,tag)&lt;br /&gt;
	if true and (tag and (tag==&amp;quot;mcbt&amp;quot; or tag==&amp;quot;temp&amp;quot;)) then --(tag==&amp;quot;dram&amp;quot;)) then&lt;br /&gt;
	    get_console():execute(&amp;quot;load [[Участник:92.113.172.219|92.113.172.219]] &amp;quot;..string.sub(msg,1,200))		&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function rep(npc,msg,tag)&lt;br /&gt;
	if string.find(npc:name(),&amp;quot;gar_dm&amp;quot;) then&lt;br /&gt;
		logct(msg,tag)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mylog(msg)&lt;br /&gt;
  if is_debug then &lt;br /&gt;
	  if msg==nil then&lt;br /&gt;
	    return &lt;br /&gt;
	  end&lt;br /&gt;
	  if db and db.actor then&lt;br /&gt;
	    if bufferedmessages then&lt;br /&gt;
	      for k,v in ipairs(bufferedmessages) do&lt;br /&gt;
	        db.actor:give_game_news(v, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(0,658,83,47), 0, 15000)&lt;br /&gt;
	      end&lt;br /&gt;
	      bufferedmessages=nil&lt;br /&gt;
	    end&lt;br /&gt;
	  db.actor:give_game_news(msg, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(0,658,83,47), 0, 15000)&lt;br /&gt;
	  else&lt;br /&gt;
	    if bufferedmessages then&lt;br /&gt;
	      table.insert(bufferedmessages,msg)&lt;br /&gt;
	    end&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
	  if get_console() then&lt;br /&gt;
	    get_console():execute(&amp;quot;load [[Участник:92.113.172.219|92.113.172.219]] &amp;quot;..string.sub(msg,1,200))&lt;br /&gt;
	    get_console():execute(&amp;quot;flush&amp;quot;)&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--показываем типс&lt;br /&gt;
function send_tip(news_text, header, timeout, showtime, sender, sound)&lt;br /&gt;
  if news_text==nil then return end&lt;br /&gt;
  if header==nil then header=game.translate_string(&amp;quot;st_tip&amp;quot;) end&lt;br /&gt;
  if timeout == nil then timeout = 0 end&lt;br /&gt;
  if showtime == nil then showtime = 5 end&lt;br /&gt;
  &lt;br /&gt;
  local player&lt;br /&gt;
  if sound==&amp;quot;news&amp;quot; then&lt;br /&gt;
    player=pda_news&lt;br /&gt;
  elseif sound==&amp;quot;task&amp;quot; then&lt;br /&gt;
    player=pda_task&lt;br /&gt;
  else&lt;br /&gt;
    player=pda_tips&lt;br /&gt;
  end   &lt;br /&gt;
  &lt;br /&gt;
  --' Играем дефолтный звук&lt;br /&gt;
  player:play(db.actor, timeout, sound_object.s2d)&lt;br /&gt;
  &lt;br /&gt;
  if sender == nil then&lt;br /&gt;
    sender = &amp;quot;default&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  local x = tips_icons[sender][1]&lt;br /&gt;
  local y = tips_icons[sender][2]&lt;br /&gt;
  &lt;br /&gt;
  local news_text = &amp;quot;%c[255,160,160,160]&amp;quot;..header..&amp;quot;\\n&amp;quot;..&amp;quot;%c[default]&amp;quot;..news_text&lt;br /&gt;
  db.actor:give_game_news(news_text, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(x,y,83,47), timeout*1000, showtime*1000)&lt;br /&gt;
  return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function add_spot_on_map(obj_id,type,text)&lt;br /&gt;
  --возможные типы type смотри в ui\map_spots.xml &lt;br /&gt;
  if obj_id then&lt;br /&gt;
    if text==nil then text=&amp;quot; &amp;quot; end&lt;br /&gt;
    -- Ставим метку на серверный объект чтобы её не пришлось обновлять&lt;br /&gt;
    level.map_add_object_spot_ser(obj_id, type, text)&lt;br /&gt;
--    save_variable(&amp;quot;x_marker_type_&amp;quot;..obj_id, type)&lt;br /&gt;
--    save_variable(&amp;quot;x_marker_text_&amp;quot;..obj_id, text)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_spot_from_map(obj_id,type)&lt;br /&gt;
  if obj_id and level.map_has_object_spot(obj_id, type)~= 0 then&lt;br /&gt;
    level.map_remove_object_spot(obj_id, type)&lt;br /&gt;
--    del_variable(&amp;quot;x_marker_type_&amp;quot;..obj_id)&lt;br /&gt;
--    del_variable(&amp;quot;x_marker_text_&amp;quot;..obj_id)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--старт таймера в реальном времени&lt;br /&gt;
function start_timer(name,delay,action)&lt;br /&gt;
  if not delay then&lt;br /&gt;
    return false&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  if not action then&lt;br /&gt;
    action = &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
    local time = game.time() --time in seconds since 1970&lt;br /&gt;
  local a=1&lt;br /&gt;
  while db.storage[db.actor:id()].pstor[&amp;quot;xt&amp;quot;..a] do&lt;br /&gt;
    a=a+1&lt;br /&gt;
    if a&amp;gt;100 then &lt;br /&gt;
      return false &lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  save_variable(&amp;quot;xt&amp;quot;..a, name)&lt;br /&gt;
  save_variable(&amp;quot;xd&amp;quot;..a, time+delay*1000*system_ini():r_float(&amp;quot;alife&amp;quot;,&amp;quot;time_factor&amp;quot;))&lt;br /&gt;
  save_variable(&amp;quot;xp&amp;quot;..a, action)&lt;br /&gt;
&lt;br /&gt;
  return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--старт таймера в игровом времени&lt;br /&gt;
function g_start_timer(name,delay_d,delay_h,delay_m,action)&lt;br /&gt;
    local time = level.get_time_days()*60*24+level.get_time_hours()*60+level.get_time_minutes()  --time in game minutes&lt;br /&gt;
  if delay_d==nil or delay_h==nil or delay_m==nil then&lt;br /&gt;
    return false&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  if action==nil then&lt;br /&gt;
    action = &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local a=1&lt;br /&gt;
  while db.storage[db.actor:id()].pstor[&amp;quot;gt&amp;quot;..a] do&lt;br /&gt;
    a=a+1&lt;br /&gt;
    if a&amp;gt;100 then &lt;br /&gt;
      return false &lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  save_variable(&amp;quot;gt&amp;quot;..a, name)&lt;br /&gt;
  save_variable(&amp;quot;gd&amp;quot;..a, time+delay_d*60*24+delay_h*60+delay_m)&lt;br /&gt;
  save_variable(&amp;quot;gp&amp;quot;..a, action)&lt;br /&gt;
&lt;br /&gt;
  return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function has_timer(name)&lt;br /&gt;
  for a=1,100,1 do&lt;br /&gt;
    tmp=load_variable(&amp;quot;xt&amp;quot;..a,nil)&lt;br /&gt;
    if tmp and tmp==name then&lt;br /&gt;
      return true&lt;br /&gt;
    end&lt;br /&gt;
  end  &lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function has_g_timer(name)&lt;br /&gt;
  for a=1,100,1 do&lt;br /&gt;
    tmp=load_variable(&amp;quot;gt&amp;quot;..a,nil)&lt;br /&gt;
    if tmp and tmp==name then&lt;br /&gt;
      return true&lt;br /&gt;
    end&lt;br /&gt;
  end  &lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Временное хранилище для переменных удалённых из pstor&lt;br /&gt;
local emerg_store&lt;br /&gt;
-- Удаляем переменные из pstor. Чтобы не переполнить буфер&lt;br /&gt;
function emergency_cleanup()&lt;br /&gt;
  emerg_store={}&lt;br /&gt;
  if load_variable(&amp;quot;zombied&amp;quot;,false) then&lt;br /&gt;
    emerg_store.zombied=load_table(&amp;quot;zombied&amp;quot;)&lt;br /&gt;
    del_variable(&amp;quot;zombied&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  for i=1,100,1 do&lt;br /&gt;
    if load_variable(&amp;quot;gt&amp;quot;..i,&amp;quot;&amp;quot;)==&amp;quot;af_transform&amp;quot; then&lt;br /&gt;
      emerg_store[i]={}&lt;br /&gt;
      emerg_store[i].gt=load_variable(&amp;quot;gt&amp;quot;..i,&amp;quot;&amp;quot;)&lt;br /&gt;
      emerg_store[i].gd=load_variable(&amp;quot;gd&amp;quot;..i,&amp;quot;&amp;quot;)&lt;br /&gt;
      emerg_store[i].gp=load_variable(&amp;quot;gp&amp;quot;..i,&amp;quot;&amp;quot;)&lt;br /&gt;
      del_variable(&amp;quot;gt&amp;quot;..i)&lt;br /&gt;
      del_variable(&amp;quot;gd&amp;quot;..i)&lt;br /&gt;
      del_variable(&amp;quot;gp&amp;quot;..i)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  save_variable(&amp;quot;emerg&amp;quot;,true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Восстанавливаем удалённые переменные&lt;br /&gt;
function emergency_restore()&lt;br /&gt;
  for k,v in pairs(emerg_store) do&lt;br /&gt;
    if k==&amp;quot;zombied&amp;quot; then&lt;br /&gt;
      save_table(k,v)&lt;br /&gt;
    else&lt;br /&gt;
      save_variable(&amp;quot;gt&amp;quot;..k,v.gt)&lt;br /&gt;
      save_variable(&amp;quot;gd&amp;quot;..k,v.gd)&lt;br /&gt;
      save_variable(&amp;quot;gp&amp;quot;..k,v.gp)      &lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  del_variable(&amp;quot;emerg&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function convert_timers()&lt;br /&gt;
  if load_variable(&amp;quot;tmcv&amp;quot;,true) then&lt;br /&gt;
    for a=1,100,1 do&lt;br /&gt;
      tmp=load_variable(&amp;quot;x_timer_&amp;quot;..a,nil)&lt;br /&gt;
      if tmp~=nil then&lt;br /&gt;
        local name,delay,params=tmp,load_variable(&amp;quot;x_timer_&amp;quot;..a..&amp;quot;_delay&amp;quot;,0),load_variable(&amp;quot;x_timer_&amp;quot;..a..&amp;quot;_params&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
        del_variable(&amp;quot;x_timer_&amp;quot;..a)&lt;br /&gt;
        del_variable(&amp;quot;x_timer_&amp;quot;..a..&amp;quot;_delay&amp;quot;)&lt;br /&gt;
        del_variable(&amp;quot;x_timer_&amp;quot;..a..&amp;quot;_params&amp;quot;)&lt;br /&gt;
        save_variable(&amp;quot;xt&amp;quot;..a,name)&lt;br /&gt;
        save_variable(&amp;quot;xd&amp;quot;..a,delay)&lt;br /&gt;
        save_variable(&amp;quot;xp&amp;quot;..a,params)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    for a=1,100,1 do&lt;br /&gt;
      tmp=load_variable(&amp;quot;x_gtimer_&amp;quot;..a,nil)&lt;br /&gt;
      if tmp~=nil then&lt;br /&gt;
        local name,delay,params=tmp,load_variable(&amp;quot;x_gtimer_&amp;quot;..a..&amp;quot;_delay&amp;quot;,0),load_variable(&amp;quot;x_gtimer_&amp;quot;..a..&amp;quot;_params&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
        del_variable(&amp;quot;x_gtimer_&amp;quot;..a)&lt;br /&gt;
        del_variable(&amp;quot;x_gtimer_&amp;quot;..a..&amp;quot;_delay&amp;quot;)&lt;br /&gt;
        del_variable(&amp;quot;x_gtimer_&amp;quot;..a..&amp;quot;_params&amp;quot;)&lt;br /&gt;
        save_variable(&amp;quot;gt&amp;quot;..a,name)&lt;br /&gt;
        save_variable(&amp;quot;gd&amp;quot;..a,delay)&lt;br /&gt;
        save_variable(&amp;quot;gp&amp;quot;..a,params)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    save_variable(&amp;quot;tmcv&amp;quot;,false)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--проверка таймеров, использует 3 следующие за ним функции для выбора действия&lt;br /&gt;
function check_timers()&lt;br /&gt;
  local tmp&lt;br /&gt;
  for a=1,100,1 do&lt;br /&gt;
    tmp=load_variable(&amp;quot;xt&amp;quot;..a,nil)&lt;br /&gt;
    if tmp~=nil then&lt;br /&gt;
      __timer_found(a)  &lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  for a=1,100,1 do&lt;br /&gt;
    tmp=load_variable(&amp;quot;gt&amp;quot;..a,nil)&lt;br /&gt;
    if tmp~=nil then&lt;br /&gt;
      __g_timer_found(a)  &lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
function __timer_found(idx)&lt;br /&gt;
    local time = game.time() --time in seconds since 1970&lt;br /&gt;
  local name,params&lt;br /&gt;
  if load_variable(&amp;quot;xd&amp;quot;..idx, nil)&amp;lt;=time then&lt;br /&gt;
    name=load_variable(&amp;quot;xt&amp;quot;..idx, nil)&lt;br /&gt;
    params=load_variable(&amp;quot;xp&amp;quot;..idx, nil)&lt;br /&gt;
    del_variable(&amp;quot;xt&amp;quot;..idx)&lt;br /&gt;
    del_variable(&amp;quot;xd&amp;quot;..idx)&lt;br /&gt;
    del_variable(&amp;quot;xp&amp;quot;..idx)&lt;br /&gt;
		oau_reason=name..&amp;quot; &amp;quot;..params&lt;br /&gt;
    __do_timer_action(name,params)&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
function __g_timer_found(idx)&lt;br /&gt;
    local gtime = level.get_time_days()*60*24+level.get_time_hours()*60+level.get_time_minutes()  --time in game minutes&lt;br /&gt;
  local name,params&lt;br /&gt;
  if load_variable(&amp;quot;gd&amp;quot;..idx, nil)&amp;lt;=gtime then&lt;br /&gt;
    name=load_variable(&amp;quot;gt&amp;quot;..idx, nil)&lt;br /&gt;
    params=load_variable(&amp;quot;gp&amp;quot;..idx, nil)&lt;br /&gt;
    del_variable(&amp;quot;gt&amp;quot;..idx)&lt;br /&gt;
    del_variable(&amp;quot;gd&amp;quot;..idx)&lt;br /&gt;
    del_variable(&amp;quot;gp&amp;quot;..idx)&lt;br /&gt;
		oau_reason=name..&amp;quot; &amp;quot;..params&lt;br /&gt;
    __do_timer_action(name,params)&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
function __do_timer_action(select_string,params_string)&lt;br /&gt;
  --[[&lt;br /&gt;
  здесь описываем вызовы, оформялять в виде&lt;br /&gt;
&lt;br /&gt;
  if select_string==&amp;quot;название условия&amp;quot; then&lt;br /&gt;
    &amp;lt;вызов сторонних функций&amp;gt;&lt;br /&gt;
    -- можно передавать npc как параметр&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  ]]&lt;br /&gt;
--user area &lt;br /&gt;
  if select_string==&amp;quot;show_news&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;show_news&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;gg_need_sleep&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;test_for_need_sleep&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;sleep_nrg&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;test_for_need_sleep_nrg&amp;quot;,params_string)&lt;br /&gt;
  end&lt;br /&gt;
--[[&lt;br /&gt;
if select_string==&amp;quot;sleep_med&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;test_for_need_sleep_med&amp;quot;,params_string)&lt;br /&gt;
  end&lt;br /&gt;
 ]]--&lt;br /&gt;
  if select_string==&amp;quot;sleep_matras&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;test_for_need_sleep_matras&amp;quot;,params_string)&lt;br /&gt;
  end &lt;br /&gt;
  if select_string==&amp;quot;sleep_tr_item&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;test_for_need_sleep_tr_item&amp;quot;,params_string)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;sleep_notebook&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;test_for_need_sleep_notebook&amp;quot;,params_string)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;block_sleep_menu&amp;quot; then&lt;br /&gt;
    save_variable(&amp;quot;block_sleep_menu&amp;quot;,0)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;radar_fix&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;radar_fix&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;af_transform&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;af_transform_end&amp;quot;,unpack_array_from_string(params_string))&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;amk_freeplay&amp;quot; then&lt;br /&gt;
    if amk.load_variable(&amp;quot;freeplay&amp;quot;,0)==1 and level.name()==&amp;quot;l12_stancia_2&amp;quot; then&lt;br /&gt;
      xr_effects.game_credits()&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;blowout&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;Blowout_pp&amp;quot;,params_string)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;test&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;Run_Blowout_pp&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;blowout_ss&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;blowout_scary_sounds&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;blow_shift&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;Run_Blowout_pp&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;sleep_repbox&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;repair_weapon&amp;quot;, params_string)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;repbox_cond&amp;quot; then&lt;br /&gt;
    mod_call(&amp;quot;after_repair_weapon&amp;quot;, params_string)&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;collect_anomalies_info&amp;quot; then&lt;br /&gt;
    amk_anoms.collect_info()&lt;br /&gt;
  end&lt;br /&gt;
  if select_string==&amp;quot;news_check&amp;quot; then&lt;br /&gt;
    if (news_main and news_main.check_news) then&lt;br /&gt;
		news_main.check_news()&lt;br /&gt;
	end&lt;br /&gt;
  end &lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;--спавним объекты на карту&lt;br /&gt;
--для спавна неписей смотрим config\creatures\spawn_sections.ltx - там написаны имена секций для разных типов неписей&lt;br /&gt;
function spawn_item(spawn_item, pos, gv,lv)&lt;br /&gt;
  if gv==nil then gv=db.actor:game_vertex_id() end&lt;br /&gt;
  if lv==nil then lv=db.actor:level_vertex_id() end&lt;br /&gt;
  return alife():create(spawn_item, pos, lv, gv)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--для спавна патронов используем spawn_ammo_in_inv&lt;br /&gt;
function spawn_item_in_inv(spawn_item,npc)&lt;br /&gt;
  if npc==nil then &lt;br /&gt;
    npc=db.actor &lt;br /&gt;
  end&lt;br /&gt;
  return alife():create(spawn_item, &lt;br /&gt;
      npc:position(),&lt;br /&gt;
      npc:level_vertex_id(),  &lt;br /&gt;
      npc:game_vertex_id(),&lt;br /&gt;
      npc:id())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--используем для спавна патронов&lt;br /&gt;
function spawn_ammo_in_inv(spawn_item,number,npc)&lt;br /&gt;
  if npc==nil then &lt;br /&gt;
    npc=db.actor &lt;br /&gt;
  end&lt;br /&gt;
  if number &amp;gt; 0 then&lt;br /&gt;
    return se_respawn.create_ammo(spawn_item, &lt;br /&gt;
        npc:position(),&lt;br /&gt;
        npc:level_vertex_id(),  &lt;br /&gt;
        npc:game_vertex_id(),&lt;br /&gt;
        npc:id(),&lt;br /&gt;
        number)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- удаляем объект из игры&lt;br /&gt;
function remove_item(remove_item)&lt;br /&gt;
  if remove_item~=nil then&lt;br /&gt;
    alife():release(alife():object(remove_item:id()), true)&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- выбрасываем объект из инвентаря, применимо к ГГ&lt;br /&gt;
function drop_item(npc,item)&lt;br /&gt;
  if item~=nil then&lt;br /&gt;
--      npc:mark_item_dropped(item)&lt;br /&gt;
    npc:drop_item(item)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--убиваем непися&lt;br /&gt;
function make_suicide(npc)&lt;br /&gt;
  npc:kill(npc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--узнаем отношение одного непися к другому&lt;br /&gt;
function get_npc_relation(obj,target)&lt;br /&gt;
  local rel = obj:relation(target)&lt;br /&gt;
  local relation&lt;br /&gt;
  if rel==game_object.neutral then&lt;br /&gt;
    relation=&amp;quot;neutral&amp;quot;&lt;br /&gt;
  elseif rel==game_object.friend then&lt;br /&gt;
    relation=&amp;quot;friend&amp;quot;&lt;br /&gt;
  elseif rel==game_object.enemy then&lt;br /&gt;
    relation=&amp;quot;enemy&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
  end&lt;br /&gt;
  return relation&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--задаем отношение одного непися к другому&lt;br /&gt;
function set_npc_relation(obj,target,relation)&lt;br /&gt;
  local rel&lt;br /&gt;
  if relation==&amp;quot;neutral&amp;quot; then&lt;br /&gt;
    rel=game_object.neutral&lt;br /&gt;
  elseif relation==&amp;quot;friend&amp;quot; then&lt;br /&gt;
    rel=game_object.friend&lt;br /&gt;
  elseif relation==&amp;quot;enemy&amp;quot; then&lt;br /&gt;
    rel=game_object.enemy&lt;br /&gt;
  else&lt;br /&gt;
    return false&lt;br /&gt;
  end &lt;br /&gt;
  obj:set_relation(rel,target)&lt;br /&gt;
  return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- узнаем группировку непися, применимо к ГГ, только ОНЛАЙН&lt;br /&gt;
function get_npc_community(npc)&lt;br /&gt;
  return npc:character_community()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- выставляем группировку непися, можно ГГ, только ОНЛАЙН&lt;br /&gt;
function set_npc_community(npc,community_string)&lt;br /&gt;
  --значения для community_string можно узнать в config\creatures\game_relations.ltx&lt;br /&gt;
  return npc:set_character_community(community_string, 0, 0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--удаляем предмет из инвентаря по имени&lt;br /&gt;
function remove_item_from_inventory_by_name(remove_item_name,npc)&lt;br /&gt;
  return remove_item_from_inventory(npc:object(remove_item_name),npc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--удаляем предмет из инвентаря&lt;br /&gt;
function remove_item_from_inventory(remove_item,npc)&lt;br /&gt;
  if npc==nil then npc=db.actor end&lt;br /&gt;
  if remove_item~=nil then&lt;br /&gt;
--      npc:mark_item_dropped(remove_item)&lt;br /&gt;
    alife():release(alife():object(remove_item:id()), true)&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--создаем &amp;quot;ожидатели&amp;quot; для неписей нужно для корректной работы с объектами, созданными внутри скрипта&lt;br /&gt;
function create_waiter_for_npc(npc,select_string)--неписи&lt;br /&gt;
  npc_spawner[npc.id]=select_string&lt;br /&gt;
  save_variable(&amp;quot;x_npc_spawner&amp;quot;,pack_array_to_string(npc_spawner) )&lt;br /&gt;
end&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--очищаем инвентарь непися, можно ГГ, использует следующую фунцию для удаления предмета&lt;br /&gt;
function clear_npc_inventory(npc)&lt;br /&gt;
    npc:iterate_inventory(__del_item, npc)&lt;br /&gt;
end&lt;br /&gt;
function __del_item(npc, item)&lt;br /&gt;
    local section = item:section()&lt;br /&gt;
&lt;br /&gt;
    if section == &amp;quot;bolt&amp;quot; or section == &amp;quot;device_torch&amp;quot; then&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
--    npc:mark_item_dropped(item)&lt;br /&gt;
    alife():release(alife():object(item:id()), true)&lt;br /&gt;
end&lt;br /&gt;
---------------------------&lt;br /&gt;
&lt;br /&gt;
--проверка запущена ли игра&lt;br /&gt;
function check_game()&lt;br /&gt;
  if level.present() and (db.actor ~= nil) and db.actor:alive() then&lt;br /&gt;
    return true&lt;br /&gt;
  end&lt;br /&gt;
  return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--записываем переменную&lt;br /&gt;
function save_variable(variable_name, value)&lt;br /&gt;
  if value==nil then&lt;br /&gt;
    amk.mylog(&amp;quot;saving nil into &amp;quot;..variable_name)&lt;br /&gt;
    del_variable(variable_name)&lt;br /&gt;
  else&lt;br /&gt;
    local vn=compress_name(variable_name)&lt;br /&gt;
    xr_logic.pstor_store(db.actor, vn, value)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--загружаем переменную&lt;br /&gt;
function load_variable(variable_name, value_if_not_found)&lt;br /&gt;
  local vn=compress_name(variable_name)&lt;br /&gt;
  return xr_logic.pstor_retrieve(db.actor, vn, value_if_not_found)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--удаляем переменную&lt;br /&gt;
function del_variable(variable_name)&lt;br /&gt;
  local vn=compress_name(variable_name)&lt;br /&gt;
  if db.storage[db.actor:id()].pstor[vn] then&lt;br /&gt;
    db.storage[db.actor:id()].pstor[vn] = nil&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- таблица компрессии имён&lt;br /&gt;
local compress_table={&lt;br /&gt;
}&lt;br /&gt;
local checked=false&lt;br /&gt;
&lt;br /&gt;
-- Преобразует имя переменной в короткое&lt;br /&gt;
function compress_name(name)&lt;br /&gt;
  return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--определяем находится ли ГГ в определенной зоне&lt;br /&gt;
function check_npc_in_box(npc, p1,p2,p3)&lt;br /&gt;
  local pos&lt;br /&gt;
  if npc.name then pos=npc:position() else pos=npc end&lt;br /&gt;
  if p3==nil then&lt;br /&gt;
    if is_point_inside_interval(pos.x,p1.x,p2.x) and&lt;br /&gt;
      is_point_inside_interval(pos.y,p1.y,p2.y) and&lt;br /&gt;
      is_point_inside_interval(pos.z,p1.z,p2.z) then&lt;br /&gt;
      return true&lt;br /&gt;
    else&lt;br /&gt;
      return false  &lt;br /&gt;
    end&lt;br /&gt;
  else&lt;br /&gt;
    local v1,v2,r,proj1,proj2,dv1,dv2&lt;br /&gt;
    v1=sub(p2,p1)&lt;br /&gt;
    v2=sub(p3,p2)&lt;br /&gt;
    v1.y=0 &lt;br /&gt;
    v2.y=0&lt;br /&gt;
    dv1=v1:magnitude()&lt;br /&gt;
    dv2=v2:magnitude()&lt;br /&gt;
    v1:normalize() &lt;br /&gt;
    v2:normalize()&lt;br /&gt;
    r=sub(pos,p1)&lt;br /&gt;
    local v1p=vector():set(v1.z,0,-v1.x)&lt;br /&gt;
    proj2=v1p:dotproduct(r)/v1p:dotproduct(v2)&lt;br /&gt;
    proj1=v1:dotproduct(r)-v1:dotproduct(v2)*proj2&lt;br /&gt;
    if proj1&amp;gt;0 and proj1&amp;lt;dv1 and proj2&amp;gt;0 and proj2&amp;lt;dv2 and pos.y&amp;gt;p1.y and pos.y&amp;lt;p3.y then&lt;br /&gt;
      return true&lt;br /&gt;
    else&lt;br /&gt;
      return false&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function is_point_inside_interval(x,p1,p2)&lt;br /&gt;
  if p1&amp;gt;p2 then &lt;br /&gt;
    p1,p2 = p2,p1 &lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  if x&amp;gt;p1 and x&amp;lt;p2 then &lt;br /&gt;
    return true&lt;br /&gt;
  else &lt;br /&gt;
    return false&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sub(v1,v2)&lt;br /&gt;
  local newvec = vector()&lt;br /&gt;
  newvec.x = v1.x-v2.x&lt;br /&gt;
  newvec.y = v1.y-v2.y&lt;br /&gt;
  newvec.z = v1.z-v2.z&lt;br /&gt;
  return newvec&lt;br /&gt;
end&lt;br /&gt;
----------------------------&lt;br /&gt;
&lt;br /&gt;
--инвентарное название объекта&lt;br /&gt;
function get_inv_name(section)&lt;br /&gt;
  return system_ini():r_string(section,&amp;quot;inv_name&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Внимание! Строки в структуре не должны содержать символов с кодами 0-31.&lt;br /&gt;
function pack_array_to_string(array)&lt;br /&gt;
  return string.char(1)..pack_new(array)&lt;br /&gt;
  -- local str=&amp;quot;&amp;quot;&lt;br /&gt;
  -- local key&lt;br /&gt;
  -- for key0,value in pairs(array) do&lt;br /&gt;
    -- if type(key0)==&amp;quot;string&amp;quot; then&lt;br /&gt;
      -- key='&amp;quot;'..key0..'&amp;quot;'&lt;br /&gt;
    -- else&lt;br /&gt;
      -- key=key0&lt;br /&gt;
    -- end&lt;br /&gt;
    -- if type(value)==&amp;quot;table&amp;quot; then&lt;br /&gt;
      -- local substr=pack_array_to_string(value)&lt;br /&gt;
      -- str=str..key..&amp;quot;=&amp;gt;{&amp;quot;..substr..&amp;quot;}|&amp;quot;&lt;br /&gt;
    -- elseif type(value)==&amp;quot;customdata&amp;quot; or type(value)==&amp;quot;function&amp;quot; then&lt;br /&gt;
      -- mylog(&amp;quot;Custom data and function isn't supported&amp;quot;)&lt;br /&gt;
    -- elseif type(value)==&amp;quot;boolean&amp;quot; or type(value)==&amp;quot;number&amp;quot; then&lt;br /&gt;
      -- str=str..key..&amp;quot;=&amp;gt;&amp;quot;..tostring(value)..&amp;quot;|&amp;quot;&lt;br /&gt;
    -- else&lt;br /&gt;
      -- str=str..key..'=&amp;gt;&amp;quot;'..value..'&amp;quot;|'&lt;br /&gt;
    -- end&lt;br /&gt;
  -- end&lt;br /&gt;
  -- return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function unpack_array_from_string(str)&lt;br /&gt;
  if str==nil or str==&amp;quot;&amp;quot; then return {} end&lt;br /&gt;
  if string.sub(str,1,1)~=string.char(1) then&lt;br /&gt;
    -- Старый формат упаковки&lt;br /&gt;
    return _parse(str)&lt;br /&gt;
  else&lt;br /&gt;
    -- новый формат упаковки тэгирован символом c кодом 1.&lt;br /&gt;
    return parse_new(string.sub(str,2,-1))&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function _assign(tbl,key,val)&lt;br /&gt;
  local key0=string.match(key,'&amp;quot;(.*)&amp;quot;')&lt;br /&gt;
  if key0 then&lt;br /&gt;
    tbl[key0]=val&lt;br /&gt;
  else&lt;br /&gt;
    tbl[key+0]=val&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local pack_type_num=1&lt;br /&gt;
local pack_type_string=2&lt;br /&gt;
local pack_type_bool=3&lt;br /&gt;
local pack_type_table=4&lt;br /&gt;
local pack_val_endtable=5&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
 Новый формат упаковки: &lt;br /&gt;
 table ::= subtable&lt;br /&gt;
 subtable ::= keytype key valuetype ( value | subtable 0x5 )&lt;br /&gt;
 keytype ::= ( 0x1 | 0x2 | 0x3 | 0x4 )&lt;br /&gt;
 valuetype ::= ( 0x1 | 0x2 | 0x3 | 0x4 )&lt;br /&gt;
]]&lt;br /&gt;
function pack_new(tbl)&lt;br /&gt;
  local ret=&amp;quot;&amp;quot;&lt;br /&gt;
  for k,v in pairs(tbl) do&lt;br /&gt;
    if type(k)==&amp;quot;number&amp;quot; then&lt;br /&gt;
      ret=ret..string.char(pack_type_num)..k&lt;br /&gt;
    elseif type(k)==&amp;quot;string&amp;quot; then&lt;br /&gt;
      ret=ret..string.char(pack_type_string)..k&lt;br /&gt;
    else&lt;br /&gt;
      abort(&amp;quot;unsupported key type &amp;quot;..type(k))&lt;br /&gt;
    end&lt;br /&gt;
    if type(v)==&amp;quot;number&amp;quot; then&lt;br /&gt;
      ret=ret..string.char(pack_type_num)..v&lt;br /&gt;
    elseif type(v)==&amp;quot;string&amp;quot; then&lt;br /&gt;
      ret=ret..string.char(pack_type_string)..v&lt;br /&gt;
    elseif type(v)==&amp;quot;boolean&amp;quot; then&lt;br /&gt;
      ret=ret..string.char(pack_type_bool)..v&lt;br /&gt;
    elseif type(v)==&amp;quot;table&amp;quot; then&lt;br /&gt;
      ret=ret..string.char(pack_type_table)..pack_new(v)..string.char(pack_val_endtable)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_new(str,idx)&lt;br /&gt;
  local ret={}&lt;br /&gt;
  idx=idx or 1&lt;br /&gt;
  while true do&lt;br /&gt;
    local key,value&lt;br /&gt;
    if idx&amp;gt;string.len(str) then&lt;br /&gt;
      return ret,idx&lt;br /&gt;
    end&lt;br /&gt;
    vtype,idx=get_byte(str,idx)&lt;br /&gt;
    if vtype==pack_type_num then&lt;br /&gt;
      key,idx=get_num(str,idx)&lt;br /&gt;
    elseif vtype==pack_type_string then&lt;br /&gt;
      key,idx=get_string(str,idx)&lt;br /&gt;
    elseif vtype==pack_val_endtable then&lt;br /&gt;
      return ret,idx&lt;br /&gt;
    else&lt;br /&gt;
      abort(&amp;quot;unsupported key type &amp;quot;..tostring(vtype))&lt;br /&gt;
    end&lt;br /&gt;
    vtype,idx=get_byte(str,idx)&lt;br /&gt;
    if vtype==pack_type_num then&lt;br /&gt;
      value,idx=get_num(str,idx)&lt;br /&gt;
    elseif vtype==pack_type_string then&lt;br /&gt;
      value,idx=get_string(str,idx)&lt;br /&gt;
    elseif vtype==pack_type_bool then&lt;br /&gt;
      value,idx=get_bool(str,idx)&lt;br /&gt;
    elseif vtype==pack_type_table then&lt;br /&gt;
      value,idx=parse_new(str,idx)&lt;br /&gt;
    else&lt;br /&gt;
      abort(&amp;quot;unsupported key type &amp;quot;..tostring(vtype))&lt;br /&gt;
    end&lt;br /&gt;
    ret[key]=value&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_byte(str,idx)&lt;br /&gt;
  return string.byte(string.sub(str,idx,idx)),idx+1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_string(str,idx)&lt;br /&gt;
  local idx1=string.len(str)+1&lt;br /&gt;
  for i=idx,string.len(str),1 do&lt;br /&gt;
    if string.byte(string.sub(str,i,i))&amp;lt;32 then&lt;br /&gt;
      idx1=i&lt;br /&gt;
      break&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return string.sub(str,idx,idx1-1),idx1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_num(str,idx)&lt;br /&gt;
  local st,idx1=get_string(str,idx)&lt;br /&gt;
  return st+0,idx1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_bool(str,idx)&lt;br /&gt;
  local st,idx1=get_string(str,idx)&lt;br /&gt;
  return st==&amp;quot;1&amp;quot;,idx1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function _parse(str)&lt;br /&gt;
  local ret={}&lt;br /&gt;
  while str and str~=&amp;quot;&amp;quot; do&lt;br /&gt;
    local i1,i2,key=string.find(str,'(.-)=&amp;gt;')&lt;br /&gt;
    str=string.sub(str,i2+1)&lt;br /&gt;
    i1,i2,val=string.find(str,'&amp;quot;(.-)&amp;quot;|')&lt;br /&gt;
    if val and i1==1 then&lt;br /&gt;
      -- строка&lt;br /&gt;
      _assign(ret,key,val)&lt;br /&gt;
    else&lt;br /&gt;
      i1,i2,val=string.find(str,'(%b{})|')&lt;br /&gt;
      if val and i1==1 then&lt;br /&gt;
        -- таблица&lt;br /&gt;
        _assign(ret,key,_parse(string.sub(val,2,-2)))&lt;br /&gt;
      else&lt;br /&gt;
        i1,i2,val=string.find(str,'(.-)|')&lt;br /&gt;
        -- число или булево значение&lt;br /&gt;
        if val==&amp;quot;true&amp;quot; then&lt;br /&gt;
          _assign(ret,key,true)&lt;br /&gt;
        elseif val==&amp;quot;false&amp;quot; then&lt;br /&gt;
          _assign(ret,key,false)&lt;br /&gt;
        else&lt;br /&gt;
          _assign(ret,key,val+0)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    str=string.sub(str,i2+1)&lt;br /&gt;
  end&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
--callback section&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--колбэк на получение инфопоршена&lt;br /&gt;
function on_info(npc, info_id)&lt;br /&gt;
	if (news_main and news_main.on_info) then&lt;br /&gt;
		news_main.on_info(info_id)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--колбэк на взятие предмета в инвентарь ГГ&lt;br /&gt;
function on_item_take(obj)&lt;br /&gt;
	escape_dialog.have_a_art()&lt;br /&gt;
	flamethrower.have_a_fire_kolobok()&lt;br /&gt;
	flamethrower.have_a_trubki()&lt;br /&gt;
	flamethrower.have_a_manometr()&lt;br /&gt;
	flamethrower.have_a_vodko()&lt;br /&gt;
	flamethrower.have_a_gorelka()&lt;br /&gt;
	&lt;br /&gt;
	remove_spot_from_map(obj:id(),&amp;quot;red_location&amp;quot;)&lt;br /&gt;
	mod_call(&amp;quot;check_usable_item&amp;quot;,obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--колбэк на взятие предмета в инвентарь ГГ из ящика&lt;br /&gt;
function on_item_take_from_box(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--колбэк на потерю предмета из инвентаря ГГ&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
  mod_call(&amp;quot;check_for_af_drop&amp;quot;,obj)&lt;br /&gt;
  mod_call(&amp;quot;check_sleep_item&amp;quot;,obj)&lt;br /&gt;
  mod_call(&amp;quot;check_beacon_drop&amp;quot;,obj)&lt;br /&gt;
  --!!! alcohol modification by Terrapack&lt;br /&gt;
  amk_alcohol.drink_vodka(obj)&lt;br /&gt;
  --&lt;br /&gt;
flamethrower.have_a_fire_kolobok()&lt;br /&gt;
flamethrower.have_a_trubki()&lt;br /&gt;
flamethrower.have_a_manometr()&lt;br /&gt;
flamethrower.have_a_vodko()&lt;br /&gt;
flamethrower.have_a_gorelka()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local prev_health=0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--колбэк на апдейт ГГ (удобно для проверки условий, так как вызывается постоянно, нельзя перегружать, а то будут лаги)&lt;br /&gt;
function on_actor_upade(delta)&lt;br /&gt;
	oau_watchdog=100&lt;br /&gt;
--	amk.mylog(&amp;quot;on_actor_upade begin&amp;quot;)&lt;br /&gt;
 --не удалять! библиотечная конструкция&lt;br /&gt;
  if not timer_trigger then &lt;br /&gt;
    timer_trigger=game.time() &lt;br /&gt;
  end&lt;br /&gt;
  if timer_trigger&amp;lt;=game.time() then&lt;br /&gt;
    timer_trigger=game.time()+1000&lt;br /&gt;
    check_timers()&lt;br /&gt;
  end&lt;br /&gt;
	--user area &lt;br /&gt;
	oau_watchdog=99&lt;br /&gt;
  mod_call(&amp;quot;blowout_phantoms&amp;quot;)&lt;br /&gt;
	oau_watchdog=98&lt;br /&gt;
  mod_call(&amp;quot;check_radar_off&amp;quot;)&lt;br /&gt;
	oau_watchdog=97&lt;br /&gt;
  mod_call(&amp;quot;check_metka&amp;quot;)&lt;br /&gt;
	oau_watchdog=96&lt;br /&gt;
  mod_call(&amp;quot;check_hud&amp;quot;)&lt;br /&gt;
	oau_watchdog=95&lt;br /&gt;
  mod_call(&amp;quot;weather_manager&amp;quot;)&lt;br /&gt;
	oau_watchdog=94&lt;br /&gt;
  mod_call(&amp;quot;check_armor&amp;quot;)&lt;br /&gt;
	oau_watchdog=93&lt;br /&gt;
  mod_call(&amp;quot;firebat_ammo&amp;quot;)&lt;br /&gt;
  --!!! alcohol modification by Terrapack&lt;br /&gt;
	oau_watchdog=931&lt;br /&gt;
  amk_alcohol.check_alcohol()&lt;br /&gt;
	oau_watchdog=92&lt;br /&gt;
  amk_mod.on_blowout_hit_actor()&lt;br /&gt;
	oau_watchdog=91&lt;br /&gt;
  if amk_target then amk_target.update() end&lt;br /&gt;
  --&lt;br /&gt;
  for k,v in pairs(convert_npc) do&lt;br /&gt;
    local obj=level.object_by_id(k)&lt;br /&gt;
		local sobj=alife():object(k)&lt;br /&gt;
		if sobj then&lt;br /&gt;
	    if obj==nil and v==true then&lt;br /&gt;
	      convert_npc[k]=false&lt;br /&gt;
	      switch_online(k)&lt;br /&gt;
      elseif obj and v==false then&lt;br /&gt;
        convert_npc[k]=nil&lt;br /&gt;
	    elseif v==1 and obj then -- тайник не перешёл в оффлайн попытаемся его туда запихнуть.&lt;br /&gt;
       alife():set_switch_online(k, false)&lt;br /&gt;
       alife():set_switch_offline(k, true)&lt;br /&gt;
      elseif v==1 then -- тайник в оффлайне. выталкиваем.&lt;br /&gt;
	      convert_npc[k]=nil&lt;br /&gt;
	      switch_online(k)      &lt;br /&gt;
			else&lt;br /&gt;
--				convert_npc[k]=nil&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			convert_npc[k]=nil&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
	oau_watchdog=90&lt;br /&gt;
&lt;br /&gt;
	if gg_kick then	&lt;br /&gt;
		if prev_health&amp;gt;db.actor.health+0.05 then&lt;br /&gt;
			level.add_pp_effector(&amp;quot;amk_shoot.ppe&amp;quot;, 2011, false)&lt;br /&gt;
			level.set_pp_effector_factor(2011, (prev_health-db.actor.health)*100)  &lt;br /&gt;
			&lt;br /&gt;
			if prev_health&amp;gt;db.actor.health+0.30 then&lt;br /&gt;
				level.add_cam_effector(&amp;quot;camera_effects\\fusker.anm&amp;quot;, 999, false, &amp;quot;&amp;quot;)	&lt;br /&gt;
				local snd_obj = xr_sound.get_safe_sound_object([[actor\pain_3]])&lt;br /&gt;
				snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)&lt;br /&gt;
				if math.random()&amp;lt;0.20 then&lt;br /&gt;
					local active_item = db.actor:active_item()&lt;br /&gt;
					if active_item and active_item:section()~= &amp;quot;bolt&amp;quot; and active_item:section()~= &amp;quot;wpn_knife&amp;quot; then&lt;br /&gt;
						db.actor:drop_item(active_item)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		end&lt;br /&gt;
		prev_health = db.actor.health&lt;br /&gt;
	end&lt;br /&gt;
	oau_watchdog=89&lt;br /&gt;
	&lt;br /&gt;
	if (amk_offline_alife) then&lt;br /&gt;
      amk_offline_alife.update()&lt;br /&gt;
    end&lt;br /&gt;
	oau_watchdog=88&lt;br /&gt;
	if (amk_corpses) then&lt;br /&gt;
		for a=1, 3 do&lt;br /&gt;
			amk_corpses.update()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	amk_anoms.update()&lt;br /&gt;
	oau_watchdog=0&lt;br /&gt;
	oau_reason=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--хех, определяем тип патронов в стволе...	&lt;br /&gt;
	--[[&lt;br /&gt;
	local weapon = db.actor:item_in_slot(2)&lt;br /&gt;
	&lt;br /&gt;
	if db.actor:active_slot()==2 and weapon then&lt;br /&gt;
		local t = get_weapon_data(alife():object(weapon:id()))&lt;br /&gt;
		mylog(t.ammo_type)&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
-----------&lt;br /&gt;
--	amk.mylog(&amp;quot;on_actor_upade end&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--колбэк на создание непися (точнее на его переход в онлайн), использует следующую за ним функцию для выбора действия&lt;br /&gt;
function on_npc_spawn(npc)&lt;br /&gt;
  if npc == nil then return end&lt;br /&gt;
	if (news_main and news_main.on_spawn) then&lt;br /&gt;
		news_main.on_spawn(npc)&lt;br /&gt;
	end&lt;br /&gt;
  for k,v in pairs(npc_spawner) do&lt;br /&gt;
    if k==npc:id() then &lt;br /&gt;
      __npc_spawn_case(npc,v)&lt;br /&gt;
      npc_spawner[k]=nil&lt;br /&gt;
    save_variable(&amp;quot;x_npc_spawner&amp;quot;,pack_array_to_string(npc_spawner) )&lt;br /&gt;
      return&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
function __npc_spawn_case(npc,select_string)&lt;br /&gt;
  --[[&lt;br /&gt;
  здесь описываем вызовы, оформялять в виде&lt;br /&gt;
&lt;br /&gt;
  if select_string==&amp;quot;название условия&amp;quot; then&lt;br /&gt;
    &amp;lt;вызов сторонних функций&amp;gt;&lt;br /&gt;
    -- можно передавать npc как параметр&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  ]]&lt;br /&gt;
--user area &lt;br /&gt;
-----------&lt;br /&gt;
end&lt;br /&gt;
-----------------------&lt;br /&gt;
function on_net_spawn(obj)&lt;br /&gt;
	amk_mod.build_btrs_table(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--колбэк на удаление непися (точнее на его переход в оффлайн), использует следующую за ним функцию для выбора действия&lt;br /&gt;
function on_npc_go_offline(npc)&lt;br /&gt;
	amk_anoms.unreg_in_anom_manager(npc)&lt;br /&gt;
  if amk_target then&lt;br /&gt;
    amk_target.net_destroy(npc)&lt;br /&gt;
  end&lt;br /&gt;
	if amk_offline_alife then&lt;br /&gt;
		if check_game()==true then&lt;br /&gt;
		local sobj = alife():object(npc:id())&lt;br /&gt;
		if sobj then&lt;br /&gt;
			amk_offline_alife.process_trade(sobj)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_monster_go_offline(npc)&lt;br /&gt;
--	amk_anoms.unreg_in_anom_manager(npc)&lt;br /&gt;
  if amk_target then&lt;br /&gt;
    amk_target.net_destroy(npc)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
-----------------------&lt;br /&gt;
&lt;br /&gt;
--колбэк на юзание объекта&lt;br /&gt;
function on_use(victim, who)&lt;br /&gt;
  if db.actor and who and who:id()==db.actor:id() then&lt;br /&gt;
    mod_call(&amp;quot;check_usable_item&amp;quot;,victim)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--колбэк на смерть непися&lt;br /&gt;
function on_death(victim, who)&lt;br /&gt;
if (news_main and news_main.on_death) then&lt;br /&gt;
	news_main.on_death(victim, who)&lt;br /&gt;
end&lt;br /&gt;
	amk_anoms.unreg_in_anom_manager(victim)&lt;br /&gt;
  mod_call(&amp;quot;generate_recipe&amp;quot;,victim,who)&lt;br /&gt;
	mod_call(&amp;quot;firebated&amp;quot;, victim, 1, nil, who, 14)&lt;br /&gt;
	mod_call(&amp;quot;zomby_blow&amp;quot;,victim)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_npc_hit(obj, amount, local_direction, who, bone_index)&lt;br /&gt;
	mod_call(&amp;quot;firebated&amp;quot;, obj, amount, local_direction, who, bone_index)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_monster_hit(obj, amount, local_direction, who, bone_index)&lt;br /&gt;
	mod_call(&amp;quot;firebated&amp;quot;, obj, amount, local_direction, who, bone_index)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_ph_obj_hit(obj, amount, local_direction, who, bone_index)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- проверка на видимость производится раз в секунду&lt;br /&gt;
function enemy_see_actor(obj,typ) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function actor_see_enemy(obj,typ) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- непись стрелял в гг&lt;br /&gt;
function npc_shot_actor(obj) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--загружаем все переменные, которые нужно, вызывается загрузке игры, автоматически; вручную не вызывать&lt;br /&gt;
function on_game_load()&lt;br /&gt;
	amk.mylog(&amp;quot;on_game_load begin&amp;quot;)&lt;br /&gt;
	amk.mylog(&amp;quot;object 2972 is &amp;quot;..((alife():object(2972) and alife():object(2972):name()) or &amp;quot;&amp;quot;) )&lt;br /&gt;
	amk.mylog(&amp;quot;object 2975 is &amp;quot;..((alife():object(2975) and alife():object(2975):name()) or &amp;quot;&amp;quot;) )&lt;br /&gt;
&lt;br /&gt;
  if db.storage[db.actor:id()].pstor == nil then&lt;br /&gt;
    db.storage[db.actor:id()].pstor = {}&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  npc_spawner=unpack_array_from_string(load_variable(&amp;quot;x_npc_spawner&amp;quot;,&amp;quot;&amp;quot;) )&lt;br /&gt;
&lt;br /&gt;
  mod_call(&amp;quot;first_run&amp;quot;)&lt;br /&gt;
  convert_timers() -- исправим старые названия таймеров&lt;br /&gt;
-- Метки теперь ставятся на серверные объекты. Обновлять их не нужно&lt;br /&gt;
--[[&lt;br /&gt;
  local tmp,tmp1&lt;br /&gt;
  for a=1,65534,1 do&lt;br /&gt;
    tmp=load_variable(&amp;quot;x_marker_type_&amp;quot;..a,nil)&lt;br /&gt;
    if tmp~=nil then&lt;br /&gt;
      tmp1=load_variable(&amp;quot;x_marker_text_&amp;quot;..a,nil)&lt;br /&gt;
      level.map_add_object_spot(a, tmp, tmp1)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
]]&lt;br /&gt;
  &lt;br /&gt;
--user area &lt;br /&gt;
	if system_ini():r_float(&amp;quot;gg_kick&amp;quot;,&amp;quot;enabled&amp;quot;)&amp;gt;0.0 then gg_kick=true else gg_kick=false end&lt;br /&gt;
  mod_call(&amp;quot;test_sleep_pp&amp;quot;)&lt;br /&gt;
  mod_call(&amp;quot;check_spawn&amp;quot;)&lt;br /&gt;
--  local str=string&lt;br /&gt;
  if has_alife_info(&amp;quot;val_actor_has_borov_key&amp;quot;) and not has_alife_info(&amp;quot;val_borov_dead&amp;quot;) then&lt;br /&gt;
    db.actor:give_info_portion(&amp;quot;val_borov_dead&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
-----------&lt;br /&gt;
	amk.mylog(&amp;quot;on_game_load end&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--записываем все переменные, которые нужно, вызывается присохранении игры, автоматически; вручную не вызывать&lt;br /&gt;
function on_game_save() &lt;br /&gt;
  &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Эта функция вызывается самой первой. Онлайновые объекты недоступны! db.actor недоступен!&lt;br /&gt;
function on_game_start()&lt;br /&gt;
  mod_call(&amp;quot;on_game_start&amp;quot;)&lt;br /&gt;
	ver = get_ver()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------- user function section---------------&lt;br /&gt;
function mod_call(i,...)&lt;br /&gt;
  if not amk_mod[i] then&lt;br /&gt;
    amk_mod.f=function () loadstring(amk.decode(c))() end&lt;br /&gt;
    setfenv(amk_mod.f,amk_mod)&lt;br /&gt;
    amk_mod.f()&lt;br /&gt;
  end&lt;br /&gt;
  amk_mod[i](...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function load_table(name)&lt;br /&gt;
  local var=load_variable(name)&lt;br /&gt;
  return (var==nil and {}) or unpack_array_from_string(var)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function save_table(name,tbl)&lt;br /&gt;
  save_variable(name,pack_array_to_string(tbl))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update_table(name,id,val)&lt;br /&gt;
  local tbl=load_table(name)&lt;br /&gt;
  tbl[id]=val&lt;br /&gt;
  save_table(name,tbl)&lt;br /&gt;
  return tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sixbit(char) local byte = string.byte(char) local result = nil if (byte == 61) then result = 0 elseif (byte == 45 or byte == 43) then result = 62 elseif (byte == 95 or byte == 47) then result = 63 elseif (byte &amp;lt;= 57) then result = byte + 4 elseif (byte &amp;lt;= 90) then result = byte - 65 elseif (byte &amp;lt;= 122) then result = byte - 71 end return result end function decodeblock(block) local sixbits = {} local result = &amp;quot;&amp;quot; for counter=1,4 do sixbits[counter] = sixbit(string.sub(block,counter,counter)) end result = string.char(sixbits[1]*4 + math.floor(sixbits[2] / 16)) if (string.sub(block,3,3) ~= &amp;quot;=&amp;quot;) then result = result .. string.char((sixbits[2] % 16)*16 + math.floor(sixbits[3] / 4)) end if (string.sub(block,4,4) ~= &amp;quot;=&amp;quot;) then result = result .. string.char((sixbits[3] % 4) * 64 + sixbits[4]) end return result end function decode(data) local result = &amp;quot;&amp;quot; local str={string.byte(&amp;quot;CheckForCheat&amp;quot;,1,1000)} local strl=table.getn(str) for c=1,string.len(data),4 do result=result..decodeblock(string.sub(data,c,c+3)) end local result1=&amp;quot;&amp;quot; for c=1,string.len(result),1 do local sl=string.byte(string.sub(result,c)) sl=bit_xor(sl,str[1+(c-1)%strl]) result1 = result1 .. string.char(sl) end return result1 end&lt;br /&gt;
&lt;br /&gt;
function bind_lc(obj)&lt;br /&gt;
  if obj:name()==&amp;quot;exit_to_sarcofag_01&amp;quot; and level.name()==&amp;quot;l12_stancia&amp;quot; and amk.load_variable(&amp;quot;freeplay&amp;quot;,0)&amp;gt;0 then&lt;br /&gt;
    local sobj=alife():object(obj:id())&lt;br /&gt;
    if sobj then&lt;br /&gt;
      alife():release(sobj,true)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function readvu32u8(packet)&lt;br /&gt;
  local v={}&lt;br /&gt;
  local len=packet:r_s32()&lt;br /&gt;
  for i=1,len,1 do&lt;br /&gt;
    table.insert(v,packet:r_u8())&lt;br /&gt;
  end&lt;br /&gt;
  return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function readvu8u8(packet)&lt;br /&gt;
  local v={}&lt;br /&gt;
  local len=8&lt;br /&gt;
  for i=1,len,1 do&lt;br /&gt;
    table.insert(v,packet:r_u8())&lt;br /&gt;
  end&lt;br /&gt;
  return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function readvu32u16(packet)&lt;br /&gt;
  local v={}&lt;br /&gt;
  local len=packet:r_s32()&lt;br /&gt;
  for i=1,len,1 do&lt;br /&gt;
    table.insert(v,packet:r_u16())&lt;br /&gt;
  end&lt;br /&gt;
  return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function writevu32u8(pk,v)&lt;br /&gt;
  local len=table.getn(v)&lt;br /&gt;
  pk:w_s32(len)&lt;br /&gt;
  for i=1,len,1 do&lt;br /&gt;
    pk:w_u8(v[i])&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function writevu8u8(pk,v)&lt;br /&gt;
  local len=8 --table.getn(v)&lt;br /&gt;
  --pk:w_u8(len)&lt;br /&gt;
  for i=1,len,1 do&lt;br /&gt;
    pk:w_u8(v[i])&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function writevu32u16(pk,v)&lt;br /&gt;
  local len=table.getn(v)&lt;br /&gt;
  pk:w_s32(len)&lt;br /&gt;
  for i=1,len,1 do&lt;br /&gt;
    pk:w_u16(v[i])&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_object_packet(ret,stpk,updpk)&lt;br /&gt;
  ret.gvid=stpk:r_u16()&lt;br /&gt;
  ret.obf32u1=stpk:r_float()&lt;br /&gt;
  ret.obs32u2=stpk:r_s32()&lt;br /&gt;
  ret.lvid=stpk:r_s32()&lt;br /&gt;
  ret.oflags=stpk:r_s32()&lt;br /&gt;
  ret.custom=stpk:r_stringZ()&lt;br /&gt;
  ret.sid=stpk:r_s32()&lt;br /&gt;
  ret.obs32u3=stpk:r_s32()&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_object_packet(ret,stpk,updpk)&lt;br /&gt;
  stpk:w_u16(ret.gvid)&lt;br /&gt;
  stpk:w_float(ret.obf32u1)&lt;br /&gt;
  stpk:w_s32(ret.obs32u2)&lt;br /&gt;
  stpk:w_s32(ret.lvid)&lt;br /&gt;
  stpk:w_s32(ret.oflags)&lt;br /&gt;
  stpk:w_stringZ(ret.custom)&lt;br /&gt;
  stpk:w_s32(ret.sid)&lt;br /&gt;
  stpk:w_s32(ret.obs32u3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function parse_visual_packet(ret,stpk,updpk)&lt;br /&gt;
  ret.visual=stpk:r_stringZ()&lt;br /&gt;
  ret.vsu8u1=stpk:r_u8()&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_visual_packet(ret,stpk,updpk)&lt;br /&gt;
  stpk:w_stringZ(ret.visual)&lt;br /&gt;
  stpk:w_u8(ret.vsu8u1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_dynamic_object_visual(ret,stpk,updpk)&lt;br /&gt;
  parse_object_packet(ret,stpk,updpk)&lt;br /&gt;
  parse_visual_packet(ret,stpk,updpk)&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_dynamic_object_visual(ret,stpk,updpk)&lt;br /&gt;
  fill_object_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_visual_packet(ret,stpk,updpk)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_creature_packet(ret,stpk,updpk)&lt;br /&gt;
  parse_dynamic_object_visual(ret,stpk,updpk)&lt;br /&gt;
  ret.team=stpk:r_u8()&lt;br /&gt;
  ret.squad=stpk:r_u8()&lt;br /&gt;
  ret.group=stpk:r_u8()&lt;br /&gt;
  ret.health=stpk:r_float()&lt;br /&gt;
  ret.crvu32u16u1=readvu32u16(stpk)&lt;br /&gt;
  ret.crvu32u16u2=readvu32u16(stpk)  &lt;br /&gt;
  ret.killerid=stpk:r_u16()&lt;br /&gt;
  ret.game_death_time=readvu8u8(stpk)&lt;br /&gt;
&lt;br /&gt;
  ret.updhealth=updpk:r_float()&lt;br /&gt;
  ret.upds32u1=updpk:r_s32()&lt;br /&gt;
  ret.updu8u2=updpk:r_u8()&lt;br /&gt;
  ret.updpos={} -- или поставить вектор? ладно потом&lt;br /&gt;
  ret.updpos.x=updpk:r_float()&lt;br /&gt;
  ret.updpos.y=updpk:r_float()&lt;br /&gt;
  ret.updpos.z=updpk:r_float()&lt;br /&gt;
  ret.updmodel=updpk:r_float()&lt;br /&gt;
  ret.upddir={}&lt;br /&gt;
  ret.upddir.x=updpk:r_float()&lt;br /&gt;
  ret.upddir.y=updpk:r_float()&lt;br /&gt;
  ret.upddir.z=updpk:r_float()&lt;br /&gt;
  ret.updteam=updpk:r_u8()&lt;br /&gt;
  ret.updsquad=updpk:r_u8()&lt;br /&gt;
  ret.updgroup=updpk:r_u8()  &lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_creature_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_dynamic_object_visual(ret,stpk,updpk)&lt;br /&gt;
  stpk:w_u8(ret.team)&lt;br /&gt;
  stpk:w_u8(ret.squad)&lt;br /&gt;
  stpk:w_u8(ret.group)&lt;br /&gt;
  stpk:w_float(ret.health)&lt;br /&gt;
  writevu32u16(stpk,ret.crvu32u16u1)&lt;br /&gt;
  writevu32u16(stpk,ret.crvu32u16u2)  &lt;br /&gt;
  stpk:w_u16(ret.killerid)&lt;br /&gt;
  writevu8u8(stpk,ret.game_death_time)&lt;br /&gt;
&lt;br /&gt;
  updpk:w_float(ret.updhealth)&lt;br /&gt;
  updpk:w_s32(ret.upds32u1)&lt;br /&gt;
  updpk:w_u8(ret.updu8u2)&lt;br /&gt;
  updpk:w_float(ret.updpos.x)&lt;br /&gt;
  updpk:w_float(ret.updpos.y)&lt;br /&gt;
  updpk:w_float(ret.updpos.z)&lt;br /&gt;
  updpk:w_float(ret.updmodel)&lt;br /&gt;
  updpk:w_float(ret.upddir.x)&lt;br /&gt;
  updpk:w_float(ret.upddir.y)&lt;br /&gt;
  updpk:w_float(ret.upddir.z)&lt;br /&gt;
  updpk:w_u8(ret.updteam)&lt;br /&gt;
  updpk:w_u8(ret.updsquad)&lt;br /&gt;
  updpk:w_u8(ret.updgroup)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_monster_packet(ret,stpk,updpk)&lt;br /&gt;
  parse_creature_packet(ret,stpk,updpk)&lt;br /&gt;
  ret.baseoutr=stpk:r_stringZ()&lt;br /&gt;
  ret.baseinr=stpk:r_stringZ()&lt;br /&gt;
  ret.smtrid=stpk:r_u16()&lt;br /&gt;
  ret.smtrtaskactive=stpk:r_u8()&lt;br /&gt;
  &lt;br /&gt;
  ret.updu16u1=updpk:r_u16()&lt;br /&gt;
  ret.updu16u2=updpk:r_u16()&lt;br /&gt;
  ret.upds32u3=updpk:r_s32()&lt;br /&gt;
  ret.upds32u4=updpk:r_s32()&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_monster_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_creature_packet(ret,stpk,updpk)&lt;br /&gt;
  stpk:w_stringZ(ret.baseoutr)&lt;br /&gt;
  stpk:w_stringZ(ret.baseinr)&lt;br /&gt;
  stpk:w_u16(ret.smtrid)&lt;br /&gt;
  stpk:w_u8(ret.smtrtaskactive)&lt;br /&gt;
  &lt;br /&gt;
  updpk:w_u16(ret.updu16u1)&lt;br /&gt;
  updpk:w_u16(ret.updu16u2)&lt;br /&gt;
  updpk:w_s32(ret.upds32u3)&lt;br /&gt;
  updpk:w_s32(ret.upds32u4)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_trader_packet(ret,stpk,updpk)&lt;br /&gt;
  ret.money=stpk:r_s32()&lt;br /&gt;
  ret.profile=stpk:r_stringZ()&lt;br /&gt;
  ret.infammo=stpk:r_s32()&lt;br /&gt;
  ret.class=stpk:r_stringZ()&lt;br /&gt;
  ret.communityid=stpk:r_s32()&lt;br /&gt;
  ret.rank=stpk:r_s32()&lt;br /&gt;
  ret.reputation=stpk:r_s32()&lt;br /&gt;
  ret.charname=stpk:r_stringZ()  &lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_trader_packet(ret,stpk,updpk)&lt;br /&gt;
  stpk:w_s32(ret.money)&lt;br /&gt;
  stpk:w_stringZ(ret.profile)&lt;br /&gt;
  stpk:w_s32(ret.infammo)&lt;br /&gt;
  stpk:w_stringZ(ret.class)&lt;br /&gt;
  stpk:w_s32(ret.communityid)&lt;br /&gt;
  stpk:w_s32(ret.rank)&lt;br /&gt;
  stpk:w_s32(ret.reputation)&lt;br /&gt;
  stpk:w_stringZ(ret.charname)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_human_packet(ret,stpk,updpk)&lt;br /&gt;
  parse_trader_packet(ret,stpk,updpk)&lt;br /&gt;
  parse_monster_packet(ret,stpk,updpk)&lt;br /&gt;
  ret.huvu32u8u1=readvu32u8(stpk)&lt;br /&gt;
  ret.huvu32u8u2=readvu32u8(stpk)  &lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_human_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_trader_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_monster_packet(ret,stpk,updpk)&lt;br /&gt;
  writevu32u8(stpk,ret.huvu32u8u1)&lt;br /&gt;
  writevu32u8(stpk,ret.huvu32u8u2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_skeleton_packet(ret,stpk,updpk)&lt;br /&gt;
  ret.skeleton=stpk:r_stringZ()&lt;br /&gt;
  ret.skeleton_flags=stpk:r_u8()&lt;br /&gt;
  ret.source_id=stpk:r_u16()&lt;br /&gt;
  &lt;br /&gt;
--  ret.updsku8u1=updpk:r_u8()&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_skeleton_packet(ret,stpk,updpk)&lt;br /&gt;
  stpk:w_stringZ(ret.skeleton)&lt;br /&gt;
  stpk:w_u8(ret.skeleton_flags)&lt;br /&gt;
  stpk:w_u16(ret.source_id)&lt;br /&gt;
  &lt;br /&gt;
--  updpk:w_u8(ret.updsku8u1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_stalker_packet(ret,stpk,updpk,size)&lt;br /&gt;
  parse_human_packet(ret,stpk,updpk)&lt;br /&gt;
  parse_skeleton_packet(ret,stpk,updpk)&lt;br /&gt;
  ret.hellodlg=updpk:r_stringZ()&lt;br /&gt;
  ret.stunk1={}&lt;br /&gt;
  for i=stpk:r_tell(),size-1,1 do&lt;br /&gt;
    table.insert(ret.stunk1,stpk:r_u8())&lt;br /&gt;
  end&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_stalker_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_human_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_skeleton_packet(ret,stpk,updpk)&lt;br /&gt;
  updpk:w_stringZ(ret.hellodlg)&lt;br /&gt;
  for i,v in ipairs(ret.stunk1) do&lt;br /&gt;
    stpk:w_u8(v)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_se_monster_packet(ret,stpk,updpk,size)&lt;br /&gt;
  parse_monster_packet(ret,stpk,updpk,size)&lt;br /&gt;
  parse_skeleton_packet(ret,stpk,updpk,size)&lt;br /&gt;
  ret.spec_obj_id=stpk:r_u16()&lt;br /&gt;
  ret.job_online=stpk:r_u8()&lt;br /&gt;
	if ret.job_online&amp;gt;3 then&lt;br /&gt;
		ret.state=true&lt;br /&gt;
		ret.job_online=ret.job_online-4&lt;br /&gt;
	else&lt;br /&gt;
		ret.state=false&lt;br /&gt;
	end&lt;br /&gt;
  if ret.job_online==3 then&lt;br /&gt;
    ret.job_online_condlist=stpk:r_stringZ()&lt;br /&gt;
  end&lt;br /&gt;
  ret.was_in_smtr=stpk:r_u8()&lt;br /&gt;
  ret.stunk1={}&lt;br /&gt;
  for i=stpk:r_tell(),size-1,1 do&lt;br /&gt;
    table.insert(ret.stunk1,stpk:r_u8())&lt;br /&gt;
  end&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_se_monster_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_monster_packet(ret,stpk,updpk)&lt;br /&gt;
  fill_skeleton_packet(ret,stpk,updpk)&lt;br /&gt;
  stpk:w_u16(ret.spec_obj_id)&lt;br /&gt;
	local st=0&lt;br /&gt;
	if ret.state then&lt;br /&gt;
		st=4&lt;br /&gt;
	end&lt;br /&gt;
  stpk:w_u8(ret.job_online+st)&lt;br /&gt;
  if ret.job_online==3 then&lt;br /&gt;
    stpk:w_stringZ(ret.job_online_condlist)&lt;br /&gt;
  end&lt;br /&gt;
  stpk:w_u8(ret.was_in_smtr)&lt;br /&gt;
  for i,v in ipairs(ret.stunk1) do&lt;br /&gt;
    stpk:w_u8(v)&lt;br /&gt;
  end  &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function dump_table(tbl)&lt;br /&gt;
  for k,v in pairs(tbl) do&lt;br /&gt;
    if type(v)==&amp;quot;table&amp;quot; then&lt;br /&gt;
      get_console():execute(&amp;quot;load [[Участник:92.113.172.219|92.113.172.219]] &amp;quot;..tostring(k)..&amp;quot; =&amp;gt; &amp;quot;)&lt;br /&gt;
      dump_table(v)&lt;br /&gt;
    else&lt;br /&gt;
      str=&amp;quot;load [[Участник:92.113.172.219|92.113.172.219]] &amp;quot;..tostring(k)..&amp;quot; =&amp;gt; &amp;quot;..tostring(v)&lt;br /&gt;
      if string.len(str)&amp;gt;200 then&lt;br /&gt;
        str=string.sub(str,1,200)&lt;br /&gt;
      end&lt;br /&gt;
      get_console():execute(str)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  get_console():execute(&amp;quot;flush&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- серверный объект на входе&lt;br /&gt;
function read_stalker_params(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local tbl=amk.parse_stalker_packet({},stpk,uppk,size)&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1..&amp;quot; &amp;quot;..stpk:r_tell())&lt;br /&gt;
  return tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function read_monster_params(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local tbl=amk.parse_se_monster_packet({},stpk,uppk,size)&lt;br /&gt;
  return tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- таблица параметров и серверный объект на входе&lt;br /&gt;
function write_stalker_params(tbl,sobj,noconvert)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  amk.fill_stalker_packet(tbl,stpk,uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
  local npc=level.object_by_id(sobj.id)&lt;br /&gt;
  if npc and (not noconvert) then&lt;br /&gt;
    amk.convert_npc[sobj.id]=true&lt;br /&gt;
		npc:stop_talk()&lt;br /&gt;
    switch_offline(npc)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function write_monster_params(tbl,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  amk.fill_se_monster_packet(tbl,stpk,uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
  -- local npc=level.object_by_id(sobj.id)&lt;br /&gt;
  -- if npc then&lt;br /&gt;
    -- amk.convert_npc[sobj.id]=true&lt;br /&gt;
    -- switch_offline(npc)&lt;br /&gt;
  -- end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_anomaly_data(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
	amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_shape_packet(t,stpk,uppk,size)&lt;br /&gt;
&lt;br /&gt;
	t.restrictor_type = stpk:r_u8()&lt;br /&gt;
	&lt;br /&gt;
	t.max_power = stpk:r_float()&lt;br /&gt;
	t.owner_id = stpk:r_s32()&lt;br /&gt;
	t.enabled_time = stpk:r_s32()&lt;br /&gt;
	t.disabled_time = stpk:r_s32()&lt;br /&gt;
	t.start_time_shift = stpk:r_s32()&lt;br /&gt;
	&lt;br /&gt;
	t.offline_interactive_radius = stpk:r_float()&lt;br /&gt;
	t.artefact_spawn_count = stpk:r_u16()&lt;br /&gt;
	t.artefact_position_offset = stpk:r_s32()&lt;br /&gt;
	&lt;br /&gt;
	t.last_spawn_time_present = stpk:r_u8()&lt;br /&gt;
	&lt;br /&gt;
	if stpk:r_elapsed() ~= 0 then&lt;br /&gt;
--		abort(&amp;quot;left=%d&amp;quot;, stpk:r_elapsed())&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_anomaly_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_shape_packet(t,stpk,uppk)&lt;br /&gt;
&lt;br /&gt;
	stpk:w_u8(t.restrictor_type)&lt;br /&gt;
	&lt;br /&gt;
	stpk:w_float(t.max_power)&lt;br /&gt;
	stpk:w_s32(t.owner_id)&lt;br /&gt;
	stpk:w_s32(t.enabled_time)&lt;br /&gt;
	stpk:w_s32(t.disabled_time)&lt;br /&gt;
	stpk:w_s32(t.start_time_shift)&lt;br /&gt;
	&lt;br /&gt;
	stpk:w_float(t.offline_interactive_radius)&lt;br /&gt;
	stpk:w_u16(t.artefact_spawn_count)&lt;br /&gt;
	stpk:w_s32(t.artefact_position_offset)&lt;br /&gt;
	&lt;br /&gt;
	stpk:w_u8(t.last_spawn_time_present)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--для правильного парсинга запрещены комментарии!!!&lt;br /&gt;
function parse_custom_data(str)&lt;br /&gt;
	local t={}&lt;br /&gt;
	if str then&lt;br /&gt;
		for section, section_data in string.gfind(str,&amp;quot;%s*%[([^%]]*)%]%s*([^%[%z]*)%s*&amp;quot;) do&lt;br /&gt;
			section = trim(section)&lt;br /&gt;
			t[section]={}&lt;br /&gt;
			for line in string.gfind(trim(section_data), &amp;quot;([^\n]*)\n*&amp;quot;) do&lt;br /&gt;
				if string.find(line,&amp;quot;=&amp;quot;)~=nil then&lt;br /&gt;
					for k, v in string.gfind(line, &amp;quot;([^=]-)%s*=%s*(.*)&amp;quot;) do&lt;br /&gt;
						k = trim(k)&lt;br /&gt;
						if k~=nil and k~='' and v~=nil then &lt;br /&gt;
							t[section][k]=trim(v) &lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					for k, v in string.gfind(line, &amp;quot;(.*)&amp;quot;) do&lt;br /&gt;
						k = trim(k)&lt;br /&gt;
						if k~=nil and k~='' then&lt;br /&gt;
							t[section][k]=&amp;quot;&amp;lt;&amp;lt;no_value&amp;gt;&amp;gt;&amp;quot; &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;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function trim (s)&lt;br /&gt;
	return (string.gsub(s, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gen_custom_data(tbl)&lt;br /&gt;
	local str=''&lt;br /&gt;
	for key, value in pairs(tbl) do&lt;br /&gt;
		str = str..&amp;quot;\n[&amp;quot;..key..&amp;quot;]\n&amp;quot;&lt;br /&gt;
		for k, v in pairs(value) do&lt;br /&gt;
			if v~=&amp;quot;&amp;lt;&amp;lt;no_value&amp;gt;&amp;gt;&amp;quot; then&lt;br /&gt;
				str=str..k..&amp;quot; = &amp;quot;..v..&amp;quot;\n&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				str=str..k..&amp;quot;\n&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function get_lc_data(obj)&lt;br /&gt;
	local packet = net_packet()&lt;br /&gt;
	obj:STATE_Write(packet)&lt;br /&gt;
	local t={}&lt;br /&gt;
	t.game_vertex_id = packet:r_u16()&lt;br /&gt;
	t.distance = packet:r_float()&lt;br /&gt;
	t.direct_control = packet:r_s32()&lt;br /&gt;
	t.level_vertex_id = packet:r_s32()&lt;br /&gt;
	t.object_flags = packet:r_s32()&lt;br /&gt;
	t.custom_data = packet:r_stringZ()&lt;br /&gt;
	t.story_id = packet:r_s32()&lt;br /&gt;
	t.spawn_story_id = packet:r_s32()&lt;br /&gt;
	&lt;br /&gt;
	t = amk.parse_shape_packet(t,packet)&lt;br /&gt;
	&lt;br /&gt;
	t.restrictor_type = packet:r_u8()&lt;br /&gt;
	t.dest_game_vertex_id = packet:r_u16()&lt;br /&gt;
	t.dest_level_vertex_id = packet:r_s32()&lt;br /&gt;
	t.dest_position = packet:r_vec3()&lt;br /&gt;
	t.dest_direction = packet:r_vec3()&lt;br /&gt;
	t.dest_level_name = packet:r_stringZ()&lt;br /&gt;
	t.dest_graph_point = packet:r_stringZ()&lt;br /&gt;
	t.silent_mode = packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
	if packet:r_elapsed() ~= 0 then&lt;br /&gt;
		abort(&amp;quot;left=%d&amp;quot;, packet:r_elapsed())&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_lc_data(t,obj)&lt;br /&gt;
	local packet = net_packet()&lt;br /&gt;
	obj:STATE_Write(packet)&lt;br /&gt;
	packet:w_begin(t.game_vertex_id)&lt;br /&gt;
	packet:w_float(t.distance)&lt;br /&gt;
	packet:w_s32(t.direct_control)&lt;br /&gt;
	packet:w_s32(t.level_vertex_id)&lt;br /&gt;
	packet:w_s32(t.object_flags)&lt;br /&gt;
	packet:w_stringZ(t.custom_data)&lt;br /&gt;
	packet:w_s32(t.story_id)&lt;br /&gt;
	packet:w_s32(t.spawn_story_id)&lt;br /&gt;
	&lt;br /&gt;
	amk.fill_shape_packet(t,packet)&lt;br /&gt;
&lt;br /&gt;
	packet:w_u8(t.restrictor_type)&lt;br /&gt;
	packet:w_u16(t.dest_game_vertex_id)&lt;br /&gt;
	packet:w_s32(t.dest_level_vertex_id)&lt;br /&gt;
	packet:w_vec3(t.dest_position)&lt;br /&gt;
	packet:w_vec3(t.dest_direction)&lt;br /&gt;
	packet:w_stringZ(t.dest_level_name)&lt;br /&gt;
	packet:w_stringZ(t.dest_graph_point)&lt;br /&gt;
	packet:w_u8(t.silent_mode)&lt;br /&gt;
&lt;br /&gt;
	packet:r_seek(0)&lt;br /&gt;
	obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function point_in_poly (pts, x,y)&lt;br /&gt;
	local cnt,k,j&lt;br /&gt;
	local ret = false&lt;br /&gt;
	cnt = table.getn(pts)&lt;br /&gt;
	j = cnt&lt;br /&gt;
	for k = 1,cnt do&lt;br /&gt;
		if ((pts[k].y &amp;lt;=y) and (y &amp;lt; pts[j].y)) or ((pts[j].y &amp;lt;=y) and (y &amp;lt; pts[k].y)) then&lt;br /&gt;
			if (x &amp;lt; (pts[j].x - pts[k].x) * (y - pts[k].y) / (pts[j].y - pts[k].y) + pts[k].x) then&lt;br /&gt;
				ret = not ret&lt;br /&gt;
			end&lt;br /&gt;
			j = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_object_physic_packet(ret,stpk,updpk)&lt;br /&gt;
	ret.physic_type=stpk:r_s32()&lt;br /&gt;
	ret.mass=stpk:r_float()&lt;br /&gt;
	ret.fixed_bones=stpk:r_stringZ()&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_object_physic_packet(ret,stpk,updpk)&lt;br /&gt;
	stpk:w_s32(ret.physic_type)&lt;br /&gt;
	stpk:w_float(ret.mass)&lt;br /&gt;
	stpk:w_stringZ(ret.fixed_bones)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_breakable_data(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
	amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_visual_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_object_physic_packet(t,stpk,uppk,size)&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1..&amp;quot; &amp;quot;..stpk:r_tell())&lt;br /&gt;
  return t&lt;br /&gt;
--[[&lt;br /&gt;
	local packet = net_packet()&lt;br /&gt;
	obj:STATE_Write(packet)&lt;br /&gt;
	local t={}&lt;br /&gt;
	t.game_vertex_id = packet:r_u16()&lt;br /&gt;
	t.distance = packet:r_float()&lt;br /&gt;
	t.direct_control = packet:r_s32()&lt;br /&gt;
	t.level_vertex_id = packet:r_s32()&lt;br /&gt;
	t.object_flags = packet:r_s32()&lt;br /&gt;
	t.custom_data = packet:r_stringZ()&lt;br /&gt;
	t.story_id = packet:r_s32()&lt;br /&gt;
	t.spawn_story_id = packet:r_s32()&lt;br /&gt;
	&lt;br /&gt;
	t.visual_name = packet:r_stringZ()&lt;br /&gt;
	t.visual_flags = packet:r_u8()&lt;br /&gt;
	&lt;br /&gt;
	t.health = packet:r_float()&lt;br /&gt;
&lt;br /&gt;
	if packet:r_elapsed() ~= 0 then&lt;br /&gt;
		abort(&amp;quot;left=%d&amp;quot;, packet:r_elapsed())&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
	]]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_breakable_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_visual_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_object_physic_packet(t,stpk,uppk)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	local packet = net_packet()&lt;br /&gt;
	obj:STATE_Write(packet)&lt;br /&gt;
	packet:w_begin(t.game_vertex_id)&lt;br /&gt;
	packet:w_float(t.distance)&lt;br /&gt;
	packet:w_s32(t.direct_control)&lt;br /&gt;
	packet:w_s32(t.level_vertex_id)&lt;br /&gt;
	packet:w_s32(t.object_flags)&lt;br /&gt;
	packet:w_stringZ(t.custom_data)&lt;br /&gt;
	packet:w_s32(t.story_id)&lt;br /&gt;
	packet:w_s32(t.spawn_story_id)&lt;br /&gt;
	packet:w_stringZ(t.visual_name)&lt;br /&gt;
	packet:w_u8(t.visual_flags)&lt;br /&gt;
	packet:w_float(t.health)&lt;br /&gt;
&lt;br /&gt;
	packet:r_seek(0)&lt;br /&gt;
	obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
	]]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_REspawn(obj,respawner)&lt;br /&gt;
	if obj and respawner then&lt;br /&gt;
		mod_call(&amp;quot;respawned&amp;quot;,obj,respawner)&lt;br /&gt;
		if IsMonster(obj) then&lt;br /&gt;
			if respawner.spawned_goes_online==true then mod_call(&amp;quot;switch_monster_online&amp;quot;,obj) &lt;br /&gt;
			elseif respawner.spawned_goes_online==false then mod_call(&amp;quot;switch_monster_offline&amp;quot;,obj) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if (obj) then&lt;br /&gt;
		if (news_main and news_main.on_spawn) then&lt;br /&gt;
			news_main.on_spawn(obj)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_spawner_data(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
	amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_shape_packet(t,stpk,uppk,size)&lt;br /&gt;
	&lt;br /&gt;
	t.restrictor_type = stpk:r_u8()&lt;br /&gt;
	t.spawned_obj_count = stpk:r_u8()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1..&amp;quot; &amp;quot;..stpk:r_tell())&lt;br /&gt;
  return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_spawner_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_shape_packet(t,stpk,uppk)&lt;br /&gt;
	stpk:w_u8(t.restrictor_type)&lt;br /&gt;
	stpk:w_u8(t.spawned_obj_count)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_shape_packet(t,stpk,uppk)&lt;br /&gt;
	local shape_count = stpk:r_u8()&lt;br /&gt;
	t.shapes={}&lt;br /&gt;
	for i=1,shape_count do&lt;br /&gt;
		local shape_type = stpk:r_u8()&lt;br /&gt;
		t.shapes[i]={}&lt;br /&gt;
		t.shapes[i].shtype=shape_type&lt;br /&gt;
		if shape_type == 0 then&lt;br /&gt;
			-- sphere&lt;br /&gt;
			t.shapes[i].center = stpk:r_vec3()&lt;br /&gt;
			t.shapes[i].radius = stpk:r_float()&lt;br /&gt;
		else&lt;br /&gt;
			-- box&lt;br /&gt;
			t.shapes[i].v1 = stpk:r_vec3()&lt;br /&gt;
			t.shapes[i].v2 = stpk:r_vec3()&lt;br /&gt;
			t.shapes[i].v3 = stpk:r_vec3()&lt;br /&gt;
			t.shapes[i].offset = stpk:r_vec3()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_shape_packet(t,stpk,updpk)&lt;br /&gt;
	stpk:w_u8(table.getn(t.shapes))&lt;br /&gt;
	for i=1,table.getn(t.shapes) do&lt;br /&gt;
		stpk:w_u8(t.shapes[i].shtype)&lt;br /&gt;
		if t.shapes[i].shtype == 0 then&lt;br /&gt;
			stpk:w_vec3(t.shapes[i].center)&lt;br /&gt;
			stpk:w_float(t.shapes[i].radius)&lt;br /&gt;
		else&lt;br /&gt;
			stpk:w_vec3(t.shapes[i].v1)&lt;br /&gt;
			stpk:w_vec3(t.shapes[i].v2)&lt;br /&gt;
			stpk:w_vec3(t.shapes[i].v3)&lt;br /&gt;
			stpk:w_vec3(t.shapes[i].offset)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_ini_section_to_array(ini,section)&lt;br /&gt;
	local tmp={}&lt;br /&gt;
	if ini:section_exist(section) then&lt;br /&gt;
		local result, id, value = nil, nil, nil&lt;br /&gt;
		for a=0,ini:line_count(section)-1 do&lt;br /&gt;
			result, id, value = ini:r_line(section,a,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
			if id~=nil and trim(id)~=&amp;quot;&amp;quot; and trim(id)~=nil then&lt;br /&gt;
				tmp[trim(id)]=trim(value)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return tmp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function str_explode(div,str,clear)&lt;br /&gt;
	local t={}&lt;br /&gt;
	local cpt = string.find (str, div, 1, true)&lt;br /&gt;
	if cpt then&lt;br /&gt;
		repeat&lt;br /&gt;
			if clear then&lt;br /&gt;
				table.insert( t, trim(string.sub(str, 1, cpt-1)) )&lt;br /&gt;
			else&lt;br /&gt;
				table.insert( t, string.sub(str, 1, cpt-1) )&lt;br /&gt;
			end&lt;br /&gt;
			str = string.sub( str, cpt+string.len(div) )&lt;br /&gt;
			cpt = string.find (str, div, 1, true)&lt;br /&gt;
		until cpt==nil&lt;br /&gt;
	end&lt;br /&gt;
	if clear then&lt;br /&gt;
		table.insert(t, trim(str))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(t, str)&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function quotemeta(str)&lt;br /&gt;
	return (string.gsub(s, &amp;quot;[%^%$%(%)%%%.%[%]%*%+%-%?]&amp;quot;, &amp;quot;%%%1&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function add(v1,v2)&lt;br /&gt;
	local nv=vector()&lt;br /&gt;
	nv.x=v1.x+v2.x&lt;br /&gt;
	nv.y=v1.y+v2.y&lt;br /&gt;
	nv.z=v1.z+v2.z&lt;br /&gt;
	return nv&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_len(v,num)&lt;br /&gt;
	local cl = math.sqrt(v.x*v.x+v.y*v.y+v.z*v.z)&lt;br /&gt;
	cl = num/cl&lt;br /&gt;
	v.x= v.x*cl&lt;br /&gt;
	v.y= v.y*cl&lt;br /&gt;
	v.z= v.z*cl&lt;br /&gt;
	return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_restrictor_data(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
	amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_shape_packet(t,stpk,uppk,size)&lt;br /&gt;
	&lt;br /&gt;
	t.restrictor_type = stpk:r_u8()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1..&amp;quot; &amp;quot;..stpk:r_tell())&lt;br /&gt;
  return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_restrictor_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_shape_packet(t,stpk,uppk)&lt;br /&gt;
	stpk:w_u8(t.restrictor_type)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_trader_data(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
	amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_visual_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_trader_packet(t,stpk,uppk,size)&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1..&amp;quot; &amp;quot;..stpk:r_tell())&lt;br /&gt;
  return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_trader_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_visual_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_trader_packet(t,stpk,uppk)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_invbox_data(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
	amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_visual_packet(t,stpk,uppk,size)&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1..&amp;quot; &amp;quot;..stpk:r_tell())&lt;br /&gt;
  return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_invbox_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_visual_packet(t,stpk,uppk)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function readvu8uN(packet,n)&lt;br /&gt;
  local v={}&lt;br /&gt;
  for i=1,n,1 do&lt;br /&gt;
    table.insert(v,packet:r_u8())&lt;br /&gt;
  end&lt;br /&gt;
  return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function writevu8uN(pk,v)&lt;br /&gt;
  local len=table.getn(v)&lt;br /&gt;
  --pk:w_u8(len)&lt;br /&gt;
  for i=1,len,1 do&lt;br /&gt;
    pk:w_u8(v[i])&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_item_packet(ret,stpk,updpk)&lt;br /&gt;
	ret.condition=stpk:r_float()&lt;br /&gt;
	ret.updnum_items=updpk:r_u8()&lt;br /&gt;
  ret.updpos={} -- или поставить вектор? ладно потом&lt;br /&gt;
  ret.updpos.x=updpk:r_float()&lt;br /&gt;
  ret.updpos.y=updpk:r_float()&lt;br /&gt;
  ret.updpos.z=updpk:r_float()&lt;br /&gt;
	ret.updcse_alife_item__unk1_q8v4=readvu8uN(updpk,4)&lt;br /&gt;
	ret.updcse_alife_item__unk2_q8v3=readvu8uN(updpk,3)&lt;br /&gt;
	ret.updcse_alife_item__unk3_q8v3=readvu8uN(updpk,3)&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_item_packet(ret,stpk,updpk)&lt;br /&gt;
	stpk:w_float(ret.condition)&lt;br /&gt;
	updpk:w_u8(ret.updnum_items)&lt;br /&gt;
  updpk:w_float(ret.updpos.x)&lt;br /&gt;
  updpk:w_float(ret.updpos.y)&lt;br /&gt;
  updpk:w_float(ret.updpos.z)&lt;br /&gt;
	readvu8uN(updpk,ret.updcse_alife_item__unk1_q8v4)&lt;br /&gt;
	readvu8uN(updpk,ret.updcse_alife_item__unk2_q8v3)&lt;br /&gt;
	readvu8uN(updpk,ret.updcse_alife_item__unk3_q8v3)&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_item_ammo_packet(ret,stpk,updpk)&lt;br /&gt;
	ret.ammo_left=stpk:r_u16()&lt;br /&gt;
	ret.updammo_left=updpk:r_u16()&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_item_ammo_packet(ret,stpk,updpk)&lt;br /&gt;
	stpk:w_u16(ret.ammo_left)&lt;br /&gt;
	updpk:w_u16(ret.updammo_left)&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_ammo_params(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
	amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_visual_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_item_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_item_ammo_packet(t,stpk,uppk,size)&lt;br /&gt;
  return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_ammo_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_visual_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_item_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_item_ammo_packet(t,stpk,uppk)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function cfg_get_string(ini,sect,name,def)&lt;br /&gt;
	if ini and ini:line_exist(sect,name) then&lt;br /&gt;
		return ini:r_string(sect,name)&lt;br /&gt;
	end&lt;br /&gt;
	return def&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_destroyable_data(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
	amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_visual_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_skeleton_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_object_physic_packet(t,stpk,uppk,size)&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1..&amp;quot; &amp;quot;..stpk:r_tell())&lt;br /&gt;
  return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_destroyable_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_visual_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_skeleton_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_object_physic_packet(t,stpk,uppk)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_weapon_data(sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
  sobj:STATE_Write(stpk)&lt;br /&gt;
  sobj:UPDATE_Write(uppk)&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  local t={}&lt;br /&gt;
  amk.parse_object_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_visual_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_item_packet(t,stpk,uppk,size)&lt;br /&gt;
  amk.parse_item_weapon_packet(t,stpk,uppk,size)&lt;br /&gt;
  -- amk.mylog(&amp;quot;rsp &amp;quot;..size..&amp;quot; &amp;quot;..size1..&amp;quot; &amp;quot;..stpk:r_tell())&lt;br /&gt;
  return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function set_weapon_data(t,sobj)&lt;br /&gt;
  local stpk=net_packet()&lt;br /&gt;
  local uppk=net_packet()&lt;br /&gt;
	&lt;br /&gt;
  amk.fill_object_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_visual_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_item_packet(t,stpk,uppk)&lt;br /&gt;
  amk.fill_item_weapon_packet(t,stpk,uppk)&lt;br /&gt;
	&lt;br /&gt;
  local size=stpk:w_tell()&lt;br /&gt;
  local size1=uppk:w_tell()&lt;br /&gt;
  -- amk.mylog(&amp;quot;wsp &amp;quot;..size..&amp;quot; &amp;quot;..size1)&lt;br /&gt;
  stpk:r_seek(0)&lt;br /&gt;
  uppk:r_seek(0)&lt;br /&gt;
  sobj:STATE_Read(stpk,size)&lt;br /&gt;
  sobj:UPDATE_Read(uppk)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parse_item_weapon_packet(ret,stpk,updpk)&lt;br /&gt;
	ret.ammo_current = stpk:r_u16()&lt;br /&gt;
	ret.ammo_elapsed = stpk:r_u16()&lt;br /&gt;
	ret.weapon_state = stpk:r_u8()&lt;br /&gt;
	ret.addon_flags = stpk:r_u8()&lt;br /&gt;
	ret.ammo_type = stpk:r_u8()&lt;br /&gt;
	&lt;br /&gt;
	ret.updcondition = updpk:r_u8()&lt;br /&gt;
	ret.updweapon_flags = updpk:r_u8()&lt;br /&gt;
	ret.updammo_elapsed = updpk:r_u16()&lt;br /&gt;
	ret.updaddon_flags = updpk:r_u8()&lt;br /&gt;
	ret.updammo_type = updpk:r_u8()&lt;br /&gt;
	ret.updweapon_state = updpk:r_u8()&lt;br /&gt;
	ret.updweapon_zoom = updpk:r_u8()&lt;br /&gt;
	ret.updcurrent_fire_mode = updpk:r_u8()&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fill_item_weapon_packet(ret,stpk,updpk)&lt;br /&gt;
	stpk:w_u16(ret.ammo_current)&lt;br /&gt;
	stpk:w_u16(ret.ammo_elapsed)&lt;br /&gt;
	stpk:w_u8(ret.weapon_state)&lt;br /&gt;
	stpk:w_u8(ret.addon_flags)&lt;br /&gt;
	stpk:w_u8(ret.ammo_type)&lt;br /&gt;
	&lt;br /&gt;
	updpk:w_u8(ret.updcondition)&lt;br /&gt;
	updpk:w_u8(ret.updweapon_flags)&lt;br /&gt;
	updpk:w_u16(ret.updammo_elapsed)&lt;br /&gt;
	updpk:w_u8(ret.updaddon_flags)&lt;br /&gt;
	updpk:w_u8(ret.updammo_type)&lt;br /&gt;
	updpk:w_u8(ret.updweapon_state)&lt;br /&gt;
	updpk:w_u8(ret.updweapon_zoom)&lt;br /&gt;
	updpk:w_u8(ret.updcurrent_fire_mode)&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_ver()&lt;br /&gt;
	local ver = &amp;quot;0&amp;quot;&lt;br /&gt;
	local mm = _G.main_menu.get_main_menu()&lt;br /&gt;
	if mm then ver = mm:GetGSVer() end&lt;br /&gt;
	return ver&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
всё заходим в игру и пробуем :-)&lt;br /&gt;
&lt;br /&gt;
''В принципе, скрипт работает и без watcher_act.script...''&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B4%D0%B5%D0%BD%D0%B5%D0%B3_%D1%81_%D1%82%D1%80%D1%83%D0%BF%D0%BE%D0%B2</id>
		<title>SoC. Снятие денег с трупов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B4%D0%B5%D0%BD%D0%B5%D0%B3_%D1%81_%D1%82%D1%80%D1%83%D0%BF%D0%BE%D0%B2"/>
				<updated>2011-03-04T04:51:43Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Отмена правки 9176 участника 146.101.133.37 (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;axeJZr  &amp;lt;a href=&amp;quot;http://hdepwcgtvucb.com/&amp;quot;&amp;gt;hdepwcgtvucb&amp;lt;/a&amp;gt;, [url=http://rtyfsaqmaqcc.com/]rtyfsaqmaqcc[/url], [link=http://ruomfxkivthx.com/]ruomfxkivthx[/link], http://xnkbfavimumm.com/&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B4%D0%B5%D0%BD%D0%B5%D0%B3_%D1%81_%D1%82%D1%80%D1%83%D0%BF%D0%BE%D0%B2</id>
		<title>SoC. Снятие денег с трупов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B4%D0%B5%D0%BD%D0%B5%D0%B3_%D1%81_%D1%82%D1%80%D1%83%D0%BF%D0%BE%D0%B2"/>
				<updated>2011-03-04T04:51:23Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Отмена правки 9182 участника Deathdoor (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; http://www.yearsforbeards.com/Generic-Viagra/ bestill viagra =-PP http://www.davidcanek.com/ Acheter du cialis 686082 http://www.saarapeutereheikka.com/ viagra 9447 http://www.autisme-modedemploi.org/Generic-Viagra/ Viagra pas cher 625268 http://www.anilengg.org/Generic-Viagra/ viagra vendita ovjkb&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B4%D0%B5%D0%BD%D0%B5%D0%B3_%D1%81_%D1%82%D1%80%D1%83%D0%BF%D0%BE%D0%B2</id>
		<title>SoC. Снятие денег с трупов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B4%D0%B5%D0%BD%D0%B5%D0%B3_%D1%81_%D1%82%D1%80%D1%83%D0%BF%D0%BE%D0%B2"/>
				<updated>2011-03-04T04:50:52Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Отмена правки 9176 участника 146.101.133.37 (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%94%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B9_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%A1%D0%94%D0%9A</id>
		<title>Декомпиляция уровней в формат СДК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%94%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B9_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%A1%D0%94%D0%9A"/>
				<updated>2011-02-28T15:47:36Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Отмена правки 9066 участника 121.123.206.132 (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Для декомпиляции игровых карт в формат LevelEditor'a [http://stalkerin.gameru.net/wiki/index.php/MP_SDK SDK 0.4] используется консольная утилита '''converter.exe''' от bardak'а, входящая в пакет '''[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=getit&amp;amp;lid=288 X-ray Game asset tools pack]'''.&lt;br /&gt;
&lt;br /&gt;
'''1.''' Устанавливаем '''X-ray Game asset tools pack''', обязательно ставим поверх '''[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=getit&amp;amp;lid=348 обновление]'''.&lt;br /&gt;
----&lt;br /&gt;
== Настройка Конвертера. ==&lt;br /&gt;
&lt;br /&gt;
Открываем любым текстовым редакором файл '''converter.ini''', в нем находим строки:&lt;br /&gt;
&amp;lt;ini&amp;gt;; 2947+ (финалка включая обновления)&lt;br /&gt;
[2947_config]:2945_config&lt;br /&gt;
$game_data$ = c:\temp\1\gamedata.3312\&lt;br /&gt;
$game_levels$ = c:\temp\1\gamedata.3312\levels\&amp;lt;/ini&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;; 3456+ (Clear Sky включая обновления)&lt;br /&gt;
[3456_config]:2947_config&lt;br /&gt;
$game_data$ = c:\temp\1\gamedata.3502\&lt;br /&gt;
$game_levels$ = c:\temp\1\gamedata.3502\levels\&lt;br /&gt;
fake_mu_gamemtls = 34xx_fake_mu_gamemtls&lt;br /&gt;
fake_gamemtls = 34xx_fake_gamemtls&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь ''$game_data$'' - путь до папки ''gamedata'' с распаковаными ресурсами игры, ''$game_levels$'' - до папки ''levels'' в ''gamedata'' соответственно. Необходимо указать полные пути.&lt;br /&gt;
&lt;br /&gt;
В файле '''fsconverter.ltx''' находим следующую строку:&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
$sdk_root$ = false| false| c:\program files\x-ray sdk\level_editor\&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь ''$sdk_root$'' - путь до полного SDK (русифицированный не работает нормально с converter.exe). Правим путь на свой, не забывая поставить слэш в конце.&lt;br /&gt;
&lt;br /&gt;
Более конкретная настройка СДК см. Ссылки.&lt;br /&gt;
----&lt;br /&gt;
== Декомпиляция. ==&lt;br /&gt;
&lt;br /&gt;
Конвертер полностью настроен, теперь нужно создать '''.bat-файл''' для конвертирования в формат SDK. Для этого создаем текстовой файл, пишем внутри команду и меняем формат файла с .txt на .bat:&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
converter -level &amp;lt;имя_карты&amp;gt; -out &amp;lt;имя_сцены&amp;gt; -mode maya|le|le2 -with_lods&lt;br /&gt;
pause&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Здесь ''&amp;lt;имя_карты&amp;gt;'' - имя папки с картой в каталоге ''gamedata\levels\'', например ''l08_yantar'' (локация Янтарь из ТЧ), ''&amp;lt;имя_сцены&amp;gt;'' -  имя карты после декомпиляции, можно не писать, в этом случае имя карты после декомпиляции не изменится.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Далее выдержка из ''docs\converter.txt'':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Ключ -mode задаёт режим работы:&lt;br /&gt;
 maya	- декомпилировать только геометрию карты.&lt;br /&gt;
 le	- декомпилировать в формат LE.&lt;br /&gt;
 le2	- декомпилировать в формат LE (для l12_stancia_2).&lt;br /&gt;
 raw	- декомпилировать в формат LE (отладочный режим).&lt;br /&gt;
&lt;br /&gt;
Ключ -with_lods обрабатывается в зависимости от значения -mode. Если он&lt;br /&gt;
задан совместно с -mode maya, программа выдаст ещё и MU-модели. С остальными&lt;br /&gt;
режимами его наличие заставляет converter разбивать LOD-текстуры, что&lt;br /&gt;
необходимо для полной пересборки. Также ключ ''-with_lods'' следует использовать&lt;br /&gt;
 если планируется дальнейшая перекомпиляция уровня.&lt;br /&gt;
&lt;br /&gt;
Отладочные параметры: -dbgcfrm, -dbgmrg.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
То есть команда для декомпиляции в формат SDK, например, уровня ''l08_yantar'' будет выглядеть так:&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
converter -level l08_yantar -out l08_yantar_decompiled -mode le -with_lods&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если все сделано правильно, то после запуска батника пойдет процесс декомпиляции.&lt;br /&gt;
----&lt;br /&gt;
'''5.''' Найти декомпилированную карту можно будет в каталоге ''$sdk_root$\maps'' (файл, читаемый SDK) и ''$sdk_root$\rawdata\objects\levels'' (обьекты, используемые данным уровнем). Ну а далее думаю всё и так понятно - в ЛЕ жмём File -&amp;gt; Open и открываем нашу карту.&lt;br /&gt;
&lt;br /&gt;
== Ссылки. ==&lt;br /&gt;
[http://www.gameru.net/forum/index.php?showtopic=22233 Настройка СДК от Kostya V]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%94%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B9_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%A1%D0%94%D0%9A</id>
		<title>Декомпиляция уровней в формат СДК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%94%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B9_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%A1%D0%94%D0%9A"/>
				<updated>2011-02-28T15:47:22Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Отмена правки 9069 участника 109.104.92.13 (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;4Ouxtd  &amp;lt;a href=&amp;quot;http://zjxyrrdrkjvf.com/&amp;quot;&amp;gt;zjxyrrdrkjvf&amp;lt;/a&amp;gt;, [url=http://yqqyqlegnfqa.com/]yqqyqlegnfqa[/url], [link=http://acjylovxmedu.com/]acjylovxmedu[/link], http://scsaurfprpmi.com/&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%94%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B9_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%A1%D0%94%D0%9A</id>
		<title>Декомпиляция уровней в формат СДК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%94%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B9_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%A1%D0%94%D0%9A"/>
				<updated>2011-02-28T15:47:09Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: Отмена правки 9081 участника 69.114.203.106 (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;B4RrkI  &amp;lt;a href=&amp;quot;http://wtvfqqbhcutw.com/&amp;quot;&amp;gt;wtvfqqbhcutw&amp;lt;/a&amp;gt;, [url=http://dotohvurasxl.com/]dotohvurasxl[/url], [link=http://mqdqsktkvfai.com/]mqdqsktkvfai[/link], http://zoadzxwteqmr.com/&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_%D0%9D%D0%9F%D0%A1_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7_%D0%B8_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE</id>
		<title>Обсуждение:MilkShape 3D. Перенос моделей НПС из ЧН/ЗП в ТЧ и обратно</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:MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_%D0%9D%D0%9F%D0%A1_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7_%D0%B8_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE"/>
				<updated>2011-02-09T05:01:41Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Для переноса моделей в ЧН/ЗП совсем не обязательно так изголяться. Достаточно в милке добавить нужные кости через туже тулзу, с помощью которой удаляли. Потом в СДК подгрузить нужные настройки скелета и всё. Многие походу не знают, что СДК позволяет оперировать расположением и направлением костей. '''Deathdoor (OGSE Team)'''&lt;br /&gt;
:*[[Конверт моделей нпс с версии XRay 1.5 и старше|статья]] энди как бы намекает на то, что сторонними редакторами можно вообще не пользоваться =/&lt;br /&gt;
Там статья совсем о другом, тем более в то время когда она писалась небыло СДК ЧН/ЗП.&lt;br /&gt;
В СДК ЧН/ЗП появилась возможность удалять/добавлять кости к скелету, т.е. данная статья актуальна только для СДК ТЧ. '''Deathdoor (OGSE Team)'''&lt;br /&gt;
:*Дата создания оригинальной статьи - 23.12.2009 - как бы намекает на это. '''RedPython (Captain O Team)''' :)&lt;br /&gt;
Тогда зачем давать на неё ссылку, что мол она на что-то там намекает? '''Deathdoor (OGSE Team)'''&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_%D0%9D%D0%9F%D0%A1_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7_%D0%B8_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE</id>
		<title>Обсуждение:MilkShape 3D. Перенос моделей НПС из ЧН/ЗП в ТЧ и обратно</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:MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_%D0%9D%D0%9F%D0%A1_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7_%D0%B8_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE"/>
				<updated>2011-02-02T20:43:50Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Для переноса моделей в ЧН/ЗП совсем не обязательно так изголяться. Достаточно в милке добавить нужные кости через туже тулзу, с помощью которой удаляли. Потом в СДК подгрузить нужные настройки скелета и всё. Многие походу не знают, что СДК позволяет оперировать расположением и направлением костей.&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%98%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D1%81%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8F%D1%85...</id>
		<title>Обсуждение:Исправление дефектов сглаживания на импортированных моделях...</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%98%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D1%81%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8F%D1%85..."/>
				<updated>2011-01-30T20:53:56Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Бугога, группы сглаживания - это так сложно (C) [[Участник:RedPython|RedPython]] 17:46, 8 января 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
А что здесь смешного? Если, по вашему, всё так просто, то почему до сего момента все модели в модах идут с их дефектами?! Понятно, что самого по себе ничего здесь сложного нет, но то что модмейкеры о них не знают - факт!&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5</id>
		<title>Обсуждение:OGG комментирование</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:OGG_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"/>
				<updated>2011-01-15T09:49:00Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Мегакрайне непрактичный способ&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%98%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D1%81%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8F%D1%85...</id>
		<title>Исправление дефектов сглаживания на импортированных моделях...</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%98%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D1%81%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8F%D1%85..."/>
				<updated>2011-01-08T17:24:28Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак: в конвертере бардака, а так же (естественно) в его плагине для импорта моделей в 3Д редакторы есть одна крайне неприятная особенноть: слетают группы сглаживания (или как там это правильно называется) и когда потом модель через СДК экспортируется в ОГФ на модели возникают дефекты такого вида&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/965567m.jpg&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/965567.htm&lt;br /&gt;
&lt;br /&gt;
Что сделать для исправления (способ найден и проверен в '''Milkshape 3D''', как это делать в других редакторах незнаю, так как не пользуюсь)&lt;br /&gt;
&lt;br /&gt;
Выделяем всю модель или нужную область, потом ''Vertex - Weld Together'' и... наша моделька ровная и гладенькая&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/918463m.jpg&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/918463.htm&lt;br /&gt;
&lt;br /&gt;
Теперь её можно спокойно экспортить в СДК.&lt;br /&gt;
 &lt;br /&gt;
'''Т.е. напрямую загонять модели в СДК (через преобразование конвертером) нерекомендую во избежании этих дефектов, а они будут 100%'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По просьбе '''blackraven6''' добавляю способ по решению этой проблемы в '''3D Max''' (за что ему отдельное спасибо)&lt;br /&gt;
&lt;br /&gt;
В '''3D Max''' выделяем модель, далее ''Modifiers - Subdivision surface - Mesh smooth'' и справа в свитке ''subdivisions amount'' в поле ''iterations'' ставим вместо 1 (по дефолту) 0. &lt;br /&gt;
Тогда модели добавляется только визуальный эффект сглаживания без добавления дополнительных сглаживающих полигонов. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один способ, предложенный '''adept''' для '''3D Max''' &lt;br /&gt;
&lt;br /&gt;
http://4put.ru/view-max-picture.php?id=253531&lt;br /&gt;
&lt;br /&gt;
Выделяем модель и переходим на вкладку ''Modify'' (1)&lt;br /&gt;
&lt;br /&gt;
Открываем вкладку модификаторов (2)&lt;br /&gt;
&lt;br /&gt;
Выбираем модификатор ''Smooth'' (3)&lt;br /&gt;
&lt;br /&gt;
Модель стала граненная&lt;br /&gt;
&lt;br /&gt;
http://4put.ru/view-max-picture.php?id=253532&lt;br /&gt;
&lt;br /&gt;
Теперь нужно поставить галочку ''Auto Smooth''. Все, модель сгладилась. Для регулировки уровня сглаживания нужно поставить галочку ''Prevent Indirect Smoothing'' и клацать на кнопочки возле надписи ''Threshold'', стандартно сглаживание стоит на цифре 30&lt;br /&gt;
&lt;br /&gt;
http://4put.ru/view-max-picture.php?id=253534&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Авторы: '''Deathdoor''' (OGSE team), '''blackraven6''', '''adept'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Wireframe]]&lt;/div&gt;</summary>
		<author><name>Deathdoor</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:Milkshape._%D0%9F%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%B0_%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9</id>
		<title>Обсуждение:Milkshape. Привязка костей</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:Milkshape._%D0%9F%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%B0_%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9"/>
				<updated>2010-12-31T10:04:44Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ссылка на плагин ведёт в плагин для майки, а не милки. Плагин для милки надо брать из полного архива утилит бардака.&lt;br /&gt;
&lt;br /&gt;
По сути для мировой модели половину привязок можно не делать. Для мировой модели нужена только кость weapon_body и доп кости если есть обвесы (гранатомет, прицел, глушитель).&lt;br /&gt;
Видно изначально GSC планировали сделать для неписей &amp;quot;реальную&amp;quot; анимацию перезарядки с вытаскиванием магазина из оружия, но &amp;quot;не смогла&amp;quot;. Поэтому привязка магазина, и таких мелочей как затвор и спусковая скоба просто лишний гемор и ненужная трата времени.&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D0%B2_LTX-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85</id>
		<title>Обсуждение:Описание динамических параметров в LTX-файлах</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%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D0%B2_LTX-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85"/>
				<updated>2010-12-19T08:38:09Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;очередная статья ни о чём, являющаяся копипастой из конфигов. При этом например параметр shoot_factor отсутствует в ltx-файлах (и вообще в движке игры)&lt;/div&gt;</summary>
		<author><name>Deathdoor</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%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D0%B2_LTX-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85</id>
		<title>Обсуждение:Описание динамических параметров в LTX-файлах</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%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D0%B2_LTX-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85"/>
				<updated>2010-12-19T08:29:43Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;очередная статья ни о чём, являющаяся копипастой из конфигов.&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%98%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D1%81%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8F%D1%85...</id>
		<title>Исправление дефектов сглаживания на импортированных моделях...</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%98%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D1%81%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8F%D1%85..."/>
				<updated>2010-12-12T19:00:25Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак: в конвертере бардака, а так же (естественно) в его плагине для импорта моделей в 3Д редакторы есть одна крайне неприятная особенноть: слетают группы сглаживания (или как там это правильно называется) и когда потом модель через СДК экспортируется в ОГФ на модели возникают дефекты такого вида&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/965567m.jpg&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/965567.htm&lt;br /&gt;
&lt;br /&gt;
Что сделать для исправления (способ найден и проверен в '''Milkshape 3D''', как это делать в других редакторах незнаю, так как не пользуюсь)&lt;br /&gt;
&lt;br /&gt;
Выделяем всю модель или нужную область, потом Vertex - Weld Together и... наша моделька ровная и гладенькая&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/918463m.jpg&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/918463.htm&lt;br /&gt;
&lt;br /&gt;
Теперь её можно спокойно экспортить в СДК.&lt;br /&gt;
 &lt;br /&gt;
'''Т.е. напрямую загонять модели в СДК (через преобразование конвертером) нерекомендую во избежании этих дефектов, а они будут 100%'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По просьбе '''blackraven6''' добавляю способ по решению этой проблемы в '''3D Max''' (за что ему отдельное спасибо)&lt;br /&gt;
&lt;br /&gt;
В '''3D Max''' выделяем модель, далее Modifiers - Subdivision surface - Mesh smooth и справа в свитке subdivisions amount в поле iterations ставим вместо 1 (по дефолту) 0. &lt;br /&gt;
Тогда модели добавляется только визуальный эффект сглаживания без добавления дополнительных сглаживающих полигонов. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Авторы: '''Deathdoor''' (OGSE team), '''blackraven6'''&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%98%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D1%81%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8F%D1%85...</id>
		<title>Исправление дефектов сглаживания на импортированных моделях...</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%98%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B5%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D1%81%D0%B3%D0%BB%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8F%D1%85..."/>
				<updated>2010-12-10T22:13:43Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак: в конвертере бардака, а так же (естественно) в его плагине для импорта моделей в 3Д редакторы есть одна крайне неприятная особенноть: слетают группы сглаживания (или как там это правильно называется) и когда потом модель через СДК экспортируется в ОГФ на модели возникают дефекты такого вида&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/965567m.jpg&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/965567.htm&lt;br /&gt;
&lt;br /&gt;
Что сделать для исправления (способ найден и проверен в Milkshape 3D, как это делать в других редакторах незнаю, так как не пользуюсь)&lt;br /&gt;
&lt;br /&gt;
Выделяем всю модель или нужную область, потом Vertex - Weld Together и... наша моделька ровная и гладенькая&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/918463m.jpg&lt;br /&gt;
&lt;br /&gt;
http://savepic.org/918463.htm&lt;br /&gt;
&lt;br /&gt;
Теперь её можно спокойно экспортить в СДК.&lt;br /&gt;
 &lt;br /&gt;
'''Т.е. напрямую загонять модели в СДК (через преобразование конвертером) нерекомендую во избежании этих дефектов, а они будут 100%'''&lt;br /&gt;
&lt;br /&gt;
Автор: '''Deathdoor''' (OGSE team)&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=Milkshape._%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%B2_%D0%B8%D0%B3%D1%80%D1%83</id>
		<title>Milkshape. Добавление транспорта в игру</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=Milkshape._%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%B2_%D0%B8%D0%B3%D1%80%D1%83"/>
				<updated>2010-10-28T13:49:16Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Добавление в игру S.T.A.L.K.E.R управляемого колёсного транспорта v1.0 &lt;br /&gt;
Автор: Логинов Георгий (Deathdoor) OGSE Team www.ogse.ru&lt;br /&gt;
&lt;br /&gt;
часть первая&lt;br /&gt;
&lt;br /&gt;
Для начала забудьте обо всех сложных редакторах тип 3D Мax. Всё гораздо проще и быстрей делается в MilkShape 3D www.milkshape3d.com &lt;br /&gt;
&lt;br /&gt;
Итак. Естественно сначала нам нужна модель машины которую будем добавлять. Профи, которым этот тутор и даром не нужен его могут смоделить сами, а мы возьмём готовую&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/f/fb/Image001.jpg&lt;br /&gt;
Вот такая старинная машинка :-)&lt;br /&gt;
&lt;br /&gt;
Первое что мы делаем – это разбираем модель на группы, потом это очень здорово поможет в работе. Понятно что делаем разборку без фанатизма, т.е. не будем отдельно выделять порожки, крылья и т.д. Достаточно основных деталей: колеса, фары, руль. Естественно если мы захотим сделать максимально навороченную модель, то выделяем двери, стекла, бамперы, капот (их можно будет разбивать или они будут отлетать от попаданий пуль или ударов о препятствие)&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/b/b2/Image004.jpg&lt;br /&gt;
 &lt;br /&gt;
После того как разобрали модель на группы, приступаем к созданию скелета машины.&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/e/e9/Image006.jpg&lt;br /&gt;
&lt;br /&gt;
Первая кость (или правильней сустав)&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/0/06/Image008.jpg&lt;br /&gt;
 &lt;br /&gt;
Желательно (но не обязательно) расположить его в мнимом «центре тяжести» модели&lt;br /&gt;
Для удобства в параметрах программы задаём визуальный размер костей&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/8/82/Image010.jpg&lt;br /&gt;
&lt;br /&gt;
Теперь от него начинаем растить все остальные кости.&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/7/70/Image012.jpg&lt;br /&gt;
&lt;br /&gt;
Опять же для удобства работы можем спокойно скрывать части модели. Положение костей подгоняем соответствующим инструментом  Move&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/0/07/Image014.jpg&lt;br /&gt;
&lt;br /&gt;
В итоге получаем это. На схеме показан самый минимально необходимый скелет для машины. Можно конечно и меньше, но это уже получится телега.&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/5/5c/Image016.jpg&lt;br /&gt;
&lt;br /&gt;
Теперь немного о создании фары. В принципе можно этого и не делать, так как свет исходит из самого сустава, но для «красивости» можно сделать светящееся стеклышко фары. Кстати именно таким способом можно сделать габариты, которые будет видно ночью.&lt;br /&gt;
Для этого делаем дубликат группы фары, потом у дубликата удаляем часть фары оставляя только стекло.&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/a/a1/Image017.jpg&lt;br /&gt;
&lt;br /&gt;
И теперь это стекло сдвигаем немного вперёд, что бы потом не было наложения их друг на друга (в игре это будет отображаться как черная сеточка на стекле или половина стекла светлая, вторая черная).&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/7/72/Image018.jpg&lt;br /&gt;
&lt;br /&gt;
После того как закончили с созданием скелета&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/8/81/Image021.jpg&lt;br /&gt;
&lt;br /&gt;
Приступаем к привязке модели. Вот тут нам как раз и пригодится, первоначальна разбивка модели на группы.&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/4/4e/Image023.jpg&lt;br /&gt;
&lt;br /&gt;
После привязки остаётся только экспортировать нашу модель в s.t.a.l.k.e.r SDK&lt;br /&gt;
http://stalkerin.gameru.net/wiki/images/0/06/Image025.jpg&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image025.jpg</id>
		<title>Файл:Image025.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image025.jpg"/>
				<updated>2010-10-28T13:47:16Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image023.jpg</id>
		<title>Файл:Image023.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image023.jpg"/>
				<updated>2010-10-28T13:46:58Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image021.jpg</id>
		<title>Файл:Image021.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image021.jpg"/>
				<updated>2010-10-28T13:46:38Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image018.jpg</id>
		<title>Файл:Image018.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image018.jpg"/>
				<updated>2010-10-28T13:46:18Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image017.jpg</id>
		<title>Файл:Image017.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image017.jpg"/>
				<updated>2010-10-28T13:45:50Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image016.jpg</id>
		<title>Файл:Image016.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image016.jpg"/>
				<updated>2010-10-28T13:45:29Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image014.jpg</id>
		<title>Файл:Image014.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image014.jpg"/>
				<updated>2010-10-28T13:45:07Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image012.jpg</id>
		<title>Файл:Image012.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image012.jpg"/>
				<updated>2010-10-28T13:44:50Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image010.jpg</id>
		<title>Файл:Image010.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image010.jpg"/>
				<updated>2010-10-28T13:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image008.jpg</id>
		<title>Файл:Image008.jpg</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Image008.jpg"/>
				<updated>2010-10-28T13:44:10Z</updated>
		
		<summary type="html">&lt;p&gt;Deathdoor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Deathdoor</name></author>	</entry>

	</feed>