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

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=CoP._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B5%D1%88%D0%BA%D0%B0</id>
		<title>CoP. Создание спального мешка</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=CoP._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B5%D1%88%D0%BA%D0%B0"/>
				<updated>2016-12-01T07:20:32Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: /* Скрипты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Всем привет… В этой статье я расскажу вам как создать спальный мешок в ЗП&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Теория==&lt;br /&gt;
Многие люди делая спальник задавались вопросом: &amp;quot;Почему ГГ съедает спальник?&amp;quot;. Ответ прост Чтобы сделать спальник нужно к нему скрипт прикрутить.&lt;br /&gt;
Идея скрипта проста и состоит она в том что: Когда ГГ использует спальник чтобы его не съесть вызываем диалог сна и по окончанию спавним спальник в инвентарь ГГ.&lt;br /&gt;
&lt;br /&gt;
==Конфиги==&lt;br /&gt;
Для начала заходим в файл '''gamedata\configs\misc\items.ltx''' &amp;lt;br /&amp;gt;&lt;br /&gt;
И в самый конец добавляем вот это:&lt;br /&gt;
&amp;lt;ini&amp;gt; ; Спальник &lt;br /&gt;
 [spalnik]:identity_immunities &lt;br /&gt;
 discovery_dependency = &lt;br /&gt;
 $spawn = &amp;quot;food and drugs\antirad&amp;quot; &lt;br /&gt;
 $prefetch = 32 &lt;br /&gt;
 class = S_FOOD &lt;br /&gt;
 cform = skeleton &lt;br /&gt;
 ; eatable item &lt;br /&gt;
 eat_health = 0 &lt;br /&gt;
 eat_satiety = 0 &lt;br /&gt;
 eat_power = 0 &lt;br /&gt;
 eat_radiation = 0 &lt;br /&gt;
 eat_alcohol = 0 &lt;br /&gt;
 wounds_heal_perc = 0 &lt;br /&gt;
 eat_portions_num = 1 &lt;br /&gt;
 ; food item &lt;br /&gt;
 animation_slot = 4 &lt;br /&gt;
 ;hud item &lt;br /&gt;
 hud = wpn_vodka_hud &lt;br /&gt;
&lt;br /&gt;
 visual = dynamics\workshop_room\banka_kraski_1.ogf  ;ссылка на 3д модель спальника&lt;br /&gt;
 description = enc_spalnik ;описание configs\text\rus&lt;br /&gt;
 inv_name = spalnik  ;Название configs\text\rus&lt;br /&gt;
 inv_name_short = spalnik ;Название configs\text\rus&lt;br /&gt;
 inv_weight = 1 &lt;br /&gt;
 inv_grid_width = 2 &lt;br /&gt;
 inv_grid_height = 2 &lt;br /&gt;
 inv_grid_x = 14 &lt;br /&gt;
 inv_grid_y = 23 &lt;br /&gt;
 cost = 2200 ;цена&lt;br /&gt;
&amp;lt;/ini&amp;gt;&amp;lt;br&amp;gt;Сохраняем…&lt;br /&gt;
&lt;br /&gt;
==Скрипты==&lt;br /&gt;
Теперь идём в файл '''bind_stalker.script''' и после строчек &lt;br /&gt;
&amp;lt;lua&amp;gt; get_console():execute(&amp;quot;snd_volume_eff 0&amp;quot;) &lt;br /&gt;
 else&amp;lt;/lua&amp;gt;&amp;lt;br&amp;gt;пишем вот это: &lt;br /&gt;
&amp;lt;lua&amp;gt; if s_obj and spalnik then spalnik.use_inventory_item(s_obj) end --Idler используем спальник? &lt;br /&gt;
 end&amp;lt;/lua&amp;gt;&amp;lt;br&amp;gt;сохраняем… &lt;br /&gt;
Теперь в папке '''gamedata\scripts''' создадим файл '''spalnik.script''' и в него впишем: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;lua&amp;gt;&lt;br /&gt;
 function use_inventory_item(s_obj) &lt;br /&gt;
  if s_obj:section_name()==&amp;quot;spalnik&amp;quot; then&lt;br /&gt;
   if (surge_manager.actor_in_cover()) then&lt;br /&gt;
     ui_sleep_dialog.sleep() &lt;br /&gt;
     give_info(&amp;quot;sleep_active&amp;quot;) &lt;br /&gt;
   else &lt;br /&gt;
     news_manager.send_tip(db.actor, &amp;quot;st_spalnik_nosleep&amp;quot;) &lt;br /&gt;
   end&lt;br /&gt;
   alife():create(&amp;quot;spalnik&amp;quot;, vector(), 0, 0, npc:id())&lt;br /&gt;
  end &lt;br /&gt;
 end &lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
все можно сохранять... &lt;br /&gt;
Теперь идем в файл '''gamadata\configs\text\rus\st_items_equipment.xml''' &amp;lt;br /&amp;gt;&lt;br /&gt;
И в конце перед строчкой вписываем вот это: &lt;br /&gt;
&amp;lt;xml&amp;gt;&lt;br /&gt;
 	&amp;lt;string id=&amp;quot;spalnik&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Спальный мешок&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;spalnik_s&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Спальный мешок&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;enc_spalnik&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Походный спальный мешок. Пожалуй, самый удобный способ переночевать в Зоне. Но от радиации не спасёт, поэтому для ночевки нужно искать места по-укромнее. Например такие, где можно переждать выброс.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/xml&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Сохраняем… &lt;br /&gt;
Теперь идем в туже папку в файл '''ui_st_screen.xml''' и в конце перед строчкой пишем вот это: &lt;br /&gt;
&amp;lt;xml&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;st_spalnik_nosleep&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;В этом месте не заснуть. Нужно найти более надежное укрытие, там где можно переждать выброс.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt; &lt;br /&gt;
&amp;lt;/xml&amp;gt;&lt;br /&gt;
Теперь идем в файл: &lt;br /&gt;
'''Gamedata\configs\gamepley\character_desc_general.xml''' и там после строчки: &lt;br /&gt;
&amp;lt;code&amp;gt; stalker_outfit \n&amp;lt;/code&amp;gt; &lt;br /&gt;
пишем: &lt;br /&gt;
&amp;lt;code&amp;gt; spalnik \n&amp;lt;/code&amp;gt; &lt;br /&gt;
Сохраняем…&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
http://narod.ru/disk/11754345001/item_spalnik.ogf.html ----Модель спальника.&lt;br /&gt;
&amp;lt;br /&amp;gt;http://narod.ru/disk/11756013001/c%D0%BF%D0%B0%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA.dds.html ----Иконка спальника.&lt;br /&gt;
&amp;lt;br /&amp;gt;http://narod.ru/disk/11787986001/item_meshok1.dds.html ----Текстура спальника кидать в ''textures\item'' &lt;br /&gt;
&lt;br /&gt;
Все можно заходить в игру и проверять…Спальный мешок появится у вас в начале новой игры!!! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''(Статья от ак101)'''&lt;br /&gt;
Статья доделана &lt;br /&gt;
&amp;lt;br /&amp;gt;[[Mesnik`ом]]&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9F%D0%BE%D0%BF%D1%8B%D1%82%D0%BA%D0%B0</id>
		<title>Попытка</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9F%D0%BE%D0%BF%D1%8B%D1%82%D0%BA%D0%B0"/>
				<updated>2016-04-11T00:11:42Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Формат разобрал excid'''&lt;br /&gt;
&lt;br /&gt;
== Описание структуры ==&lt;br /&gt;
Формат бинарный. Файл состоит из вложенных друг в друга блоков. Весь файл представляет собой единый блок.&lt;br /&gt;
&lt;br /&gt;
=== Структура блока ===&lt;br /&gt;
Блок имеет 3 обязательные части:&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Часть||Тип(размер)||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Идентификатор типа блока||(4)||2 байта идентификатора и 2 нулевых байта&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Размер блока||uint(4)||без учета этих частей — только то, что идет дальше&lt;br /&gt;
|-&lt;br /&gt;
|Данные||(Размер блока)||Данные могут быть представлены вложенными блоками&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Типы данных ===&lt;br /&gt;
Особое внимание стоит обратить на то, как хранятся строки: они нуль-терминальные, то есть в конце обязательно содержат нулевой байт.&lt;br /&gt;
&lt;br /&gt;
== Структура ==&lt;br /&gt;
В заголовке последующих пунктов в скобках содержатся идентификаторы типа блока в шестнадцатеричной форме, при этом байты представлены в обратном порядке (то есть так, как числа задаются в исходниках), поэтому идентификатор 0x0912 в файле будет выглядеть как 12 09 00 00.&lt;br /&gt;
&lt;br /&gt;
== Файл (0x7777) ==&lt;br /&gt;
=== Неизвестные данные (0x0900) ===&lt;br /&gt;
Возможно, это версия.&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||(2)||0x10 0x00||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Пользовательские информация — User Data (0x0912) ===&lt;br /&gt;
В редакторе Game options &amp;gt; User Data.&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Данные||строка||||Произвольная строка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Уровень детализации — LOD (0x0925) ===&lt;br /&gt;
В редакторе LOD &amp;gt; Reference.&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Ссылка||строка||||Путь к модели, содержащей следующий уровень детализации&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Тип объекта — Object Type (0x0903) ===&lt;br /&gt;
В редакторе Object Type.&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Тип||(4)||||Значение 0x00 для статической модели (тип Static)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Данные о геометрии — Geometry (0x0910) ===&lt;br /&gt;
В редакторе Geometry.&lt;br /&gt;
Все представленные ниже данные описывают 1 подобъект.&lt;br /&gt;
&lt;br /&gt;
==== Неизвестные данные (0x1000) ====&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||(2)||0x11 0x00||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Название подобъекта — Name (0x1001) ====&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Название||строка||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Ограничивающий параллелепипед — Bounding Box (0x1004) ====&lt;br /&gt;
В редакторе Transform &amp;gt; BBox Min/Max&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Минимум||float(4)[3]||||Минимальные значения вершин по x, y, z&lt;br /&gt;
|-&lt;br /&gt;
|Максимум||float(4)[3]||||Максимальные значения вершин по x, y, z&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Неизвестные данные (0x1002) ====&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||(1)||0x05||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Неизвестные данные (0x1010) ====&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||(8)||0x00||Все нули&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Вершины — Vertices (0x1005) ====&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Количество вершин n||uint(4)||||&lt;br /&gt;
|-&lt;br /&gt;
|Координаты||float(4)[n * 3]||||Координаты x, y, z для каждой вершины&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Грани — Faces (0x1006) ====&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Количество граней m||uint(4)||||&lt;br /&gt;
|-&lt;br /&gt;
|Координаты||uint(4)[m * 6]||||Три пары индекс вершины, индекс текстурной координаты (v0,vref0,v1,vref1,v2,vref2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Группы сглаживания — Smoothing Groups (0x1013) ====&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Группы||uint(4)[m]||||32-битная маска групп сглаживания для каждой грани&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Словарь текстурных координат — UVs map (0x1008) ====&lt;br /&gt;
Логика формирования и назначение этого и блока «Текстурные координаты» до конца не понятна.&lt;br /&gt;
Предположительный вариант представлен ниже.&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Количество записей k||uint(4)||||&lt;br /&gt;
|-&lt;br /&gt;
|Данные||(9)[k]||||Предположительная структура в следующей таблице&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||byte(1)||0x1||&lt;br /&gt;
|-&lt;br /&gt;
|Индекс таблицы текстурных координат||uint(4)||0x0 или 0x1||Номер таблицы (в блоке 0x1012)&lt;br /&gt;
|-&lt;br /&gt;
|Индекс текстурных координаты||uint(4)||0x0 или 0x1||Индекс в таблице, определяемой предыдущим значением (в блоке 0x1012).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Материалы объекта — Object Materials (0x1009) ====&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Количество материалов p||ushort(2)||||&lt;br /&gt;
|-&lt;br /&gt;
|Материалы||[p]||||Структура в следующей таблице&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Название материала||строка||||&lt;br /&gt;
|-&lt;br /&gt;
|Количество граней q||uint(4)||||Количество граней, имеющих этот материал&lt;br /&gt;
|-&lt;br /&gt;
|Индексы граней||uint(4)[q]||||из таблицы Грани — Faces (0x1006)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Текстурные координаты — UVs (0x1012) ====&lt;br /&gt;
Количество таблиц, которое встречалось в тестовых файлах — 2.&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Количество таблиц t||uint(4)||0x2||&lt;br /&gt;
|-&lt;br /&gt;
|Таблицы||[t]||||Структура в следующей таблице&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||строка||Texture||&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||ubyte(1)||0x2||Возможно, количество компонентов в текстурной координате?&lt;br /&gt;
|-&lt;br /&gt;
|Номер таблицы||ushort(1)||||&lt;br /&gt;
|-&lt;br /&gt;
|Количество текстурных координат s||uint(4)||||&lt;br /&gt;
|-&lt;br /&gt;
|Текстурные координаты||float(4)[s * 2]||||Пары значения текстурных координат u и v&lt;br /&gt;
|-&lt;br /&gt;
|Индекс вершины||uint(4)[s]||||Индекс вершины (в блоке 0x1005)&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно&amp;lt;br /&amp;gt;(только для второй таблицы)||uint(4)[s]||||Какие-то индексы, не превышающие s, отсортированные по возрастанию&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Материалы — Materials (0x0907) ===&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Количество материалов r||uint(4)||||&lt;br /&gt;
|-&lt;br /&gt;
|Материалы||[r]||||Структура в следующей таблице&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Название||строка||||&lt;br /&gt;
|-&lt;br /&gt;
|Характеристика для движка||строка||||Например, default&lt;br /&gt;
|-&lt;br /&gt;
|Характеристика для компилятора||строка||||Например, default&lt;br /&gt;
|-&lt;br /&gt;
|Характеристика для игры||строка||||Например, default&lt;br /&gt;
|-&lt;br /&gt;
|Путь к текстуре||строка||||&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||строка||Texture||Значение Texture используется в блоке &amp;lt;br /&amp;gt;Текстурные координаты — UVs (0x1008)&lt;br /&gt;
|-&lt;br /&gt;
|Флаги||uint(4)||||0x1, если материал двусторонний, иначе 0x0&lt;br /&gt;
|-&lt;br /&gt;
|Неизвестно||(8)||0x12 0x1 0x0 0x0 0x1 0x0 0x0 0x0||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Автор — Author (0x0922) ===&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название||Тип(размер)||Значение||Подробнее&lt;br /&gt;
|-&lt;br /&gt;
|Создатель||строка||||Вид \\компьютер\пользователь (например, \\NAPALI\excid)&lt;br /&gt;
|-&lt;br /&gt;
|Дата создания||(4)||||&lt;br /&gt;
|-&lt;br /&gt;
|Последний модифицирующий||строка||||Вид \\компьютер\пользователь (например, \\NAPALI\excid)&lt;br /&gt;
|-&lt;br /&gt;
|Дата модификации||(4)||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Скрипт разбора файла ==&lt;br /&gt;
Написан на Python. Не реализован полностью, завершение не планируется, так как свою миссию он выполнил.&amp;lt;br /&amp;gt;&lt;br /&gt;
Если запускать из Blender, то импортирует объект (без материалов).&amp;lt;br /&amp;gt;&lt;br /&gt;
Не рекомендуется запускать для больших файлов, так как выводится вся информация из файла.&lt;br /&gt;
&lt;br /&gt;
=== Код ===&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#                                           #&lt;br /&gt;
#    XRay Engine (S.T.A.L.K.E.R.) object    #&lt;br /&gt;
#       test import plugin for Blender      #&lt;br /&gt;
#                                           #&lt;br /&gt;
#          Anton 'excid' Gorenko            #&lt;br /&gt;
#              excid@mail.ru                #&lt;br /&gt;
#                                           #&lt;br /&gt;
#               (2007 June)                 #&lt;br /&gt;
#                                           #&lt;br /&gt;
&lt;br /&gt;
from struct import *&lt;br /&gt;
import datetime&lt;br /&gt;
&lt;br /&gt;
useBlender = True&lt;br /&gt;
try:&lt;br /&gt;
    from Blender import *&lt;br /&gt;
    from Blender.Mathutils import *&lt;br /&gt;
except:&lt;br /&gt;
    useBlender = False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
f = open('X:\\rawdata\\objects\\detail\\det_list_05.object', 'rb')&lt;br /&gt;
s = f.read()&lt;br /&gt;
f.close()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def parseMeshData(s):&lt;br /&gt;
    &lt;br /&gt;
    p = 0&lt;br /&gt;
    print '\nunknown block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    size = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    print 'unknown block size =', size&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'unknown data =', map(hex, unpack('%dB' % (size,), s[p : p + size]))&lt;br /&gt;
    p += size&lt;br /&gt;
    &lt;br /&gt;
    print '\nname block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    nameSize = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    print 'name block size =', nameSize&lt;br /&gt;
    p += 4&lt;br /&gt;
    name = unpack('%ds' % (nameSize,), s[p : p + nameSize])[0][:-1]&lt;br /&gt;
    p += int(nameSize)&lt;br /&gt;
    print 'name =', name&lt;br /&gt;
    &lt;br /&gt;
    if useBlender:&lt;br /&gt;
        obj = Object.New('Mesh', name)&lt;br /&gt;
        mesh = Mesh.New(name)&lt;br /&gt;
        obj.link(mesh)&lt;br /&gt;
        scene = Scene.GetCurrent()&lt;br /&gt;
        scene.objects.link(obj)&lt;br /&gt;
    &lt;br /&gt;
    print '\nbbox block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'bbox block size =', unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'bbox min = ', unpack('3f', s[p : p + 12])&lt;br /&gt;
    p += 12&lt;br /&gt;
    print 'bbox max = ', unpack('3f', s[p : p + 12])&lt;br /&gt;
    p += 12&lt;br /&gt;
    &lt;br /&gt;
    print '\nunknown block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    size = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    print 'unknown block size =', size&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'unknown data =', map(hex, unpack('%dB' % (size,), s[p : p + size]))&lt;br /&gt;
    p += size&lt;br /&gt;
    &lt;br /&gt;
    print '\nunknown block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    size = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    print 'unknown block size =', size&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'unknown data =', map(hex, unpack('%dB' % (size,), s[p : p + size]))&lt;br /&gt;
    p += size&lt;br /&gt;
    &lt;br /&gt;
    print '\nvertices block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4  &lt;br /&gt;
    print 'vertices block size =', unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4  &lt;br /&gt;
    verticesCount = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'vertices count =', verticesCount &lt;br /&gt;
    for i in range(verticesCount):&lt;br /&gt;
        coords = unpack('3f', s[p : p + 12])&lt;br /&gt;
        print 'vertex%d =' % (i,), coords&lt;br /&gt;
        p += 12&lt;br /&gt;
        &lt;br /&gt;
        if useBlender:&lt;br /&gt;
            mesh.verts.extend([coords])&lt;br /&gt;
    &lt;br /&gt;
    print '\ntriangles block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'triangles block size =', unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    &lt;br /&gt;
    trianglesCount = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'triangles count =', trianglesCount   &lt;br /&gt;
    &lt;br /&gt;
    faces = []&lt;br /&gt;
    for i in range(trianglesCount):&lt;br /&gt;
        vertices = unpack('6I', s[p : p + 24])&lt;br /&gt;
        print 'triangle%d =' % (i,), vertices&lt;br /&gt;
        p += 24&lt;br /&gt;
        &lt;br /&gt;
        faces.append(vertices)&lt;br /&gt;
        &lt;br /&gt;
    print '\nsmoothgroups block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    size = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'smoothgroups block size =', size&lt;br /&gt;
    for i in range(size / 4):&lt;br /&gt;
        x = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
        print 'triangle%d =' % (i,), hex(int(x))&lt;br /&gt;
        p += 4&lt;br /&gt;
    &lt;br /&gt;
    print '\nuv map block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    size = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'uv map block size =', size&lt;br /&gt;
    count = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'count =', count&lt;br /&gt;
    &lt;br /&gt;
    layerIndices = []&lt;br /&gt;
    uvIndices = []&lt;br /&gt;
    for i in range(count):&lt;br /&gt;
        unknown = unpack('5B', s[p : p + 5])&lt;br /&gt;
        p += 5&lt;br /&gt;
        &lt;br /&gt;
        uvIndex = int(unpack('I', s[p : p + 4])[0])&lt;br /&gt;
        p += 4&lt;br /&gt;
        &lt;br /&gt;
        print 'uv index =', map(hex, unknown), uvIndex&lt;br /&gt;
        &lt;br /&gt;
        layerIndices.append(unknown[1])&lt;br /&gt;
        uvIndices.append(uvIndex)&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    print '\nmaterials block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    size = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'materials block size =', size&lt;br /&gt;
    materialsCount = unpack('H', s[p : p + 2])[0]&lt;br /&gt;
    p += 2&lt;br /&gt;
    print 'materials count =', materialsCount&lt;br /&gt;
    &lt;br /&gt;
    for i in range(materialsCount):&lt;br /&gt;
        materialName = ''&lt;br /&gt;
        b = unpack('B', s[p : p + 1])[0]&lt;br /&gt;
        p += 1&lt;br /&gt;
        while b != 0:&lt;br /&gt;
            materialName = materialName + chr(b)&lt;br /&gt;
            b = unpack('B', s[p : p + 1])[0]&lt;br /&gt;
            p += 1&lt;br /&gt;
        print 'material%d name =' % (i,), materialName&lt;br /&gt;
        &lt;br /&gt;
        trianglesCount = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
        p += 4&lt;br /&gt;
        print 'triangles count =', trianglesCount&lt;br /&gt;
        &lt;br /&gt;
        print 'triangles indices =', map(int, unpack('%dI' % (trianglesCount,), s[p : p + 4 * trianglesCount]))&lt;br /&gt;
        p += 4 * trianglesCount&lt;br /&gt;
        &lt;br /&gt;
    print '\ntexcoords block =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
    p += 4&lt;br /&gt;
    size = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'texcoords block size =', size&lt;br /&gt;
    uvTablesCount = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'uv tables count =', uvTablesCount&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    uvs = []&lt;br /&gt;
    for i in range(uvTablesCount):&lt;br /&gt;
        currentUv = []&lt;br /&gt;
        chanelName = ''&lt;br /&gt;
        b = unpack('B', s[p : p + 1])[0]&lt;br /&gt;
        p += 1&lt;br /&gt;
        while b != 0:&lt;br /&gt;
            chanelName = chanelName + chr(b)&lt;br /&gt;
            b = unpack('B', s[p : p + 1])[0]&lt;br /&gt;
            p += 1&lt;br /&gt;
        print 'name =', chanelName&lt;br /&gt;
        &lt;br /&gt;
        x = unpack('B', s[p : p + 1])[0]&lt;br /&gt;
        p += 1&lt;br /&gt;
        print 'unknown =', x&lt;br /&gt;
        layerIndex = unpack('H', s[p : p + 2])[0]&lt;br /&gt;
        p += 2&lt;br /&gt;
        print 'layer index =', layerIndex   &lt;br /&gt;
        count = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
        p += 4&lt;br /&gt;
        print 'uvs count =', count&lt;br /&gt;
        &lt;br /&gt;
        for j in range(count):&lt;br /&gt;
            uv = unpack('2f', s[p : p + 8])&lt;br /&gt;
            print 'uv%d =' % (j,), uv&lt;br /&gt;
            p += 8&lt;br /&gt;
            &lt;br /&gt;
            currentUv.append(uv)&lt;br /&gt;
        uvs.append(currentUv)&lt;br /&gt;
            &lt;br /&gt;
        for j in range(count):&lt;br /&gt;
            x = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
            print 'index%d =' % (j,), int(x)&lt;br /&gt;
            p += 4&lt;br /&gt;
&lt;br /&gt;
    i = 0&lt;br /&gt;
    while len(s) &amp;gt; p:&lt;br /&gt;
        x = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
        print 'unknown index%d =' % (i,), int(x)&lt;br /&gt;
        p += 4  &lt;br /&gt;
        i += 1&lt;br /&gt;
    &lt;br /&gt;
    if useBlender:&lt;br /&gt;
        faceIndex = 0&lt;br /&gt;
        for faceInfo in faces:&lt;br /&gt;
            if faceInfo[4] == 0:&lt;br /&gt;
                faceInfo = faceInfo[2:] + faceInfo[:2]&lt;br /&gt;
            mesh.faces.extend(faceInfo[::2])&lt;br /&gt;
            face = mesh.faces[-1]&lt;br /&gt;
&lt;br /&gt;
            faceUvs = []&lt;br /&gt;
            for i in faceInfo[1::2]:&lt;br /&gt;
                faceUvs.append(Vector(uvs[layerIndices[i]][uvIndices[i]]))&lt;br /&gt;
            face.uv = faceUvs&lt;br /&gt;
    &lt;br /&gt;
def parseString(s, p):&lt;br /&gt;
    string = ''&lt;br /&gt;
    b = unpack('B', s[p : p + 1])[0]&lt;br /&gt;
    p += 1&lt;br /&gt;
    while b != 0:&lt;br /&gt;
        string = string + chr(b)&lt;br /&gt;
        b = unpack('B', s[p : p + 1])[0]&lt;br /&gt;
        p += 1&lt;br /&gt;
    return string, p&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
def parseGeometryBlock(s):&lt;br /&gt;
    print '\ngeometry\n'&lt;br /&gt;
    p = 0&lt;br /&gt;
    while p &amp;lt; len(s):&lt;br /&gt;
        i = unpack('I', s[p : p + 4])[0]    &lt;br /&gt;
        p += 4&lt;br /&gt;
        dataSize = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
        print 'mesh%d data size = %d' % (i, dataSize)&lt;br /&gt;
        p += 4&lt;br /&gt;
        parseMeshData(s[p : p + dataSize])&lt;br /&gt;
        p += dataSize   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def parseMaterialBlock(s):&lt;br /&gt;
    print '\nmaterials\n'&lt;br /&gt;
    p = 0&lt;br /&gt;
    materialsCount = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    p += 4&lt;br /&gt;
    print 'materials count =', materialsCount&lt;br /&gt;
&lt;br /&gt;
    for i in range(materialsCount):&lt;br /&gt;
        print '\n'&lt;br /&gt;
        materialName, p = parseString(s, p)&lt;br /&gt;
        print 'material%d name =' % (i,), materialName&lt;br /&gt;
        &lt;br /&gt;
        engineShader, p = parseString(s, p)&lt;br /&gt;
        print 'engine shader =', engineShader&lt;br /&gt;
        &lt;br /&gt;
        compilerShader, p = parseString(s, p)&lt;br /&gt;
        print 'compiler shader =', compilerShader&lt;br /&gt;
&lt;br /&gt;
        gameMaterial, p = parseString(s, p)&lt;br /&gt;
        print 'game material =', gameMaterial   &lt;br /&gt;
        &lt;br /&gt;
        texturePath, p = parseString(s, p)&lt;br /&gt;
        print 'texture path =', texturePath&lt;br /&gt;
        &lt;br /&gt;
        texture, p = parseString(s, p)&lt;br /&gt;
        print 'texture =', texture&lt;br /&gt;
&lt;br /&gt;
        print 'flags (2 sided, etc) =', hex(int(unpack('I', s[p : p + 4])[0]))&lt;br /&gt;
        p += 4  &lt;br /&gt;
        &lt;br /&gt;
        size = 8&lt;br /&gt;
        print 'unknown data =', map(hex, unpack('%dB' % (size,), s[p : p + size]))&lt;br /&gt;
        p += size   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
def parseAuthorBlock(s):&lt;br /&gt;
    print '\nauthor\n'&lt;br /&gt;
    p = 0&lt;br /&gt;
    authorName, p = parseString(s, p)&lt;br /&gt;
    print 'author name =', authorName&lt;br /&gt;
    &lt;br /&gt;
    size = 4&lt;br /&gt;
    print 'creation date =', map(hex, unpack('%dB' % (size,), s[p : p + size]))&lt;br /&gt;
    p += size   &lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    modifierName, p = parseString(s, p)&lt;br /&gt;
    print 'modifier name =', modifierName&lt;br /&gt;
    &lt;br /&gt;
    print 'modification date =', map(hex, unpack('%dB' % (size,), s[p : p + size]))&lt;br /&gt;
    p += size   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
def parseUserDataBlock(s):&lt;br /&gt;
    print '\nuser data\n'&lt;br /&gt;
    p = 0&lt;br /&gt;
    userData, p = parseString(s, p)&lt;br /&gt;
    print 'user data =', userData&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
def parseLODBlock(s):&lt;br /&gt;
    print '\nlod\n'&lt;br /&gt;
    p = 0&lt;br /&gt;
    reference, p = parseString(s, p)&lt;br /&gt;
    print 'lod reference =', reference  &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
def parseFlagsBlock(s):&lt;br /&gt;
    print '\nflags (model type)\n'&lt;br /&gt;
    p = 0&lt;br /&gt;
    flags = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    print 'model type =', hex(int(flags))&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
print '\n' * 3&lt;br /&gt;
&lt;br /&gt;
p = 0&lt;br /&gt;
header = unpack('I', s[p : p + 4])[0]   &lt;br /&gt;
print 'header =', hex(int(header))&lt;br /&gt;
p += 4&lt;br /&gt;
&lt;br /&gt;
dataSize = unpack('I', s[p : p + 4])[0] &lt;br /&gt;
print 'data size =', dataSize&lt;br /&gt;
p += 4&lt;br /&gt;
&lt;br /&gt;
while p &amp;lt; len(s):&lt;br /&gt;
    print '\n'&lt;br /&gt;
    print '=' * 79&lt;br /&gt;
    block = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    print 'block =', hex(int(block))&lt;br /&gt;
    p += 4&lt;br /&gt;
    &lt;br /&gt;
    blockSize = unpack('I', s[p : p + 4])[0]&lt;br /&gt;
    print 'block size =', blockSize&lt;br /&gt;
    p += 4  &lt;br /&gt;
&lt;br /&gt;
    if block == 0x0910:&lt;br /&gt;
        parseGeometryBlock(s[p : p + blockSize])&lt;br /&gt;
    elif block == 0x0907:&lt;br /&gt;
        parseMaterialBlock(s[p : p + blockSize])&lt;br /&gt;
    elif block == 0x0922:&lt;br /&gt;
        parseAuthorBlock(s[p : p + blockSize])&lt;br /&gt;
    elif block == 0x0912:&lt;br /&gt;
        parseUserDataBlock(s[p : p + blockSize])&lt;br /&gt;
    elif block == 0x0925:&lt;br /&gt;
        parseLODBlock(s[p : p + blockSize])&lt;br /&gt;
    elif block == 0x0903:&lt;br /&gt;
        parseFlagsBlock(s[p : p + blockSize])       &lt;br /&gt;
    else:&lt;br /&gt;
        print 'unknown data =', map(hex, unpack('%dB' % (blockSize,), s[p : p + blockSize]))&lt;br /&gt;
    p += blockSize&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результат ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
header = 0x7777&lt;br /&gt;
data size = 1113&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===============================================================================&lt;br /&gt;
block = 0x900&lt;br /&gt;
block size = 2&lt;br /&gt;
unknown data = ['0x10', '0x0']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===============================================================================&lt;br /&gt;
block = 0x912&lt;br /&gt;
block size = 1&lt;br /&gt;
&lt;br /&gt;
user data&lt;br /&gt;
&lt;br /&gt;
user data =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===============================================================================&lt;br /&gt;
block = 0x925&lt;br /&gt;
block size = 1&lt;br /&gt;
&lt;br /&gt;
lod&lt;br /&gt;
&lt;br /&gt;
lod reference =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===============================================================================&lt;br /&gt;
block = 0x903&lt;br /&gt;
block size = 4&lt;br /&gt;
&lt;br /&gt;
flags (model type)&lt;br /&gt;
&lt;br /&gt;
model type = 0x0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===============================================================================&lt;br /&gt;
block = 0x910&lt;br /&gt;
block size = 929&lt;br /&gt;
&lt;br /&gt;
geometry&lt;br /&gt;
&lt;br /&gt;
mesh0 data size = 921&lt;br /&gt;
&lt;br /&gt;
unknown block = 0x1000&lt;br /&gt;
unknown block size = 2&lt;br /&gt;
unknown data = ['0x11', '0x0']&lt;br /&gt;
&lt;br /&gt;
name block = 0x1001&lt;br /&gt;
name block size = 8&lt;br /&gt;
name = Plane10&lt;br /&gt;
&lt;br /&gt;
bbox block = 0x1004&lt;br /&gt;
bbox block size = 24&lt;br /&gt;
bbox min =  (-0.089013084769248962, 0.00091872771736234426, -0.05408264324069023&lt;br /&gt;
1)&lt;br /&gt;
bbox max =  (0.064492635428905487, 0.017687048763036728, 0.050194162875413895)&lt;br /&gt;
&lt;br /&gt;
unknown block = 0x1002&lt;br /&gt;
unknown block size = 1&lt;br /&gt;
unknown data = ['0x5']&lt;br /&gt;
&lt;br /&gt;
unknown block = 0x1010&lt;br /&gt;
unknown block size = 8&lt;br /&gt;
unknown data = ['0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0']&lt;br /&gt;
&lt;br /&gt;
vertices block = 0x1005&lt;br /&gt;
vertices block size = 88&lt;br /&gt;
vertices count = 7&lt;br /&gt;
vertex0 = (-0.0019903033971786499, 0.001169001217931509, 0.0068940594792366028)&lt;br /&gt;
vertex1 = (-0.089013084769248962, 0.00091872771736234426, 0.045723527669906616)&lt;br /&gt;
vertex2 = (0.006468137726187706, 0.0094316964969038963, 0.050194162875413895)&lt;br /&gt;
vertex3 = (-0.039456427097320557, 0.0043633054010570049, -0.039133470505475998)&lt;br /&gt;
vertex4 = (0.023728765547275543, 0.0064991358667612076, -0.054082643240690231)&lt;br /&gt;
vertex5 = (0.031571760773658752, 0.0060988827608525753, 0.0041843997314572334)&lt;br /&gt;
vertex6 = (0.064492635428905487, 0.017687048763036728, -0.038134712725877762)&lt;br /&gt;
&lt;br /&gt;
triangles block = 0x1006&lt;br /&gt;
triangles block size = 148&lt;br /&gt;
triangles count = 6&lt;br /&gt;
triangle0 = (0, 2, 1, 1, 2, 0)&lt;br /&gt;
triangle1 = (0, 8, 3, 7, 1, 6)&lt;br /&gt;
triangle2 = (0, 11, 4, 10, 3, 9)&lt;br /&gt;
triangle3 = (5, 14, 6, 13, 4, 12)&lt;br /&gt;
triangle4 = (0, 17, 2, 16, 5, 15)&lt;br /&gt;
triangle5 = (0, 20, 5, 19, 4, 18)&lt;br /&gt;
&lt;br /&gt;
smoothgroups block = 0x1013&lt;br /&gt;
smoothgroups block size = 24&lt;br /&gt;
triangle0 = 0x1&lt;br /&gt;
triangle1 = 0x1&lt;br /&gt;
triangle2 = 0x1&lt;br /&gt;
triangle3 = 0x1&lt;br /&gt;
triangle4 = 0x1&lt;br /&gt;
triangle5 = 0x1&lt;br /&gt;
&lt;br /&gt;
uv map block = 0x1008&lt;br /&gt;
uv map block size = 193&lt;br /&gt;
count = 21&lt;br /&gt;
uv index = ['0x1', '0x0', '0x0', '0x0', '0x0'] 2&lt;br /&gt;
uv index = ['0x1', '0x0', '0x0', '0x0', '0x0'] 1&lt;br /&gt;
uv index = ['0x1', '0x0', '0x0', '0x0', '0x0'] 0&lt;br /&gt;
uv index = ['0x1', '0x90', '0xdb', '0x11', '0x7'] 12&lt;br /&gt;
uv index = ['0x1', '0x18', '0x87', '0x10', '0x7'] 12&lt;br /&gt;
uv index = ['0x1', '0x80', '0x8c', '0x10', '0x7'] 12&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 1&lt;br /&gt;
uv index = ['0x1', '0x0', '0x0', '0x0', '0x0'] 3&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 0&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 3&lt;br /&gt;
uv index = ['0x1', '0x0', '0x0', '0x0', '0x0'] 4&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 2&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 4&lt;br /&gt;
uv index = ['0x1', '0x0', '0x0', '0x0', '0x0'] 6&lt;br /&gt;
uv index = ['0x1', '0x0', '0x0', '0x0', '0x0'] 5&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 7&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 6&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 5&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 10&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 9&lt;br /&gt;
uv index = ['0x1', '0x1', '0x0', '0x0', '0x0'] 8&lt;br /&gt;
&lt;br /&gt;
materials block = 0x1009&lt;br /&gt;
materials block size = 43&lt;br /&gt;
materials count = 1&lt;br /&gt;
material0 name = 01 - Default&lt;br /&gt;
triangles count = 6&lt;br /&gt;
triangles indices = [0, 1, 2, 3, 4, 5]&lt;br /&gt;
&lt;br /&gt;
texcoords block = 0x1012&lt;br /&gt;
texcoords block size = 294&lt;br /&gt;
uv tables count = 2&lt;br /&gt;
name = Texture&lt;br /&gt;
unknown = 2&lt;br /&gt;
layer index = 0&lt;br /&gt;
uvs count = 7&lt;br /&gt;
uv0 = (0.72911489009857178, 0.70259565114974976)&lt;br /&gt;
uv1 = (0.4648970365524292, 0.95080757141113281)&lt;br /&gt;
uv2 = (0.55649280548095703, 0.58906811475753784)&lt;br /&gt;
uv3 = (0.97081756591796875, 0.88250058889389038)&lt;br /&gt;
uv4 = (0.97814416885375977, 0.69620668888092041)&lt;br /&gt;
uv5 = (0.75604760646820068, 0.52614188194274902)&lt;br /&gt;
uv6 = (0.98893237113952637, 0.51763355731964111)&lt;br /&gt;
index0 = 0&lt;br /&gt;
index1 = 1&lt;br /&gt;
index2 = 2&lt;br /&gt;
index3 = 3&lt;br /&gt;
index4 = 4&lt;br /&gt;
index5 = 5&lt;br /&gt;
index6 = 6&lt;br /&gt;
name = Texture&lt;br /&gt;
unknown = 2&lt;br /&gt;
layer index = 1&lt;br /&gt;
uvs count = 11&lt;br /&gt;
uv0 = (0.72911489009857178, 0.70259565114974976)&lt;br /&gt;
uv1 = (0.4648970365524292, 0.95080757141113281)&lt;br /&gt;
uv2 = (0.72911489009857178, 0.70259565114974976)&lt;br /&gt;
uv3 = (0.97081756591796875, 0.88250058889389038)&lt;br /&gt;
uv4 = (0.97814416885375977, 0.69620668888092041)&lt;br /&gt;
uv5 = (0.72911489009857178, 0.70259565114974976)&lt;br /&gt;
uv6 = (0.5510140061378479, 0.58371180295944214)&lt;br /&gt;
uv7 = (0.75604760646820068, 0.52614188194274902)&lt;br /&gt;
uv8 = (0.72911489009857178, 0.70259565114974976)&lt;br /&gt;
uv9 = (0.75604760646820068, 0.52614188194274902)&lt;br /&gt;
uv10 = (0.97814416885375977, 0.69620668888092041)&lt;br /&gt;
index0 = 0&lt;br /&gt;
index1 = 1&lt;br /&gt;
index2 = 0&lt;br /&gt;
index3 = 3&lt;br /&gt;
index4 = 4&lt;br /&gt;
index5 = 0&lt;br /&gt;
index6 = 2&lt;br /&gt;
index7 = 5&lt;br /&gt;
index8 = 0&lt;br /&gt;
index9 = 5&lt;br /&gt;
index10 = 4&lt;br /&gt;
unknown index0 = 1&lt;br /&gt;
unknown index1 = 1&lt;br /&gt;
unknown index2 = 2&lt;br /&gt;
unknown index3 = 2&lt;br /&gt;
unknown index4 = 3&lt;br /&gt;
unknown index5 = 4&lt;br /&gt;
unknown index6 = 4&lt;br /&gt;
unknown index7 = 4&lt;br /&gt;
unknown index8 = 5&lt;br /&gt;
unknown index9 = 5&lt;br /&gt;
unknown index10 = 5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===============================================================================&lt;br /&gt;
block = 0x907&lt;br /&gt;
block size = 82&lt;br /&gt;
&lt;br /&gt;
materials&lt;br /&gt;
&lt;br /&gt;
materials count = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
material0 name = 01 - Default&lt;br /&gt;
engine shader = details\blend&lt;br /&gt;
compiler shader = default&lt;br /&gt;
game material = default&lt;br /&gt;
texture path = det\det_listya&lt;br /&gt;
texture = Texture&lt;br /&gt;
flags (2 sided, etc) = 0x0&lt;br /&gt;
unknown data = ['0x12', '0x1', '0x0', '0x0', '0x1', '0x0', '0x0', '0x0']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===============================================================================&lt;br /&gt;
block = 0x922&lt;br /&gt;
block size = 38&lt;br /&gt;
&lt;br /&gt;
author&lt;br /&gt;
&lt;br /&gt;
author name = \\SUSHKA\cy-27&lt;br /&gt;
creation date = ['0xf', '0x28', '0x98', '0x43']&lt;br /&gt;
modifier name = \\SUSHKA\cy-27&lt;br /&gt;
modification date = ['0xf', '0x28', '0x98', '0x43']&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
[[Категория:Неоформленные статьи]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC_%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. Перенос анимации NPC из ЧН/ЗП в ТЧ и обратно</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC_%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>2016-02-06T10:42:21Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: Monolith переименовал страницу MilkShape 3D. Перенос анимации из ЧН/ЗП в ТЧ в MilkShape 3D. Перенос анимации NPC из ЧН/ЗП в ТЧ и обратно: добавлен перено…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос анимаций из ЧН/ЗП в ТЧ ==&lt;br /&gt;
&lt;br /&gt;
'''1)''' Итак, для начала конвертером бардака сконвертируем нужный вам '''omf'''-файл из ЧН в формат '''skls'''.&lt;br /&gt;
&lt;br /&gt;
'''2)''' Открываем '''Actor Editor''' и подгружаем любую модель NPC (можно даже из Теней Чернобыля). После чего загружаем полученный skls-файл.&lt;br /&gt;
&lt;br /&gt;
'''3)''' Ищем нужную вам анимацию и запоминаем ее имя (для верности запишите на бумажке).&lt;br /&gt;
&lt;br /&gt;
'''4)''' Все тем же конвертером бардака &amp;quot;вытягиваем&amp;quot; нужную вам анимацию из взятого вами omf-файла.&lt;br /&gt;
&lt;br /&gt;
'''5)''' Теперь у вас есть нужная анимация в skl-формате. Открываем MilkShape 3D.&lt;br /&gt;
&lt;br /&gt;
'''6)''' Подгружаем модель из Чистого Неба/Зова Припяти.&lt;br /&gt;
&lt;br /&gt;
'''7)''' Подгружаем skl-анимацию. &lt;br /&gt;
&lt;br /&gt;
'''8)''' Выбираем вариант работы '''Anim''' (в нижней правой части экрана).&lt;br /&gt;
&lt;br /&gt;
'''9)''' Фиксируем положение костей нажатием '''CTRL+K'''.&lt;br /&gt;
&lt;br /&gt;
'''10)''' Выбираем '''Tools--&amp;gt;Joint Tool''', ставим галочку на '''Unlink Joint from the skeleton''' и выбираем джоинт '''root_stalker'''.&lt;br /&gt;
&lt;br /&gt;
'''11)''' Выбираем '''Tools--&amp;gt;Joint Tool''', ставим галочку на '''Unlink Joint from the skeleton''' и выбираем джоинт '''bip01'''.&lt;br /&gt;
&lt;br /&gt;
'''12)''' Готово! Экспортируем анимацию ('''Expot--&amp;gt;S.T.A.L.K.E.R.''' и выбираете формат skl).&lt;br /&gt;
&lt;br /&gt;
'''13)''' Открываем Actor Editor.&lt;br /&gt;
&lt;br /&gt;
'''14)''' Подгружаем модель из ТЧ.&lt;br /&gt;
&lt;br /&gt;
'''15)''' Во вкладке '''Motions''' выбираем '''Append'''.&lt;br /&gt;
&lt;br /&gt;
'''16)''' Выбираем нашу анимацию (экспортированную из MilkShape 3D).&lt;br /&gt;
&lt;br /&gt;
'''17)''' Проверяем, работает ли она.&lt;br /&gt;
&lt;br /&gt;
'''18)''' Выбираем анимацию и экспортируем ее в формат OMF.&lt;br /&gt;
&lt;br /&gt;
Всё сделано! Теперь при создании нового НПС в Актор Едиторе выбирайте не только '''stalker_animations''' и '''critical_hit_group'''... но и ваш omf-файл.&lt;br /&gt;
&lt;br /&gt;
Для того, что бы анимация распознавалась в самой игре, делаем следующее.&lt;br /&gt;
&lt;br /&gt;
Берем два файла: '''state_mgr_animation_list.script''' и '''state_lib.script'''.&lt;br /&gt;
В первом прописываем нашу анимку вот так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
stulik = { prop = { maxidle = 1,&lt;br /&gt;
sumidle = 1,&lt;br /&gt;
rnd = 100 },&lt;br /&gt;
into = { [0] = {&amp;quot;Название анимации из вашего omf файла&amp;quot;, {a=&amp;quot;wpn_sig220&amp;quot;}, &amp;quot;Название анимации из вашего omf файла&amp;quot;} },&lt;br /&gt;
out = nil,&lt;br /&gt;
idle = { [0] = &amp;quot;Название анимации из вашего omf файла&amp;quot; },&lt;br /&gt;
rnd = nil },&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В '''state_lib.script''' пишем следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
stulik= {weapon = &amp;quot;unstrapped&amp;quot;,&lt;br /&gt;
movement = nil,&lt;br /&gt;
mental = nil,&lt;br /&gt;
bodystate = nil,&lt;br /&gt;
animstate = nil,&lt;br /&gt;
animation = &amp;quot;stulik&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Примечание''': в AE анимации skls подгружаются кнопочкой '''Append''' во вкладке '''Motions'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
Автор Статьи - ЙоЖеГ (АМК-форум).&lt;br /&gt;
&lt;br /&gt;
== Перенос анимаций из ТЧ в ЧН/ЗП ==&lt;br /&gt;
&lt;br /&gt;
'''1)''' Итак, для начала конвертером от bardak сконвертируем нужный вам '''omf'''-файл из ТЧ в формат '''skls'''.&lt;br /&gt;
&lt;br /&gt;
'''2)''' Открываем '''Actor Editor''' и подгружаем любую модель NPC из ТЧ. После чего загружаем полученный skls-файл.&lt;br /&gt;
&lt;br /&gt;
'''3)''' Ищем нужную вам анимацию и запоминаем ее имя.&lt;br /&gt;
&lt;br /&gt;
'''4)''' Конвертером &amp;quot;вытягиваем&amp;quot; нужную вам анимацию из взятого вами omf-файла.&lt;br /&gt;
&lt;br /&gt;
'''5)''' Теперь у вас есть нужная анимация в skl-формате. Открываем MilkShape 3D.&lt;br /&gt;
&lt;br /&gt;
'''6)''' Импортируем любую модель NPC из Чистого Неба/Зова Припяти.&lt;br /&gt;
&lt;br /&gt;
'''7)''' Подгружаем skl-анимацию.&lt;br /&gt;
&lt;br /&gt;
'''8)''' Выбираем вариант работы '''Anim''' (в нижней правой части экрана).&lt;br /&gt;
&lt;br /&gt;
'''9)''' Переходим на начальный кадр.&lt;br /&gt;
&lt;br /&gt;
'''10)''' Выбираем косточку '''bip01''' и перемещаем в абсолютное положение (0, 0, 0).&lt;br /&gt;
&lt;br /&gt;
'''11)''' Фиксируем положение костей нажатием '''CTRL+K'''.&lt;br /&gt;
&lt;br /&gt;
'''12)''' Проверяем работу анимации.&lt;br /&gt;
&lt;br /&gt;
'''13)''' Экспортируем анимацию ('''Expot--&amp;gt;S.T.A.L.K.E.R.''' и выбираете формат skl).&lt;br /&gt;
&lt;br /&gt;
'''14)''' Открываем Actor Editor и подгружаем модель из ЧН/ЗП.&lt;br /&gt;
&lt;br /&gt;
'''15)''' Во вкладке '''Motions''' выбираем '''Append'''.&lt;br /&gt;
&lt;br /&gt;
'''16)''' Выбираем нашу анимацию (экспортированную из MilkShape 3D).&lt;br /&gt;
&lt;br /&gt;
'''17)''' Проверяем, работает ли она.&lt;br /&gt;
&lt;br /&gt;
'''18)''' Подгружаем остальные нужные анимации и экспортируем пакет анимаций в формат omf.&lt;br /&gt;
[[Категория:Wireframe]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7</id>
		<title>MilkShape 3D. Перенос анимации из ЧН/ЗП в ТЧ</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%B8%D0%B7_%D0%A7%D0%9D/%D0%97%D0%9F_%D0%B2_%D0%A2%D0%A7"/>
				<updated>2016-02-06T10:42:21Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: Monolith переименовал страницу MilkShape 3D. Перенос анимации из ЧН/ЗП в ТЧ в MilkShape 3D. Перенос анимации NPC из ЧН/ЗП в ТЧ и обратно: добавлен перено…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[MilkShape 3D. Перенос анимации NPC из ЧН/ЗП в ТЧ и обратно]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC_%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. Перенос анимации NPC из ЧН/ЗП в ТЧ и обратно</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=MilkShape_3D._%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81_%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_NPC_%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>2016-02-06T10:40:25Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: добавлен перенос анимаций NPC из ТЧ в ЧН/ЗП.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос анимаций из ЧН/ЗП в ТЧ ==&lt;br /&gt;
&lt;br /&gt;
'''1)''' Итак, для начала конвертером бардака сконвертируем нужный вам '''omf'''-файл из ЧН в формат '''skls'''.&lt;br /&gt;
&lt;br /&gt;
'''2)''' Открываем '''Actor Editor''' и подгружаем любую модель NPC (можно даже из Теней Чернобыля). После чего загружаем полученный skls-файл.&lt;br /&gt;
&lt;br /&gt;
'''3)''' Ищем нужную вам анимацию и запоминаем ее имя (для верности запишите на бумажке).&lt;br /&gt;
&lt;br /&gt;
'''4)''' Все тем же конвертером бардака &amp;quot;вытягиваем&amp;quot; нужную вам анимацию из взятого вами omf-файла.&lt;br /&gt;
&lt;br /&gt;
'''5)''' Теперь у вас есть нужная анимация в skl-формате. Открываем MilkShape 3D.&lt;br /&gt;
&lt;br /&gt;
'''6)''' Подгружаем модель из Чистого Неба/Зова Припяти.&lt;br /&gt;
&lt;br /&gt;
'''7)''' Подгружаем skl-анимацию. &lt;br /&gt;
&lt;br /&gt;
'''8)''' Выбираем вариант работы '''Anim''' (в нижней правой части экрана).&lt;br /&gt;
&lt;br /&gt;
'''9)''' Фиксируем положение костей нажатием '''CTRL+K'''.&lt;br /&gt;
&lt;br /&gt;
'''10)''' Выбираем '''Tools--&amp;gt;Joint Tool''', ставим галочку на '''Unlink Joint from the skeleton''' и выбираем джоинт '''root_stalker'''.&lt;br /&gt;
&lt;br /&gt;
'''11)''' Выбираем '''Tools--&amp;gt;Joint Tool''', ставим галочку на '''Unlink Joint from the skeleton''' и выбираем джоинт '''bip01'''.&lt;br /&gt;
&lt;br /&gt;
'''12)''' Готово! Экспортируем анимацию ('''Expot--&amp;gt;S.T.A.L.K.E.R.''' и выбираете формат skl).&lt;br /&gt;
&lt;br /&gt;
'''13)''' Открываем Actor Editor.&lt;br /&gt;
&lt;br /&gt;
'''14)''' Подгружаем модель из ТЧ.&lt;br /&gt;
&lt;br /&gt;
'''15)''' Во вкладке '''Motions''' выбираем '''Append'''.&lt;br /&gt;
&lt;br /&gt;
'''16)''' Выбираем нашу анимацию (экспортированную из MilkShape 3D).&lt;br /&gt;
&lt;br /&gt;
'''17)''' Проверяем, работает ли она.&lt;br /&gt;
&lt;br /&gt;
'''18)''' Выбираем анимацию и экспортируем ее в формат OMF.&lt;br /&gt;
&lt;br /&gt;
Всё сделано! Теперь при создании нового НПС в Актор Едиторе выбирайте не только '''stalker_animations''' и '''critical_hit_group'''... но и ваш omf-файл.&lt;br /&gt;
&lt;br /&gt;
Для того, что бы анимация распознавалась в самой игре, делаем следующее.&lt;br /&gt;
&lt;br /&gt;
Берем два файла: '''state_mgr_animation_list.script''' и '''state_lib.script'''.&lt;br /&gt;
В первом прописываем нашу анимку вот так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
stulik = { prop = { maxidle = 1,&lt;br /&gt;
sumidle = 1,&lt;br /&gt;
rnd = 100 },&lt;br /&gt;
into = { [0] = {&amp;quot;Название анимации из вашего omf файла&amp;quot;, {a=&amp;quot;wpn_sig220&amp;quot;}, &amp;quot;Название анимации из вашего omf файла&amp;quot;} },&lt;br /&gt;
out = nil,&lt;br /&gt;
idle = { [0] = &amp;quot;Название анимации из вашего omf файла&amp;quot; },&lt;br /&gt;
rnd = nil },&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В '''state_lib.script''' пишем следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
stulik= {weapon = &amp;quot;unstrapped&amp;quot;,&lt;br /&gt;
movement = nil,&lt;br /&gt;
mental = nil,&lt;br /&gt;
bodystate = nil,&lt;br /&gt;
animstate = nil,&lt;br /&gt;
animation = &amp;quot;stulik&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Примечание''': в AE анимации skls подгружаются кнопочкой '''Append''' во вкладке '''Motions'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
Автор Статьи - ЙоЖеГ (АМК-форум).&lt;br /&gt;
&lt;br /&gt;
== Перенос анимаций из ТЧ в ЧН/ЗП ==&lt;br /&gt;
&lt;br /&gt;
'''1)''' Итак, для начала конвертером от bardak сконвертируем нужный вам '''omf'''-файл из ТЧ в формат '''skls'''.&lt;br /&gt;
&lt;br /&gt;
'''2)''' Открываем '''Actor Editor''' и подгружаем любую модель NPC из ТЧ. После чего загружаем полученный skls-файл.&lt;br /&gt;
&lt;br /&gt;
'''3)''' Ищем нужную вам анимацию и запоминаем ее имя.&lt;br /&gt;
&lt;br /&gt;
'''4)''' Конвертером &amp;quot;вытягиваем&amp;quot; нужную вам анимацию из взятого вами omf-файла.&lt;br /&gt;
&lt;br /&gt;
'''5)''' Теперь у вас есть нужная анимация в skl-формате. Открываем MilkShape 3D.&lt;br /&gt;
&lt;br /&gt;
'''6)''' Импортируем любую модель NPC из Чистого Неба/Зова Припяти.&lt;br /&gt;
&lt;br /&gt;
'''7)''' Подгружаем skl-анимацию.&lt;br /&gt;
&lt;br /&gt;
'''8)''' Выбираем вариант работы '''Anim''' (в нижней правой части экрана).&lt;br /&gt;
&lt;br /&gt;
'''9)''' Переходим на начальный кадр.&lt;br /&gt;
&lt;br /&gt;
'''10)''' Выбираем косточку '''bip01''' и перемещаем в абсолютное положение (0, 0, 0).&lt;br /&gt;
&lt;br /&gt;
'''11)''' Фиксируем положение костей нажатием '''CTRL+K'''.&lt;br /&gt;
&lt;br /&gt;
'''12)''' Проверяем работу анимации.&lt;br /&gt;
&lt;br /&gt;
'''13)''' Экспортируем анимацию ('''Expot--&amp;gt;S.T.A.L.K.E.R.''' и выбираете формат skl).&lt;br /&gt;
&lt;br /&gt;
'''14)''' Открываем Actor Editor и подгружаем модель из ЧН/ЗП.&lt;br /&gt;
&lt;br /&gt;
'''15)''' Во вкладке '''Motions''' выбираем '''Append'''.&lt;br /&gt;
&lt;br /&gt;
'''16)''' Выбираем нашу анимацию (экспортированную из MilkShape 3D).&lt;br /&gt;
&lt;br /&gt;
'''17)''' Проверяем, работает ли она.&lt;br /&gt;
&lt;br /&gt;
'''18)''' Подгружаем остальные нужные анимации и экспортируем пакет анимаций в формат omf.&lt;br /&gt;
[[Категория:Wireframe]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%91%D0%A2%D0%A0</id>
		<title>Логика для БТР</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%91%D0%A2%D0%A0"/>
				<updated>2016-01-17T21:00:34Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Всем доброго времени суток. Для начала я объясню, что такое кастом дата.&lt;br /&gt;
Кастом дата (custom data)- это и есть всё поле &amp;quot;Скрипт&amp;quot;, которое можно увидеть, если открыть all.spawn через Xr Spawner или дописав строку '''custom_data = &amp;lt;&amp;lt;END''' под object_flags, распаковав с помощью acdc.&lt;br /&gt;
&lt;br /&gt;
===100% работающая логика для БТР.===&lt;br /&gt;
&lt;br /&gt;
Теперь, когда Вы знаете, что такое кастом дата можно начать работу.&lt;br /&gt;
&lt;br /&gt;
''Если открыли через Xr Spawner:''&lt;br /&gt;
&lt;br /&gt;
1. В кастом дате прописываете путь до .ltx файла (название у него может быть любое):&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
cfg = scripts\ваше название.ltx&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. В папке '''config\scripts''' создаёте свой .ltx фаил логики, который Вы прописали в кастом дате и пишите туда это:&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_car&lt;br /&gt;
&lt;br /&gt;
[ph_car]&lt;br /&gt;
target = actor ;цель, которую будет атаковать БТР (ГГ).&lt;br /&gt;
; Две нижние строки нашел в логике для БТР из АМК (спасибо).&lt;br /&gt;
fire_range = 80 ;радиус от БТР, в котором цель будет атакована. Дальность стрельбы по русски. Если цель дальше 80 м. стрелять не будет.&lt;br /&gt;
fire_repeat = 3000 ;Время повторения огня. Время измеряется в тысячных секунды, сейчас указано что повторная очередь будет через 3 секунды. 1000 = 1 секунда.&lt;br /&gt;
auto_fire = true ;значение этой строки я не знаю, если её удалить ничего не изменится.(Правка:останавливать ли огонь или стрелять на поражение)&lt;br /&gt;
track_target = true ;значение этой строки я не знаю, если её удалить ничего не изменится.&lt;br /&gt;
on_timer = 4000 | ph_car@4 ;через 4 секунды произойдёт переход на следующую секцию логики.&lt;br /&gt;
&lt;br /&gt;
[ph_car@4]&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Если открыли через acdc:''&lt;br /&gt;
&lt;br /&gt;
1. Под строкой '''object_flags''' напишите следующее:&lt;br /&gt;
&amp;lt;ini&amp;gt;custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[logic]&lt;br /&gt;
cfg = scripts\ваше название.ltx&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. В папке '''config\scripts''' создаёте свой .ltx файл логики, который Вы прописали в кастом дате и пишите туда это:&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = ph_car&lt;br /&gt;
&lt;br /&gt;
[ph_car]&lt;br /&gt;
target = actor ;цель, которую будет атаковать БТР (ГГ).&lt;br /&gt;
; Две нижние строки нашел в логике для БТР из АМК (спасибо).&lt;br /&gt;
fire_range = 80 ;радиус от БТР, в котором цель будет атакована. Дальность стрельбы по русски. Если цель дальше 80 м. стрелять не будет.&lt;br /&gt;
fire_repeat = 3000 ;Время повторения огня. Время измеряется в тысячных секунды, сейчас указано что повторная очередь будет через 3 секунды. 1000 = 1 секунда.&lt;br /&gt;
auto_fire = true ;значение этой строки я не знаю, если её удалить ничего не изменится.(Правка:останавливать ли огонь или стрелять на поражение)&lt;br /&gt;
track_target = true ;значение этой строки я не знаю, если её удалить ничего не изменится.&lt;br /&gt;
on_timer = 4000 | ph_car@4 ;через 4 секунды произойдёт переход на следующую секцию логики.&lt;br /&gt;
&lt;br /&gt;
[ph_car@4]&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Небольшая заметка.===&lt;br /&gt;
&lt;br /&gt;
1. В '''.ltx''' файлах игры можно заметить много комментариев после знака &amp;quot;''';'''&amp;quot;. Дело в том, что после знака &amp;quot;''';'''&amp;quot; игра не видет строку, то есть считает её за пустое место, как в скриптах знак &amp;quot;'''--'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. Если в кастом дате прописать строку '''[spawner]''', то объект заспаунится ТОЛЬКО, если у ГГ есть инфопоршень, который прописывается в {+название инфопоршня}:&lt;br /&gt;
&amp;lt;ini&amp;gt;[spawner]&lt;br /&gt;
cond = {+название инфопоршня}&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Для БТР можно задать путь, куда он поедет. Например, как у БТР на ЧАЭС. Для этого в секции '''[ph_car]''', также друг под другом пишите path_walk = название пути:&lt;br /&gt;
&amp;lt;ini&amp;gt;[ph_car]&lt;br /&gt;
path_walk = название пути&amp;lt;/ini&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
4. Для ЧН/ЗП нужно подключить схему ph_car в файле modules.script по аналогии с ТЧ, добавив строку&lt;br /&gt;
&amp;lt;lua&amp;gt;load_scheme(&amp;quot;ph_car&amp;quot;,        &amp;quot;ph_car&amp;quot;,     stype_item)&amp;lt;/lua&amp;gt;&lt;br /&gt;
В ЗП файла ph_car.script нет, поэтому его нужно взять из ЧН.&lt;br /&gt;
&amp;lt;br /&amp;gt;Либо из ТЧ, но в вызовах функции xr_logic.switch_to_section в строках 929, 1086 и 1095 заменить &amp;quot;self.st&amp;quot; на &amp;quot;self.st.ini&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; Спасибо за внимание. Автор статьи: '''Бага'''.&lt;br /&gt;
&amp;lt;br /&amp;gt; Также отдельное спасибо '''Ork''', за правки в моей статье.&lt;br /&gt;
&amp;lt;br /&amp;gt; Правил: '''V2V3V4''' и '''W_S'''&lt;br /&gt;
[[Категория: A-Life]]&lt;/div&gt;</summary>
		<author><name>Monolith</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%BA%D0%B0%D0%BC%D0%B5%D1%80%D1%8B_(%D0%BA%D0%B0%D1%82%D1%81%D1%86%D0%B5%D0%BD%D1%8B)</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%BA%D0%B0%D0%BC%D0%B5%D1%80%D1%8B_(%D0%BA%D0%B0%D1%82%D1%81%D1%86%D0%B5%D0%BD%D1%8B)"/>
				<updated>2016-01-05T02:26:17Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: Добавлена ссылка на скачивание объекта камеры.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Создание анимации камеры в LevelEditor==&lt;br /&gt;
&lt;br /&gt;
Для создания анимации в библиотеке LE существует специальный объект '''camera''' (''editor/camera''). &lt;br /&gt;
&lt;br /&gt;
[[Image:Камера.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
Установите его в начальную точку будущего пути и поставьте в настройках объекта флажок '''Motionable'''. Теперь камеру можно анимировать.&lt;br /&gt;
&lt;br /&gt;
Команды:&lt;br /&gt;
* '''+K''' - добавить ключевой кадр&lt;br /&gt;
* '''-K''' - удалить ключевой кадр&lt;br /&gt;
* '''Scale''' - масштабировать ключи (?)&lt;br /&gt;
* '''Norm''' - нормализовать ключи (?)&lt;br /&gt;
* '''Clamp''' - фиксация/обрезка анимации по последнему кадру (?)&lt;br /&gt;
&lt;br /&gt;
Проигрывание анимации:&lt;br /&gt;
* '''|&amp;lt;&amp;lt;''' - перейти к начальному кадру&lt;br /&gt;
* '''+&amp;lt;&amp;lt;''' - перейти на один кадр назад&lt;br /&gt;
* '''&amp;lt;&amp;lt;''' - перейти на один ключ назад&lt;br /&gt;
* '''&amp;gt;''' - проиграть анимацию&lt;br /&gt;
* '''||''' - пауза&lt;br /&gt;
* '''&amp;gt;&amp;gt;''' - перейти на один ключ вперёд&lt;br /&gt;
* '''&amp;gt;&amp;gt;+''' - перейти на один кадр вперёд&lt;br /&gt;
* '''&amp;gt;&amp;gt;|''' - перейти к конечному кадру&lt;br /&gt;
&lt;br /&gt;
Флаги:&lt;br /&gt;
* '''Auto Key''' - автоматическая установка ключевых кадров&lt;br /&gt;
* '''Camera View''' - вид из анимируемой камеры&lt;br /&gt;
* '''Start Frame (sec)''' - начальное время в секундах&lt;br /&gt;
* '''End Frame (sec)''' - конечное время в секундах&lt;br /&gt;
* '''Current Frame (sec)''' - время для текущего кадра в секундах&lt;br /&gt;
* '''Change Key Time (sec)''' - менять ключ времени в секундах&lt;br /&gt;
* '''Key Count''' - количество сделанных ключевых кадров&lt;br /&gt;
* '''Length (sec)''' - общая длина анимации&lt;br /&gt;
&lt;br /&gt;
Знаком '''?''' отмечены опции, смысл значение которых досконально не выяснено.&lt;br /&gt;
&lt;br /&gt;
Все параметры приходится вбивать вручную.&lt;br /&gt;
&lt;br /&gt;
Флажок '''Auto Key''' ставить обязательно.&lt;br /&gt;
&lt;br /&gt;
Не забудьте включить отображение пути анимации в настройках LE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Дополнение''' от World_Stalker&lt;br /&gt;
* Чтобы включить отображение пути в '''LE''', в меню выбираем '''Preferences'''  далее '''Objects''' из списка выбираем '''Show''' и ставим галочку напротив '''Animation Path'''&lt;br /&gt;
[[Image:Animation_Path.png]]&lt;br /&gt;
&lt;br /&gt;
Для ТЧ объект '''camera''', необходимо [https://yadi.sk/d/r-cXo2GlCuZxo скачать] (либо перенести с SDK 0.7) и вручную добавить в SDK 0.4&lt;br /&gt;
&lt;br /&gt;
==Логика==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[logic] &lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_info = {!black_screen +agru_nvidia_presentation} sr_cutscene@cam1&lt;br /&gt;
;Здесь мы проверяем инфопоршен agru_nvidia_presentation и функцию&lt;br /&gt;
;black_screen (нет ли черного экрана) и переходим в секцию sr_cutscene@cam1&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene@cam1]&lt;br /&gt;
point = agru_nv_camera_walk&lt;br /&gt;
;точка walk где игрок будет находится после камеры&lt;br /&gt;
look = agru_nv_camera_look&lt;br /&gt;
;точка look куда будет направлена камера игрока после камеры&lt;br /&gt;
cam_effector = scenario_cam\agroprom_underground\camera1_0_904&lt;br /&gt;
;файл камеры и путь к нему&lt;br /&gt;
on_signal = cameff_end | sr_cutscene@cam2&lt;br /&gt;
;сигнал окончание камеры и переход в следующую секцию&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene@cam2]&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если нет следующей секции то пиши '''nil''', а не оставляй секцию пустой и вообще не пиши ее.&lt;br /&gt;
&lt;br /&gt;
== Схема sr_cutscene ==&lt;br /&gt;
Эта схема предназначена для проведения анимации камеры c некоторым эффектом '''(pp_effector)'''.&lt;br /&gt;
Последовательность действий, осуществляемых схемой, состоит из мгновенного перемещения игрока в начало пути '''point''' и ориентации его взгляда на начало пути '''look''', потери управления игроком и начала анимации камеры '''cam_effector''' по завершении которой игрок вновь получает управление.&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[sr_cutscene] &lt;br /&gt;
point = &amp;lt;имя_пути&amp;gt; ;путь в первую точку которого переносится игрок.&lt;br /&gt;
look = &amp;lt;имя_пути&amp;gt; ;путь в первую точку которого смотрит игрок.&lt;br /&gt;
pp_effector = &amp;lt;имя_постэффекта&amp;gt; ;файл, расположенный в папке gamedata\anims\ и содержащий эффект (имя файла пишется без расширения).&lt;br /&gt;
cam_effector = &amp;lt;имя_анимации_камеры&amp;gt; ;файл, расположенный в папке gamedata\anims\camera_effects\ и содержащий анимацию камеры (имя файла пишется без расширения).&lt;br /&gt;
Поддерживается сигнал cameff_end.&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример использования схемы:'''&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[logic] &lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = sr_cutscene&lt;br /&gt;
&lt;br /&gt;
[sr_cutscene]&lt;br /&gt;
point = agr_cutscene_walk&lt;br /&gt;
look = agr_cutscene_look&lt;br /&gt;
cam_effector = agroprom_demo&lt;br /&gt;
on_signal = cameff_end | nil&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: '''gamedata\sсripts\sr_cutscene.sсript'''&lt;br /&gt;
&lt;br /&gt;
Читаем также [[Настройка_логики._Часть_3]]&lt;br /&gt;
&lt;br /&gt;
Дополнил '''World_Stalker''' при поддержке [http://thirteendogs.spaces.ru/mysite/?link_id=55053 ThirteenDogs]&lt;br /&gt;
&lt;br /&gt;
[[Категория:SDK]][[Категория:SDK CS]][[Категория:SDK COP]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%B0</id>
		<title>SoC. Добавляем проводника</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%B0"/>
				<updated>2015-12-13T11:30:24Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: метод set_actor_position принимает только вектор&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Теория ===&lt;br /&gt;
В ТЧ есть единственный момент, когда в результате диалога с НПС, ГГ перемещается. Это диалог с &amp;quot;О-Сознанием&amp;quot;. После отказа от вступления, ГГ перемещается на АЭС2. Если использовать эту функцию, можно создать в ТЧ проводника.&amp;lt;br/&amp;gt;&lt;br /&gt;
''Примечание: Проводник не будет перемещаться вместе с вами, как в ЗП. Вы будете перемещаться в одиночку, как в ЧН.''&amp;lt;br/&amp;gt;&lt;br /&gt;
=== Практика ===&lt;br /&gt;
Для этого:&amp;lt;br/&amp;gt;&lt;br /&gt;
1). Для этого в '''gamedata\scripts''' находим файл '''dialogs_aes.script'''. В нём имеется следующая функция:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function osoznanie_decline(npc, actor)&lt;br /&gt;
db.actor:disable_info_portion(&amp;quot;oso_init_dialog&amp;quot;)&lt;br /&gt;
npc:stop_talk()&lt;br /&gt;
actor:stop_talk()&lt;br /&gt;
xr_effects.enable_ui(db.actor, nil) &lt;br /&gt;
local point = patrol(&amp;quot;mon_jump_aes2_walk&amp;quot;)&lt;br /&gt;
local look = patrol(&amp;quot;mon_jump_aes2_look&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
db.actor:set_actor_position(point:point(0))&lt;br /&gt;
local dir = look:point(0):sub(point:point(0))&lt;br /&gt;
db.actor:set_actor_direction(-dir:getH())&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
2). Копируем эту функцию, допустим, в '''escape_dialog''' из директории '''gamedata\scripts'''&amp;lt;br/&amp;gt;&lt;br /&gt;
3). Обратите внимание на вот этот фрагмент из функции: '''db.actor:disable_info_portion(&amp;quot;oso_init_dialog&amp;quot;)'''. Здесь функция ссылается на инфопоршень, но на Кордоне данный инфопоршень не прописан. &amp;lt;br/&amp;gt;&lt;br /&gt;
4). Тогда переименовываем данный инфопоршень так, как вам удобно, например '''db.actor:disable_info_portion(&amp;quot;esc_init_dialog&amp;quot;)'''. ''Примечание: Название инфопоршня это '''&amp;quot;esc_init_dialog&amp;quot;''' (то ,что за скобками, переименовывать не надо)''. Затем добавляем инфопоршень в файл '''info_l01escape.xml''' из директории '''gamedata\config\gameplay'''. В этом файле добавляем следующее: '''&amp;lt;info_portion id=&amp;quot;esc_init_dialog&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;'''&amp;lt;br/&amp;gt;&lt;br /&gt;
5). Итак, функция есть, инфопоршень тоже есть. Теперь нужны координаты. Обратите внимание на следующий фрагмент функции:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
local point = patrol(&amp;quot;mon_jump_aes2_walk&amp;quot;)&lt;br /&gt;
local look = patrol(&amp;quot;mon_jump_aes2_look&amp;quot;)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Здесь функция ссылается на определённые координаты на АЭС2. Но нам нужны координаты на Кордоне. Для этого открываем '''way_101_escape.ltx''' и там дописываем пути. Например вот так:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
[mon_jump_esc8_look]&lt;br /&gt;
points = p0&lt;br /&gt;
p0:name = wp00&lt;br /&gt;
p0:position = -239.110947,-19.788391,-134.999161&lt;br /&gt;
p0:game_vertex_id = 8&lt;br /&gt;
p0:level_vertex_id = 16191&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[mon_jump_esc8_walk]&lt;br /&gt;
points = p0&lt;br /&gt;
p0:name = wp00&lt;br /&gt;
p0:position = -238.017761,-19.888292,-140.161987&lt;br /&gt;
p0:game_vertex_id = 47&lt;br /&gt;
p0:level_vertex_id = 17468&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Всё пути есть. Только теперь в функции, переименуйте фрагмент:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
local point = patrol(&amp;quot;mon_jump_aes2_walk&amp;quot;)&lt;br /&gt;
local look = patrol(&amp;quot;mon_jump_aes2_look&amp;quot;)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На фрагмент:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
local point = patrol(&amp;quot;mon_jump_esc8_walk&amp;quot;)&lt;br /&gt;
local look = patrol(&amp;quot;mon_jump_esc8_look&amp;quot;)&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь осталось только привязать всё это к диалогу. Я взял диалог с Кузнецовым.&amp;lt;br/&amp;gt;&lt;br /&gt;
Открываем файл dialogs_escape.xml и находим следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
&amp;lt;dialog id=&amp;quot;esc_bridge_soldiers_start&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;precondition&amp;gt;dialogs.is_not_wounded&amp;lt;/precondition&amp;gt;&lt;br /&gt;
&amp;lt;phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;esc_bridge_soldiers_start_12&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;13&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это фраза &amp;quot;Мне надо дальше&amp;quot;. Сюда вставляем активизацию нашей функции. Получется следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
&amp;lt;dialog id=&amp;quot;esc_bridge_soldiers_start&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;precondition&amp;gt;dialogs.is_not_wounded&amp;lt;/precondition&amp;gt;&lt;br /&gt;
&amp;lt;phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;esc_bridge_soldiers_start_12&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;action&amp;gt;escape_dialog.osoznanie_decline&amp;lt;/action&amp;gt; Здесь следующая структура: &amp;lt;action&amp;gt;Название_скрипта. Название_функции&amp;lt;/action&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;13&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вот, собственно и всё. Теперь после фразы &amp;quot;Мне надо дальше&amp;quot; вы переместитесь к бункеру Сидоровича.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt; &lt;br /&gt;
Я делал также но чуток исправил:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function osoznanie_decline(npc, actor)&lt;br /&gt;
--Поршень не  нужен, он всёравно удаляется&lt;br /&gt;
npc:stop_talk()&lt;br /&gt;
actor:stop_talk()&lt;br /&gt;
xr_effects.enable_ui(db.actor, nil) &lt;br /&gt;
local point = patrol(&amp;quot;mon_jump_aes2_walk&amp;quot;)&lt;br /&gt;
local look = point -- указать можно только один путь&lt;br /&gt;
&lt;br /&gt;
db.actor:set_actor_position(point:point(0))&lt;br /&gt;
local dir = look:point(0):sub(point:point(0))&lt;br /&gt;
db.actor:set_actor_direction(-dir:getH())&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А я делал еще легче - вот так&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function osoznanie_decline(npc, actor)&lt;br /&gt;
npc:stop_talk()&lt;br /&gt;
actor:stop_talk()&lt;br /&gt;
db.actor:set_actor_position(vector():set(позиция X,позиция Y,позиция Z)) -- Вместо надписей пишем координаты&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Собственно перенос на новую локацию отсутствует но места займет меньше. AntdiabloN&lt;br /&gt;
&lt;br /&gt;
Автор: '''mma'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Дооформил: '''DarkST'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Подправил: '''Бродяга'''&lt;br /&gt;
Представил свой вариант '''AntdiabloN'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D1%80%D0%BE%D0%BD%D0%B8</id>
		<title>SoC. Добавление брони</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D1%80%D0%BE%D0%BD%D0%B8"/>
				<updated>2015-07-13T17:08:35Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном примере мы будем добавлять новый костюм со 100% защитой от всего =D&amp;lt;br /&amp;gt;&lt;br /&gt;
Совершенно новый костюм добавлять не будем, возьмём за основу существующий костюм сталкера.&amp;lt;br /&amp;gt;&lt;br /&gt;
Нам понадобится любой текстовый редактор ([http://notepad-plus.sourceforge.net/ru/site.htm Notepad++], Блокнот, WordPad или что там у Вас),&amp;lt;br /&amp;gt;&lt;br /&gt;
Фотошоп + [https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop dds плагин] (для работы с текстурами и иконками) и файлы игры:&lt;br /&gt;
&lt;br /&gt;
'''gamedata\config\misc\outfit.ltx'''    — здесь добавим наш костюм и его хар-ки &lt;br /&gt;
&lt;br /&gt;
'''gamedata\config\misc\trader_trader.ltx'''    — здесь выдадим его торговцу на продажу &lt;br /&gt;
&lt;br /&gt;
'''gamedata\config\text\rus\string_table_outfit.xml'''    — здесь впишем название и описание костюма в игре&lt;br /&gt;
&lt;br /&gt;
Итак, по порядку. Открываем при помощи текстового редактора файл outfit.ltx.&amp;lt;br /&amp;gt;&lt;br /&gt;
Берём любой костюм, копируем всю его секцию и вставляем, например, в конец файла.&lt;br /&gt;
Вот теперь и приступим:&lt;br /&gt;
&amp;lt;ini&amp;gt;;---------------------------------------------------------------------------------------------&lt;br /&gt;
;		КОСТЮМ ЧАКА НОРРИСА&lt;br /&gt;
;---------------------------------------------------------------------------------------------&lt;br /&gt;
[chuck_norris_outfit]:outfit_base    ; имя секции нашей брони&lt;br /&gt;
GroupControlSection	= spawn_group&lt;br /&gt;
discovery_dependency =&lt;br /&gt;
$spawn 		= &amp;quot;outfit\chuck_norris_outfit&amp;quot;&lt;br /&gt;
;$prefetch 	= 32&lt;br /&gt;
class		= E_STLK&lt;br /&gt;
cform           = skeleton&lt;br /&gt;
visual          = equipments\novice_suit      ; модель костюма, лежащего на земле (обычно в папке gamedata\meshes\equipments)&lt;br /&gt;
actor_visual	= actors\hero\stalker_novice.ogf ; модель игрока, одетого в костюм (обычно в папке gamedata\meshes\actor\hero)&lt;br /&gt;
&lt;br /&gt;
ef_equipment_type = 3 ; предпочтительность одевания брони НПС (не используется)&lt;br /&gt;
&lt;br /&gt;
inv_name	  = chuck_norris_outfit ; ссылка на строку, содержащую название костюма в файле string_table_outfit.xml&lt;br /&gt;
inv_name_short    = chuck_norris_outfit ; ссылка на строку с названием костюма на земле&lt;br /&gt;
description       = chuck_norris_outfit_desc ; ссылка на строку  описанием костюма&lt;br /&gt;
inv_weight        = 2.0 ; вес костюма в кг&lt;br /&gt;
inv_grid_x        = 12 ; координата X левого верхнего угла иконки инвентаря из файла gamedata\textures\ui\ui_icon_equipment.dds&lt;br /&gt;
inv_grid_y        = 21 ; координата Y левого верхнего угла иконки инвентаря из файла gamedata\textures\ui\ui_icon_equipment.dds&lt;br /&gt;
inv_grid_width    = 2 ; размер иконки по оси X&lt;br /&gt;
inv_grid_height   = 2 ; размер иконки по оси Y&lt;br /&gt;
full_icon_name    = npc_icon_novice_outfit ; имя иконки&lt;br /&gt;
                                                 &lt;br /&gt;
cost		  = 100000 ; базовая цена костюма&lt;br /&gt;
slot		  = 6 ; слот, на который цепляем костюм (для брони всегда 6)&lt;br /&gt;
full_scale_icon   = 6,6 ; иконка игрока в полный рост в инвентаре (обычно из файла gamedata\textures\ui\ui_icons_***.dds)&lt;br /&gt;
nightvision_sect  = effector_nightvision_good ; тип ПНВ (смотрим секции [effector_nightvision_***]&lt;br /&gt;
                                              ; в файле gamedata\config\misc\postprocess.ltx)&lt;br /&gt;
                                              ; если ПНВ не нужно, то убираем/комментируем строчку&lt;br /&gt;
&lt;br /&gt;
sprint_allowed = true ; можно ли бегать в костюме (true) или нет (false)&lt;br /&gt;
bones_koeff_protection = exo_helmet_damage&lt;br /&gt;
additional_inventory_weight  = 1000 ; на сколько увеличится максимальный переносимый вес в кг&lt;br /&gt;
additional_inventory_weight2 = 1000 ; на сколько увеличится максимальный переносимый вес в кг&lt;br /&gt;
immunities_sect   = sect_chuck_norris_outfit_immunities ; ссылка на секцию износостойкости костюма (см.ниже)&lt;br /&gt;
&lt;br /&gt;
; показатели защиты игрока нашим костюмом (от 0 (это 0%) до 0.99 (это 100%))&lt;br /&gt;
burn_protection          = 0.99 ; ожог&lt;br /&gt;
strike_protection        = 0.99 ; удар&lt;br /&gt;
shock_protection         = 0.99 ; электрошок&lt;br /&gt;
wound_protection         = 0.99 ; разрыв&lt;br /&gt;
radiation_protection     = 0.99 ; радиация&lt;br /&gt;
telepatic_protection     = 0.99 ; телепатия&lt;br /&gt;
chemical_burn_protection = 0.99 ; химический ожог&lt;br /&gt;
explosion_protection     = 0.99 ; взрыв&lt;br /&gt;
fire_wound_protection    = 0.99 ; пулестойкость&lt;br /&gt;
&lt;br /&gt;
[sect_chuck_norris_outfit_immunities] ; секция износостойкости самого костюма&lt;br /&gt;
                                      ; от 0 (в огне не горит, в воде не тонет) до 1 (лучше на него даже не дышать)&lt;br /&gt;
burn_immunity		= 0.0&lt;br /&gt;
strike_immunity		= 0.0&lt;br /&gt;
shock_immunity		= 0.0&lt;br /&gt;
wound_immunity		= 0.0&lt;br /&gt;
radiation_immunity	= 0.0&lt;br /&gt;
telepatic_immunity	= 0.0&lt;br /&gt;
chemical_burn_immunity	= 0.0&lt;br /&gt;
explosion_immunity	= 0.0&lt;br /&gt;
fire_wound_immunity	= 0.0&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее откроем '''string_table_outfit.xml'''&amp;lt;br /&amp;gt;&lt;br /&gt;
И в конце, но ДО закрывающего тега '''&amp;lt;/string_table&amp;gt;''' допишем следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;string id=&amp;quot;chuck_norris_outfit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Одёжка Чака Норриса&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;string id=&amp;quot;chuck_norris_outfit_desc&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;text&amp;gt;Бывшие портки Чака Норриса.\nТеперь победить вас может только сам Чак Норрис.&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/string&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее открываем '''файл trader_trader.ltx''' - это файл конфигурации магазина Cидоровича.&amp;lt;br /&amp;gt;&lt;br /&gt;
Находим секцию '''[supplies_start]'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Добавляем строчку chuck_norris_outfit	= 1,  1 (в запасах на начало игры появится 1 костюм с вероятностью 100%)&lt;br /&gt;
&lt;br /&gt;
Крутим вниз до '''[trader_start_sell]'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Добавляем строчку chuck_norris_outfit	= 1,  1 (цена костюма будет ровно той, что прописана в конфиге)&lt;br /&gt;
&lt;br /&gt;
Если хотим свою иконку костюму, смотрим [http://stalkerin.gameru.net/wiki/index.php/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80#.D0.98.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B8.D0.BA.D0.BE.D0.BD.D0.BE.D0.BA_.D0.BF.D1.80.D0.B5.D0.B4.D0.BC.D0.B5.D1.82.D0.BE.D0.B2 тут].&lt;br /&gt;
&lt;br /&gt;
После всего этого кидаем всё по папочкам в gamedata и начинаем новую игру.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D1%8B</id>
		<title>Таймеры</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D1%8B"/>
				<updated>2015-07-09T17:52:05Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: /* Но есть способ проще */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Для чего нужны таймеры?&lt;br /&gt;
Предположим, вы хотите, чтобы Меченому после диалога пришло сообщение на ПДА, но не сразу, а для придания большего реализма с задержкой в ~7-8 секунд. В таком случае, если вы читаете эту статью, то у вас есть:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- Готовый диалог&amp;lt;br&amp;gt;&lt;br /&gt;
- Необходимая функция в свежем скриптовом файле.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Для того, чтобы создать таймер, необходимо открыть файл с вашими скриптами и написать следующее :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;local iTimer&lt;br /&gt;
function function_onetimer()&lt;br /&gt;
    iTimer = time_global() + 6*1000 &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function timer_5_minutes()&lt;br /&gt;
    if iTimer and iTimer &amp;lt; time_global() then &lt;br /&gt;
        iTimer = nil &lt;br /&gt;
        wolfscripts.humorist_killed_msg() &lt;br /&gt;
    end&lt;br /&gt;
end &amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разъясню: &lt;br /&gt;
&amp;lt;lua&amp;gt;function function_onetimer() — название функции (это главная функция и её будем вызывать из диалога)&lt;br /&gt;
    iTimer = time_global() + 6*1000 -- задержка по времени (6 секунд)&lt;br /&gt;
function timer_5_minutes() — собственно, настройки таймера&lt;br /&gt;
        iTimer = nil       -- отключаем таймер&lt;br /&gt;
        wolfscripts.humorist_killed_msg() -- название скрипта.название функции&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тут, вроде бы, всё просто. Но таймер просто так не заработает. Лезем в '''bind_stalker.script''' и в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function actor_binder:update(delta)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;название_вашего_скрипта.timer_5_minutes()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вуаля, теперь всё работает. Спасибо за внимание.&lt;br /&gt;
Да, кстати, из диалога вызываем функцию '''function_onetimer'''.&lt;br /&gt;
&lt;br /&gt;
=== Но есть способ проще ===&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
   function action_timer()&lt;br /&gt;
      .... ваш код по истечению таймера ....&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   function start_timer()&lt;br /&gt;
      -- взводим таймер на 10 секунд&lt;br /&gt;
      local iTimer = time_global() + 10000&lt;br /&gt;
&lt;br /&gt;
      -- функция ожидания истечения таймера&lt;br /&gt;
      local function check_timer()&lt;br /&gt;
         return time_global() &amp;gt; iTimer&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      -- ставим её на апдейт&lt;br /&gt;
      level.add_call(check_timer, action_timer)&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По сути, это то же самое, но реализация проще. Все умещается в одном файле, без редактирования '''bind_stalker.script'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC_%D1%85%D1%83%D0%B4_%D0%BC%D0%B0%D1%81%D0%BA%D0%B8</id>
		<title>SoC. Создаем худ маски</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC_%D1%85%D1%83%D0%B4_%D0%BC%D0%B0%D1%81%D0%BA%D0%B8"/>
				<updated>2015-06-09T14:25:41Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: /* Работа со скриптами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Теория===&lt;br /&gt;
Мне кажется многие задавались вопросом &amp;quot;Как же создать худ маски&amp;quot;?&lt;br /&gt;
Немного пораздумав, я создал функцию, которая крепит текстуру к определенному костюму.&lt;br /&gt;
&lt;br /&gt;
Опытным '''модмейкерам''' может показаться моя функция усложненной, но главное, что все '''работает и не вылетает'''!&lt;br /&gt;
===Практика===&lt;br /&gt;
&lt;br /&gt;
===Работа со скриптами===&lt;br /&gt;
&lt;br /&gt;
Первым делом в директории '''gamedata\scripts''' создайте файл с названием '''xr_mask.script'''&lt;br /&gt;
&lt;br /&gt;
Открываем его пишем:&lt;br /&gt;
&amp;lt;lua&amp;gt;local mask_section = {&lt;br /&gt;
[&amp;quot;stalker_outfit&amp;quot;] = true,&lt;br /&gt;
[&amp;quot;killer_outfit&amp;quot;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function hud_gas()&lt;br /&gt;
   local outfit = db.actor:item_in_slot(6)&lt;br /&gt;
    if outfit and mask_section[ outfit:section() ] then&lt;br /&gt;
            get_hud():AddCustomStatic(&amp;quot;hud_gasmask&amp;quot;, true)&lt;br /&gt;
    else&lt;br /&gt;
            get_hud():RemoveCustomStatic(&amp;quot;hud_gasmask&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь поясню:&lt;br /&gt;
&amp;lt;lua&amp;gt;local mask_section = { -- таблица с секциями костюмов, которым добавляем худ маски&lt;br /&gt;
[&amp;quot;stalker_outfit&amp;quot;] = true,&lt;br /&gt;
[&amp;quot;killer_outfit&amp;quot;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function hud_gas()&lt;br /&gt;
   local outfit = db.actor:item_in_slot(6) -- переменная костюма&lt;br /&gt;
    if   outfit -- одет костюм&lt;br /&gt;
         and -- и&lt;br /&gt;
         mask_section[ outfit:section() ] -- нужна маска &lt;br /&gt;
    then&lt;br /&gt;
            get_hud():AddCustomStatic(&amp;quot;hud_gasmask&amp;quot;, true) -- добавляем статик с текстурой маски&lt;br /&gt;
    else -- иначе&lt;br /&gt;
            get_hud():RemoveCustomStatic(&amp;quot;hud_gasmask&amp;quot;) -- удаляем статик маски&lt;br /&gt;
    end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь зайдем в '''bind_stalker.script''', который находится в '''gamedata\scripts''',&lt;br /&gt;
найдем функцию:&lt;br /&gt;
function actor_binder:update(delta) &lt;br /&gt;
и после пишем: xr_mask.hud_gas() &lt;br /&gt;
в итоге:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function actor_binder:update(delta)&lt;br /&gt;
        xr_mask.hud_gas()&lt;br /&gt;
	object_binder.update(self, delta)&lt;br /&gt;
        local time = time_global()&lt;br /&gt;
        game_stats.update (delta, self.object)&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Работа с XML - описателем===&lt;br /&gt;
&lt;br /&gt;
Итак, заходим в директорию '''gamedata\config\ui''', находим файл с названием '''ui_custom_msgs''', открываем его &lt;br /&gt;
и в самом конце перед строкой: &amp;lt;/header&amp;gt; пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;hud_gasmask x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot; height=&amp;quot;768&amp;quot; stretch=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;texture&amp;gt;hud\hud_gas&amp;lt;/texture&amp;gt;&lt;br /&gt;
  &amp;lt;/hud_gasmask&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь поясню:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;hud_gasmask x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot; height=&amp;quot;768&amp;quot; stretch=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;texture&amp;gt;hud\hud_gas&amp;lt;/texture&amp;gt; -- путь к файлу с текстурой маски. Посмотрите внимательно в скрипте мы указывали 'hud_gasmask'&lt;br /&gt;
  &amp;lt;/hud_gasmask&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Текстура===&lt;br /&gt;
&lt;br /&gt;
Теперь заходим в '''gamedata\textures\ui''', находим файл с названием '''ui_mainmenu.dds'''.&lt;br /&gt;
Копируем его, заходим в '''gamedata\textures\hud''' вставляем его и переминуем в '''hud_gas.dds'''&lt;br /&gt;
Открываем программой '''Adobe Photoshop''' и рисуем подходящую для вас маску.&lt;br /&gt;
Как работать с текстурами описано в этой статье:&lt;br /&gt;
&lt;br /&gt;
http://www.stalkerin.gameru.net/wiki/index.php/Изменение%20текстур&lt;br /&gt;
&lt;br /&gt;
Вот и все! Начинаем новую игру, ищем костюм сталкера или наемника, надеваем и видим вашу текстуру.&lt;br /&gt;
&lt;br /&gt;
===Автор: Weanchester===&lt;br /&gt;
[[Категория:Скрипты]] [[Категория:Texturing]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC_%D1%85%D1%83%D0%B4_%D0%BC%D0%B0%D1%81%D0%BA%D0%B8</id>
		<title>SoC. Создаем худ маски</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC_%D1%85%D1%83%D0%B4_%D0%BC%D0%B0%D1%81%D0%BA%D0%B8"/>
				<updated>2015-06-09T14:24:51Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: /* Работа с XML - описателем */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Теория===&lt;br /&gt;
Мне кажется многие задавались вопросом &amp;quot;Как же создать худ маски&amp;quot;?&lt;br /&gt;
Немного пораздумав, я создал функцию, которая крепит текстуру к определенному костюму.&lt;br /&gt;
&lt;br /&gt;
Опытным '''модмейкерам''' может показаться моя функция усложненной, но главное, что все '''работает и не вылетает'''!&lt;br /&gt;
===Практика===&lt;br /&gt;
&lt;br /&gt;
===Работа со скриптами===&lt;br /&gt;
&lt;br /&gt;
Первым делом в директории '''gamedata\scripts''' создайте файл с названием '''xr_mask.script'''&lt;br /&gt;
&lt;br /&gt;
Открываем его пишем:&lt;br /&gt;
&amp;lt;lua&amp;gt;function hud_gas()&lt;br /&gt;
   local slot_stalker = db.actor:item_in_slot(6)&lt;br /&gt;
   local object_1 = db.actor:object(&amp;quot;stalker_outfit&amp;quot;)&lt;br /&gt;
   local slot_killer = db.actor:item_in_slot(6)&lt;br /&gt;
   local object_2 = db.actor:object(&amp;quot;killer_outfit&amp;quot;)&lt;br /&gt;
    if slot_stalker and slot_stalker:section() == &amp;quot;stalker_outfit&amp;quot; and object_1 ~= nil or&lt;br /&gt;
    slot_killer and slot_killer:section() == &amp;quot;killer_outfit&amp;quot; and object_2 ~= nil then&lt;br /&gt;
            local hud = get_hud()&lt;br /&gt;
            local custom_static = hud:GetCustomStatic(&amp;quot;hud_gas&amp;quot;)&lt;br /&gt;
            if custom_static == nil then&lt;br /&gt;
                        hud:AddCustomStatic(&amp;quot;hud_gas&amp;quot;, true)&lt;br /&gt;
            end&lt;br /&gt;
     else&lt;br /&gt;
            local hud = get_hud()&lt;br /&gt;
            local custom_static = hud:GetCustomStatic(&amp;quot;hud_gas&amp;quot;)&lt;br /&gt;
            if custom_static ~= nil then&lt;br /&gt;
                        hud:RemoveCustomStatic(&amp;quot;hud_gas&amp;quot;, false)&lt;br /&gt;
            end&lt;br /&gt;
      end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь поясню:&lt;br /&gt;
&amp;lt;lua&amp;gt;function hud_gas() -- функция&lt;br /&gt;
   local slot_stalker = db.actor:item_in_slot(6) -- переменная костюма&lt;br /&gt;
   local object_1 = db.actor:object(&amp;quot;stalker_outfit&amp;quot;) -- переменная объекта&lt;br /&gt;
   local slot_killer = db.actor:item_in_slot(6) -- переменная костюма&lt;br /&gt;
   local object_2 = db.actor:object(&amp;quot;killer_outfit&amp;quot;) -- переменная объекта&lt;br /&gt;
    if slot_stalker and slot_stalker:section() == &amp;quot;stalker_outfit&amp;quot; and object_1 ~= nil or&lt;br /&gt;
    slot_killer and slot_killer:section() == &amp;quot;killer_outfit&amp;quot; and object_2 ~= nil then -- проверяем надет ли костюм сталкера\наемника&lt;br /&gt;
            local hud = get_hud() -- худ&lt;br /&gt;
            local custom_static = hud:GetCustomStatic(&amp;quot;hud_gas&amp;quot;)&lt;br /&gt;
            if custom_static == nil then -- если худа нет, выдаем, если одет костюм&lt;br /&gt;
                        hud:AddCustomStatic(&amp;quot;hud_gas&amp;quot;, true)&lt;br /&gt;
            end&lt;br /&gt;
     else&lt;br /&gt;
            local hud = get_hud()&lt;br /&gt;
            local custom_static = hud:GetCustomStatic(&amp;quot;hud_gas&amp;quot;)&lt;br /&gt;
            if custom_static ~= nil then -- если худ есть, убираем при смене костюма&lt;br /&gt;
                        hud:RemoveCustomStatic(&amp;quot;hud_gas&amp;quot;, false)&lt;br /&gt;
            end&lt;br /&gt;
      end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь зайдем в '''bind_stalker.script''', который находится в '''gamedata\scripts''',&lt;br /&gt;
найдем функцию:&lt;br /&gt;
function actor_binder:update(delta) &lt;br /&gt;
и после пишем: xr_mask.hud_gas() &lt;br /&gt;
в итоге:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function actor_binder:update(delta)&lt;br /&gt;
        xr_mask.hud_gas()&lt;br /&gt;
	object_binder.update(self, delta)&lt;br /&gt;
        local time = time_global()&lt;br /&gt;
        game_stats.update (delta, self.object)&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Работа с XML - описателем===&lt;br /&gt;
&lt;br /&gt;
Итак, заходим в директорию '''gamedata\config\ui''', находим файл с названием '''ui_custom_msgs''', открываем его &lt;br /&gt;
и в самом конце перед строкой: &amp;lt;/header&amp;gt; пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;hud_gasmask x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot; height=&amp;quot;768&amp;quot; stretch=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;texture&amp;gt;hud\hud_gas&amp;lt;/texture&amp;gt;&lt;br /&gt;
  &amp;lt;/hud_gasmask&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь поясню:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;hud_gasmask x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot; width=&amp;quot;1024&amp;quot; height=&amp;quot;768&amp;quot; stretch=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;texture&amp;gt;hud\hud_gas&amp;lt;/texture&amp;gt; -- путь к файлу с текстурой маски. Посмотрите внимательно в скрипте мы указывали 'hud_gasmask'&lt;br /&gt;
  &amp;lt;/hud_gasmask&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Текстура===&lt;br /&gt;
&lt;br /&gt;
Теперь заходим в '''gamedata\textures\ui''', находим файл с названием '''ui_mainmenu.dds'''.&lt;br /&gt;
Копируем его, заходим в '''gamedata\textures\hud''' вставляем его и переминуем в '''hud_gas.dds'''&lt;br /&gt;
Открываем программой '''Adobe Photoshop''' и рисуем подходящую для вас маску.&lt;br /&gt;
Как работать с текстурами описано в этой статье:&lt;br /&gt;
&lt;br /&gt;
http://www.stalkerin.gameru.net/wiki/index.php/Изменение%20текстур&lt;br /&gt;
&lt;br /&gt;
Вот и все! Начинаем новую игру, ищем костюм сталкера или наемника, надеваем и видим вашу текстуру.&lt;br /&gt;
&lt;br /&gt;
===Автор: Weanchester===&lt;br /&gt;
[[Категория:Скрипты]] [[Категория:Texturing]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=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=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>2015-05-12T17:08:08Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: /* Инструменты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
 |''Автор:'' Задорожный Александр ('''Scarabay''')&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Часть 1. Переносим в ТЧ=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В этой статье я расскажу вам, как перенести модели НПС из ЧН/ЗП в ТЧ, и при этом они будут использовать стандартные анимации из ТЧ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Инструменты==&lt;br /&gt;
&lt;br /&gt;
Прежде всего нам понадобятся:&lt;br /&gt;
&lt;br /&gt;
'''1.''' [http://www.milkshape3d.com/ms3d/download.html '''MilkShape 3D 1.8.4''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.''' [http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewtheoned&amp;amp;lid=377 '''Плагин импорта/экспорта моделей формата S.T.A.L.K.E.R.''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.1''' [https://yadi.sk/d/q04vZyXIgRA9U '''Более свежая версия плагинов от 11/05/2015''']&amp;lt;br /&amp;gt;&lt;br /&gt;
Изменения:&amp;lt;br /&amp;gt;&lt;br /&gt;
- при импорте модели ТЧ импортер предлагает сконвертировать её в версию для ЧН/ЗП и наоборот. Для переноса остаётся лишь сгладить модель (при необходимости) и экспортировать в object.&amp;lt;br /&amp;gt;&lt;br /&gt;
- при импорте информация о модели (юзердата, пути к текстурам, шейдеры, материалы) пишутся в комментарии элементов модели.&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавлен плагин X-Ray Model Information для меню Tools. Пишет информацию о импортированной модели в лог и открывает файл лога xrayMS3DInfo.log&amp;lt;br /&amp;gt;&lt;br /&gt;
- при экспорте модели NPC кости автоматически раскидываются по bones partitions.&amp;lt;br /&amp;gt;&lt;br /&gt;
- при экспорте расширение файла добавляется автоматически, в соответствии с выбранным фильтром типа файла (object, skl).&amp;lt;br /&amp;gt;&lt;br /&gt;
'''3.''' [http://files.gsc-game.com/st/xray-sdk-setup-v0.4.exe '''X-Ray SDK 0.4'''] с установленным [http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=getit&amp;amp;lid=361 '''SDK Update 0.4'''] + &lt;br /&gt;
'''4.''' [http://yadi.sk/d/athre4RXGbXM3'''Shoc.bones''']&lt;br /&gt;
&lt;br /&gt;
Если у вас уже все установлено и настроено как надо, то приступим к работе с моделями.&lt;br /&gt;
&lt;br /&gt;
==Работа в MilkShape==&lt;br /&gt;
&lt;br /&gt;
'''1.''' Запускаем MilkShape. Жмем '''File--&amp;gt;Import--&amp;gt;S.T.A.L.K.E.R.'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.''' Далее в открывшемся окне ищем нужную нам модель (для примера я выбрал модель Холода из ЧН) и нажимаем '''Открыть'''.&lt;br /&gt;
После загрузки модели видим примерно такую картинку:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Все дело в том, что у моделей NPC из ЧН и ЗП '''47 суставов''' (Joint-ов), в отличие от моделей NPC ТЧ, у которых их всего 45. Это нам и нужно исправить, т.е. удалить два лишних сустава (джойнта), которые называются '''root_stalker''' и '''bip01'''.&lt;br /&gt;
&lt;br /&gt;
'''3.''' Чтобы это сделать, на верхней панели жмем кнопку '''Tools''' и из раскрывшегося списка выбираем '''Joint Tool'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 2.png|left|frame|Окно '''Joint Tool''']]&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 3.png|right|frame|Вкладка '''Joints''']]&lt;br /&gt;
&lt;br /&gt;
'''4.''' Отмечаем строчку '''Unlink Joint from the skeleton''' (1), выбираем из списка наш первый джойнт '''root_stalker''' (2) и жмем '''ОК''' (3). Повторяем данную операцию и со вторым джойнтом '''bip01'''.&lt;br /&gt;
&lt;br /&gt;
'''5.''' На панели  справа открываем вкладку '''Joints''' (1), дважды кликаем левой кнопкой мыши на джойнте '''root_stalker''' (2) и удаляем его клавишей '''Delete''' на клавиатуре. Повторяем данную операцию с джойнтом '''bip01'''.&lt;br /&gt;
&lt;br /&gt;
'''6.''' Теперь надо сохранить нашу модель в формат, понятный X-Ray SDK. Для этого идем сюда: '''File--&amp;gt;Export--&amp;gt;S.T.A.L.K.E.R.''' и сохраняем модель под любым именем.&lt;br /&gt;
&lt;br /&gt;
'''''Внимание! Нужно явно задать расширение файла, т.е. название должно быть таким: ваше_название.object, иначе модель просто не сохранится.'''''&lt;br /&gt;
&lt;br /&gt;
Все! Работа с моделью в '''MilkShape''' закончена. Можете закрыть программу.&lt;br /&gt;
Переходим ко второй части статьи, а именно настройки модели в '''Actor Editor''', который входит в состав '''X-Ray SDK'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
==Настройка модели в Actor Editor==&lt;br /&gt;
&lt;br /&gt;
Не забываем скопировать необходимые текстуры (в СДК и ваш мод). &lt;br /&gt;
&lt;br /&gt;
'''1.''' Запустите '''Actor Editor'''. Теперь загрузим нашу модель для дальнейших манипуляций. Жмем '''File--&amp;gt;Load…''', ищем модель в папке '''import''' (у меня '''holod.object''') и жмем '''Открыть'''. После загрузки видим примерно такую картину:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 4.png|800px]]&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 5.png|left]]&lt;br /&gt;
&lt;br /&gt;
'''2.''' Переходим непосредственно к настройке. Справа во вкладке '''Object Items''' выделяем строку '''Object''' (1) и переходим во вкладку '''Item Properties'''. Ставим галочку напротив '''Make Progressive''' (4). Тянем полоску до конца и в самом низу кликаем на три маленькие точки напротив '''User Data''' (2). Появится окно, в которое нужно вписать строчку типа '''#include &amp;quot;models\capture\файл_настроек.ltx&amp;quot;''' (у меня это '''#include &amp;quot;models\capture\stalker_nebo.ltx&amp;quot;''', а на скрине я ошибся) и жмем '''ОК'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 6.png]]&lt;br /&gt;
&lt;br /&gt;
'''3.''' Далее идем в '''Motions''' (3) и в строке '''Motion reference''' также кликаем по трем точкам. В появившемся окне '''Select Game Object Motions''' ставим галочку напротив '''stalker_animation''' (1), а также отмечаем любую '''critical_hit_grup''' (всего можно поставить 4 галочки) и '''ОК''' (2), тем самым назначая модели стандартные анимации ТЧ.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 7.png|right]]&lt;br /&gt;
&lt;br /&gt;
'''4.''' Настала очередь настройки костей ('''Bones'''). Это нужно для того, чтобы при смерти у NPC не выворачивались части тела под неестественным углом. Настройки костей для моделей из ЗП и ЧН одинаковые.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 8.png|left]]&lt;br /&gt;
&lt;br /&gt;
Очень много людей часто жалуются на то, что в игре NPC с нашей новой моделью становится бессмертным и с ним нельзя поговорить. Поэтому я облегчу вам работу и выкладываю готовые настройки вместе с этим тутором. Итак, выделяем '''Bones''' (1), потом нажимаем '''Load''' (2) и указываем файл настроек '''shoc.bones''' и жмем '''ОК'''.&lt;br /&gt;
&lt;br /&gt;
Теперь осталось только экспортировать модель в формат '''.ogf'''. Для этого идем '''File--&amp;gt;Export--&amp;gt;Export OGF…''' и сохраняем в любое место с любым названием.&lt;br /&gt;
&lt;br /&gt;
Поздравляю! Вы только что перенесли модели ЧН/ЗП в ТЧ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Часть 2. Переносим в ЗП/ЧН=&lt;br /&gt;
&lt;br /&gt;
==Инструменты==&lt;br /&gt;
&lt;br /&gt;
'''1.''' [http://www.milkshape3d.com/ms3d/download.html '''MilkShape 3D 1.8.4''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.''' [http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewtheoned&amp;amp;lid=377 '''Плагин импорта/экспорта моделей формата S.T.A.L.K.E.R.''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.1''' [https://yadi.sk/d/q04vZyXIgRA9U '''Более свежая версия плагинов от 11/05/2015''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''3.''' [http://stalkerin.gameru.net/downloads/other/for_wiki_articles/ms3dhe.7z '''Ms3d Hierarchy Editor''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''4.''' [[SP SDK|'''X-Ray SDK 0.7''']]&lt;br /&gt;
&lt;br /&gt;
Итак, приступим!&lt;br /&gt;
&lt;br /&gt;
==Настройка скелета==&lt;br /&gt;
&lt;br /&gt;
Открываем '''MilkShape''' и импортируем любую модель NPC из ЗП или ЧН.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:ИзображениеMs3d convert npc 9.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Удаляем все, включая группы и материалы, кроме двух джойнтов '''Root_stalker''' и '''Bip01'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 10.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Теперь импортируем модель из ТЧ, которую нужно перегнать в ЗП/ЧН. Если попробовать выделить джойнт '''Root_stalker''', то выделятся только те два джойнта, которые остались от модели из ЗП/ЧН.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 11.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Основная задача, которая стоит перед нами – это присоединить эти джойнты к основному скелету. Сохраняем сцену в формат '''.ms3d''' в любое удобное для вас место. Туда же кладем программу '''Ms3d Hierarchy Editor''' и запускаем ее. После запуска, программа попросит ввести название сохранения.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 12.jpg]]&lt;br /&gt;
&lt;br /&gt;
Появится список всех джойнтов модели. На картинке видно, что джойнт под номером '''3''' ('''bip01_pelvis''') не имеет родителя. Нам необходимо присоединить джойнт '''bip01_pelvis''' к джойнту '''bip01'''. &lt;br /&gt;
Жмем клавишу '''M''' ('''Mount'''), клавишей '''A''' выбираем режим '''Absolute''' и подтверждаем ('''Y''').&lt;br /&gt;
Теперь вводим номера джойнтов, которые будем соединять. Сначала вводим цифру '''3''', затем '''2''' ('''НЕ НАОБОРОТ!!!'''):&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 13.jpg]]&lt;br /&gt;
&lt;br /&gt;
Клавишей '''Q''' можете закрыть программу.&lt;br /&gt;
Грузим в '''MilkShape''' наш измененный файл сохранения. Если снова попытаться выделить джойнт '''Root_stalker''', то выделится весь скелет. Значит вы сделали все как надо.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 14.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Все. Можете экспортировать модель в '''SDK'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Настройка модели в Actor Editor==&lt;br /&gt;
&lt;br /&gt;
Открываем '''Actor Editor''' и грузим нашу модель.&lt;br /&gt;
В поле '''User Data''' вставляем ссылку на конфиг (например: ''#include &amp;quot;models\capture\stalker_dolg_3.ltx&amp;quot;'').&lt;br /&gt;
Во вкладке '''Motions''' присваиваем модели необходимые анимации, а именно - '''stalker_animation''', '''stalker_scenario_animation''', '''stalker_scripts_animation''' и '''stalker_smart_cover_animation''' (это для переноса в ЗП. Названия анимаций для ЧН я, к сожалению, не помню, но вы можете посмотреть их сами в стандартных моделях ЧН).&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 15.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Далее во вкладке '''Bones''' нажимаем '''Load''' и указываем файл настроек '''cop-cs.bones''' (настройки могут не подойти при переносе в ЧН) из архива и жмем '''ОК'''.&lt;br /&gt;
&lt;br /&gt;
Если все настроили, то можете экспортировать модель в формат '''.ogf''' и вставлять в игру!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
&lt;br /&gt;
Тутор и файлы настройки костей:&lt;br /&gt;
&lt;br /&gt;
http://narod.ru/disk/4885242001/converting_stalker_models.7z.html&lt;br /&gt;
&lt;br /&gt;
http://files.mail.ru/HOEJHI&lt;br /&gt;
&lt;br /&gt;
[[Категория:Wireframe]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=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=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>2015-05-12T17:07:00Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: /* Инструменты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
 |''Автор:'' Задорожный Александр ('''Scarabay''')&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Часть 1. Переносим в ТЧ=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В этой статье я расскажу вам, как перенести модели НПС из ЧН/ЗП в ТЧ, и при этом они будут использовать стандартные анимации из ТЧ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Инструменты==&lt;br /&gt;
&lt;br /&gt;
Прежде всего нам понадобятся:&lt;br /&gt;
&lt;br /&gt;
'''1.''' [http://www.milkshape3d.com/ms3d/download.html '''MilkShape 3D 1.8.4''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.''' [http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewtheoned&amp;amp;lid=377 '''Плагин импорта/экспорта моделей формата S.T.A.L.K.E.R.''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.1''' [https://yadi.sk/d/q04vZyXIgRA9U '''Более свежая версия плагинов от 11/05/2015''']&amp;lt;br /&amp;gt;&lt;br /&gt;
Изменения:&amp;lt;br /&amp;gt;&lt;br /&gt;
- при импорте модели ТЧ импортер предлагает сконвертировать её в версию для ЧН/ЗП и наоборот. Для переноса остаётся лишь сгладить модель (при необходимости) и экспортировать в object.&amp;lt;br /&amp;gt;&lt;br /&gt;
- при импорте информация о модели (юзердата, пути к текстурам, шейдеры, материалы) пишутся в комментарии элементов модели.&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавлен плагин X-Ray Model Information для меню Tools. Пишет информацию о импортированной модели в лог и открывает файл лога xrayMS3DInfo.log&amp;lt;br /&amp;gt;&lt;br /&gt;
- при экспорте модели NPC кости автоматически раскидываются по bones partitions.&amp;lt;br /&amp;gt;&lt;br /&gt;
- при экспорте расширение файла добавляется автоматически, в соответствии с выбранным фильтром типа файла (object, skl).&amp;lt;br /&amp;gt;&lt;br /&gt;
'''3.''' [http://files.gsc-game.com/st/xray-sdk-setup-v0.4.exe '''X-Ray SDK 0.4'''] с установленным [http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=getit&amp;amp;lid=361 '''SDK Update 0.4'''] + &lt;br /&gt;
'''4.''' [http://yadi.sk/d/athre4RXGbXM3'''Shoc.bones''']&lt;br /&gt;
&lt;br /&gt;
Если у вас уже все установлено и настроено как надо, то приступим к работе с моделями.&lt;br /&gt;
&lt;br /&gt;
==Работа в MilkShape==&lt;br /&gt;
&lt;br /&gt;
'''1.''' Запускаем MilkShape. Жмем '''File--&amp;gt;Import--&amp;gt;S.T.A.L.K.E.R.'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.''' Далее в открывшемся окне ищем нужную нам модель (для примера я выбрал модель Холода из ЧН) и нажимаем '''Открыть'''.&lt;br /&gt;
После загрузки модели видим примерно такую картинку:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Все дело в том, что у моделей NPC из ЧН и ЗП '''47 суставов''' (Joint-ов), в отличие от моделей NPC ТЧ, у которых их всего 45. Это нам и нужно исправить, т.е. удалить два лишних сустава (джойнта), которые называются '''root_stalker''' и '''bip01'''.&lt;br /&gt;
&lt;br /&gt;
'''3.''' Чтобы это сделать, на верхней панели жмем кнопку '''Tools''' и из раскрывшегося списка выбираем '''Joint Tool'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 2.png|left|frame|Окно '''Joint Tool''']]&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 3.png|right|frame|Вкладка '''Joints''']]&lt;br /&gt;
&lt;br /&gt;
'''4.''' Отмечаем строчку '''Unlink Joint from the skeleton''' (1), выбираем из списка наш первый джойнт '''root_stalker''' (2) и жмем '''ОК''' (3). Повторяем данную операцию и со вторым джойнтом '''bip01'''.&lt;br /&gt;
&lt;br /&gt;
'''5.''' На панели  справа открываем вкладку '''Joints''' (1), дважды кликаем левой кнопкой мыши на джойнте '''root_stalker''' (2) и удаляем его клавишей '''Delete''' на клавиатуре. Повторяем данную операцию с джойнтом '''bip01'''.&lt;br /&gt;
&lt;br /&gt;
'''6.''' Теперь надо сохранить нашу модель в формат, понятный X-Ray SDK. Для этого идем сюда: '''File--&amp;gt;Export--&amp;gt;S.T.A.L.K.E.R.''' и сохраняем модель под любым именем.&lt;br /&gt;
&lt;br /&gt;
'''''Внимание! Нужно явно задать расширение файла, т.е. название должно быть таким: ваше_название.object, иначе модель просто не сохранится.'''''&lt;br /&gt;
&lt;br /&gt;
Все! Работа с моделью в '''MilkShape''' закончена. Можете закрыть программу.&lt;br /&gt;
Переходим ко второй части статьи, а именно настройки модели в '''Actor Editor''', который входит в состав '''X-Ray SDK'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
==Настройка модели в Actor Editor==&lt;br /&gt;
&lt;br /&gt;
Не забываем скопировать необходимые текстуры (в СДК и ваш мод). &lt;br /&gt;
&lt;br /&gt;
'''1.''' Запустите '''Actor Editor'''. Теперь загрузим нашу модель для дальнейших манипуляций. Жмем '''File--&amp;gt;Load…''', ищем модель в папке '''import''' (у меня '''holod.object''') и жмем '''Открыть'''. После загрузки видим примерно такую картину:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 4.png|800px]]&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 5.png|left]]&lt;br /&gt;
&lt;br /&gt;
'''2.''' Переходим непосредственно к настройке. Справа во вкладке '''Object Items''' выделяем строку '''Object''' (1) и переходим во вкладку '''Item Properties'''. Ставим галочку напротив '''Make Progressive''' (4). Тянем полоску до конца и в самом низу кликаем на три маленькие точки напротив '''User Data''' (2). Появится окно, в которое нужно вписать строчку типа '''#include &amp;quot;models\capture\файл_настроек.ltx&amp;quot;''' (у меня это '''#include &amp;quot;models\capture\stalker_nebo.ltx&amp;quot;''', а на скрине я ошибся) и жмем '''ОК'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 6.png]]&lt;br /&gt;
&lt;br /&gt;
'''3.''' Далее идем в '''Motions''' (3) и в строке '''Motion reference''' также кликаем по трем точкам. В появившемся окне '''Select Game Object Motions''' ставим галочку напротив '''stalker_animation''' (1), а также отмечаем любую '''critical_hit_grup''' (всего можно поставить 4 галочки) и '''ОК''' (2), тем самым назначая модели стандартные анимации ТЧ.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 7.png|right]]&lt;br /&gt;
&lt;br /&gt;
'''4.''' Настала очередь настройки костей ('''Bones'''). Это нужно для того, чтобы при смерти у NPC не выворачивались части тела под неестественным углом. Настройки костей для моделей из ЗП и ЧН одинаковые.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 8.png|left]]&lt;br /&gt;
&lt;br /&gt;
Очень много людей часто жалуются на то, что в игре NPC с нашей новой моделью становится бессмертным и с ним нельзя поговорить. Поэтому я облегчу вам работу и выкладываю готовые настройки вместе с этим тутором. Итак, выделяем '''Bones''' (1), потом нажимаем '''Load''' (2) и указываем файл настроек '''shoc.bones''' и жмем '''ОК'''.&lt;br /&gt;
&lt;br /&gt;
Теперь осталось только экспортировать модель в формат '''.ogf'''. Для этого идем '''File--&amp;gt;Export--&amp;gt;Export OGF…''' и сохраняем в любое место с любым названием.&lt;br /&gt;
&lt;br /&gt;
Поздравляю! Вы только что перенесли модели ЧН/ЗП в ТЧ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Часть 2. Переносим в ЗП/ЧН=&lt;br /&gt;
&lt;br /&gt;
==Инструменты==&lt;br /&gt;
&lt;br /&gt;
'''1.''' [http://chumbalum.swissquake.ch/ '''MilkShape 3D 1.8.4''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''2.''' [http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewtheoned&amp;amp;lid=377 '''Плагин импорта/экспорта моделей формата S.T.A.L.K.E.R.''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''3.''' [http://stalkerin.gameru.net/downloads/other/for_wiki_articles/ms3dhe.7z '''Ms3d Hierarchy Editor''']&amp;lt;br /&amp;gt;&lt;br /&gt;
'''4.''' [[SP SDK|'''X-Ray SDK 0.7''']]&lt;br /&gt;
&lt;br /&gt;
Итак, приступим!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Настройка скелета==&lt;br /&gt;
&lt;br /&gt;
Открываем '''MilkShape''' и импортируем любую модель NPC из ЗП или ЧН.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:ИзображениеMs3d convert npc 9.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Удаляем все, включая группы и материалы, кроме двух джойнтов '''Root_stalker''' и '''Bip01'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 10.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Теперь импортируем модель из ТЧ, которую нужно перегнать в ЗП/ЧН. Если попробовать выделить джойнт '''Root_stalker''', то выделятся только те два джойнта, которые остались от модели из ЗП/ЧН.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 11.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Основная задача, которая стоит перед нами – это присоединить эти джойнты к основному скелету. Сохраняем сцену в формат '''.ms3d''' в любое удобное для вас место. Туда же кладем программу '''Ms3d Hierarchy Editor''' и запускаем ее. После запуска, программа попросит ввести название сохранения.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 12.jpg]]&lt;br /&gt;
&lt;br /&gt;
Появится список всех джойнтов модели. На картинке видно, что джойнт под номером '''3''' ('''bip01_pelvis''') не имеет родителя. Нам необходимо присоединить джойнт '''bip01_pelvis''' к джойнту '''bip01'''. &lt;br /&gt;
Жмем клавишу '''M''' ('''Mount'''), клавишей '''A''' выбираем режим '''Absolute''' и подтверждаем ('''Y''').&lt;br /&gt;
Теперь вводим номера джойнтов, которые будем соединять. Сначала вводим цифру '''3''', затем '''2''' ('''НЕ НАОБОРОТ!!!'''):&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 13.jpg]]&lt;br /&gt;
&lt;br /&gt;
Клавишей '''Q''' можете закрыть программу.&lt;br /&gt;
Грузим в '''MilkShape''' наш измененный файл сохранения. Если снова попытаться выделить джойнт '''Root_stalker''', то выделится весь скелет. Значит вы сделали все как надо.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 14.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Все. Можете экспортировать модель в '''SDK'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Настройка модели в Actor Editor==&lt;br /&gt;
&lt;br /&gt;
Открываем '''Actor Editor''' и грузим нашу модель.&lt;br /&gt;
В поле '''User Data''' вставляем ссылку на конфиг (например: ''#include &amp;quot;models\capture\stalker_dolg_3.ltx&amp;quot;'').&lt;br /&gt;
Во вкладке '''Motions''' присваиваем модели необходимые анимации, а именно - '''stalker_animation''', '''stalker_scenario_animation''', '''stalker_scripts_animation''' и '''stalker_smart_cover_animation''' (это для переноса в ЗП. Названия анимаций для ЧН я, к сожалению, не помню, но вы можете посмотреть их сами в стандартных моделях ЧН).&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ms3d convert npc 15.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Далее во вкладке '''Bones''' нажимаем '''Load''' и указываем файл настроек '''cop-cs.bones''' (настройки могут не подойти при переносе в ЧН) из архива и жмем '''ОК'''.&lt;br /&gt;
&lt;br /&gt;
Если все настроили, то можете экспортировать модель в формат '''.ogf''' и вставлять в игру!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
&lt;br /&gt;
Тутор и файлы настройки костей:&lt;br /&gt;
&lt;br /&gt;
http://narod.ru/disk/4885242001/converting_stalker_models.7z.html&lt;br /&gt;
&lt;br /&gt;
http://files.mail.ru/HOEJHI&lt;br /&gt;
&lt;br /&gt;
[[Категория:Wireframe]]&lt;/div&gt;</summary>
		<author><name>Monolith</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:SoC._%D0%9F%D0%BE%D1%81%D1%82%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B_%D0%BF%D1%80%D0%B8_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0.</id>
		<title>Обсуждение:SoC. Постэффекты при использовании предмета.</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:SoC._%D0%9F%D0%BE%D1%81%D1%82%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B_%D0%BF%D1%80%D0%B8_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0."/>
				<updated>2014-12-09T06:37:05Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;5 строк, которые нужны для эффекта расписал на херову тучу не нужных строк. В общем - мусор.&lt;br /&gt;
&lt;br /&gt;
---------&lt;br /&gt;
Нормальные поднимающиеся\заканчивающиеся болты (Realbolt mod ver. 1.0) лежат здесь:&lt;br /&gt;
http://www.amk-team.ru/forum/index.php?showtopic=8396&amp;amp;p=754403&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9D%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D1%80%D1%8F%D1%87%D0%B8%D1%85_%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D1%88_%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0%D0%BC_%D0%B2_%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%D1%8B%D1%85_%D0%BE%D0%BA%D0%BD%D0%B0%D1%85.</id>
		<title>SoC. Назначение горячих клавиш кнопкам в диалоговых окнах.</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9D%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D1%80%D1%8F%D1%87%D0%B8%D1%85_%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D1%88_%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0%D0%BC_%D0%B2_%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%D1%8B%D1%85_%D0%BE%D0%BA%D0%BD%D0%B0%D1%85."/>
				<updated>2013-02-02T22:28:30Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: Новая страница: «Ни для кого не секрет, что в ЧН и ЗП в меню обыска ящика можно забрать все вещи в инвентарь к...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ни для кого не секрет, что в ЧН и ЗП в меню обыска ящика можно забрать все вещи в инвентарь кнопкой X, а также во время диалога с НПС переключиться на меню торговли. Почему бы не сделать тоже самое на ТЧ, тем более движок позволяет.&lt;br /&gt;
&lt;br /&gt;
В xml-файлах в параметрах для кнопок мультиплеерного меню покупки можно найти параметр '''accel''', которому присвоено значение,  соответствующее горячей клавише. Этот параметр можно использовать и для кнопок в меню торговли и диалога с НПС. Откроем файл ''config\ui\carbody_new(_16).xml'' и найдем тег кнопки &amp;quot;Взять всё&amp;quot; - '''take_all_btn'''. Добавим в её описание параметр accel=&amp;quot;kX&amp;quot; и сохраним файл. Теперь при нажатии X все предметы из ящика будут переноситься в инвентарь. Мелочь, а приятно.&lt;br /&gt;
&lt;br /&gt;
Аналогично можно сделать переключение между окнами диалога и торговли. Откроем файл ''config\ui\talk(_16).xml'' и найдем в нем тег '''button'''. Это описание кнопки &amp;quot;Торговать&amp;quot;. Тоже добавим ей параметр accel=&amp;quot;kX&amp;quot;. Открыв файл ''config\ui\trade(_16).xml'', увидим,  что кнопок две - первая для заключения сделки, вторая для возврата к диалогу. Для второй кнопки добавим параметр accel=&amp;quot;kX&amp;quot;. Теперь по кнопке X будет происходить переключение между окнами диалога и торговли. При желании можно добавить горячую кнопку и для действия купли-продажи товара.&lt;br /&gt;
[[Категория:Конфигурационные файлы]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%BC%D0%BE%D0%BD%D1%82_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BB%D0%B5%D0%BA%D1%82%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%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%BC%D0%BE%D0%BD%D1%82_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BB%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2013-02-02T17:19:26Z</updated>
		
		<summary type="html">&lt;p&gt;Monolith: /* Небольшая заметка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Создание ремонт комплекта===&lt;br /&gt;
Я опишу пример создания ремонт комплекта для костюмов, а для оружия в конце статьи сделаю пару заметок. Дело в том, что различия в создании ремонт комплектов почти нет.&lt;br /&gt;
 &lt;br /&gt;
1. Для начала нам нужно создать сам ремонт комплект, то есть предмет, а уже потом вешать на него функцию при использование. Для этого в config\misc\items.ltx в конец добавляем конфиг нашего предмета:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;[repair_kit_outfit]:identity_immunities&lt;br /&gt;
GroupControlSection	= spawn_group&lt;br /&gt;
discovery_dependency    =&lt;br /&gt;
$spawn 			= &amp;quot;food and drugs\repair kit outfit&amp;quot;&lt;br /&gt;
$prefetch 		= 32&lt;br /&gt;
class			= II_ANTIR ;класс не трогаем!&lt;br /&gt;
cform                   = skeleton&lt;br /&gt;
visual                  = equipments\item_merger.ogf ;модель&lt;br /&gt;
description		= enc_equipment_repair_kit_outfit ;ссылка на описание в config\text\rus\....xml&lt;br /&gt;
&lt;br /&gt;
inv_name		= repair_kit_outfit_name ;ссылка на название в config\text\rus\....xml&lt;br /&gt;
inv_name_short		= repair_kit_outfit_name ;тоже самое, что и inv_name&lt;br /&gt;
inv_weight		= 6.0 ;вес&lt;br /&gt;
&lt;br /&gt;
inv_grid_width		= 2 ;ширина иконки&lt;br /&gt;
inv_grid_height		= 1 ;высота иконки&lt;br /&gt;
inv_grid_x		= 8 ;координата x иконки&lt;br /&gt;
inv_grid_y		= 18 ;координата y иконки&lt;br /&gt;
cost			= 10000 ;цена&lt;br /&gt;
;всё ниже написанное не трогаем, оно нам и не нужно&lt;br /&gt;
eat_health = 0&lt;br /&gt;
eat_satiety = 0&lt;br /&gt;
eat_power = 0&lt;br /&gt;
eat_radiation = 0&lt;br /&gt;
wounds_heal_perc = 0&lt;br /&gt;
eat_portions_num = 1&lt;br /&gt;
animation_slot = 4&lt;br /&gt;
hud = wpn_vodka_hud&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Теперь добавим название и описание. Для этого в файле config\text\rus\string_table_enc_equipment.xml в конец между &amp;lt;/string&amp;gt; и &amp;lt;/string_table&amp;gt; добавляем строки по аналогии с уже написсанными: &lt;br /&gt;
       &amp;lt;pre&amp;gt;&amp;lt;string id=&amp;quot;repair_kit_outfit_name&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Ремонт комплект ДПК&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;string id=&amp;quot;enc_equipment_repair_kit_outfit&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;Новинка от Вани Болта - ремонт комплект ДПК для быстрой и эффективной починки костюмов. При его создании были учтены все недочёты и, следовательно, удалены. Благодаря улучшенным инструментам и деталям, а также облегченному весу весьма ценен. С его помощью можно увеличить состояние костюма до 100%, если он повреждён не больше 30%. Незаменимая вещь во время вылазки.&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/string&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Отлично, с предметом закончили. Теперь приступим к самому главному - скриптам. &lt;br /&gt;
===Работа со скриптами===&lt;br /&gt;
1.Вешаем функцию починки при использовании нашего ремонт комплекта. &lt;br /&gt;
Для этого в файле '''scripts\bind_stalker.script''' &lt;br /&gt;
находим функцию:&lt;br /&gt;
&lt;br /&gt;
function actor_binder:net_destroy() и после строки &lt;br /&gt;
&lt;br /&gt;
self.object:set_callback(callback.take_item_from_box, nil) пишем: &lt;br /&gt;
&lt;br /&gt;
self.object:set_callback(callback.use_object, nil))&lt;br /&gt;
&lt;br /&gt;
И теперь находим функцию&lt;br /&gt;
&lt;br /&gt;
function actor_binder:reinit() и после строки &lt;br /&gt;
&lt;br /&gt;
self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) пишем: &lt;br /&gt;
&lt;br /&gt;
self.object:set_callback(callback.use_object, self.repair_outfit_start, self)&lt;br /&gt;
&lt;br /&gt;
Теперь в папке scripts создаёте свой скриптовой фаил ваше_название_скрипта.script. Но! Название должно быть написано на английском языке и вместо пробелов должен стоять знак &amp;quot;_&amp;quot;. Опять открываем bind_stalker.script и в самый конец добавляем эту функцию: &lt;br /&gt;
&amp;lt;lua&amp;gt;function actor_binder:repair_outfit_start(obj, who)&lt;br /&gt;
    if obj then &lt;br /&gt;
        if obj:section() == &amp;quot;repair_kit_outfit&amp;quot; then --здесь указываем предмет, при использование которого будет срабатывать функция ниже&lt;br /&gt;
        ваше_название_скрипта.repair_outfit() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
2. Добавляем саму функцию ремонта. &lt;br /&gt;
Для этого в файле ваше_название_скрипта.script пишем: &lt;br /&gt;
&amp;lt;lua&amp;gt; -- Ремонт комплект для костюмов&lt;br /&gt;
function repair_outfit()&lt;br /&gt;
local item_s6 = db.actor:item_in_slot(6) --объявляем переменную (item_s6)&lt;br /&gt;
    if item_s6 ~= nil and item_s6:condition() &amp;gt;=0.30 and item_s6:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%)&lt;br /&gt;
        item_s6:set_condition(1)&lt;br /&gt;
        local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]])&lt;br /&gt;
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)&lt;br /&gt;
        local news_text = &amp;quot;%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен.&amp;quot;&lt;br /&gt;
        db.actor:give_game_news(news_text, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(83,470,83,47), 1000, 5000)&lt;br /&gt;
    elseif item_s6 == nil then --когда костюма нет &lt;br /&gt;
        local news_text = &amp;quot;%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм.&amp;quot;&lt;br /&gt;
        db.actor:give_game_news(news_text, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(83,470,83,47), 1000, 5000)&lt;br /&gt;
        alife():create(&amp;quot;repair_kit_outfit&amp;quot;, db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
    elseif item_s6:condition() &amp;lt;0.30 then --когда костюм нельзя чинить (состояние меньше 30%)&lt;br /&gt;
        local news_text = &amp;quot;%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён.&amp;quot;&lt;br /&gt;
        db.actor:give_game_news(news_text, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(83,470,83,47), 1000, 5000)&lt;br /&gt;
        alife():create(&amp;quot;repair_kit_outfit&amp;quot;, db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
    elseif item_s6:condition() ==1 then --когда костюм в отличном состояние&lt;br /&gt;
        local news_text = &amp;quot;%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состояние.&amp;quot;&lt;br /&gt;
        db.actor:give_game_news(news_text, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(83,470,83,47), 1000, 5000)&lt;br /&gt;
        alife():create(&amp;quot;repair_kit_outfit&amp;quot;, db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
    end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
Всё! Теперь заходим в игру и наслаждаемся. &lt;br /&gt;
===Небольшая заметка===&lt;br /&gt;
1. Чтобы сделать ремонт комплект для оружия проделываем тоже самое, только переименовываем всё вместо outfit на weapon и в функцие починки ставим слот 1 или 2 (оружейные слота) вместо 6 (слот костюмов).&lt;br /&gt;
Ещё нужно заменить переменную item_s6 например на item_s1 или item_s2.&lt;br /&gt;
&lt;br /&gt;
2. Число 0.30 - минимальное состояние костюма, следовательно его можно менять на любое вам угодное.&lt;br /&gt;
Простите за такое оформление, это моя вторая статья. В будущем, если будет больше свободного времени, постораюсь расписать все моменты подробно. Автор статьи: Бага.&lt;br /&gt;
&lt;br /&gt;
Данный метод создания ремонт комплектов не работает! (проверено)&lt;br /&gt;
ЗЫ: StalkerNew2012 этот скрипт подправил теперь всё работает :)&lt;br /&gt;
Ремонтный комплект без лишних сообщений просто съедается!:(&lt;br /&gt;
&lt;br /&gt;
3.Ремонт оружия и брони:&lt;br /&gt;
{| class=&amp;quot;collapsible collapsed&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;code lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--     bind_stalker.script&lt;br /&gt;
function actor_binder:repair_outfit_start(obj, who)&lt;br /&gt;
    if obj then &lt;br /&gt;
        if obj:section() == &amp;quot;repair_kit_outfit&amp;quot; then&lt;br /&gt;
                remkomplekt.action_repair() &lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--     remkomplekt.script&lt;br /&gt;
function action_repair()&lt;br /&gt;
&lt;br /&gt;
	-- нет ли рядом врагов и монстров&lt;br /&gt;
	local apos = db.actor:position()&lt;br /&gt;
	for obj_id,_ in pairs (db.storage)do&lt;br /&gt;
		local obj = level.object_by_id(obj_id)&lt;br /&gt;
		if obj and (IsStalker(obj) or IsMonster(obj)) and obj:alive() &lt;br /&gt;
		and obj:relation(db.actor) == game_object.enemy and obj:position():distance_to(apos)&amp;lt;30 then&lt;br /&gt;
			send_tip(&amp;quot;Нельзя чинить костюм, когда враги слишком близко.&amp;quot;)&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- пробуем чинить предмет в &lt;br /&gt;
	repair_item_in_slot(1) -- первом&lt;br /&gt;
	repair_item_in_slot(2) -- втором&lt;br /&gt;
	repair_item_in_slot(6) -- шестом слоте&lt;br /&gt;
	&lt;br /&gt;
	-- эмулируем возврат ремкомплекта в инвентарь&lt;br /&gt;
	alife():create(&amp;quot;repair_kit_outfit&amp;quot;, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function repair_item_in_slot(num)&lt;br /&gt;
	local item = db.actor:item_in_slot(num)&lt;br /&gt;
	if item then&lt;br /&gt;
		local cond = item:condition()&lt;br /&gt;
		if cond &amp;lt; 0.3 then&lt;br /&gt;
			send_tip(&amp;quot;%c[255,255,0,0]Ремонт невозможен: предмет в слоте &amp;quot;..num.. &amp;quot; сильно повреждён.&amp;quot;)&lt;br /&gt;
		elseif cond &amp;gt; 0.95 then&lt;br /&gt;
			send_tip(&amp;quot;%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]предмет в слоте &amp;quot;..num.. &amp;quot; в отличном состоянии.&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			item:set_condition(1)&lt;br /&gt;
			send_tip(&amp;quot;%c[255,0,255,0]Ремонт предмета в слоте &amp;quot;..num.. &amp;quot; завершен.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		send_tip(&amp;quot;%c[255,255,0,0]В слоте &amp;quot;..num..&amp;quot; нет предмета для починки.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function send_tip(news_text)&lt;br /&gt;
	db.actor:give_game_news(news_text, &amp;quot;ui\\ui_iconsTotal&amp;quot;, Frect():set(83,470,83,47), 1000, 5000)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
4. Для многоразового использования ремкомплекта можно не доспавнивать новый предмет при съедании, а в его конфиге указать для параметра '''eat_portions_num''' большое число.&lt;br /&gt;
&amp;lt;lua&amp;gt;eat_portions_num = 100500&amp;lt;/lua&amp;gt;&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>Monolith</name></author>	</entry>

	</feed>