<?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=200.43.68.7&amp;*</id>
		<title>S.T.A.L.K.E.R. Inside Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=200.43.68.7&amp;*"/>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/200.43.68.7"/>
		<updated>2026-04-29T15:06:10Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_knife.ltx</id>
		<title>Файлы: w knife.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_knife.ltx"/>
				<updated>2008-01-22T18:03:43Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[wpn_knife]&lt;br /&gt;
[wpn_knife_hud]&lt;br /&gt;
;текстурка ножа&lt;br /&gt;
visual              		= weapons\knife\wpn_knife_hud.ogf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;анимация&lt;br /&gt;
anim_idle					= idle&lt;br /&gt;
anim_draw					= draw&lt;br /&gt;
anim_hide					= hide&lt;br /&gt;
anim_shoot1_start			= shoot1_start&lt;br /&gt;
anim_shoot2_start			= shoot2_start&lt;br /&gt;
anim_shoot1_end				= shoot1_end&lt;br /&gt;
anim_shoot2_end				= shoot2_end&lt;br /&gt;
anim_idle_sprint			= idle_sprint&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_sig220.ltx</id>
		<title>Файлы: w sig220.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_sig220.ltx"/>
				<updated>2008-01-22T18:03:13Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sig Zauer 220, известный так же под маркировкой Р-78 - штатный пистолет швейцарской армии и полиции, так же используемый в ряде стран Европы как вооруженными силами, так и подразделениями полиции и спецслужб. Разработанный в середине 70-х годов под стандартный патрон NATO 9х19, данный образец зарекомендовал себя как весьма надежное и живучее оружие.&lt;br /&gt;
&lt;br /&gt;
W sig220.ltx &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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
description				= enc_weapons1_wpn-abakan&amp;lt;/pre&amp;gt;&lt;br /&gt;
Калибр &lt;br /&gt;
ammo_class				= ammo_5.45x39_fmj, ammo_5.45x39_ap  ; name of the ltx-section of used ammo&lt;br /&gt;
&lt;br /&gt;
===Реальные параметры===&lt;br /&gt;
{| border=1&lt;br /&gt;
 !colspan=2 |ТТХ &lt;br /&gt;
 |-&lt;br /&gt;
 |Калибр, мм &lt;br /&gt;
 | 5,45&lt;br /&gt;
 |-&lt;br /&gt;
 |Вес без магазина, кг &lt;br /&gt;
 | 3,85&lt;br /&gt;
 |-&lt;br /&gt;
 |Общая длина с откинутым прикладом, мм &lt;br /&gt;
 | 943&lt;br /&gt;
 |-&lt;br /&gt;
 |Общая длина в сложенном состоянии, мм &lt;br /&gt;
 | 728&lt;br /&gt;
 |-&lt;br /&gt;
 |Длина ствола, мм &lt;br /&gt;
 | 405&lt;br /&gt;
 |-&lt;br /&gt;
 |Емкость магазина, количество патронов &lt;br /&gt;
 | 30 (60)&lt;br /&gt;
 |-&lt;br /&gt;
 |Прицельная дальность, м &lt;br /&gt;
 | 1000&lt;br /&gt;
 |-&lt;br /&gt;
 |Эффективная дальность, м &lt;br /&gt;
 | 650&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_hpsa.ltx</id>
		<title>Файлы: w hpsa.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_hpsa.ltx"/>
				<updated>2008-01-22T18:02:50Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Browning FN &amp;quot;High Power&amp;quot; /Браунинг ФН &amp;quot;Хай Пауэр&amp;quot; - классический образец армейского личного оружия западных армий в середине ХХ века. Выпускался с 1938 года бельгийской фирмой &amp;quot;Фабрик Националь&amp;quot; в Льеже. Относится к классу т.н. &amp;quot;автоматических&amp;quot; (реально - самозарядных) пистолетов, калибр - 9х19 мм (он же - 9Пар/9NATO).Автоматика работает за счет испольования энергии ствола при его коротком ходе. Ударно-спусковой механизм куркового типа, с открытым расположением курка. Пистолет имеет неавтоматический предохранитель (с левой стороны рамки позади спусковой скобы), блокирующий кожух и шептало. Возвратная пружина размещена под стволом. Прицел - открытого типа. В годы Второй Мировой войны по зказу вермахта было изготовлено около 320 тыс. экз. с маркировкой Р-640. На территории СССР вплоть до конца прошлого века находили рабочие экземпляры оружия - как &amp;quot;черные следопыты&amp;quot;, так и простые граждане, часть из которых поступило в криминальное обращение либо осело на руках у населения.&lt;br /&gt;
Масса пистолета без патронов - 882 грамма, длина - 200 мм, длина ствола - 118 мм. Начальная скорость пули - 350 м/с, техническая скорострельность - 40 выстрелов в минуту. Емкость магазина - 13 патронов. Прицельная дальность - 50 м.&lt;br /&gt;
Обладая достаточно высокой дульной энергией (447 Дж), хорошей балансировкой, простой и достаточно надежной конструкцией, данный пистолет в целом до сих пор соответствует армейским требованиям НАТО к подобному оружию. &lt;br /&gt;
&lt;br /&gt;
В 80-е годы в производстве появились две усовершенствованые модели: ЭйчПи 2 и Дабл Экшн (ДА). Основные изменения коснулись емкости магазина (увеличена до 15 патронов) и размещения внешних рычагов - затворной задержки и предохранителя, так же была изменена спусковая скоба, что увеличило удобство стрельбы с левой руки или с двух рук.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_ak74.ltx</id>
		<title>Файлы: w ak74.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_ak74.ltx"/>
				<updated>2008-01-22T18:02:21Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На  ak74 нельзя ставить прицел&lt;br /&gt;
АК-74М - с планкой для крепления прицельных приспособлений на левой стороне ствольной коробки&lt;br /&gt;
Параметры в игре W ak74.ltx &lt;br /&gt;
Калибр 	ammo_5.45x39_fmj, ammo_5.45x39_ap &lt;br /&gt;
Вес 	3.3 &lt;br /&gt;
Емкость магазина, количество патронов 	30 &lt;br /&gt;
Цена, РУБ. 	2000 &lt;br /&gt;
Параметры расброса &lt;br /&gt;
Прицельная дальность, м 	 ??? &lt;br /&gt;
Эффективная дальность, м 	 ???&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_ak47.ltx</id>
		<title>Файлы: w ak47.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_ak47.ltx"/>
				<updated>2008-01-22T18:01:51Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В игре отсутствует&lt;br /&gt;
==Автомат АК-47==&lt;br /&gt;
Создан в 1946 г. М. Т. Калашниковым. Разработанный им автомат успешно выдержал испытания и превзошел по совокупности показателей конструкции известных оружейников В. А. Дегтярева, С. Г. Симонова и др. В 1949 г. автомат был принят на вооружение под названием АК-47 (автомат Калашникова образца 1947 г.). &lt;br /&gt;
&lt;br /&gt;
Автоматика АК действует за счет отвода пороховых газов через отверстие в стенке ствола. Запирание канала ствола осуществляется поворотом затвора, при этом два боевых выступа затвора заходят в соответствующие пазы ствольной коробки. Поворот затвора производится скосом затворной рамы, выполненной в одной детали со шгоком и газовым поршнем. Затворная рама АК-47 является ведущим звеном автоматики: она задает направление движения подвижных частей, воспринимает большинство ударных нагрузок, поворачивает затвор, в ее канале размещена возвратная пружина. Рукоятка перезаряжания, расположенная справа, выполнена вместе с затворной рамой. Ударный механизм куркового типа с П-образной боевой пружиной. &lt;br /&gt;
&lt;br /&gt;
Спусковой механизм АК-47 допускает ведение непрерывного и одиночного огня. Флажковый предохранитель в положении предохранения запирает спусковой крючок и препятствует движению назад затворной рамы, а также выполняет функции переключателя режимов огня (переводчика). Все детали автоматики и ударно-спускового механизма собраны в ствольной коробке. Автомат АК-47 имеет секторный прицел. Для удобства удержания автомата служат пистолетная рукоятка, цевье и ствольная накладка, изготовленные из дерева. АК-47 выпускался с постоянным деревянным или складным металлическим (АКС-47) прикладом. Магазин коробчатый, секторный, с шахматным расположением патронов. &lt;br /&gt;
==Характеристики==&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!colspan=2|ТТХ АК-47&lt;br /&gt;
|-&lt;br /&gt;
|Калибр, мм&lt;br /&gt;
|7,62&lt;br /&gt;
|-&lt;br /&gt;
|Масса, кг&lt;br /&gt;
|4,3&lt;br /&gt;
|-&lt;br /&gt;
|Длина, мм&lt;br /&gt;
|870&lt;br /&gt;
|-&lt;br /&gt;
|Длина ствола, мм&lt;br /&gt;
|415&lt;br /&gt;
|-&lt;br /&gt;
|Начальная скорость пули, м/с&lt;br /&gt;
|715&lt;br /&gt;
|-&lt;br /&gt;
|Темп стрельбы, в/м&lt;br /&gt;
|660&lt;br /&gt;
|-&lt;br /&gt;
|Скорострельность, в/м&lt;br /&gt;
|40&lt;br /&gt;
|-&lt;br /&gt;
|Емкость магазина, патронов&lt;br /&gt;
|30&lt;br /&gt;
|-&lt;br /&gt;
|Прицельная дальность, м&lt;br /&gt;
|800&lt;br /&gt;
|-&lt;br /&gt;
|Год выпуска&lt;br /&gt;
|1947&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Модификации==&lt;br /&gt;
АКМ - замедлитель курка, компенсатор, универсальный штык-нож 1959. &lt;br /&gt;
&lt;br /&gt;
АКМС - то же, со складным металлическим прикладом 1959. &lt;br /&gt;
&lt;br /&gt;
АКМН - с ночным прицелом. &lt;br /&gt;
&lt;br /&gt;
АКМСН - со складным металлическим прикладом и ночным прицелом. &lt;br /&gt;
&lt;br /&gt;
АКМСУ - для специальных и воздушно-десантных войск. &lt;br /&gt;
&lt;br /&gt;
[[w_ak74.ltx|АК-74]] - калибр 5,45 мм, повторяет схему АКМ, двухкамерное дульное устройство.&lt;br /&gt;
 &lt;br /&gt;
АК-74М - со складным монолитным пластмассовым прикладом 1991. &lt;br /&gt;
&lt;br /&gt;
[[w_ak74u.ltx|АК-74У]] - ствол короче на 200 мм. &lt;br /&gt;
&lt;br /&gt;
АК-101 - калибр 5,45. &lt;br /&gt;
&lt;br /&gt;
АК-102 - калибр 5,45. &lt;br /&gt;
&lt;br /&gt;
АК-103 - калибр 7,62. &lt;br /&gt;
&lt;br /&gt;
АК-104 - калибр 7,62. &lt;br /&gt;
&lt;br /&gt;
АК-105 - калибр 5,45.&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
[[w_abakan.ltx]] &amp;quot;Абакан&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[w_ak74.ltx]]&lt;br /&gt;
&lt;br /&gt;
[[w_ak74u.ltx]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=Ui_wpn_params.script</id>
		<title>Ui wpn params.script</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=Ui_wpn_params.script"/>
				<updated>2008-01-22T18:01:25Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Формулы расчета оценок параметров оружия&lt;br /&gt;
&lt;br /&gt;
Файл необходимый для этих целей лежит в '''gamedata\scripts\ui_wpn_params.script'''.&lt;br /&gt;
&lt;br /&gt;
С помощию скрипта можно поменять формулы оценки параметров оружия (те 4-е полосочки когда на нем тыкаешь в инвентаре).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Возвращает оценку скорострельности.&lt;br /&gt;
&lt;br /&gt;
'''function GetRPM(section)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Возвращает оценку наносимого оружием повреждения.&lt;br /&gt;
&lt;br /&gt;
'''function GetDamage(section)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Возвращает оценку удобства оружия.&lt;br /&gt;
&lt;br /&gt;
'''function GetHandling(section)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Возвращает оценку точности оружия.&lt;br /&gt;
&lt;br /&gt;
'''function GetAccuracy(section)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для расчета этих оценок используются параметры оружия из соответствующих ltx файлов.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D0%B2%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D1%8F</id>
		<title>SoC. Оформление инвентаря</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D0%B2%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D1%8F"/>
				<updated>2008-01-22T18:00:56Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Оформление инвентаря:&lt;br /&gt;
&lt;br /&gt;
По пути '''gamedata.db0/config/ui/''' лежит файл '''inventory_new.xml''' содержащий координаты объектов инвентаря.&lt;br /&gt;
&lt;br /&gt;
Инвентарные слоты состоят из багграундных текстур, и слотовых сеток.&lt;br /&gt;
&lt;br /&gt;
К примеру строки&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;belt_slots x=&amp;quot;0&amp;quot; y=&amp;quot;80&amp;quot; width=&amp;quot;1024&amp;quot; height=&amp;quot;172&amp;quot;&amp;gt;       &lt;br /&gt;
     &amp;lt;texture&amp;gt;ui_slots_belt&amp;lt;/texture&amp;gt;&lt;br /&gt;
&amp;lt;/belt_slots&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
содержат координаты (x=&amp;quot;0&amp;quot; y=&amp;quot;80&amp;quot;) и размер (width=&amp;quot;1024&amp;quot; height=&amp;quot;172&amp;quot;) багграундной текстурки '''ui_slots_belt''' для двух оружейных слотов и слота ремня. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А строки&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dragdrop_belt x=&amp;quot;645&amp;quot; y=&amp;quot;136&amp;quot; width=&amp;quot;410&amp;quot; height=&amp;quot;60&amp;quot;&lt;br /&gt;
      cell_width = &amp;quot;60&amp;quot; cell_height=&amp;quot;60&amp;quot; rows_num=&amp;quot;1&amp;quot; cols_num=&amp;quot;5&amp;quot;/&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
содержат координаты (x=&amp;quot;645&amp;quot; y=&amp;quot;136&amp;quot;), размер сетки(width=&amp;quot;410&amp;quot; height=&amp;quot;60&amp;quot;), размер одной ячейки сетки (cell_width = &amp;quot;60&amp;quot; cell_height=&amp;quot;60&amp;quot;), число строк (rows_num=&amp;quot;1&amp;quot;) и столбцов (cols_num=&amp;quot;5&amp;quot;) слотовой сетки инвентаря.&lt;br /&gt;
&lt;br /&gt;
Отсчет координат '''x y''' идет с левого верхнего угла.&lt;br /&gt;
&lt;br /&gt;
Меняя значения приведенных значения можно изменять внешний вид инвентаря.&lt;br /&gt;
---------------------------------------------------------------------------------------------------&lt;br /&gt;
'''Примеры:'''&lt;br /&gt;
&lt;br /&gt;
Изменив значения в строках&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dragdrop_belt x=&amp;quot;645&amp;quot; y=&amp;quot;136&amp;quot; width=&amp;quot;410&amp;quot; height=&amp;quot;60&amp;quot;&lt;br /&gt;
     cell_width = &amp;quot;60&amp;quot; cell_height=&amp;quot;60&amp;quot; rows_num=&amp;quot;1&amp;quot; cols_num=&amp;quot;5&amp;quot;/&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
на     &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dragdrop_belt x=&amp;quot;590&amp;quot; y=&amp;quot;118&amp;quot; width=&amp;quot;410&amp;quot; height=&amp;quot;104&amp;quot;&lt;br /&gt;
       cell_width = &amp;quot;52&amp;quot; cell_height=&amp;quot;52&amp;quot; rows_num=&amp;quot;2&amp;quot; cols_num=&amp;quot;5&amp;quot;/&amp;gt;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
у нас в ременном отделении под артефакты вместо 5ти, будет 10ть слотовых ячеек.&lt;br /&gt;
&lt;br /&gt;
Или  изменив координаты (x=&amp;quot;870&amp;quot; y=&amp;quot;725&amp;quot;) в строках&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;exit_button x=&amp;quot;870&amp;quot; y=&amp;quot;725&amp;quot; width=&amp;quot;157&amp;quot; height=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
....     &lt;br /&gt;
....   &lt;br /&gt;
&amp;lt;/exit_button&amp;gt;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
на координаты (x=&amp;quot;10&amp;quot; y=&amp;quot;10&amp;quot;), можно перенести кнопку Выхода(из инвентаря) из правого нижнего угла в левый верхний угол.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_alife.ltx</id>
		<title>Файлы: alife.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_alife.ltx"/>
				<updated>2008-01-22T18:00:30Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== [alife] === &lt;br /&gt;
&lt;br /&gt;
time_factor   = 10; - скорость течения игрового времени относительно реального времени (скорость для демонстрации смены дня и ночи).      &lt;br /&gt;
&lt;br /&gt;
normal_time_factor = 10; животные в оффлайне перемещаются со скоростью, делённой на этот фактор (чтобы не бегали очень быстро)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A2%D1%91%D0%BC%D0%BD%D0%B0%D1%8F_%D0%BD%D0%BE%D1%87%D1%8C</id>
		<title>Тёмная ночь</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A2%D1%91%D0%BC%D0%BD%D0%B0%D1%8F_%D0%BD%D0%BE%D1%87%D1%8C"/>
				<updated>2008-01-22T18:00:07Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;config&amp;gt;weathers&amp;gt;weather_default.ltx&lt;br /&gt;
&lt;br /&gt;
вначале список-это время&lt;br /&gt;
&lt;br /&gt;
потом характеристики для каждого часа&lt;br /&gt;
&lt;br /&gt;
Темная ночь:&lt;br /&gt;
&lt;br /&gt;
[default_weather_02]&lt;br /&gt;
ambient = 0.0025, 0.005, 0.0075&lt;br /&gt;
hemi_color = 0.025, 0.05, 0.075, 0.1&lt;br /&gt;
&lt;br /&gt;
Для предыдущих блоков стоит тоже отлегулировать чтобы темнота не обрушилась резко.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BE%D0%B6%D0%B4%D1%8F</id>
		<title>Удаление дождя</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BE%D0%B6%D0%B4%D1%8F"/>
				<updated>2008-01-22T17:59:46Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Всем, у кого дождь и гроза вызывают раздражение или тупо жрут драгоценные fps. Методом проб и ошибок с применением нескольких итераций метода инженерного тыка выяснено, что баги и тормоза вызываются исключительно дождем, а другие погодные эффекты ни на что не влияют. Найден способ его (дождь) вырубить. Для этого необходимо: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Скачать Stalker Data Unpacker. (можно здесь http://stalker-portal.ru/page.php?al=unpaker)&lt;br /&gt;
&lt;br /&gt;
2. Распаковать куда-нибудь (не в корневой каталог игры) архив gamedata.db0. &lt;br /&gt;
&lt;br /&gt;
3. Из полученных файлов сохранить только папку &amp;lt;Папка, куда распаковался архив&amp;gt; / config / weathers. Остальные можно убить. &lt;br /&gt;
&lt;br /&gt;
4. В каждом файле этой папки, название которого начинается с “weather” изменить значение параметра “rain_density” (по ходу отвечает за частоту дождя) на 0.0. (Файлы открываются блокнотом.)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%90%D0%BA%D1%82%D0%B8%D0%B2%D0%B0%D1%86%D0%B8%D1%8F_%D0%B0%D1%80%D1%82%D0%B5%D1%84%D0%B0%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%90%D0%BA%D1%82%D0%B8%D0%B2%D0%B0%D1%86%D0%B8%D1%8F_%D0%B0%D1%80%D1%82%D0%B5%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2008-01-22T17:59:19Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Распишу по пунктам как добавить например к &amp;quot;огненому шару&amp;quot; аномалию Жарка...&lt;br /&gt;
&lt;br /&gt;
Открываете файл:&lt;br /&gt;
gamedata/config/misc/artefacts.ltx&lt;br /&gt;
&lt;br /&gt;
И там в самом начале файла такая секция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;Артефакты, которые при активизации создают аномальные зоны&lt;br /&gt;
;формат: {секция_артефакта} = {секция_зоны},Radius,Power&lt;br /&gt;
[artefact_spawn_zones]&lt;br /&gt;
af_medusa = zone_mosquito_bald_weak, 2.0, 30.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обозначает что артефакт af_medusa при активации создаст аномальную зону zone_mosquito_bald_weak с радиусом 2 метра и мощностью 30 (возможно влияет и на время жизни аномалии)&lt;br /&gt;
&lt;br /&gt;
Кончается этот список по идее строчкой:&lt;br /&gt;
mp_af_electra_flash = zone_witches_galantine, 3, 50.0&lt;br /&gt;
&lt;br /&gt;
и сразу после неё пишете:&lt;br /&gt;
af_fireball = zone_zharka_static, 3, 30.0&lt;br /&gt;
&lt;br /&gt;
В принципе можно прописать там не статик а zone_zharka_weak незнаю что из них правильнее использовать... статик работает тоже.В той-же папке есть файл zone_zharka, где описаны свойства зон _weak, _average, _strong( слабая, средняя, сильная), а также зона zone_zharka_static.&lt;br /&gt;
&lt;br /&gt;
После этого у вас игра станет вылетать с ошибкой про невозможность обнаружить последовательность описывающую анимацию активации аномалии.&lt;br /&gt;
&lt;br /&gt;
А это всё там же в начале файла чуть ниже того где вы добавили новый артефакт в список есть такие строчки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[af_activation_gravi]&lt;br /&gt;
;----------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
;format:                        time(sec),    sound_name,                 light_R,G,B,      light_range,        particle_name,                        af_animation_name&lt;br /&gt;
;----------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
starting                    =    5.0,        anomalygravi_idle00,    0.5, 1.0, 1.5,      5.0,            &amp;quot;anomaly2artefact_gravi_blast_start&amp;quot;,    &amp;quot;idle&amp;quot;&lt;br /&gt;
flying                        =    2.0,        anomalygravi_idle01,    0.8, 1.0, 1.2,      3.0,            &amp;quot;anomaly2artefactartefact_gravi&amp;quot;,                &amp;quot;idle&amp;quot;&lt;br /&gt;
idle_before_spawning        =    5.0,        anomalygravi_blowout5,    1.0, 1.0, 1,        0.0,            &amp;quot;anomaly2artefact_gravi_blast_finished&amp;quot;,    &amp;quot;idle&amp;quot;                &lt;br /&gt;
spawning                    =    1,          anomalygravity_entrance,    0.9, 1.1, 1.01,      0.0,        &amp;quot;&amp;quot;,        &amp;quot;idle&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что как раз и описывает анимацию..&lt;br /&gt;
&lt;br /&gt;
По-хорошему надо написать свою анимацию к жарке но это честно говоря не обязательно... потому что нам сейчас важна не красота а работоспособность....&lt;br /&gt;
Так вот... из заголовка &amp;quot;[af_activation_gravi]&amp;quot; берем название последовательности af_activation_gravi&lt;br /&gt;
и ищем сам артефакт af_fireball (кто уже забыл зачем, мы на него собирались вешать новую активацию)&lt;br /&gt;
&lt;br /&gt;
Найдете что-то вроде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[af_fireball]:af_base&lt;br /&gt;
GroupControlSection    = spawn_group&lt;br /&gt;
$spawn             = &amp;quot;artifactszharka fireball&amp;quot;&lt;br /&gt;
$npc            = on                ; option for Level Editor&lt;br /&gt;
;$prefetch         = 3&lt;br /&gt;
cform           = skeleton&lt;br /&gt;
class           = ARTEFACT&lt;br /&gt;
&lt;br /&gt;
visual                = physicsanomalyartefact_fire.ogf&lt;br /&gt;
description            = enc_zone_artifact_af-fireball&lt;br /&gt;
inv_name            = af-fireball&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И где-нибудь тут добавляете строчку:&lt;br /&gt;
artefact_activation_seq = af_activation_gravi&lt;br /&gt;
&lt;br /&gt;
И на этом всё.&lt;br /&gt;
Прописываем в artefacts.ltx в блоке&lt;br /&gt;
[af_base]:identity_immunities&lt;br /&gt;
вместо ;slot=10 вот это: slot=1.&lt;br /&gt;
Насколько я знаю, знак ; зоначает, что строка закомментирована(неактивна)&lt;br /&gt;
У себя я прописывал slot=1 между строчками&lt;br /&gt;
inv_name			= af-electra-moonlight&lt;br /&gt;
inv_name_short		        = &lt;br /&gt;
inv_weight			= 0.05&lt;br /&gt;
'''slot				= 1'''&lt;br /&gt;
inv_grid_x			= 10&lt;br /&gt;
inv_grid_y			= 10&lt;br /&gt;
для того артефакта, который хочу активировать.&lt;br /&gt;
&lt;br /&gt;
В игре берем артефакт в первый слот и активируем.&lt;br /&gt;
&lt;br /&gt;
By XiaNi&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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_%D0%BA%D0%B2%D0%B5%D1%81%D1%82%D0%BE%D0%B2-2</id>
		<title>SoC. Создание квестов-2</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_%D0%BA%D0%B2%D0%B5%D1%81%D1%82%D0%BE%D0%B2-2"/>
				<updated>2008-01-22T17:58:35Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вступление&lt;br /&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;
- перед началом работы создайте новую папку gamedata, а свои моды спрячьте подальше: работать с &amp;quot;чистой&amp;quot; версией игры не в пример удобнее и проще; особенно противопоказан Repair Mod, который с новыми диалогами часто конфликтует*&lt;br /&gt;
&lt;br /&gt;
* о том, как создать диалоги и квесты, исключающие возможность конфликта с другими подобными модами, см. часть 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;
Меченый: Да сбегаю я сейчас, сбегаю... алкоголик, блин.&lt;br /&gt;
Сидорович: Беги, беги... сил уж нет ждать, давай, родимый.&lt;br /&gt;
&lt;br /&gt;
После третьей фразы у нас будет активироваться квест &amp;quot;Принеси водки Сидоровичу&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Открываем файл gamedata\config\gameplay\character_desc_escape.xml и проводим такие манипуляции:&lt;br /&gt;
&lt;br /&gt;
- находим строку &amp;quot;&amp;lt;actor_dialog&amp;gt;escape_trader_done_blockpost_box&amp;lt;/actor_dialog&amp;gt;&amp;quot;&lt;br /&gt;
- добавляем после нее новую - &amp;quot;&amp;lt;actor_dialog&amp;gt;escape_trader_oops&amp;lt;/actor_dialog&amp;gt;&amp;quot;&lt;br /&gt;
- сохраняем изменения&lt;br /&gt;
&lt;br /&gt;
Мы добавили к Диалогу с Сидоровичем новую ветку, вернее, только ссылку на неё. Сама внутренняя структура ветки хранится в файле gamedata\config\gameplay\dialogs_escape.xml, который мы открываем и производим:&lt;br /&gt;
&lt;br /&gt;
- находим в любом месте файла промежуток между &amp;lt;/dialog&amp;gt; и &amp;lt;dialog id=&amp;quot;...&amp;quot;&amp;gt;&lt;br /&gt;
- засовываем туда такую конструкцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &amp;lt;dialog id=&amp;quot;escape_trader_oops&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_alredy_give_job&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_0&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_1&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_2&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_3&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- сохраняем изменения&lt;br /&gt;
&lt;br /&gt;
Теперь у нас прописана структура новой ветки диалога. Осталось сделать еще одну вещь - прописать строки, которые будут отображаться вместо &amp;quot;escape_trader_oops_...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для этого откроем файл gamedata\config\text\rus\stable_dialogs_escape.xml и сделаем следующее:&lt;br /&gt;
&lt;br /&gt;
- находим любой удобный промежуток между &amp;lt;/string&amp;gt; и &amp;lt;string id=&amp;quot;...&amp;quot;&amp;gt;&lt;br /&gt;
- прописываем туда следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;string id=&amp;quot;escape_trader_oops_0&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;escape_trader_oops_1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;О водке? Да о какой водке сейчас можно говорить? Вокруг оглянись. Видишь хоть одну бутылку?! &lt;br /&gt;
Вот. Именно. Кончилась она у меня, родимая, кончилась... помоги, принесешь, а? &lt;br /&gt;
Вроде у Волка на чердаке была, что-то он однажды об этом упоминал...&amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;escape_trader_oops_2&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;escape_trader_oops_3&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- сохраняем изменения&lt;br /&gt;
&lt;br /&gt;
Всё. Диалог готов. Можно грузить игру и смотреть, работает ли новая ветка.&lt;br /&gt;
А теперь будем прикреплять к этому безобразию квест &amp;quot;&amp;quot;Принеси водки Сидоровичу&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Создание базового квеста&lt;br /&gt;
&lt;br /&gt;
Активацию квеста в диалог прикрепить достаточно просто. Проводим с файлом gamedata\config\gameplay\ dialogs_escape.xml следующие манипуляции:&lt;br /&gt;
&lt;br /&gt;
- добавляем содержимое фразы &amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt; следующим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
&amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_2&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;give_info&amp;gt;kvest_vodka_started&amp;lt;/give_info&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- сохраняем изменения&lt;br /&gt;
&lt;br /&gt;
Теперь после фразы Меченого &amp;quot;Да сбегаю я сейчас, сбегаю...&amp;quot; Сидорович таки всучивает нам квест &amp;quot;Принеси водку&amp;quot;. Но не спешите тестировать изменения. Мы добавили в диалог упоминание о квесте, хотя он еще не создан.&lt;br /&gt;
&lt;br /&gt;
Исправим это недоразумение. Откройте файл gamedata\config\gameplay\tasks_escape.xml и в начале файла создайте такую конструкцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;game_task id=&amp;quot;esc_test_vodka_task&amp;quot;&amp;gt;&lt;br /&gt;
        	&amp;lt;title&amp;gt;Принести водки&amp;lt;/title&amp;gt; &amp;lt;!-- заголовок квеста --&amp;gt;&lt;br /&gt;
        	&amp;lt;objective&amp;gt;&lt;br /&gt;
            		&amp;lt;text&amp;gt;Принести водки Сидоровичу&amp;lt;/text&amp;gt;&lt;br /&gt;
            		&amp;lt;icon&amp;gt;ui_iconsTotal_find_item&amp;lt;/icon&amp;gt;&lt;br /&gt;
            		&amp;lt;infoportion_complete&amp;gt;test_quest_vodka_otdana&amp;lt;/infoportion_complete&amp;gt;        	&amp;lt;/objective&amp;gt;&lt;br /&gt;
        	&amp;lt;objective&amp;gt;&lt;br /&gt;
            		&amp;lt;text&amp;gt;Вернуться с водкой обратно&amp;lt;/text&amp;gt; &lt;br /&gt;
            		&amp;lt;map_location_type hint=&amp;quot;esc_dinamit_to_volk&amp;quot;&amp;gt;green_location&amp;lt;/map_location_type&amp;gt; &lt;br /&gt;
            		&amp;lt;object_story_id&amp;gt;Escape_novice_lager_volk&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
            		&amp;lt;infoportion_complete&amp;gt;test_quest_vodka_otdana&amp;lt;/infoportion_complete&amp;gt;&lt;br /&gt;
        	&amp;lt;/objective&amp;gt;&lt;br /&gt;
        	&amp;lt;objective&amp;gt;&lt;br /&gt;
            		&amp;lt;text&amp;gt;Найти водку на чердаке&amp;lt;/text&amp;gt;&lt;br /&gt;
            		&amp;lt;map_location_type hint=&amp;quot;escape_trader&amp;quot;&amp;gt;blue_location&amp;lt;/map_location_type&amp;gt;&lt;br /&gt;
            		&amp;lt;object_story_id&amp;gt;Escape_Trader&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
            		&amp;lt;infoportion_complete&amp;gt;test_quest_vodka_otdana&amp;lt;/infoportion_complete&amp;gt;&lt;br /&gt;
        	&amp;lt;/objective&amp;gt;&lt;br /&gt;
&amp;lt;/game_task&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы прописали данные о квесте: название, иконку, строки заданий, расположение маркеров и т.д.&lt;br /&gt;
&lt;br /&gt;
К этому файлу мы еще вернемся, т.к. в этом варианте многое проставлялось не иначе как от балды. Я еще подумаю, как заставить задание &amp;quot;Вернуться с водкой обратно&amp;quot; появиться в PDA, а то оно что-то не желает явить себя народу... впрочем, ладно, главное, что все работает и не вылетает. А исправление столь мелких багов - дело десятое. Продолжим.&lt;br /&gt;
&lt;br /&gt;
Откроем файл gamedata\config\gameplay\info_l01escape.xml и зарегистрируем до того отсутствовавшие в игре типы условий (они нам еще пригодятся для завершения работы над квестом):&lt;br /&gt;
&lt;br /&gt;
- после строки &amp;lt;game_information_portions&amp;gt; прописываем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;info_portion id=&amp;quot;test_quest_vodka_otdana&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;info_portion id=&amp;quot;kvest_vodka_started&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;task&amp;gt;esc_test_vodka_task&amp;lt;/task&amp;gt;&lt;br /&gt;
&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;info_portion id=&amp;quot;otkazalsya_prinesty_vodku&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С прописыванием условий - всё.&lt;br /&gt;
&lt;br /&gt;
Теперь займемся одной небольшой, но нужной вещью - прописыванием экранных подсказок, которые высвечиваются при получении/выполнении этапа/завершении задания.&lt;br /&gt;
&lt;br /&gt;
Для этого откроем файл gamedata\config\text\rus\string_table_tasks_escape.xml и пропишем там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;string id=&amp;quot;esc_test_prinesti_vodku&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;esc_test_prinesti_vodku_1&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;esc_test_prinesti_vodku_2&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь можно тестировать, что получилось. Сверяем результаты:&lt;br /&gt;
&lt;br /&gt;
- по окончанию разговора про водку у вас появляется новое задание&lt;br /&gt;
- в задании маркером отмечен Волк (ближайший к чердаку маркер, потому и отмечен)&lt;br /&gt;
- при получении задания на экране высвечивается уведомление&lt;br /&gt;
&lt;br /&gt;
Можно приступать к третьей стадии. Что мы забыли? Правильно - возможность выполнить квест.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация возможности выполнить квест&lt;br /&gt;
&lt;br /&gt;
На самом деле - все просто. Все условия и т.д. уже нами созданы, осталось только применить их в диалоге. Давайте несколько изменим его структуру, сделаем его ветвистым и функциональным:&lt;br /&gt;
&lt;br /&gt;
0. Сидрыч, давай поговорим о... водке. ( переход к 1)&lt;br /&gt;
1. О водке? Да о какой водке сейчас можно говорить? Вокруг оглянись. Видишь хоть одну бутылку?! Вот. Именно. Кончилась она у меня, родимая, кончилась... помоги, принесешь, а? Вроде у Волка на чердаке была, что-то он однажды об этом упоминал... ( выбор - переход к 2, 4, 5; изначально доступен только 2 вариант )&lt;br /&gt;
2. Да сбегаю я сейчас, сбегаю... алкоголик, блин. ( получение квеста, переход к 3, после этого перестает быть доступен )&lt;br /&gt;
3. Беги, беги... сил уж нет ждать, давай, родимый. ( конец, переход к списку веток Сидоровича )&lt;br /&gt;
4. Вот она, твоя бутылка водки. Ну, вернее, не твоя, а Волка... ( появляется только при наличии водки в инвентаре, при выборе водка передается Сидоровичу, квест выполняется, идет переход к 7 )&lt;br /&gt;
5. Извини, Сидрыч, я пока еще не раздобыл, терпи... ( появляется только если взять квест, переход к 6 )&lt;br /&gt;
6. А ну марш отсюда! Без бутылки пришел... ууу, вражина... ( переход к 8 )&lt;br /&gt;
7. Теперь моя будет, Меченый! Ты так Волку и передай. Спасибо, выручил... держи награду. Нееет, это не водка, обойдешься... денег дам. ( выдача награды, переход к 8 )&lt;br /&gt;
8. Ну тебя в пень... ( конец, переход к списку веток Сидоровича )&lt;br /&gt;
&lt;br /&gt;
А вот так это будет выглядеть в файле gamedata\config\gameplay\dialogs_escape.xml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;dialog id=&amp;quot;escape_trader_oops&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_alredy_give_job&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_0&amp;lt;/text&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                               	&amp;lt;text&amp;gt;escape_trader_oops_1&amp;lt;/text&amp;gt;&lt;br /&gt;
                                &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;4&amp;lt;/next&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;5&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;dont_has_info&amp;gt;kvest_vodka_started&amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
                                &amp;lt;text&amp;gt;escape_trader_oops_2&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;give_info&amp;gt;kvest_vodka_started&amp;lt;/give_info&amp;gt;&lt;br /&gt;
                                &amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;text&amp;gt;escape_trader_oops_3&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;dialogs.break_dialog&amp;lt;/action&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_4&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;precondition&amp;gt;escape_dialog.have_a_vodka&amp;lt;/precondition&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;escape_dialog.otday_vodku&amp;lt;/action&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;7&amp;lt;/next&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;has_info&amp;gt;kvest_vodka_started&amp;lt;/has_info&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_5&amp;lt;/text&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;6&amp;lt;/next&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_6&amp;lt;/text&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;8&amp;lt;/next&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_7&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;give_info&amp;gt;test_quest_vodka_otdana&amp;lt;/give_info&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;escape_dialog.transfer_deneg&amp;lt;/action&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;8&amp;lt;/next&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_8&amp;lt;/text&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь добавим в игру скрипты &amp;quot;передача денег&amp;quot; и &amp;quot;передача водки&amp;quot;. Откройте файл gamedata\scripts\escape_dialog.script и перед разделителем &amp;quot;Trader&amp;quot; добавьте туда следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function transfer_deneg (npc, actor)&lt;br /&gt;
    dialogs.relocate_money(stalker, 8000, &amp;quot;in&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
   &lt;br /&gt;
function otday_vodku (npc, actor)&lt;br /&gt;
    dialogs.relocate_item_section(npc, &amp;quot;vodka&amp;quot;, &amp;quot;out&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function have_a_vodka (stalker, player)&lt;br /&gt;
    return stalker:object (&amp;quot;vodka&amp;quot;) ~= nil&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Готово. Запускайте игру и любуйтесь.&lt;br /&gt;
&lt;br /&gt;
Есть несколько багов, кто исправит, тому пирожок =)&lt;br /&gt;
Итак:&lt;br /&gt;
&lt;br /&gt;
- второй пункт задания в PDA не отображается&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;
Из-за чего наш мод не может работать вместе с аналогичными ему модами? Да потому, что файлы dialogs_escape.xml и некоторые другие у них пересекаются. Поэтому выделим их отдельно от основных диалогов:&lt;br /&gt;
&lt;br /&gt;
Вместо dialogs_escape.xml мы будем испольховать новый - dialogs_new.xml&lt;br /&gt;
Вместо stable_dialogs_escape.xml мы будем использовать файл stable_dialogs_new.xml (важно! не знаю почему, но он должен лежать в text\..., а не в text\rus\...)&lt;br /&gt;
&lt;br /&gt;
Соответственно, весь реализованный нами новый контент перекидываем в пустые файлы (соблюдая форматирование), подчистив за собой на старом месте.&lt;br /&gt;
&lt;br /&gt;
Единственное, что останется сделать после установки того же Repair Mod'а - заново добавить ветку диалога Сидоровичу в файле character_desc_escape.xml. Остальное в новом варианте нашего мода переписывать не придется - для диалогов отведено три файла.&lt;br /&gt;
&lt;br /&gt;
Остальные файлы относятся уже к квестовой части и ни с чем пересекаться не могут - где вы видели другие моды с новыми квестами? Я - нет.&lt;br /&gt;
&lt;br /&gt;
Откройте файл gamedata\config\localization.ltx и зарегистрируйте там stable_dialogs_escape.ltx.&lt;br /&gt;
Потом откройте файл gamedata\config\system.ltx и в разделе &amp;quot;Dialogs&amp;quot; в конце строки (после dialogs_aes) пропишите dialogs_new (без &amp;quot;.ltx&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;
XiaNi - за страшный и непричесанный, но работающий пример квеста, на основе которого я и освоил принципы квестостроения =)&lt;br /&gt;
Keha – за урок по созданию новых диалогов&lt;br /&gt;
Dйja Vu – за создание wiki-ресурса&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дополнения&lt;br /&gt;
&lt;br /&gt;
1. Если изменить шапку нашего диалога в файле dialogs_escape.xml со старого варианта на такой, то ветка исчезнет после выполнения задания:&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;dialog id=&amp;quot;escape_trader_oops&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_alredy_give_job&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
&amp;lt;dont_has_info&amp;gt;test_quest_vodka_otdana&amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
          &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		...&lt;br /&gt;
&lt;br /&gt;
Не тестировал. Дело за вами =)&lt;br /&gt;
&lt;br /&gt;
2. Разнообразить речь обычных сталкеров не так просто, как кажется – они не выделены в отдельных людей, а используют один и тот же набор реплик, зависящий от локации/мастерства сталкера. Но при этом в пункте &amp;quot;Что можешь интересного рассказать&amp;quot; у каждого сталкера история разная.&lt;br /&gt;
&lt;br /&gt;
Кто сможет разузнать, откуда берутся тексты для этих реплик, тому буду очень благодарен... &lt;br /&gt;
&lt;br /&gt;
3. Неплохо бы добавить реплики гопникам, но это уже на стадии предположений. На данный момент реплик у них нет, так что если вы, например, играете с модом &amp;quot;Улучшенные взаимоотношения&amp;quot; (или как там его) или какими-либо иными способами добились нейтрального/дружеского отношения с их стороны, то при потытке заговорить игра вылетит.&lt;br /&gt;
&lt;br /&gt;
В принципе, можно зарегистрировать новые базы диалогов для бандитов (как было описано выше), созданные по образцу таковых у сталкеров. Но как эти наборы диалогов связать с гуляющими по карте гопниками - вопрос.&lt;br /&gt;
&lt;br /&gt;
У меня есть подозрения, что набор диалогов прописывается персонажу в его свойствах в файле all.spawn. Прошу специалистов по spawn-ресурсам посмотреть, имеются у NPC такие свойства или нет.&lt;br /&gt;
&lt;br /&gt;
Фух, вроде всё...&lt;br /&gt;
&lt;br /&gt;
Всем спасибо, занавес =)&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9</id>
		<title>Инструментарий</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9"/>
				<updated>2008-01-22T17:57:34Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[http://developer.nvidia.com/object/dds_utilities.html Утилиты для работы с форматом графики DDS] &lt;br /&gt;
*[http://www.axifile.com/?2831314 OGF Viewer 1.0.4] Программа позволяющая просматривать OGF-модели и экспортировать их в obj.&lt;br /&gt;
*[http://webfile.ru/1357929 Распаковщик ресурсов] Вытаскивает содержимое .db* файлов из русской игры.&lt;br /&gt;
*[http://www.ag.ru/files/software/419 Распаковщик данных игры]. Подходит для английского и русского релиза.&lt;br /&gt;
==Утилиты для редактирования и просмотра содержимого *.ltx==&lt;br /&gt;
*[http://dreamer.rusmedved.ru/programming/stalker/confedtr/stalker_confed.rar STALKER Confed 0.02] - программа для внесения изменения в конф.файлы. (автор [http://forums.ag.ru/?action=viewprofile&amp;amp;username=_Dreamer_ _Dreamer_]) &lt;br /&gt;
*[http://slil.ru/24181429 S.T.A.L.K.E.R. Configurator v0.04] ([http://ifolder.ru/1570994 Зеркало]) - еще одна программа для внесения изменения в конф.файлы. [http://forums.ag.ru/?board=fps&amp;amp;action=display&amp;amp;s=0&amp;amp;num=1174753362&amp;amp;start=2494#2494 История изменений]. (автор [http://forums.ag.ru/?action=viewprofile&amp;amp;username=Haoose Haoose]) &lt;br /&gt;
*[http://wiki.ag.ru/easyStalkEd easyStalkEd ver. 1.2] - (автор [http://forums.ag.ru/?action=viewprofile&amp;amp;username=HikeR HikeR]) - ltx-редактор с подсветкой и несколькими фичами.&lt;br /&gt;
*[http://wiki.ag.ru/StalkEd StalkEd ver. 0.10] - (автор [http://forums.ag.ru/?action=viewprofile&amp;amp;username=HikeR HikeR]) - визуальный ltx-редактор. не привязан к версиям игры.&lt;br /&gt;
*[http://gateway.vnet.ee/stalker/stp_0.2.zip S.T.A.L.K.E.R. Mod Patcher] Консольный патчер [http://www.franticgames.com/portfolio/sergey/forum/viewtopic.php?p=1622#p1622 connect]&lt;br /&gt;
*[http://data.cod.ru/825916874 ltx Editor v0.1303 Full] (автор [http://www.hitv.ru/hitvboard/index.php?showuser=8159 Deja Vu])   [[ltx Editor - User Manual]]&lt;br /&gt;
===STALKER Confed===&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Confed.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Настройки сохраняются в .xml формате&lt;br /&gt;
&lt;br /&gt;
требования - MS .NET v1.1&lt;br /&gt;
&lt;br /&gt;
можно посмотреть текущие(и новые) значения параметров, перемещаясь по дереву.&lt;br /&gt;
&lt;br /&gt;
Список файлов и значения параметров также может быть изменен при помощи GUI (но при выходе из программы эти настройки не сохраняются автоматически - нужно выбрать эту опцию в меню)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;fields&amp;gt;&lt;br /&gt;
  &amp;lt;file name=&amp;quot;data\outfit.ltx&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;section name=&amp;quot;novice_outfit&amp;quot; count=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;GroupControlSection&amp;quot; type=&amp;quot;editbox&amp;quot; default_value=&amp;quot;&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;class&amp;quot; type=&amp;quot;editbox&amp;quot; default_value=&amp;quot;&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;description&amp;quot; type=&amp;quot;editbox&amp;quot; default_value=&amp;quot;&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;full_icon_name&amp;quot; type=&amp;quot;editbox&amp;quot; default_value=&amp;quot;&amp;quot; value=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;desc short=&amp;quot;Иконка&amp;quot; value=&amp;quot;Неизвестно нахрен это надо&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/section&amp;gt;&lt;br /&gt;
    &amp;lt;section name=&amp;quot;bandit_outfit&amp;quot; count=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;$spawn&amp;quot; type=&amp;quot;editbox&amp;quot; default_value=&amp;quot;&amp;quot; value=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;desc short=&amp;quot;Спавн&amp;quot; value=&amp;quot;ХЗ чо за такое&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;/file&amp;gt;&lt;br /&gt;
  &amp;lt;file name=&amp;quot;data\items.ltx&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;section name=&amp;quot;bread&amp;quot; count=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;visual&amp;quot; type=&amp;quot;editbox&amp;quot; default_value=&amp;quot;&amp;quot; value=&amp;quot;BREAD_V&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;desc short=&amp;quot;Хлеб&amp;quot; value=&amp;quot;ХЗ чо за такое&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;/file&amp;gt;&lt;br /&gt;
&amp;lt;/fields&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Staker Mod Patcher===&lt;br /&gt;
[[Изображение:Smp.jpg]]&lt;br /&gt;
&amp;lt;pre&amp;gt;VERSION:0.02&lt;br /&gt;
AUTHOR:connect&lt;br /&gt;
DESCRIPTION:This is example S.T.A.L.K.E.R. mod. Backup your old files. Use it at your own risk.&lt;br /&gt;
&lt;br /&gt;
OPEN:test.ltx&lt;br /&gt;
&lt;br /&gt;
LOCATE:[actor]&lt;br /&gt;
Переводим указатель на нужный блок. На самом деле может быть указана часть строки.&lt;br /&gt;
&lt;br /&gt;
SET:money:=1&lt;br /&gt;
ищем строку содержащую переменную money&lt;br /&gt;
регистр имеет значение!&lt;br /&gt;
и устанавливаем значение переменной равным 1&lt;br /&gt;
&lt;br /&gt;
SET:money+=2&lt;br /&gt;
это установит значение переменной равным 3 (1+2)&lt;br /&gt;
&lt;br /&gt;
SET:money-=1&lt;br /&gt;
это установит значение переменной равным 2 (3-1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SET:money*=3&lt;br /&gt;
это установит значение переменной равным 6 (2*3)&lt;br /&gt;
&lt;br /&gt;
SET:money/=2&lt;br /&gt;
это установит значение переменной равным 3 (3/2)&lt;br /&gt;
Осторожнее с делением на ноль и делением с остатком, пока еще нет проверок.&lt;br /&gt;
&lt;br /&gt;
Как вы заметили, любая строка не содержащая в своем начале команды, является комментарием.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== ltx Editor ===&lt;br /&gt;
Автор: Deja Vu&lt;br /&gt;
&lt;br /&gt;
Версия ltx Editor v0.13209 Full&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Ltx_Editor_full_013778.JPG‎ ]]&lt;br /&gt;
&lt;br /&gt;
Программа предназначена для создания MOD (*.smf) файлов.&lt;br /&gt;
Путем редактирования ltx файла и анализа действий пользователей.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для программы необходим Microsoft Framework 1.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порядок работы:&lt;br /&gt;
* Загружаем ltx файл&lt;br /&gt;
* Добавляем, удаляем и изменяем строки&lt;br /&gt;
* Создаем Мод файл&lt;br /&gt;
* Проверяем его мод файл на корректность&lt;br /&gt;
&lt;br /&gt;
Есть возможность исправления используя мултиселект.&lt;br /&gt;
&lt;br /&gt;
P.S.&lt;br /&gt;
&lt;br /&gt;
*.smf файлы устанавливаются [[#Staker Mod Patcher|Консольным патчером]] - т.е. возможно безконфликтное встраивание модов, исспользующих одни и те же файлы, но разные параметры в них.&lt;br /&gt;
&lt;br /&gt;
===S.T.A.L.K.E.R. Configurator===&lt;br /&gt;
Автор: Haoose&lt;br /&gt;
Сайт: http://haoose.ucoz.ru/load/&lt;br /&gt;
Текущая версия: 0.08&lt;br /&gt;
[http://stalker-wiki.iblogger.org/STALKER_Configurator_v_0_04.rar Скачать_0.04]&lt;br /&gt;
Скриншот: http://novainteractive.net.ua/download/image/STALKER_Configurator_0.6.jpg&lt;br /&gt;
Программа для редактирования параметров игры S.T.A.L.K.E.R. с возможностью добавления оных&lt;br /&gt;
Количество редактируемых параметров - 1104 (легко расширяется!)&lt;br /&gt;
S.T.A.L.K.E.R. Configurator от Haoose&lt;br /&gt;
Программа для редактирования параметров игры S.T.A.L.K.E.R. с возможностью добавления оных&lt;br /&gt;
&lt;br /&gt;
Версия v 0.08 (15 апреля 2007)&lt;br /&gt;
&lt;br /&gt;
В данной версии редактируется 1104 параметра.&lt;br /&gt;
И Вы можете САМИ добавить параметры!&lt;br /&gt;
Зайдите в папку Setting и откройте файл Pages.ini&lt;br /&gt;
В нем вначале уже есть пояснения!&lt;br /&gt;
И пожалуйста, если вы нашли интересный параметр, которого нет в программе, сообщите об этом на форуме.&lt;br /&gt;
&lt;br /&gt;
На количество редактируемых параметров ограничений нет.&lt;br /&gt;
Добавлять можно только файлы INI-образного содержания (например файлы ltx).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------&lt;br /&gt;
|Что нового:|&lt;br /&gt;
-------------&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.08 (15 апреля 2007)&lt;br /&gt;
* Теперь у программы интерфейс покрасивее (Добавлен СКИН! Скорость работы програмы существенно не изменилась, т.к. там, где выводятся параметры, скина нет. Зато табличный вид имеет скин! Мне нравится...)&lt;br /&gt;
+ В табличном виде можно сохранять/загружать данные&lt;br /&gt;
* Исправлены некоторые баги в табличном виде (теперь дублирование идет нормально)&lt;br /&gt;
+ Теперь при дублировании файл !FileTable!.table пишется автоматически&lt;br /&gt;
+ Добавлена возможность включать\выключать вкладки из самой программы (для отображения\скрытия вкладок на экране необходимо перезапустить программу)&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.07 (14 апреля 2007)&lt;br /&gt;
+ Добавлено дублирование измененных параметров в выбранную папку (папка должна существовать!)&lt;br /&gt;
  Эти файлы нужны, если вы хотите создать мод, который может быть установлен программой S.T.A.L.K.E.R. MOD Installer от Haoose (подробнее о формате модов читайте в ReadMe к MOD Installer'у)&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.06 (13 апреля 2007)&lt;br /&gt;
+ Добавлен дополнительный табличный вид, в котором можно редактировать данные! Они записываются в файлы, имеется функция создания bak-файлов. (все как обычно, только нет функции замены запятой и комментарии не отсекаются)&lt;br /&gt;
  Только при изменении, для того, чтобы они обновились на главном окне необходимо перезапустить программу.&lt;br /&gt;
  Вы также можете снова открыть табличный вид - данные в нём будут уже обновленные.&lt;br /&gt;
+ Добавлен т.н. &amp;quot;Табличный режим&amp;quot;, в котором загрузка происходит более быстро, но не все вкладки можно редактировать&lt;br /&gt;
+ Добавлены два параметра в Настройки (1: вывод сообщений (был раньше, но не в интерфейсе), 2: табличный режим (новый параметр))&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.05 (12 апреля 2007)&lt;br /&gt;
+ Снова включена возможность удаления\добавления параметров и просмотра их свойств&lt;br /&gt;
+ Добавлена функция проверки на запятую (т.е. если пользователь ввел ',' вместо '.', то она заменится точкой)&lt;br /&gt;
  По-умолчанию функция отключена - её можно включить через настройки&lt;br /&gt;
+ Добавлена поддержка картинок&lt;br /&gt;
+ Добавлены параметры боеприпасов&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.05 beta 2 (11 апреля 2007)&lt;br /&gt;
+ Группы параметров теперь разбиты на отдельные файлы с возможностью включения\отключения отображения их (только через файл Pages.ini), в связи с чем поменялась структура файлов параметров (спасибо BAHyAH)&lt;br /&gt;
* Теперь нужно выбирать именно папку gamedata, а не файл в ней.&lt;br /&gt;
ВНИМАНИЕ! Временно отключена возможность добавления и удаления параметров через интерфейс программы. Это по проежнемо можно сделать через ручное редактирование файлов параметров&lt;br /&gt;
* Изменения и дополнение файла параметров&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.05 beta (5 апреля 2007)&lt;br /&gt;
+ Оптимизация (Значительно! ускорен выход из программы (теперь программа не записывает в реестр 1500 значений :) а только ОДНО) + пареметры положение элемента-только если вы его передвинули)&lt;br /&gt;
+ Добавлено окно, которое отображает сколько загружено параметров при загрузке!&lt;br /&gt;
+ Добавлено создание bak-файлов при первом изменении параметра в нем.&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.04 (3 апреля 2007 - 4 апреля 2007)&lt;br /&gt;
+ Новые параметры (в том числе ПАРАМЕТРЫ АРТЕФАКТОВ: цены,вес,воздействие) (теперь параметров всего 563 шт)&lt;br /&gt;
* Теперь сверху формы также отображается секция параметра&lt;br /&gt;
* Улучшена функции перетаскивания&lt;br /&gt;
+ Добавлена поддержка второго уровня вкладок (Напр, несколько вкладок с ценами на общей вкладке &amp;quot;Цены&amp;quot;)&lt;br /&gt;
* Немного изменен формат файла параметров Pages.ini (какие-то параметры убраны, какие-то добавлены) Подробности в нем же (Теперь стало удобней :) )&lt;br /&gt;
+ Несколько новых настроек в файле Setting.ini&lt;br /&gt;
+ Возможность изменять размеры главного окна (размеры сохраняются, но чтобы заново расположить параметры с учётом нового размера, необходимо перезапустить программу)&lt;br /&gt;
+ Возможность очищать реестр от записей программы из неё же самой&lt;br /&gt;
+ Возможность удалить параметр из файла параметров прямо из интерфейса программы&lt;br /&gt;
+ Возможность добавить параметр в файл параметров прямо из интерфейса программы&lt;br /&gt;
* С этого момента папка TMP_gamedata (файлы для тестинга) больше не поставляется в комплекте.&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.03 (2 апреля 2007 - 3 апреля 2007)&lt;br /&gt;
* Убрано ограничение на 200 файлов.&lt;br /&gt;
* Оптимизация программы (раньше, если было подключено много файлов - программа загружалась долго (например при 38 файлах - загружалась примерно 1.5 мин)) ТЕПЕРЬ загружается достаточно быстро!!!&lt;br /&gt;
* Теперь параметры отображаются без комментариев (но записываются так же с комментариями. Комментарии можно посмотреть снизу главного окна. Подробности смотри в файле параметров Pages.ini).&lt;br /&gt;
&lt;br /&gt;
ВНИМАНИЕ! Немножко изменён формат файла параметров Pages.ini всвязи с вышеперечисленным.&lt;br /&gt;
&lt;br /&gt;
+ Теперь установки цвета сохраняются в реестре (Путь HKLM\Software\VIA Soft_and_Haoose\STALKER Configurator).&lt;br /&gt;
+ Появилась возможность редактирования файла параметров Pages.ini в самой программе.&lt;br /&gt;
+ Возможность перетаскивания параметров (перетаскиваются за заголовки) (Положение сохраняется в реестре)&lt;br /&gt;
! Изменена горячая клавиша - Выход: вместо Ctrl+X стало Ctrl+Q&lt;br /&gt;
----------------------&lt;br /&gt;
v 0.02 (1 апреля 2007 - 2 апреля 2007)&lt;br /&gt;
* Глобальные изменения: ТЕПЕРЬ МОЖНО САМОМУ ДОБАВЛЯТЬ ПАРАМЕТРЫ, РЕДАКТИРУЯ INI-ФАЙЛ.&lt;br /&gt;
&lt;br /&gt;
ВНИМАНИЕ! Ограничение на количество редактируемых файлов: 200 шт.&lt;br /&gt;
На количество редактируемых параметров ограничений нет.&lt;br /&gt;
И добавлять можно только файлы INI-образного содержания (например файлы ltx)&lt;br /&gt;
&lt;br /&gt;
+ Новые параметры - 4 шт.&lt;br /&gt;
+ Теперь возможно мышкой поменять расположение вкладок и цвет формы (сохраняются).&lt;br /&gt;
+ Сохраняется последняя открытая папка.&lt;br /&gt;
+ В комплект включена утилита для распаковки архивов игры.&lt;br /&gt;
----------------------&lt;br /&gt;
V 0.01 (31 марта 2007 - 1 апреля 2007)&lt;br /&gt;
+ Первый релиз.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
До встречи.&lt;br /&gt;
Надеюсь, Вам понравится это программа.&lt;br /&gt;
&lt;br /&gt;
Сайт программы: http://haoose.ucoz.ru/&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=Ltx_Editor_-_User_Manual</id>
		<title>Ltx Editor - User Manual</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=Ltx_Editor_-_User_Manual"/>
				<updated>2008-01-22T17:57:02Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Create ltx File ==&lt;br /&gt;
=== Step 1: Load ltx File ===&lt;br /&gt;
[[Изображение:Load_ltx.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Edit ltx File ===&lt;br /&gt;
Select .ltx file section in ComboBox on top.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:SelectSection_ltx.PNG]]&lt;br /&gt;
&lt;br /&gt;
In String Grid edit source ltx file.&lt;br /&gt;
The status for every line shown in third column:&lt;br /&gt;
* '''-1''' - Delete&lt;br /&gt;
* '''0''' - None&lt;br /&gt;
* '''1''' - Add after&lt;br /&gt;
* '''2''' - Add before&lt;br /&gt;
* '''3''' - Edit&lt;br /&gt;
&lt;br /&gt;
You can edit/delete several lines at a time.&lt;br /&gt;
Select any lines and call that action.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Editing_ltx.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Save ltx File ===&lt;br /&gt;
[[Изображение:Save_ltx.PNG]]&lt;br /&gt;
&lt;br /&gt;
You can save your changes in .ltx file if you want to. &lt;br /&gt;
Red box - deleted records. &lt;br /&gt;
Green box - changed record&lt;br /&gt;
&lt;br /&gt;
== Create Mod File (*.smf) ==&lt;br /&gt;
=== Step 4: Create Mod File ===&lt;br /&gt;
[[Изображение:Save_mod.PNG]]&lt;br /&gt;
&lt;br /&gt;
The mod file is a text file with a special format.&lt;br /&gt;
&lt;br /&gt;
The Checkbox will allow you to append or to overwrite Mod File.&lt;br /&gt;
*Checked - append. &lt;br /&gt;
*Unchecked - overwrite.&lt;br /&gt;
&lt;br /&gt;
== Install Mod File (*.smf) ==&lt;br /&gt;
'''Warning!'''&lt;br /&gt;
If you do not have a version 0.1.3.27674 - it is necessary to correct the following line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OPEN:file_to_editing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With ltx Editor find smp.exe. This is a Console Patcher.&lt;br /&gt;
&lt;br /&gt;
Run it with the following parameter: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Users Files\smp.exe test.smf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D0%B2%D0%B5%D1%82%D0%BE%D0%BA_%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%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_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D0%B2%D0%B5%D1%82%D0%BE%D0%BA_%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2"/>
				<updated>2008-01-22T17:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;center&amp;gt;Создание новых веток диалогов.&amp;lt;/center&amp;gt;==&lt;br /&gt;
===Теория:===&lt;br /&gt;
&lt;br /&gt;
(Если где то чего то напутал исправляйте, многое писал интуитивно)&lt;br /&gt;
&lt;br /&gt;
'''1)''' Списки веток диалогов содержатся в файлах вида gamedata/config/gameplay/character_desc_*.xml &lt;br /&gt;
&lt;br /&gt;
Это например: &lt;br /&gt;
character_desc_zombied.xml&lt;br /&gt;
character_desc_stalker.xml&lt;br /&gt;
character_desc_garbage.xml&lt;br /&gt;
итд.&lt;br /&gt;
&lt;br /&gt;
Файлы character_desc_*.xml можно сравнить со стволом дерева диалогов.&lt;br /&gt;
В них перечисляется названия прикрепляемых веток диалогов&lt;br /&gt;
&lt;br /&gt;
Например вот список веток диалога с Сидоровичем взятый из файла character_desc_escape.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;		&amp;lt;start_dialog&amp;gt;escape_trader_start_dialog&amp;lt;/start_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_talk_info&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_jobs&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_trader_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_trader_reward&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_done_blockpost_box&amp;lt;/actor_dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В свою очередь каждая ветка диалога также может ветвится.&lt;br /&gt;
&lt;br /&gt;
'''2)''' Ветвление веток прописывается уже в других файлах.&lt;br /&gt;
Например ветвление веток диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml&lt;br /&gt;
Возьмем оттуда к примеру ветвление ветки escape_trader_jobs&lt;br /&gt;
&lt;br /&gt;
(ветвление веток обычно очень большое поэтому я приведу только часть):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dialog id=&amp;quot;escape_trader_talk_info&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_1&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;100&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;99&amp;lt;/next&amp;gt;&lt;br /&gt;
	      &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              …&lt;br /&gt;
              …&lt;br /&gt;
              …&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_0&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;precondition&amp;gt;…&amp;lt;/precondition&amp;gt; - это проверка выполнения условия. Ветка появится в диалоге, только если условие выполняется.&lt;br /&gt;
Конкретно &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt; из ветки  escape_trader_talk_info есть обращение к функции trader_has_talk_info_wr находящейся в файле скрипте gamedata/scripts/escape_dialog.script&lt;br /&gt;
&lt;br /&gt;
Функция выглядит так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function trader_has_talk_info_wr( trader, actor )&lt;br /&gt;
	return true&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt; в принципе выполняется всегда, т.к. функция всегда возвращает иситну и &amp;lt;dialog id=&amp;quot;escape_trader_talk_info&amp;quot;&amp;gt; пропускается в списк реплик.&lt;br /&gt;
Но для конкретной ветки может быть несколько precondition и других условий.&lt;br /&gt;
&lt;br /&gt;
Далее &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt; (если я верно понимаю) это так же своего рода проверка условия. В данном случае проверка на то закончена стадия tutorialа или нет. Т.е ветка допустится в список реплик если стадия tutorialа закончена.&lt;br /&gt;
более детально об этом в конце данной статьи.&lt;br /&gt;
&lt;br /&gt;
А далее идут конкретные фразы содержащие ссылки на вытекающие фразы&lt;br /&gt;
&lt;br /&gt;
Фраза:        &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_0&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
это основа ветки escape_trader_talk_info. &lt;br /&gt;
(Вообще как я понял в любой основной ветке любого диалога фраза &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt; будет основой из которой далее будет все вытекать)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt; - это ссылка на вытекающую фразу &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;       &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_1&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;100&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;99&amp;lt;/next&amp;gt;&lt;br /&gt;
	    &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В свою очередь   &amp;lt;next&amp;gt;100&amp;lt;/next&amp;gt;, &amp;lt;next&amp;gt;99&amp;lt;/next&amp;gt;, &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt; это ссылки на фразы веточки растущие из фразы &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
'''3)''' Текст каждой фразы содержится уже в четвертом файле. Для диалога с Сидоровичем тексты лежат в файле gamedata/config/text/rus/stable_dialogs_escape.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;escape_trader_talk_info_0&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;escape_trader_talk_info_1&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти строки содержат тексты для фраз &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt; и &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого диалоги разложены по 4 а то и более файлам.&lt;br /&gt;
&lt;br /&gt;
Да кстати, путь по веткам может быть зацикленным если того требует диалог. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;…&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
 &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;…&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;11&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;12&amp;lt;/next&amp;gt;&lt;br /&gt;
 &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;…&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;  - Это возврат к фразе 1. (зацикливание)  &lt;br /&gt;
            &amp;lt;next&amp;gt;111&amp;lt;/next&amp;gt;&lt;br /&gt;
 &amp;lt;/phrase&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Практика:===&lt;br /&gt;
Добавим в диалог с Сидоровичем ветку своего собственного изготовления.Например такую: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые? &lt;br /&gt;
Сидорович: Чего?!!&lt;br /&gt;
Меченый: Ты их совсем, совсем не кормишь?&lt;br /&gt;
Сидорович: В следующий раз, как пойдешь в зону, бери-ка  вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился… Шутник.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для этого:&lt;br /&gt;
&lt;br /&gt;
'''1)''' В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для  trader_а  суем свою ветку с произвольным названием. (например   &amp;lt;actor_dialog&amp;gt;escape_trader_letat_gusi&amp;lt;/actor_dialog&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Т.е у нас получится так&lt;br /&gt;
&amp;lt;pre&amp;gt;		…&lt;br /&gt;
	&amp;lt;specific_character id=&amp;quot;escape_trader&amp;quot; no_random = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
		…&lt;br /&gt;
		…&lt;br /&gt;
		…&lt;br /&gt;
		&amp;lt;start_dialog&amp;gt;escape_trader_start_dialog&amp;lt;/start_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_talk_info&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_jobs&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_trader_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_trader_reward&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_done_blockpost_box&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
                        &amp;lt;actor_dialog&amp;gt;escape_trader_letat_gusi&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
	&amp;lt;/specific_character&amp;gt;&lt;br /&gt;
		…&amp;lt;/pre&amp;gt;&lt;br /&gt;
Записываем изменения и с файлом character_desc_escape.xml  все.&lt;br /&gt;
&lt;br /&gt;
'''2)''' Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml&lt;br /&gt;
&lt;br /&gt;
Диалогу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые? &lt;br /&gt;
Сидорович: Чего?!!&lt;br /&gt;
Меченый: Ты их совсем, совсем не кормишь?&lt;br /&gt;
Сидорович: В следующий раз, как пойдешь в зону, бери-ка  вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился… Шутник.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
который мы хотим реализовать будет соответствовать такая структура:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;escape_trader_letat_gusi_0&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;escape_trader_letat_gusi_1&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
 &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt; escape_trader_letat_gusi_2&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt; escape_trader_letat_gusi_3&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
условия наличия ветки в диалоге можно взять из ветки  &amp;lt;dialog id=&amp;quot;escape_trader_talk_info&amp;quot;&amp;gt;&lt;br /&gt;
Т.е берем условия  &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt; и  &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
(Можно было конечно прописать в скрипте еще одно условие для ветки, чтоб она появилась только один раз, &lt;br /&gt;
а потом больше не возникала. Но об этом как нибудь позже допишу.)&lt;br /&gt;
&lt;br /&gt;
В итоге у нас получилась такая структура:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dialog id=&amp;quot;escape_trader_letat_gusi&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
                   &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                             &amp;lt;text&amp;gt;escape_trader_letat_gusi_0&amp;lt;/text&amp;gt;&lt;br /&gt;
                              &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
                    &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                               &amp;lt;text&amp;gt;escape_trader_letat_gusi_1&amp;lt;/text&amp;gt;&lt;br /&gt;
                                &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;text&amp;gt; escape_trader_letat_gusi_2&amp;lt;/text&amp;gt;&lt;br /&gt;
                                &amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;text&amp;gt; escape_trader_letat_gusi_3&amp;lt;/text&amp;gt;&lt;br /&gt;
                      &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
  &amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Которую нужно вставить в любом месте между dialog id_шниками других веток в файле dialogs_escape.xml.&lt;br /&gt;
&lt;br /&gt;
Главное не промахнутся и засунуть именно между, а не внутрь одного из dialog id&lt;br /&gt;
&lt;br /&gt;
Все что находится между тегами &amp;lt;dialog id=&amp;quot;***&amp;quot;&amp;gt; и   &amp;lt;/dialog&amp;gt; это внутенности конкретного dialog id&lt;br /&gt;
&lt;br /&gt;
Т.е совать наш&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dialog id=&amp;quot;escape_trader_letat_gusi&amp;quot;&amp;gt;&lt;br /&gt;
 …  &lt;br /&gt;
&amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
надо &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dialog id=&amp;quot;*** &amp;quot;&amp;gt;&lt;br /&gt;
…&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&lt;br /&gt;
здесь&lt;br /&gt;
&amp;lt;dialog id=&amp;quot;*** &amp;quot;&amp;gt;&lt;br /&gt;
…&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
но&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dialog id=&amp;quot;*** &amp;quot;&amp;gt;&lt;br /&gt;
не здесь&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После сохранения внесенных изменений с файлом dialogs_escape.xml все.&lt;br /&gt;
&lt;br /&gt;
'''3)''' Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;escape_trader_letat_gusi_0&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;escape_trader_letat_gusi_1&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;escape_trader_letat_gusi_2&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;escape_trader_letat_gusi_3&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в любом месте между уже существующими string id &lt;br /&gt;
	&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;string id=&amp;quot;*** &amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
              сюда&lt;br /&gt;
	&amp;lt;string id=&amp;quot;*** &amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но не внутрь одного из существующих string id&lt;br /&gt;
	&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;string id=&amp;quot;*** &amp;quot;&amp;gt;&lt;br /&gt;
               не сюда&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После сохранения изменений, у нас все готово. Можно грузить игру и смотреть что получилось.&lt;br /&gt;
&lt;br /&gt;
===Практический пример не работает со вторым патчем - решение проблемы===&lt;br /&gt;
&lt;br /&gt;
По крайней мере со вторым патчем несовместимо условие &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
использование этого условия приведет к вылету &lt;br /&gt;
&lt;br /&gt;
так как со вторым патчем из файла escape_dialog.script была удалена функция: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function trader_has_talk_info_wr( trader, actor ) &lt;br /&gt;
   return true &lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
можно либо воткнуть эту функцию обратно в escape_dialog.script &lt;br /&gt;
&lt;br /&gt;
либо использовать другие более мение подходящие условия, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;precondition&amp;gt;escape_dialog.trader_alredy_give_job&amp;lt;/precondition&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
добавлено XiaNi: по поводу &amp;lt;precondition&amp;gt; в данном примере.. он тут реально вообще не нужен тем более что возвращает всегда одно и то же... тут уж или реально надо использовать функцию которая хоть чтото проверяет нужное для диалога... а так... диалог и так будет активным если убрать &amp;lt;precondition&amp;gt; (в данном случае это 100%)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;has_info&amp;gt; и &amp;lt;dont_has_info&amp;gt; это условия на присутствие и соответственно отсутствие у игрока &amp;quot;информации&amp;quot; которая на самом деле всеголишь флажок что пользователь слышал о чемто или видел чтото который выдается:&lt;br /&gt;
1. условиями &amp;quot;логики&amp;quot; прописанной объектам или неписям.&lt;br /&gt;
2. скриптами&lt;br /&gt;
3. диалогами через например &amp;quot;&amp;lt;give_info&amp;gt;tutorial_end&amp;lt;/give_info&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В принципе &amp;lt;has_info&amp;gt; соответствует скриптовому аналогу функции has_alife_info&lt;br /&gt;
так например &amp;quot;&amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&amp;quot; можно заменить на &amp;quot;&amp;lt;precondition&amp;gt;check_tutor_end&amp;lt;/precondition&amp;gt;&amp;quot; и дописать в &amp;quot;escape_dialog.script&amp;quot; строчки :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function check_tutor_end(actor, npc)&lt;br /&gt;
if	has_alife_info(&amp;quot;tutorial_end&amp;quot;)&lt;br /&gt;
	then&lt;br /&gt;
	 return true&lt;br /&gt;
        else&lt;br /&gt;
         return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
в которой мы проверяем есть ли информация tutorial_end у игрока.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_*****.ltx</id>
		<title>Файлы: w *****.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_*****.ltx"/>
				<updated>2008-01-22T17:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Наиболее весомые параметры==&lt;br /&gt;
*ammo_class&lt;br /&gt;
*class&lt;br /&gt;
*weapon_class			; assault_rifle / heavy_weapon / shotgun / sniper_rifle&lt;br /&gt;
Внешний вид *visual              		= weapons\knife\wpn_knife_hud.ogf&lt;br /&gt;
&lt;br /&gt;
==Все==&lt;br /&gt;
здесь перечислены '''все''' параметры оружия. некоторые из них не используются движком, некоторые неприменимы к какому-либо типу оружия. но это все, что есть.&lt;br /&gt;
&lt;br /&gt;
*$npc&lt;br /&gt;
*$prefetch&lt;br /&gt;
*$spawn&lt;br /&gt;
*ammo_class класс патронов из [[weapons.ltx]]&lt;br /&gt;
*ammo_current&lt;br /&gt;
*ammo_mag_size емкость магазина&lt;br /&gt;
*animation_slot&lt;br /&gt;
*auto_spawn_ammo&lt;br /&gt;
*bullet_speed скрость вылета пули&lt;br /&gt;
*cam_dispersion&lt;br /&gt;
*cam_dispersion_inc&lt;br /&gt;
*cam_dispertion_frac&lt;br /&gt;
*cam_horz_factor&lt;br /&gt;
*cam_horz_prob&lt;br /&gt;
*cam_max_angle&lt;br /&gt;
*cam_max_angle_horz&lt;br /&gt;
*cam_relax_speed&lt;br /&gt;
*cam_relax_speed_ai&lt;br /&gt;
*cam_step_angle_horz&lt;br /&gt;
*cform&lt;br /&gt;
*class&lt;br /&gt;
*condition_shot_dec&lt;br /&gt;
*control_inertion_factor&lt;br /&gt;
*cost цена&lt;br /&gt;
*description ссылка на описание оружия в [[string_table_enc_weapons.xml]] &lt;br /&gt;
*direction вектор выстрела, обычно направлен по направлению взгляда&lt;br /&gt;
*discovery_dependency&lt;br /&gt;
*dispersion_start базовая дисперсия&lt;br /&gt;
*ef_main_weapon_type&lt;br /&gt;
*ef_weapon_type&lt;br /&gt;
*explode_duration длительность взрыва (о гранатах)&lt;br /&gt;
*fire_dispersion_base&lt;br /&gt;
*fire_dispersion_condition_factor&lt;br /&gt;
*fire_distance эффективная дальность&lt;br /&gt;
*fire_modes режимы стрельбы (1, 2, 3 — короткие очереди, -1 — автоматический огонь)&lt;br /&gt;
*fire_point&lt;br /&gt;
*fire_point2&lt;br /&gt;
*flame_particles&lt;br /&gt;
*fragment_speed скорость разлетания осколков (о гранатах)&lt;br /&gt;
*grenade_bone&lt;br /&gt;
*grenade_class&lt;br /&gt;
*grenade_flame_particles&lt;br /&gt;
*grenade_launcher_name&lt;br /&gt;
*grenade_launcher_status&lt;br /&gt;
*grenade_launcher_x&lt;br /&gt;
*grenade_launcher_y&lt;br /&gt;
*grenade_vel&lt;br /&gt;
*GroupControlSection&lt;br /&gt;
*hand_dependence&lt;br /&gt;
*hit_impulse ударный импульс&lt;br /&gt;
*hit_power наносимый урон&lt;br /&gt;
*hit_type тип урона (обычно fire_wound, то есть огнестрел плюс порезы)&lt;br /&gt;
*holder_fov_modifier&lt;br /&gt;
*holder_range_modifier&lt;br /&gt;
*hud ссылка на HUD&lt;br /&gt;
*inv_grid_height высота&lt;br /&gt;
*inv_grid_width  ширина&lt;br /&gt;
*inv_grid_x      координаты иконки оружия в ui_icon_equipment.dds&lt;br /&gt;
*inv_grid_y&lt;br /&gt;
*inv_name имя для скриптов, ссылка на название оружия в [[string_table_enc_weapons.xml]]&lt;br /&gt;
*inv_name_short короткое имя&lt;br /&gt;
*inv_weight вес оружия&lt;br /&gt;
*kill_msg_height&lt;br /&gt;
*kill_msg_width&lt;br /&gt;
*kill_msg_x&lt;br /&gt;
*kill_msg_y&lt;br /&gt;
*launch_speed&lt;br /&gt;
*lens_texture&lt;br /&gt;
*lens_texture_h&lt;br /&gt;
*lens_texture_w&lt;br /&gt;
*lens_texture_x&lt;br /&gt;
*lens_texture_y&lt;br /&gt;
*light_color&lt;br /&gt;
*light_disabled&lt;br /&gt;
*light_range&lt;br /&gt;
*light_time&lt;br /&gt;
*light_var_color&lt;br /&gt;
*light_var_range&lt;br /&gt;
*max_radius для ботов&lt;br /&gt;
*max_zoom_factor фактор увеличения&lt;br /&gt;
*min_radius для ботов&lt;br /&gt;
*misfire_condition_k&lt;br /&gt;
*misfire_probability&lt;br /&gt;
*normal&lt;br /&gt;
*orientation&lt;br /&gt;
*PDM_crouch&lt;br /&gt;
*PDM_crouch_no_acc&lt;br /&gt;
*PDM_disp_accel_factor&lt;br /&gt;
*PDM_disp_base&lt;br /&gt;
*PDM_disp_vel_factor&lt;br /&gt;
*ph_mass физическая масса, может не совпадать с инвентарным весом. используется для обсчета падений, киданий, роняний...&lt;br /&gt;
*position&lt;br /&gt;
*rocket_class&lt;br /&gt;
*rpm скорострельность&lt;br /&gt;
*rpm_empty_click частота спуска при пустом магазине&lt;br /&gt;
*scheduled для ботов&lt;br /&gt;
*scope_name имя прицела&lt;br /&gt;
*scope_status тип прицела (0-нет, 1-несъемный, 2-съемный)&lt;br /&gt;
*scope_texture текстура прицела&lt;br /&gt;
*scope_x координаты иконки прицела накладываемой поверх иконки оружия&lt;br /&gt;
*scope_y --&amp;quot;&amp;quot;--&lt;br /&gt;
*scope_zoom_factor кратность прицела&lt;br /&gt;
*shell_dir&lt;br /&gt;
*shell_particles&lt;br /&gt;
*shell_point&lt;br /&gt;
&lt;br /&gt;
*single_handed одноручное-двуручное оружие&lt;br /&gt;
*[[slot]]&lt;br /&gt;
*smoke_particles&lt;br /&gt;
*snd_add_cartridge&lt;br /&gt;
*snd_close&lt;br /&gt;
*snd_close_weapon&lt;br /&gt;
*snd_draw&lt;br /&gt;
*snd_empty&lt;br /&gt;
*snd_explode&lt;br /&gt;
*snd_holster&lt;br /&gt;
*snd_open_weapon&lt;br /&gt;
*snd_reload&lt;br /&gt;
*snd_reload_1&lt;br /&gt;
*snd_reload_grenade&lt;br /&gt;
*snd_shoot&lt;br /&gt;
*snd_shoot1&lt;br /&gt;
*snd_shoot2&lt;br /&gt;
*snd_shoot3&lt;br /&gt;
*snd_shoot_1&lt;br /&gt;
*snd_shoot_duplet&lt;br /&gt;
*snd_shoot_grenade&lt;br /&gt;
*snd_silncer_shot&lt;br /&gt;
*snd_switch&lt;br /&gt;
*sprint_allowed&lt;br /&gt;
*startup_ammo&lt;br /&gt;
*strap_bone0&lt;br /&gt;
*strap_bone1&lt;br /&gt;
*strap_orientation&lt;br /&gt;
*strap_position&lt;br /&gt;
*time_to_aim время прицеливания для срабатывания супер-пули&lt;br /&gt;
*tracer_start_length дистанция от игрока для начала отображения трассера&lt;br /&gt;
*tracer_trail_scale&lt;br /&gt;
*tracer_width ширина следа трассера&lt;br /&gt;
*tri_state_reload&lt;br /&gt;
*use_aim_bullet использовать ли супер-пулю&lt;br /&gt;
*visual ogm-модель&lt;br /&gt;
*wallmark_section&lt;br /&gt;
*weapon_class&lt;br /&gt;
*weapon_remove_time&lt;br /&gt;
*zoom_enabled&lt;br /&gt;
*zoom_hide_crosshair&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Дополняшки&amp;quot;==&lt;br /&gt;
&amp;lt;pre&amp;gt;;addons&lt;br /&gt;
scope_status				= 2							; 0 - no addon&lt;br /&gt;
silencer_status				= 0;2							; 1 - permanent&lt;br /&gt;
grenade_launcher_status		= 0;2							; 2 - attachable&lt;br /&gt;
&lt;br /&gt;
zoom_enabled				= true						; (on,off)zoom mode (right mouse button)&lt;br /&gt;
scope_zoom_factor	    	= 50						; fov for zoom mode&lt;br /&gt;
&lt;br /&gt;
scope_name 					= wpn_addon_scope			; section name for the attachable scope&lt;br /&gt;
scope_x 					= 47						; offset in inventory icon&lt;br /&gt;
scope_y 					= 0&lt;br /&gt;
silencer_name  				= wpn_addon_silencer		; section name for the attachable silencer&lt;br /&gt;
silencer_x 					= 218						; offset in inventory icon&lt;br /&gt;
silencer_y 					= 9					&lt;br /&gt;
grenade_launcher_name 		= wpn_addon_grenade_launcher; section name for the attachable grenade launcher&lt;br /&gt;
grenade_launcher_x 			= 126						; offset in inventory icon&lt;br /&gt;
grenade_launcher_y 			= 24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===silencer===&lt;br /&gt;
Секция wpn_addon_silencer&lt;br /&gt;
*silencer_bullet_speed&lt;br /&gt;
*silencer_fire_distance&lt;br /&gt;
*silencer_hit_impulse&lt;br /&gt;
*silencer_hit_power&lt;br /&gt;
*silencer_light_color&lt;br /&gt;
*silencer_light_range&lt;br /&gt;
*silencer_light_time&lt;br /&gt;
*silencer_light_var_color&lt;br /&gt;
*silencer_light_var_range&lt;br /&gt;
*silencer_name&lt;br /&gt;
*silencer_smoke_particles&lt;br /&gt;
*silencer_status&lt;br /&gt;
*silencer_x&lt;br /&gt;
*silencer_y&lt;br /&gt;
&lt;br /&gt;
==Устаревшие параметры==&lt;br /&gt;
(obsolete) - не используются&lt;br /&gt;
*ammo_limit&lt;br /&gt;
*ammo_elapsed&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_actor.ltx</id>
		<title>Файлы: actor.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_actor.ltx"/>
				<updated>2008-01-22T17:52:33Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Параметры передвижения==&lt;br /&gt;
*max_item_mass = ; необходимо изменить также параметр max_weight в [[system.ltx]]&lt;br /&gt;
&lt;br /&gt;
*jump_speed    = &lt;br /&gt;
*crouch_coef = &lt;br /&gt;
*climb_coef	= &lt;br /&gt;
*run_coef                = &lt;br /&gt;
*sprint_koef				= &lt;br /&gt;
*run_back_coef			= &lt;br /&gt;
*walk_back_coef			= &lt;br /&gt;
*air_control_param		= &lt;br /&gt;
*walk_accel              =&lt;br /&gt;
&lt;br /&gt;
==Параметры сложности==&lt;br /&gt;
*hit_probability_gd_novice		= 0.20&lt;br /&gt;
*hit_probability_gd_stalker		= 0.30&lt;br /&gt;
*hit_probability_gd_veteran		= 0.40&lt;br /&gt;
*hit_probability_gd_master		= 0.50&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[actor_immunities_gd_novice] ;новичок, коэфф. сопротивления..&lt;br /&gt;
burn_immunity 				= 0.5	;  огонь&lt;br /&gt;
strike_immunity 			      = 0.5	;  удар&lt;br /&gt;
shock_immunity 				= 0.5	;  электрошок&lt;br /&gt;
wound_immunity				= 0.5	;  разрыв &lt;br /&gt;
radiation_immunity 			= 0.5	;  радиация&lt;br /&gt;
telepatic_immunity 			= 0.5	;  пси воздействие&lt;br /&gt;
chemical_burn_immunity 		      = 0.5	;  химческие вещества&lt;br /&gt;
explosion_immunity 			= 0.1	;  взрывы&lt;br /&gt;
fire_wound_immunity  		      = 0.5	;  пулестойкость&lt;br /&gt;
&lt;br /&gt;
[actor_immunities_gd_stalker]&lt;br /&gt;
burn_immunity 				= 0.65	;коэффициенты иммунитета &lt;br /&gt;
strike_immunity 			      = 0.65&lt;br /&gt;
shock_immunity 				= 0.65&lt;br /&gt;
wound_immunity				= 0.65&lt;br /&gt;
radiation_immunity 			= 0.65&lt;br /&gt;
telepatic_immunity 			= 0.65&lt;br /&gt;
chemical_burn_immunity 		      = 0.65&lt;br /&gt;
explosion_immunity 			= 0.3&lt;br /&gt;
fire_wound_immunity  		      = 0.65&lt;br /&gt;
&lt;br /&gt;
[actor_immunities_gd_veteran]&lt;br /&gt;
burn_immunity 				= 0.8		;коэффициенты иммунитета &lt;br /&gt;
strike_immunity 			      = 0.8&lt;br /&gt;
shock_immunity 				= 0.8&lt;br /&gt;
wound_immunity				= 0.8&lt;br /&gt;
radiation_immunity 			= 0.8&lt;br /&gt;
telepatic_immunity 			= 0.8&lt;br /&gt;
chemical_burn_immunity 		      = 0.8&lt;br /&gt;
explosion_immunity 			= 0.6&lt;br /&gt;
fire_wound_immunity  		      = 0.8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[actor_immunities_gd_master] ;!кажется используется в игре по-умолчанию!&lt;br /&gt;
burn_immunity 				= 1.0		;коэффициенты иммунитета &lt;br /&gt;
strike_immunity 			      = 1.0&lt;br /&gt;
shock_immunity 				= 1.0&lt;br /&gt;
wound_immunity				= 1.0&lt;br /&gt;
radiation_immunity 			= 1.0&lt;br /&gt;
telepatic_immunity 			= 1.0&lt;br /&gt;
chemical_burn_immunity 		      = 1.0&lt;br /&gt;
explosion_immunity 			= 1.0&lt;br /&gt;
fire_wound_immunity  		      = 1.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_trade_*****.ltx</id>
		<title>Файлы: trade *****.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_trade_*****.ltx"/>
				<updated>2008-01-22T17:51:58Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Структура магазина==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[trader]&amp;lt;br&amp;gt;&lt;br /&gt;
buy_condition = {+[переменная]} [используемое состояние], ... &amp;lt;br&amp;gt;&lt;br /&gt;
buy_supplies = {+[переменная]} [используемое состояние], ... &amp;lt;br&amp;gt;&lt;br /&gt;
sell_condition = {+[переменная]} [используемое состояние], ... &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется то состояние, которое ближе к левой части и переменная которого в состоянии истина(не точно).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[trader]&lt;br /&gt;
buy_condition = trader_generic_buy&lt;br /&gt;
buy_supplies = {+esc_kill_bandits_quest_done} supplies_after_fabric, supplies_start&lt;br /&gt;
sell_condition = {+esc_kill_bandits_quest_done} trader_after_fabric_sell, trader_start_sell&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Состояние магазина==&lt;br /&gt;
(buy_condition) &amp;quot;Стоимость покупки&amp;quot; -  описываются цены по которым покупаются товары и покупаются ли.&amp;lt;br&amp;gt;&lt;br /&gt;
(buy_supplies)  &amp;quot;Поставка&amp;quot; - описывается что продается.&amp;lt;br&amp;gt;&lt;br /&gt;
(sell_condition) &amp;quot;Стоимость продажи&amp;quot; - описываются по какой цене продается.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Стоимость покупки===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[используемое состояние]&amp;lt;br&amp;gt;&lt;br /&gt;
обьект				= '''Коэф1, Коэф2'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Коэф1/2''' - коэфиценты&amp;lt;br&amp;gt;&lt;br /&gt;
Коэфиценты используются при расчеты [[#Формула стоимости|стоимости]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[trader_generic_buy]&lt;br /&gt;
ammo_9x18_fmj				= 0.9,	0.1 &lt;br /&gt;
ammo_9x19_pbp				= 0.9,	0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Поставка===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[используемое состояние]&amp;lt;br&amp;gt;&lt;br /&gt;
обьект				= '''Количество, Вероятность появления'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Количество''' - порядковая величина&amp;lt;br&amp;gt;&lt;br /&gt;
'''Вероятность появления''' - значение от 0 - 1: 0 - 0%, 1 - 100%; Вероятность проверяется для каждоей единицы!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[supplies_start]&lt;br /&gt;
wpn_groza   = 1, 0.1         ;Вероятность появления 1 автомата Гроза 10%&lt;br /&gt;
wpn_ak74    = 3, 0.7         ;Вероятность появление каждого из 3х автоматов АК-74 70%&lt;br /&gt;
wpn_abakan                   ;если без параметров - не продается&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Стоимость продажи===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[используемое состояние]&amp;lt;br&amp;gt;&lt;br /&gt;
обьект				= '''Коэф1, Коэф2'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Коэф1/2''' - коэфиценты&amp;lt;br&amp;gt;&lt;br /&gt;
Коэфиценты используются при расчеты [[#Формула стоимости|стоимости]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[trader_start_sell]&lt;br /&gt;
wpn_groza				= 4, 0       ;Цена продажи грозы в 2 раза больше номинала&lt;br /&gt;
wpn_ak74				= 1, 1       ;Цена продажи АК-74 равна номиналу&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Формула стоимости==&lt;br /&gt;
&amp;lt;code&amp;gt;Стоимость = ('''Коэф1''' + '''Коэф2''') * '''Номинальная_Стоимость_Обьекта''' / 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Номинальная_Стоимость_Обьекта''' - параметр cost - в файле объекта&amp;lt;br&amp;gt;&lt;br /&gt;
'''Коэф1/2''' - Коэфиценты указанные в магазине&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_abakan.ltx</id>
		<title>Файлы: w abakan.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_abakan.ltx"/>
				<updated>2008-01-22T17:49:53Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Автомат АН-94 «Абакан»==&lt;br /&gt;
Автомат АН-94 был создан в рамках армейского конкурса «Абакан» на замену АК-74. &lt;br /&gt;
{{Параметры:Оружие&lt;br /&gt;
|ammo_class=ammo_5.45x39_fmj, ammo_5.45x39_ap&lt;br /&gt;
|inv_weight			= 3.9	&lt;br /&gt;
|ammo_mag_size= 30&lt;br /&gt;
|class               	= WP_AK74&lt;br /&gt;
|cost					= 2500&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
description				= enc_weapons1_wpn-abakan&amp;lt;/pre&amp;gt;&lt;br /&gt;
Калибр &lt;br /&gt;
ammo_class				= ammo_5.45x39_fmj, ammo_5.45x39_ap  ; name of the ltx-section of used ammo&lt;br /&gt;
&lt;br /&gt;
===Реальные параметры===&lt;br /&gt;
{| border=1&lt;br /&gt;
 !colspan=2 |ТТХ АН-94&lt;br /&gt;
 |-&lt;br /&gt;
 |Калибр, мм &lt;br /&gt;
 | 5,45&lt;br /&gt;
 |-&lt;br /&gt;
 |Вес без магазина, кг &lt;br /&gt;
 | 3,85&lt;br /&gt;
 |-&lt;br /&gt;
 |Общая длина с откинутым прикладом, мм &lt;br /&gt;
 | 943&lt;br /&gt;
 |-&lt;br /&gt;
 |Общая длина в сложенном состоянии, мм &lt;br /&gt;
 | 728&lt;br /&gt;
 |-&lt;br /&gt;
 |Длина ствола, мм &lt;br /&gt;
 | 405&lt;br /&gt;
 |-&lt;br /&gt;
 |Емкость магазина, количество патронов &lt;br /&gt;
 | 30 (60)&lt;br /&gt;
 |-&lt;br /&gt;
 |Прицельная дальность, м &lt;br /&gt;
 | 1000&lt;br /&gt;
 |-&lt;br /&gt;
 |Эффективная дальность, м &lt;br /&gt;
 | 650&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Описание==&lt;br /&gt;
===Описание в игре===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &amp;lt;string id=&amp;quot;enc_weapons1_wpn-abakan&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;text&amp;gt;Оружие элитных войск советской армии.&lt;br /&gt;
 Был разработан в качестве замены устаревшему Акм 74/2.&lt;br /&gt;
 В &amp;quot;Обокане&amp;quot; подвижны не только внутренние механизмы,&lt;br /&gt;
 но и вся ствольная коробка вместе со стволом, что позволяет снизить отдачу, тем самым значительно повысив точность боя.\n&lt;br /&gt;
 Боеприпасы:\n обычный 5,45x39 мм,\n бронебойный 5,45x39 мм БП.&amp;lt;/text&amp;gt;&amp;lt;/pre&amp;gt; &lt;br /&gt;
Очень странно, что за &amp;quot;Акм 74/2&amp;quot;?&lt;br /&gt;
===Описание===&lt;br /&gt;
Двухтемповый автомат со «смещённым (задержанным) импульсом отдачи» показал гораздо более высокую кучность, чем АК-74. Механика автомата АН-94 построена на принципе газоотвода с подвижным блоком ствол-затвор-затворная рама-ствольная коробка. При стрельбе очередями весь этот блок смещается назад до упора за время первых двух выстрелов, производимых с высоким темпом, далее автоматически осуществляется переход на низкий темп стрельбы. &lt;br /&gt;
&lt;br /&gt;
Главной отличительной чертой внешнего вида АН-94 является широкое применение пластмасс (стеклонаполненный, армированный полиамид). Ложа в классическом понимании здесь заменена на кожух лафетного типа, внутри которого по металлическим направляющим движется стреляющий агрегат, состоящий из ствола, соединенного со ствольной коробкой. Внутри коробки размещаются затворная рама с необычно коротким затвором и курок. Спусковой механизм интегрирован с пистолетной рукояткой и при необходимости легко отсоединяется от общего рабочего механизма. То, что на первый взгляд кажется газовой трубкой с необычным подствольным размещением, на самом деле является направляющим рычагом, поддерживающим ствол при его откате по принципу артиллерийского орудия. Сюда же монтируется с переходником и штатный 40-мм гранатомет ГП-25. Существует так же вариант штурмового комплекса, с несъемным ГП-30 (вернее, снять его можно, но стрелять будет проблематично - подствольник намертво смонтирован с цевьем. Обращает на себя внимание и то, что штык-нож крепится не в нижнем, как у АК, положении, а справа сбоку. Это делается из соображений обеспечения одновременного крепления и гранатомета, и штык-ножа. В других конструкциях, прежде, чем устанавливать гранатомет, необходимо удостовериться, что штык-нож снят. Горизонтальное положение обеспечивает большую, по сравнению с вертикальным, проникающую способность в межреберное пространство. В таком положении штык-ножом можно делать не только колющие, но и боковые режущие удары. Что касается газовой трубки, то она, как равно и весь стреляющий агрегат вместе с коробкой размещаются внутри кожуха. &lt;br /&gt;
&lt;br /&gt;
Конструкция АН-94 более сложна, чем АК, что отрицательно сказывается на его надежности (в частности, более высока чувствительность к загрязнению деталей). В полевых условиях с повышенной влажностью ствол и газоотводная трубка из-за высокой капиллярности заполняются конденсатом, что может привести к поломке автомата при стрельбе и ранению стрелка. &lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что формально АН-94 (Автомат Никонова) принят на вооружение Российскй Армией, маловероятно, что в будущем он заменит АК-74 и его клоны - хотя бы потому, что Калашниковых уже произведено с большим запасом, да и надежность Абакана сводит на нет его достоинства. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Фотографии автомата АН-94 «Абакан»&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_system.ltx</id>
		<title>Файлы: system.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_system.ltx"/>
				<updated>2008-01-22T17:48:58Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Параметры slot_persistent_* === &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slot_persistent_1  = true		;knife&lt;br /&gt;
slot_persistent_2  = false		;pistol&lt;br /&gt;
slot_persistent_3  = false		;automatic&lt;br /&gt;
slot_persistent_4  = true		;grenades&lt;br /&gt;
slot_persistent_5  = true		;binocular&lt;br /&gt;
slot_persistent_6  = true		;bolt&lt;br /&gt;
slot_persistent_7  = false		;outfit&lt;br /&gt;
slot_persistent_8  = true		;pda&lt;br /&gt;
slot_persistent_9  = true		;detector&lt;br /&gt;
slot_persistent_10  = true		;torch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Эти параметры проверяются когда игрок обшаривает контейнер или начинает торговаться с кемто.  &lt;br /&gt;
&lt;br /&gt;
Если стоит '''false''' то вещь находящаяся в слоте при обшаривании или торговле будет автоматически выложена из слота в рюкзак.&lt;br /&gt;
Если стоит '''true''' то при обшаривании/торговле вещь останется в слоте.&lt;br /&gt;
&lt;br /&gt;
При завершении торговли или обшаривании контейнера, слоты автоматом забирают в себя соответствующие вещи из рюкзака. (если конечно эти вещи остались в рюкзаке - не были проданы или выложены в контейнер)&lt;br /&gt;
&lt;br /&gt;
Если для параметров:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slot_persistent_1  = true		;knife&lt;br /&gt;
slot_persistent_5  = true		;binocular&lt;br /&gt;
slot_persistent_6  = true		;bolt&lt;br /&gt;
slot_persistent_8  = true		;pda&lt;br /&gt;
slot_persistent_9  = true		;detector&lt;br /&gt;
slot_persistent_10  = true		;torch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
вместо true выставить false при обшаривании или торговле в рюкзаке можно увидеть ПДА, фонарик, детектор, ножь, болты, которые в обычном режиме в инвентаре не отображаются.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BC%D0%BE%D0%B4%D0%BE%D0%B2</id>
		<title>Установка модов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BC%D0%BE%D0%B4%D0%BE%D0%B2"/>
				<updated>2008-01-22T17:48:30Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Как установить мод?==&lt;br /&gt;
&lt;br /&gt;
Моды делятся на две группы:&lt;br /&gt;
&lt;br /&gt;
* моды, поставляемые в виде папки gamedata с набором файлов внутри&lt;br /&gt;
* моды, поставляемые в виде инсталлятора&lt;br /&gt;
&lt;br /&gt;
Установка модов второй группы обычно не представляет проблем - просто укажите программе путь к игре.&lt;br /&gt;
&lt;br /&gt;
Моды же первой группы устанавливаются так: необходимо поместить папку gamedata в папку с игрой. В итоге должно получится так:&lt;br /&gt;
&lt;br /&gt;
''.../S.T.A.L.K.E.R/gamedata''&lt;br /&gt;
&lt;br /&gt;
Если папка с модом расположена именно так, то игра загрузит его.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%B0%D1%80%D1%82%D0%B5%D1%84%D0%B0%D0%BA%D1%82%D0%B0</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_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%B0%D1%80%D1%82%D0%B5%D1%84%D0%B0%D0%BA%D1%82%D0%B0"/>
				<updated>2008-01-22T17:47:44Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Сегодня мы на примере научимся созданию новых артефактов. Создадим, например, артефакт под названием &amp;quot;Ромашка&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;Статья написана по материалам Hunter Mod.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Создание конфига==&lt;br /&gt;
&lt;br /&gt;
Заходим в папку ''gamedata\config\misc'' и открываем файл '''artefacts.ltx'''.&amp;lt;br&amp;gt;И находим, например, артефакт &amp;quot;Медуза&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;[af_medusa]:af_base&lt;br /&gt;
GroupControlSection	= spawn_group&lt;br /&gt;
$spawn				= &amp;quot;artifacts\moscito medusa&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$prefetch 			= 64&lt;br /&gt;
cform				= skeleton&lt;br /&gt;
class				= ARTEFACT&lt;br /&gt;
&lt;br /&gt;
visual				= physics\anomaly\artefact_blackdrip.ogf  &lt;br /&gt;
description			= enc_zone_artifact_af-medusa&lt;br /&gt;
inv_name			= af-medusa&lt;br /&gt;
inv_name_short		= &lt;br /&gt;
inv_weight			= 0.5&lt;br /&gt;
&lt;br /&gt;
inv_grid_x			= 9&lt;br /&gt;
inv_grid_y			= 4&lt;br /&gt;
&lt;br /&gt;
cost				= 1000&lt;br /&gt;
&lt;br /&gt;
jump_height			= .5&lt;br /&gt;
&lt;br /&gt;
particles			= anomaly2\artefact\artefact_gravi&lt;br /&gt;
&lt;br /&gt;
lights_enabled = false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;скорости увеличения (уменьшения) &lt;br /&gt;
health_restore_speed		= 0.0			&lt;br /&gt;
radiation_restore_speed		= 0.0005&lt;br /&gt;
satiety_restore_speed		= 0.0&lt;br /&gt;
power_restore_speed			= 0.0&lt;br /&gt;
bleeding_restore_speed		= 0.0&lt;br /&gt;
hit_absorbation_sect		= af_medusa_absorbation&lt;br /&gt;
&lt;br /&gt;
artefact_activation_seq		= af_activation_bold&lt;br /&gt;
&lt;br /&gt;
[af_medusa_absorbation]&lt;br /&gt;
burn_immunity = 1.0				;коэффициенты иммунитета &lt;br /&gt;
strike_immunity = 1.0&lt;br /&gt;
shock_immunity = 1.0&lt;br /&gt;
wound_immunity = 1.0		&lt;br /&gt;
radiation_immunity = 1.0&lt;br /&gt;
telepatic_immunity = 1.0&lt;br /&gt;
chemical_burn_immunity = 1.0&lt;br /&gt;
explosion_immunity = 1.0&lt;br /&gt;
fire_wound_immunity  = 0.98&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этой секции задаются параметры артефакта, начиная от внешнего вида и заканчивая коэффициентами различных эффектов вроде вывода радиации. Сделаем копию секции, принадлежающей &amp;quot;Медузе&amp;quot;, и заменим её название с ''af_medusa'' на ''af_romashka''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Должно выйти примерно вот так:&lt;br /&gt;
&amp;lt;pre&amp;gt;[af_romashka]:af_base&lt;br /&gt;
GroupControlSection	= spawn_group&lt;br /&gt;
$spawn				= &amp;quot;artifacts\moscito romashka&amp;quot;&lt;br /&gt;
&lt;br /&gt;
$prefetch 			= 64&lt;br /&gt;
cform				= skeleton&lt;br /&gt;
class				= ARTEFACT&lt;br /&gt;
&lt;br /&gt;
visual				= physics\anomaly\artefact_blackdrip.ogf  &lt;br /&gt;
description			= enc_zone_artifact_af-romashka&lt;br /&gt;
inv_name			= af-romashka&lt;br /&gt;
inv_name_short		= &lt;br /&gt;
inv_weight			= 0.5&lt;br /&gt;
&lt;br /&gt;
inv_grid_x			= 9&lt;br /&gt;
inv_grid_y			= 4&lt;br /&gt;
&lt;br /&gt;
cost				= 1000&lt;br /&gt;
&lt;br /&gt;
jump_height			= .5&lt;br /&gt;
&lt;br /&gt;
particles			= anomaly2\artefact\artefact_gravi&lt;br /&gt;
&lt;br /&gt;
lights_enabled = false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;скорости увеличения (уменьшения) &lt;br /&gt;
health_restore_speed		= 0.0			&lt;br /&gt;
radiation_restore_speed		= 0.0005&lt;br /&gt;
satiety_restore_speed		= 0.0&lt;br /&gt;
power_restore_speed			= 0.0&lt;br /&gt;
bleeding_restore_speed		= 0.0&lt;br /&gt;
hit_absorbation_sect		= af_romashka_absorbation&lt;br /&gt;
&lt;br /&gt;
artefact_activation_seq		= af_activation_bold&lt;br /&gt;
&lt;br /&gt;
[af_romashka_absorbation]&lt;br /&gt;
burn_immunity = 1.0				;коэффициенты иммунитета &lt;br /&gt;
strike_immunity = 1.0&lt;br /&gt;
shock_immunity = 1.0&lt;br /&gt;
wound_immunity = 1.0		&lt;br /&gt;
radiation_immunity = 1.0&lt;br /&gt;
telepatic_immunity = 1.0&lt;br /&gt;
chemical_burn_immunity = 1.0&lt;br /&gt;
explosion_immunity = 1.0&lt;br /&gt;
fire_wound_immunity  = 0.98&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Назначение некоторых параметров, влияющих на одевшего артефакт:&lt;br /&gt;
&lt;br /&gt;
* health_restore_speed  - прирост к скорости восстановления здоровья&lt;br /&gt;
* radiation_restore_speed  - прирост скорость вывода радиации&lt;br /&gt;
* satiety_restore_speed  - прирост к голоду&lt;br /&gt;
* power_restore_speed  - прирост к выносливости&lt;br /&gt;
* bleeding_restore_speed - прирост к скорости остановки кровотечений&lt;br /&gt;
&lt;br /&gt;
== Создание описания и имени артефакта ==&lt;br /&gt;
Заходим в ''gamedata\config\text\rus'' и открываем файл '''string_table_enc_zone.xml'''.&lt;br /&gt;
Добавим туда строку с названием артефакта.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &amp;lt;string id=&amp;quot;af-romashka&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;&amp;quot;Ромашка&amp;quot;&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь у артефакта есть имя, но одного его недостаточно. Нужно сделать описание.&amp;lt;br&amp;gt;&lt;br /&gt;
Поэтому добавим и его.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;enc_zone_artifact_af-romaska&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Очень странный артефакт. Впервые появился в Зоне где-то в 2011 году, но толку от него - ноль. Ученые&lt;br /&gt;
                      не обнаружили никакого влияния артефакта на организм носителя.&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;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана: [[Участник:Шустрый|Шустрый]]&amp;lt;br&amp;gt;&lt;br /&gt;
Редакция: [[Участник:BAC9-FLCL|BAC9-FLCL]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=3dsmax._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_%D0%B8_%D0%B8%D1%85_%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%B8%D0%B3%D1%80%D1%83</id>
		<title>3dsmax. Создание моделей и их добавление в игру</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=3dsmax._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_%D0%B8_%D0%B8%D1%85_%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%B8%D0%B3%D1%80%D1%83"/>
				<updated>2008-01-22T17:47:00Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Создание моделей и добавление в игру==&lt;br /&gt;
&lt;br /&gt;
Итак, для работы нам понадобятся следующие инструменты:&lt;br /&gt;
&lt;br /&gt;
* '''Autodesk 3D Studio Max''' версий '''6''','''7''' или '''8''' (на других вроде плагин экспорта не работает, но я не уверен)&lt;br /&gt;
* '''3DS Max STALKER Plug-In''' для экспорта в формат object (.obj)&lt;br /&gt;
* '''S.T.A.L.K.E.R. SDK'''&lt;br /&gt;
&lt;br /&gt;
При создании собственных текстур потребуется:&lt;br /&gt;
&lt;br /&gt;
* '''Adobe Photoshop'''&lt;br /&gt;
* '''DDS-плагин''' от nVidia&lt;br /&gt;
&lt;br /&gt;
Приступим к креативу. Пример будем рассматривать на примитивной модели кубика.&lt;br /&gt;
&lt;br /&gt;
'''1)''' Запускаем 3DS Max и создаем наш кубик.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''2)''' Далее накладываем на него текстуру. Запускаем редактор материалов (кнопка «М» по дефолту), выбираем тип материала, нажав на кнопку Standart (1), и в раскрывшемся списке выбираем S.T.A.L.K.E.R. Mtl (2), далее, в свитке Blinn Basic Parameters, щелкаем на маленькую кнопку напротив Diffuse (3), в раскрывшемся списке выбираем Bitmap (4), и выбираем требуемую текстуру из папки gamedata нашего SDK. Для примера я выбрал ...gamedata\textures\wpn\wpn_pkm_lenta.dds.&lt;br /&gt;
&lt;br /&gt;
Далее назначаем нашу текстуру для кубика и настраиваем ее внешний вид либо в самом Редакторе Материалов, либо, если объект сложный, - модификатором Unwrap UVW (кто работает в 3DS Max - знает). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''3)''' После текстуривания нашего объекта отмасштабируем его до нормальных размеров игры (для облегчения этого процесса я импортирую в сцену какую-нибудь модель из игры, например, АК-74), и приступаем к созданию костей. &lt;br /&gt;
&lt;br /&gt;
Идем в Create -&amp;gt; Systems -&amp;gt; Bones и создаем пару костей внутри нашей коробки приблизительно такого вида (см. рисунок). Первую косточку обзываем, например, kost, вторую можно не трогать и вообще ее можно потом удалить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''4)''' Теперь выделяем нашу коробку и в закладке Modify добавляем ей модификатор Physique (1). В свертке модификатора жмем кнопку Attach to Node (2), кликаем по нашей косточке с именем kost и в развернувшемся списке выбираем Riquid (3) и жмем Initialize (4) (см. рисунок).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''5)''' Далее, в свитке Physique level of Detail меняем параметр Skin Update на Rigid, в дереве модификатора Physique выбираем вершины нашего объекта (Vertex), выделяем все вершины нашего кубика при нажатой кнопке Select, выбираем тип вершин Rigid (4), жмем кнопку Assign to Link (5) и кликаем по нашей косточке.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_5.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''6)''' Теперь все готово к экспорту в формат object (.obj), который понимает Actor Editor из SDK. Идем на закладку Utilites и жмем кнопку S.T.A.L.K.E.R. Export (1) (кнопка эта у вас там будет находиться при правильной настройке плагина). Выделяем наш кубик и жмем кнопку Export Skin. Сохраняем, наблюдая лог в окошке на отсутствие ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_6.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''7)''' Запускаем Actor Editor из комплекта SDK и загружаем нашу сохраненную модель и видим приблизительно следующую картину:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_7.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''8)''' В панели Object Items видим характеристики нашего объекта (нас интересуют только Surfaces и Bones). В Surfaces задаются материалы и шейдеры для нашего объекта. Раскрываем список Surfaces, выбираем 01-Default (это я забыл материал в Максе обозвать) и устанавливаем параметры:&lt;br /&gt;
&lt;br /&gt;
* '''Shader:''' models/model &lt;br /&gt;
* '''Compile:''' def_shaders/def_vertex&lt;br /&gt;
* '''Game Mtl:''' objects/small_box&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_8.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''9)''' Видимо использовать можно и другие, но я еще не разобрался до конца.&lt;br /&gt;
&lt;br /&gt;
Далее настраиваем нашу косточку. Раскрываем список Bones, выбираем нашу kost. Далее жмем напротив Generate Shape кнопку All, настраиваем вес параметром Mass, можно настроить материал параметром Game Material (я оставил default_object) затем выбираем тип баунд_бокса нажатием кнопки Type. Я выбрал Box. Его кстати можно потом вращать, двигать и масштабировать.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Model_Tutorial_9.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''10)''' После настройки параметров экспортируем нашу коробочку в .ogf-файл из меню File -&amp;gt; Export, и подменяем полученной моделью, например, болт. Далее ходим и швыряемся магазинами от ПКМ в головы зазевавшимся неписям :)&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
'''Статья создана:''' [[Участник:tambovski|tambovski]].&lt;br /&gt;
&lt;br /&gt;
'''Копирование без разрешения автора запрещено.''' [http://www.amkmod.ru AMK Mod Team]&lt;br /&gt;
&lt;br /&gt;
[[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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_%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%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_%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2"/>
				<updated>2008-01-22T17:45:48Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Создание новых веток диалогов==&lt;br /&gt;
===Теория===&lt;br /&gt;
&lt;br /&gt;
1) Списки веток диалогов содержатся в файлах вида gamedata/config/gameplay/character_desc_*.xml &lt;br /&gt;
&lt;br /&gt;
Это, например:&lt;br /&gt;
&lt;br /&gt;
character_desc_zombied.xml&lt;br /&gt;
character_desc_stalker.xml&lt;br /&gt;
character_desc_garbage.xml&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Файлы character_desc_*.xml можно сравнить со стволом дерева диалогов.&lt;br /&gt;
В них перечисляется названия прикрепляемых веток диалогов&lt;br /&gt;
&lt;br /&gt;
Например вот список веток диалога с Сидоровичем взятый из файла character_desc_escape.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;		&amp;lt;start_dialog&amp;gt;escape_trader_start_dialog&amp;lt;/start_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_talk_info&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_jobs&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_trader_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_trader_reward&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_done_blockpost_box&amp;lt;/actor_dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В свою очередь каждая ветка диалога также может ветвится.&lt;br /&gt;
&lt;br /&gt;
2) Ветвление диалогов прописывается уже в других файлах.&lt;br /&gt;
&lt;br /&gt;
Например, ветвление диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml&lt;br /&gt;
Возьмем оттуда, например, ветвление escape_trader_jobs.&lt;br /&gt;
&lt;br /&gt;
Ветвление имеет довольно большие масштабы, поэтому приведу только часть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dialog id=&amp;quot;escape_trader_talk_info&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_1&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;100&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;99&amp;lt;/next&amp;gt;&lt;br /&gt;
	      &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_0&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;precondition&amp;gt;…&amp;lt;/precondition&amp;gt; - это проверка выполнения условия. Ветка появится в диалоге, только если условие выполняется.&lt;br /&gt;
Конкретно &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt; из ветки  escape_trader_talk_info - это обращение к функции trader_has_talk_info_wr, находящейся в файле скрипте gamedata/scripts/escape_dialog.script&lt;br /&gt;
&lt;br /&gt;
Функция выглядит так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function trader_has_talk_info_wr( trader, actor )&lt;br /&gt;
	return true&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть, судя по его структуре, &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt; выполняется всегда, т.к. функция всегда возвращает истину и &amp;lt;dialog id=&amp;quot;escape_trader_talk_info&amp;quot;&amp;gt; пропускается в списк реплик.&lt;br /&gt;
&lt;br /&gt;
Но для конкретной ветки может быть несколько precondition и других условий.&lt;br /&gt;
&lt;br /&gt;
Далее, &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt; - это еще одна проверка, на этот раз на наличие у игрока так называемых infoportions, выдаваемы в процессе ключевых диалогов. В данном случае это проверка на то, закончена ли определенная стадия туториала, или нет. Т.е. ветка допустится в список реплик если стадия туториала закончена.&lt;br /&gt;
&lt;br /&gt;
Более детально мы это разберем в конце статьи.&lt;br /&gt;
&lt;br /&gt;
А далее идут конкретные фразы, содержащие ссылки на вытекающие фразы, например:&lt;br /&gt;
       &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_0&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это основа ветки escape_trader_talk_info. &lt;br /&gt;
&lt;br /&gt;
'''Важно!''' В любой основной ветке любого диалога фраза &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt; будет основой, из которой далее будет все вытекать. Она должна обязательно присутствовать и в вашем диалоге.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt; - это ссылка на вытекающую фразу &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;       &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_1&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;100&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;99&amp;lt;/next&amp;gt;&lt;br /&gt;
	    &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В свою очередь   &amp;lt;next&amp;gt;100&amp;lt;/next&amp;gt;, &amp;lt;next&amp;gt;99&amp;lt;/next&amp;gt;, &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt; это ссылки на фразы веточки растущие из фразы &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
3) Текст каждой фразы содержится в третьем файле. Для диалога с Сидоровичем тексты лежат в файле gamedata/config/text/rus/stable_dialogs_escape.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;escape_trader_talk_info_0&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;escape_trader_talk_info_1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Спрашивай, только я ведь всего не знаю. Сам понимаешь, сижу тут &lt;br /&gt;
целыми днями, а жизнь - она вся там, снаружи, в Зоне. Могу рассказать о Зоне вообще, а немного &lt;br /&gt;
могу о ближайших окрестностях, где сам ходил.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
        ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти строки содержат тексты для фраз &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt; и &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итого диалоги разложены по трем, а то и более файлам.&lt;br /&gt;
&lt;br /&gt;
Да кстати, путь по веткам может быть зацикленным, если того требует диалог. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;...&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
 &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;...&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;11&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;12&amp;lt;/next&amp;gt;&lt;br /&gt;
 &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;...&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;  - Это возврат к фразе №1 (зацикливание)  &lt;br /&gt;
            &amp;lt;next&amp;gt;111&amp;lt;/next&amp;gt;&lt;br /&gt;
 &amp;lt;/phrase&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Практика===&lt;br /&gt;
Добавим в диалог с Сидоровичем ветку своего собственного изготовления.Например такую: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Меченый: Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые? &lt;br /&gt;
Сидорович: Чего?!&lt;br /&gt;
Меченый: Ты их совсем, совсем не кормишь?&lt;br /&gt;
Сидорович: В следующий раз, как пойдешь в зону, бери-ка  вместо водяры побольше антирада. А то &lt;br /&gt;
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для этого:&lt;br /&gt;
&lt;br /&gt;
1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для  trader припишем свою ветку с произвольным названием. Это будет, например, &amp;lt;actor_dialog&amp;gt;escape_trader_letat_gusi&amp;lt;/actor_dialog&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.е у нас получится так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;specific_character id=&amp;quot;escape_trader&amp;quot; no_random = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
		...&lt;br /&gt;
		&amp;lt;start_dialog&amp;gt;escape_trader_start_dialog&amp;lt;/start_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_talk_info&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_jobs&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_trader_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_trader_reward&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;escape_trader_done_blockpost_box&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
                        &amp;lt;actor_dialog&amp;gt;escape_trader_letat_gusi&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
	&amp;lt;/specific_character&amp;gt;&lt;br /&gt;
		…&amp;lt;/pre&amp;gt;&lt;br /&gt;
Записываем изменения, с этим файлом пока всё.&lt;br /&gt;
&lt;br /&gt;
2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml&lt;br /&gt;
&lt;br /&gt;
Диалогу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые? &lt;br /&gt;
Сидорович: Чего?!!&lt;br /&gt;
Меченый: Ты их совсем, совсем не кормишь?&lt;br /&gt;
Сидорович: В следующий раз, как пойдешь в зону, бери-ка  вместо водяры побольше антирада. А то &lt;br /&gt;
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет соответствовать такая структура:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;escape_trader_letat_gusi_0&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt;escape_trader_letat_gusi_1&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
 &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt; escape_trader_letat_gusi_2&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;text&amp;gt; escape_trader_letat_gusi_3&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Условия наличия ветки в диалоге можно взять из ветки &amp;lt;dialog id=&amp;quot;escape_trader_talk_info&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.е берем условия &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt; и &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;.&lt;br /&gt;
Можно было, конечно, прописать в скрипте еще одно условие для ветки, чтобы она появилась только один раз, а потом больше не возникала. Но об этом как-нибудь позже.&lt;br /&gt;
&lt;br /&gt;
В итоге у нас получилась такая структура:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dialog id=&amp;quot;escape_trader_letat_gusi&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
                   &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                             &amp;lt;text&amp;gt;escape_trader_letat_gusi_0&amp;lt;/text&amp;gt;&lt;br /&gt;
                              &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
                    &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                               &amp;lt;text&amp;gt;escape_trader_letat_gusi_1&amp;lt;/text&amp;gt;&lt;br /&gt;
                                &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;text&amp;gt; escape_trader_letat_gusi_2&amp;lt;/text&amp;gt;&lt;br /&gt;
                                &amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;text&amp;gt; escape_trader_letat_gusi_3&amp;lt;/text&amp;gt;&lt;br /&gt;
                      &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
  &amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Её нужно вставить в любом месте между dialog id'ами других веток в файле dialogs_escape.xml. Главное - не промахнутся и засунуть именно между, а не внутрь одного из dialog id.&lt;br /&gt;
&lt;br /&gt;
После сохранения внесенных изменений с файлом dialogs_escape.xml все.&lt;br /&gt;
&lt;br /&gt;
3) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml&lt;br /&gt;
&lt;br /&gt;
Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;escape_trader_letat_gusi_0&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;escape_trader_letat_gusi_1&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;escape_trader_letat_gusi_2&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;escape_trader_letat_gusi_3&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;В следующий раз, как пойдешь в зону, бери-ка  вместо водяры побольше &lt;br /&gt;
антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился... &lt;br /&gt;
Шутник.&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;
В любом месте между уже существующими string id.&lt;br /&gt;
После сохранения изменений, у нас все готово. Можно загружать игру и смотреть что получилось.&lt;br /&gt;
&lt;br /&gt;
===Дополнительно===&lt;br /&gt;
&lt;br /&gt;
'''Внимание!''' После патча 1.002 данный урок перестал работать. Причина - со вторым патчем несовместимо это условие:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;precondition&amp;gt;escape_dialog.trader_has_talk_info_wr&amp;lt;/precondition&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дело в том, что во втором патче из файла escape_dialog.script была удалена функция: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function trader_has_talk_info_wr( trader, actor ) &lt;br /&gt;
   return true &lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно либо записать эту функцию обратно в escape_dialog.script, либо использовать другие более-менее подходящие условия, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;precondition&amp;gt;escape_dialog.trader_alredy_give_job&amp;lt;/precondition&amp;gt;&amp;lt;/pre&amp;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;
* [[Участник:BAC9-FLCL|BAC9-FLCL]]&lt;br /&gt;
* [[Участник:Keha|Keha]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%82%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%86%D0%B5%D0%B2</id>
		<title>SoC. Редактирование торговцев</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%82%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%86%D0%B5%D0%B2"/>
				<updated>2008-01-22T17:44:53Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Общее==&lt;br /&gt;
Урок посвящен редактированию ассортимента торговцев в игре. Эта, в общем-то несложная процедура у многих вызывает вопросы, поэтому я и решил разъяснить, что да как.&lt;br /&gt;
&lt;br /&gt;
==Файлы==&lt;br /&gt;
Ассортимент товаров у торговцев хранится в файлах вида trade_[...].ltx, где ... - системное имя торговца. Это файлы:&lt;br /&gt;
&lt;br /&gt;
* trade_barman.ltx - Бармен&lt;br /&gt;
* trade_dolg.ltx - сержант Петренко на базе группировки &amp;quot;Долг&amp;quot;&lt;br /&gt;
* trade_ecolog.ltx - Сахаров&lt;br /&gt;
* trade_freedom.ltx - Скряга на базе группировки &amp;quot;Свобода&amp;quot;&lt;br /&gt;
* trade_trader.ltx - Сидорович&lt;br /&gt;
&lt;br /&gt;
* trade_generic.ltx - обычный сталкер&lt;br /&gt;
&lt;br /&gt;
Все они хранятся в папке:&lt;br /&gt;
&amp;lt;pre&amp;gt;...\S.T.A.L.K.E.R\gamedata\config\misc\...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Структура файла===&lt;br /&gt;
Разберем структуру файла trade_barman.ltx:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[trader]&lt;br /&gt;
buy_condition = barman_generic_buy&lt;br /&gt;
sell_condition = {+yan_labx16_switcher_primary_off} barman_after_brain_sell, {+bar_darklab_document_done} barman_after_darkvalley_sell, barman_start_sell&lt;br /&gt;
buy_supplies = { yan_labx16_switcher_primary_off} supplies_after_brain, { bar_darklab_document_done} &lt;br /&gt;
supplies_after_darkvalley, supplies_start&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь содержатся условия, от которых зависит диапазон продаваемых/покупаемых торговцем предметов. То есть, например, после выполнения квеста на &amp;quot;Янтаре&amp;quot; соответствующее условие считается выполненным, и ассортимент сменяется на новый, из другого раздела.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
После этого идет раздел [barman_generic_buy], содержащий предметы, которые бармен покупает.&lt;br /&gt;
&lt;br /&gt;
Структура записи в этом разделе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;wpn_walther				= 0.3,	0.1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wpn_walther - имя предмета, в данном случае - пистолет &amp;quot;Вальтер&amp;quot;&lt;br /&gt;
* 0.3 - максимальная цена, по которой торговец купит предмет&lt;br /&gt;
* 0.1 - минимальная цена, по которой торговец купит предмет&lt;br /&gt;
&lt;br /&gt;
Цена зависит от репутации игрока.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Далее идет раздел [supplies_start] - ассортимент, предоставляемый барменом в начале игры. Он поделен на категории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[supplies_start]&lt;br /&gt;
&lt;br /&gt;
;'''Аммуниция'''&lt;br /&gt;
ammo_9x18_fmj 			= 15,	0.6&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
;'''Оружие'''&lt;br /&gt;
wpn_pb					= 3,	0.6&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
;'''Броники'''&lt;br /&gt;
stalker_outfit			= 3,	0.7&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
;'''Медикаменты'''&lt;br /&gt;
bandage					= 5,	0.6&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
;'''Еда'''&lt;br /&gt;
bread					= 10,	0.5&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На самом деле можете добавлять новый предмет, куда захотите, все эти &amp;quot;категории&amp;quot; существуют исключительно в целях удобства. Игра их не учитывает.&lt;br /&gt;
&lt;br /&gt;
Теперь о структуре одной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;wpn_walther				= 3,	0.6&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wpn_walther - имя предмета, в данном случае - пистолет &amp;quot;Вальтер&amp;quot;&lt;br /&gt;
* 3 - количество предметов этого типа у торговца&lt;br /&gt;
* 0.6 - вероятность появления каждого из них&lt;br /&gt;
&lt;br /&gt;
То есть если значения равны 4, 0.5, то это означает, что у торговца в ассортименте появятся два предмета этого типа.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Далее идет раздел [barman_start_sell]. Рассмотрим структуру записи в нем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;wpn_walther				= 2,	4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wpn_walther - имя предмета, в данном случае - пистолет &amp;quot;Вальтер&amp;quot;&lt;br /&gt;
* Цена высчитываетя по формулае (2+4)/2 * базовую цену предмета*(МР).&lt;br /&gt;
* Модифиакор Реакции(МР) - Цена зависит от репутации игрока. (по умолчанию = 1)&lt;br /&gt;
&lt;br /&gt;
===Расширяем ассортимент===&lt;br /&gt;
Чтобы добавить в начальный ассортимент, например, винтовку FN2000, проделаем следующее:&lt;br /&gt;
&lt;br /&gt;
1. Добавим её в раздел [supplies_start]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;Оружие&lt;br /&gt;
...&lt;br /&gt;
wpn_fn2000 = 2, 0.5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Добавим её в раздел [barman_start_sell]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;Оружие&lt;br /&gt;
...&lt;br /&gt;
wpn_fn2000				1, 3&amp;lt;/pre&amp;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;
* [[Участник:BAC9-FLCL|BAC9-FLCL]]&lt;br /&gt;
&lt;br /&gt;
Редактор:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:Deja Vu|Deja Vu]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F</id>
		<title>Редактирование оружия</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F"/>
				<updated>2008-01-22T17:44:00Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Общие положения==&lt;br /&gt;
&lt;br /&gt;
Сегодня мы разберем то, каким образом можно редактировать оружие в игре - от характеристик до описания.&lt;br /&gt;
Характеристики оружия хранятся здесь:&lt;br /&gt;
&lt;br /&gt;
''...\S.T.A.L.K.E.R\gamedata\config\weapons\w_[...].ltx''&lt;br /&gt;
&lt;br /&gt;
==Разбор структуры конфига==&lt;br /&gt;
&lt;br /&gt;
Возьмем, для примера, конфиг '''w_g36.ltx'''. Он делится на разделы:&lt;br /&gt;
&lt;br /&gt;
===Первый раздел===&lt;br /&gt;
&lt;br /&gt;
Здесь хранится общая информация о оружии - его класс, тип, ссылки на спавн и т.д.&lt;br /&gt;
Нас интересуют следующие строки:&lt;br /&gt;
&lt;br /&gt;
* '''description''' = enc_weapons1_wpn-g36 - ссылка на string_id, из которого игра подгружает описание этого оружия.&lt;br /&gt;
* '''ef_main_weapon_type''' = 2 - основной тип, к которому принадлежит оружие&lt;br /&gt;
* '''ef_weapon_type''' = 6 - подтип, к которому принадлежит оружие&lt;br /&gt;
&lt;br /&gt;
===Второй раздел===&lt;br /&gt;
&lt;br /&gt;
Содержит модификаторы, которые даются к углу зрения/дальности обзора NPC, держащего это оружие в руках:&lt;br /&gt;
&lt;br /&gt;
* '''holder_range_modifier''' = 1.85 - во сколько раз увеличивается eye_range &lt;br /&gt;
* '''holder_fov_modifier''' = 0.3 - во сколько раз увеличивается eye_fov&lt;br /&gt;
&lt;br /&gt;
===Третий раздел===&lt;br /&gt;
&lt;br /&gt;
Содержит данные о самом оружии, его некоторых характеристиках:&lt;br /&gt;
&lt;br /&gt;
* '''cost''' = 18000 - базовая цена (торговцы умножают её на некоторый коэффициент)&lt;br /&gt;
* '''weapon_class''' = assault_rifle - класс оружия (здесь - штурмовая винтовка)&lt;br /&gt;
	&lt;br /&gt;
* '''ammo_mag_size''' = 30 - размер магазина&lt;br /&gt;
* '''ammo_class''' = ammo_5.56x45_ss190, ammo_5.56x45_ap - типы используемых патронов&lt;br /&gt;
* '''grenade_class''' = ammo_m209 - тип используемых гранат&lt;br /&gt;
* '''fire_modes''' = 1, -1 - режимы ведения огня&lt;br /&gt;
&lt;br /&gt;
* '''hand_dependence''' = 1 - засивимость о рук (?) - возможно, речь идет о качании ствола&lt;br /&gt;
* '''single_handed''' = 0 - держится ли только в одной руке&lt;br /&gt;
&lt;br /&gt;
* '''slot''' = 2 - слот в инвентаре&lt;br /&gt;
* '''animation_slot''' = 2 - вид анимации (для пистолета/для винтовки)&lt;br /&gt;
&lt;br /&gt;
* '''inv_name''' = wpn-g36 - ссылка на имя, отображаемое в инвентаре, тоже берется из string table, как и описание&lt;br /&gt;
* '''inv_name_short''' = wpn-g36 - короткое имя; в данном случае используется то же самое&lt;br /&gt;
* '''inv_weight''' = 3.6 - вес&lt;br /&gt;
&lt;br /&gt;
* '''inv_grid_width''' = 5 - координаты первого угла иконки по x&lt;br /&gt;
* '''inv_grid_height''' = 2 - координаты первого угла иконки по y&lt;br /&gt;
* '''inv_grid_x''' = 0 - координаты второго угла иконки по x&lt;br /&gt;
* '''inv_grid_y''' = 10 - координаты второго угла иконки по y&lt;br /&gt;
&lt;br /&gt;
===Четвертый раздел===&lt;br /&gt;
&lt;br /&gt;
В четвертом разделе хранится информация о износе/отдаче оружия.&lt;br /&gt;
Практически все параметры там снабжены комментариями, поэтому приведу лишь самые интересные:&lt;br /&gt;
&lt;br /&gt;
* '''cam_relax_speed''' = 5.7 - скорость возврата в исходное положение&lt;br /&gt;
* '''cam_dispersion''' = 0.2 - увеличения угла (в градусах) с каждым выстрелом&lt;br /&gt;
&lt;br /&gt;
* '''fire_dispersion_condition_factor''' = 5 - увеличение дисперсии в процентах при максимальном износе &lt;br /&gt;
* '''misfire_probability''' = 0.003	- вероятность осечки при максимальном износе &lt;br /&gt;
* '''misfire_condition_k''' = 0.05 - порог (в данном случае - 5%), после которого оружие может заклинивать&lt;br /&gt;
* '''condition_shot_dec''' = 0.0002 - увеличение износа при каждом выстреле&lt;br /&gt;
&lt;br /&gt;
===Пятый раздел===&lt;br /&gt;
&lt;br /&gt;
Здесь хранится множество параметров, из которых наиболее интересны эти:&lt;br /&gt;
&lt;br /&gt;
* '''hit_power''' = 0.50, 0.54, 0.57, 0.60 - сила выстрела&lt;br /&gt;
* '''hit_impulse''' = 105 - импульс пули (сила, которую летящая пуля передает жертве, влияет на поведение ragdoll-тела)&lt;br /&gt;
* '''hit_type''' = fire_wound - тип причиняемых повреждений, в данном случае - пулевые ранения (параметр в синглплеере ни на что не влияет)&lt;br /&gt;
&lt;br /&gt;
* '''fire_distance''' = 600 - максимальная дистанция для выстрела&lt;br /&gt;
* '''bullet_speed''' = 925 - начальная скорость пули&lt;br /&gt;
&lt;br /&gt;
* '''hud''' = wpn_g36_hud - внешний вид оружия&lt;br /&gt;
&lt;br /&gt;
===Шестой раздел===&lt;br /&gt;
&lt;br /&gt;
* '''position''' = -0.026, -0.132, 0.0 - позиция по отношению к игроку (?)&lt;br /&gt;
* '''orientation''' = 0, 0, 0 - направление, в которое смотрит ствол (?)&lt;br /&gt;
&lt;br /&gt;
===Седьмой раздел===&lt;br /&gt;
&lt;br /&gt;
Содержит описания визуальной стороны оружия и некоторые другие параметры:&lt;br /&gt;
&lt;br /&gt;
* '''startup_ammo''' = 90 - как нетрудно догадаться, стартовое количество патронов (в синглплеере ни на что не влияет)&lt;br /&gt;
* '''visual''' = weapons\g36\wpn_g36.ogf - модель оружия, используемая NPC, а также игроком при виде от третьего лица&lt;br /&gt;
&lt;br /&gt;
* '''ph_mass''' = 4 - физическая масса, используемая при расчетах&lt;br /&gt;
&lt;br /&gt;
* '''scope_status''' = 1 - ситуация со съемным прицелом&lt;br /&gt;
* '''silencer_status''' = 0 - ситуация со съемным глушителем&lt;br /&gt;
* '''grenade_launcher_status''' = 0 - ситуация с подствольным гранатометом&lt;br /&gt;
&lt;br /&gt;
* Параметры:&lt;br /&gt;
** '''0''' - нет, новый прикрепить нельзя &lt;br /&gt;
** '''1''' - уже есть, несъемный &lt;br /&gt;
** '''2''' - нет, но можно установить новый&lt;br /&gt;
&lt;br /&gt;
* '''zoom_enabled''' = true - есть ли зум (прицеливание)&lt;br /&gt;
* '''scope_zoom_factor''' = 33.3 - какой зум дает прицеливание (здесь - 1.8х)&lt;br /&gt;
* '''scope_texture'''	= wpn\wpn_crosshair_g36 - текстура прицельной сетки&lt;br /&gt;
&lt;br /&gt;
* '''shell_point''' = 0.15, 0.0, -0.05 - точка вылета гильз&lt;br /&gt;
* '''shell_dir''' = 0.0, 1.0, 0.0&lt;br /&gt;
&lt;br /&gt;
* '''fire_point''' = -0.000000,0.062000,0.134000 - точка выстрела&lt;br /&gt;
* '''fire_point2''' = 0.30, 0.00, 0.05 - точка выстрела (2)&lt;br /&gt;
* '''fire_bone''' = wpn_body&lt;br /&gt;
* '''orientation'''  = 0, 0, 0 - направление&lt;br /&gt;
* '''position'''  = 0, 0, 0 - позиция&lt;br /&gt;
* '''visual''' = weapons\g36\wpn_g36_hud.ogf - модель, отображаемая у нас в руках&lt;br /&gt;
&lt;br /&gt;
==Изменение описаний==&lt;br /&gt;
&lt;br /&gt;
Описания оружия хранятся в файле:&lt;br /&gt;
''...\S.T.A.L.K.E.R\gamedata\config\text\rus\string_table_enc_weapons.xml''&lt;br /&gt;
&lt;br /&gt;
В нем хранятся строки с названиями и описаниями, на которые ссылаются конфиги оружия. Например, тот же '''G36''' ссылается сюда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[...]&lt;br /&gt;
	&amp;lt;string id=&amp;quot;enc_weapons1_wpn-g36&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Штурмовая винтовка немецкого производства, представляющая собой первоклассный образец &lt;br /&gt;
современного оружия - лёгкого, надёжного и эргономичного.\n Боеприпасы:\n обычный 5,56x45 мм &lt;br /&gt;
SS109,\n бронебойный 5,56x45 мм АР.&amp;lt;/text&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
	&amp;lt;string id=&amp;quot;wpn-g36&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;ГП37&amp;lt;/text&amp;gt;&lt;br /&gt;
[...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Меняя их содержимое, мы меняем описания/названия данного оружия.&lt;br /&gt;
&lt;br /&gt;
==Изменение патронов==&lt;br /&gt;
&lt;br /&gt;
Параметры патронов хранятся в файле:&lt;br /&gt;
&lt;br /&gt;
''...\S.T.A.L.K.E.R\gamedata\config\weapons\weapons.ltx''&lt;br /&gt;
&lt;br /&gt;
Найдем, например, раздел, отвечающий за патроны к тому же '''G36''' (о них мы узнали из параметра '''ammo_class'''), и разберем, что означает каждый параметр:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''visual''' = weapons\ammo\ammo_556x45_ss190.ogf - модель коробки с патронами&lt;br /&gt;
* '''description''' = enc_weapons1_ammo_ammo-5.56x45-ss190 - ссылка на string_id, из которого игра подгружает описание этого типа патронов&lt;br /&gt;
&lt;br /&gt;
* '''cost''' = 320 - стоимость одной коробки&lt;br /&gt;
&lt;br /&gt;
* '''box_size''' = 30 - количество патронов в одной коробке&lt;br /&gt;
&lt;br /&gt;
* '''inv_name''' = ammo-5.56x45-ss190 - ссылка на string_id, содержащий имя для инвентаря&lt;br /&gt;
* '''inv_name_short''' = ammo-5.56x45-ss190_s - ссылка на string_id, содержащий краткое имя для инвентаря&lt;br /&gt;
* '''inv_weight''' = 0.33 - вес&lt;br /&gt;
&lt;br /&gt;
* '''inv_grid_width''' = 2 - координаты первого угла иконки по x&lt;br /&gt;
* '''inv_grid_height''' = 1 - координаты первого угла иконки по y&lt;br /&gt;
* '''inv_grid_x''' = 14 - координаты второго угла иконки по x&lt;br /&gt;
* '''inv_grid_y''' = 11 - координаты второго угла иконки по y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''k_dist''' = 1 - коэффициент дальности, сама дальность - в стволе, тупо расстояние.&lt;br /&gt;
* '''k_disp''' = 2.5 - кучность, завязана с кучностью в стволе&lt;br /&gt;
* '''k_hit''' = 1 - убойность, завязана с убойностью в стволе&lt;br /&gt;
* '''k_impulse''' = 1 - чисто наскока эффектно ногами непись дрыгнет во время кердыка&lt;br /&gt;
* '''k_pierce''' = 1 - коэффициент наскока испорится броня при попадании&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''impair''' = 1 - коэффициент износа ствола от пули&lt;br /&gt;
* '''buck_shot''' = 1 - кол-во составляющих в пуле (напр картечь - 4, пуля - 1)&lt;br /&gt;
&lt;br /&gt;
* '''tracer''' = on - является ли патрон трассирующим (on/off)&lt;br /&gt;
* '''wm_size''' = 0.05 - визуальный размер дырки на стене от пули&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:BAC9-FLCL|BAC9-FLCL]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_NPC</id>
		<title>SoC. Редактирование NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_NPC"/>
				<updated>2008-01-22T17:43:25Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Вступление==&lt;br /&gt;
&lt;br /&gt;
В этой статье мы научимся редактировать NPC: изменять содержимое их инвентаря, реплики, поведение, имя, и другие параметры.&lt;br /&gt;
&lt;br /&gt;
==Параметры==&lt;br /&gt;
&lt;br /&gt;
За параметры NPC отвечают файлы: &lt;br /&gt;
&amp;lt;pre&amp;gt;\config\gameplay\character_desc_[название локации].xml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Каждый из них разбит на секции - по одной на NPC. Используются следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* ''&amp;lt;name&amp;gt;...&amp;lt;/name&amp;gt;''  - Имя (ссылка на строку в текстовом массиве).&lt;br /&gt;
* ''&amp;lt;icon&amp;gt;ui_npc_...&amp;lt;/icon&amp;gt;'' - Иконка для диалогов/торговли.&lt;br /&gt;
* ''&amp;lt;bio&amp;gt;..._bio&amp;lt;/bio&amp;gt;'' - Биография (в игре не используется).&lt;br /&gt;
* ''&amp;lt;class&amp;gt;...&amp;lt;/class&amp;gt;'' - Класс (лучше не трогать).[[Участник:Imp|Imp]] 12:46, 12 августа 2007 (EEST)Нужно для того что-бы автоматические респавнеры могли спавнить немного разных персонажей. То есть например в игре есть описание восьми (кажеться может и больше) разных новичков и что бы при автоматическом респавне не получалась куча братьев-близнецов, респавнер настраивается на класс персонажей и спавнит случайным образом разных персонажей одного класса.&lt;br /&gt;
* ''&amp;lt;community&amp;gt;...&amp;lt;/community&amp;gt;'' - Группировка.&lt;br /&gt;
* ''&amp;lt;rank&amp;gt;...&amp;lt;/rank&amp;gt;'' - Ранг.&lt;br /&gt;
* ''&amp;lt;reputation&amp;gt;...&amp;lt;/reputation&amp;gt;'' - Репутация.&lt;br /&gt;
* ''&amp;lt;money min=&amp;quot;...&amp;quot; max=&amp;quot;...&amp;quot; infinitive=&amp;quot;...&amp;quot;/&amp;gt;'' - Количество денег (infinitive=&amp;quot;1&amp;quot; - бесконечные деньги).&lt;br /&gt;
* ''&amp;lt;snd_config&amp;gt;...&amp;lt;/snd_config&amp;gt;'' - Набор звуков.&lt;br /&gt;
* ''&amp;lt;crouch_type&amp;gt;-1&amp;lt;/crouch_type&amp;gt;'' - Тип приседания. Лучше не трогать.&lt;br /&gt;
* ''&amp;lt;visual&amp;gt;actors\...&amp;lt;/visual&amp;gt;'' - Внешность. Влияет как на внешний вид костюма, так и на его свойства. Укажите здесь экзоскелет - и персонаж действительно в нем окажется: как по внешности, так и по свойствам.&lt;br /&gt;
* ''&amp;lt;supplies&amp;gt;...&amp;lt;/supplies&amp;gt;'' - Предметы, находящиеся у него в инвентаре. Некоторые из них в игре не отображаются, поэтому не удивляйтесь присутствию здесь предметов вроде рации или фонарика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;В игре отображаються все предметы, просто при торговле есть ограничения на допустимые к торговле предметы, а при смерти персонажа, &amp;quot;запрещенные&amp;quot; предметы удаляються скриптом. [[Участник:Imp|Imp]] 12:46, 12 августа 2007 (EEST)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''&amp;lt;start_dialog&amp;gt;...&amp;lt;start_dialog&amp;gt;'' - Приветственный диалог. Их может быть несколько, с различными условиями появления.&lt;br /&gt;
* ''&amp;lt;actor_dialog&amp;gt;...&amp;lt;/actor_dialog&amp;gt;'' - Диалоги с игроком.&lt;br /&gt;
&lt;br /&gt;
==Практика==&lt;br /&gt;
&lt;br /&gt;
Изменим, например, параметры NPC по имени Волк.&lt;br /&gt;
&lt;br /&gt;
Откроем файл:&lt;br /&gt;
&amp;lt;pre&amp;gt;\config\gameplay\character_desc_escape.xml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И найдем в нем раздел, ему соответствующий:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!---------------------esc_wolf---------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;specific_character id=&amp;quot;esc_wolf&amp;quot; team_default = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;esc_wolf_name&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;icon&amp;gt;ui_npc_u_stalker_neytral_balon_1&amp;lt;/icon&amp;gt;&lt;br /&gt;
		&amp;lt;bio&amp;gt;esc_wolf_bio&amp;lt;/bio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;class&amp;gt;esc_wolf&amp;lt;/class&amp;gt;&lt;br /&gt;
		&amp;lt;community&amp;gt;stalker&amp;lt;/community&amp;gt; &amp;lt;terrain_sect&amp;gt;stalker_terrain&amp;lt;/terrain_sect&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;rank&amp;gt;434&amp;lt;/rank&amp;gt;&lt;br /&gt;
		&amp;lt;reputation&amp;gt;5&amp;lt;/reputation&amp;gt;&lt;br /&gt;
		&amp;lt;money min=&amp;quot;600&amp;quot; max=&amp;quot;2000&amp;quot; infinitive=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;snd_config&amp;gt;characters_voice\human_01\stalker\&amp;lt;/snd_config&amp;gt;&lt;br /&gt;
		&amp;lt;crouch_type&amp;gt;-1&amp;lt;/crouch_type&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
		&amp;lt;visual&amp;gt;actors\neytral\stalker_neytral_balon_1&amp;lt;/visual&amp;gt;&lt;br /&gt;
		&amp;lt;supplies&amp;gt;&lt;br /&gt;
			[spawn] \n&lt;br /&gt;
			wpn_pm \n &lt;br /&gt;
			ammo_9x18_fmj = 1 \n &lt;br /&gt;
			wpn_ak74u \n&lt;br /&gt;
			ammo_5.45x39_fmj \n&lt;br /&gt;
			device_torch \n&lt;br /&gt;
			hand_radio \n&lt;br /&gt;
		&amp;lt;/supplies&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
#include &amp;quot;gameplay\character_criticals_4.xml&amp;quot; //&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;start_dialog&amp;gt;escape_lager_volk_talk&amp;lt;/start_dialog&amp;gt; &lt;br /&gt;
		&amp;lt;start_dialog&amp;gt;dm_hello_dialog&amp;lt;/start_dialog&amp;gt; &lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;dm_cool_info_dialog&amp;lt;/actor_dialog&amp;gt; &lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;dm_help_wounded_medkit_dialog&amp;lt;/actor_dialog&amp;gt;  &lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_wolf_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_wolf_reward&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
	&amp;lt;/specific_character&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменим некоторые параметры. Выдадим ему FN2000 и Desert Eagle, примем в &amp;quot;Долг&amp;quot; и сделаем неограниченное количество денег: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!---------------------esc_wolf---------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;specific_character id=&amp;quot;esc_wolf&amp;quot; team_default = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;esc_wolf_name&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;icon&amp;gt;ui_npc_u_stalker_neytral_balon_1&amp;lt;/icon&amp;gt;&lt;br /&gt;
		&amp;lt;bio&amp;gt;esc_wolf_bio&amp;lt;/bio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;class&amp;gt;esc_wolf&amp;lt;/class&amp;gt;&lt;br /&gt;
		&amp;lt;community&amp;gt;dolg&amp;lt;/community&amp;gt; &amp;lt;terrain_sect&amp;gt;stalker_terrain&amp;lt;/terrain_sect&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;rank&amp;gt;434&amp;lt;/rank&amp;gt;&lt;br /&gt;
		&amp;lt;reputation&amp;gt;5&amp;lt;/reputation&amp;gt;&lt;br /&gt;
		&amp;lt;money min=&amp;quot;600&amp;quot; max=&amp;quot;2000&amp;quot; infinitive=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;snd_config&amp;gt;characters_voice\human_01\stalker\&amp;lt;/snd_config&amp;gt;&lt;br /&gt;
		&amp;lt;crouch_type&amp;gt;-1&amp;lt;/crouch_type&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
		&amp;lt;visual&amp;gt;actors\neytral\stalker_neytral_balon_1&amp;lt;/visual&amp;gt;&lt;br /&gt;
		&amp;lt;supplies&amp;gt;&lt;br /&gt;
			[spawn] \n&lt;br /&gt;
			wpn_deagle \n &lt;br /&gt;
			ammo_11.43x23_fmj = 1 \n &lt;br /&gt;
			wpn_fn2000 \n&lt;br /&gt;
			ammo_5.56x45_ap \n&lt;br /&gt;
			ammo_5.45x39_fmj \n&lt;br /&gt;
			device_torch \n&lt;br /&gt;
			hand_radio \n&lt;br /&gt;
		&amp;lt;/supplies&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
#include &amp;quot;gameplay\character_criticals_4.xml&amp;quot; //&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;start_dialog&amp;gt;escape_lager_volk_talk&amp;lt;/start_dialog&amp;gt; &lt;br /&gt;
		&amp;lt;start_dialog&amp;gt;dm_hello_dialog&amp;lt;/start_dialog&amp;gt; &lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;dm_cool_info_dialog&amp;lt;/actor_dialog&amp;gt; &lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;dm_help_wounded_medkit_dialog&amp;lt;/actor_dialog&amp;gt;  &lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_wolf_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;tm_wolf_reward&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
	&amp;lt;/specific_character&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%BD%D0%BE%D1%82%D0%B8%D0%BF%D0%BD%D1%8B%D0%B5_%D0%BA%D0%B2%D0%B5%D1%81%D1%82%D1%8B</id>
		<title>SoC. Однотипные квесты</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D0%B4%D0%BD%D0%BE%D1%82%D0%B8%D0%BF%D0%BD%D1%8B%D0%B5_%D0%BA%D0%B2%D0%B5%D1%81%D1%82%D1%8B"/>
				<updated>2008-01-22T17:42:34Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Описание==&lt;br /&gt;
&lt;br /&gt;
Как известно, при разговоре с некоторыми NPC (Сахаров, Бармен, Сидорович, Лукаш, Волк, Шустрый Долговец, Лысый, Охотник и Осведомитель) появляется ветка «есть ли для меня работа?». В целях упрощения создания однотипных квестов, выдаваемых через эту ветку, разработчики создали следующую схему...&lt;br /&gt;
&lt;br /&gt;
==Структура однотипных квестов==&lt;br /&gt;
&lt;br /&gt;
Сами задания находятся в конфиге:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gamedata\config\misc\task_manager.ltx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Цели квестов и условия их выполнения фиксируются в скрипте:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gamedata\scripts\task_manager.script&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ветки диалогов, отвечающие за эти задания (например, у Сидоровича) выглядит так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;actor_dialog&amp;gt;tm_trader_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
&amp;lt;actor_dialog&amp;gt;tm_trader_reward&amp;lt;/actor_dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где первый actor_dialog – диалог с выдачей задания, а второй - диалог по заданию и получению награды, либо отказа от выполнения оного. Никто нас насильно его выполнять не заставляет.&lt;br /&gt;
&lt;br /&gt;
При получении задания информация об этом прописывается и в PDA, не забываем об этом. Информация добавляется с помощью файла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gamedata\config\gameplay\storyline_info_taskmanager.xml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание задания хранится в файле:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gamedata\config\text\rus\stable_task_manager.xml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всего существует шесть видов подобных заданий:&lt;br /&gt;
&lt;br /&gt;
* eliminate_lager = уничтожить лагерь&lt;br /&gt;
* defend_lager = защитить лагерь&lt;br /&gt;
* kill_stalker = убить сталкер&lt;br /&gt;
* artefact = найти артефакт&lt;br /&gt;
* monster_part = найти часть монстра&lt;br /&gt;
* find_item = найти предмет&lt;br /&gt;
&lt;br /&gt;
==Создаем квест==&lt;br /&gt;
&lt;br /&gt;
Для создания дополнительного квеста у Сидоровича нам понадобятся всего три файла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gamedata\config\gameplay\storyline_info_taskmanager.xml&lt;br /&gt;
gamedata\config\misc\task_manager.ltx&lt;br /&gt;
gamedata\config\text\rus\stable_task_manager.xml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открываем task_manager.ltx, в начале видим длинный список заданий, а уж потом сами задания и условия выполнения к ним. Т.е. cначала идет:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
tm_kill_stalker_5&lt;br /&gt;
tm_kill_stalker_6&lt;br /&gt;
tm_kill_stalker_7&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А затем то, что нам нужно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
[tm_kill_stalker_6]&lt;br /&gt;
type = kill_stalker&lt;br /&gt;
community = actor&lt;br /&gt;
text = tm_kill_stalker_6_text&lt;br /&gt;
description = tm_kill_stalker_6_descr&lt;br /&gt;
parent = trader&lt;br /&gt;
target = sim_stalker_novice&lt;br /&gt;
;reward_money = 1000&lt;br /&gt;
reward_reputation = +3&lt;br /&gt;
reward_rank = 2&lt;br /&gt;
reward_item = af_vyvert, conserva&lt;br /&gt;
time = 86400&lt;br /&gt;
prior = 1&lt;br /&gt;
&lt;br /&gt;
[tm_kill_stalker_7]&lt;br /&gt;
type = kill_stalker&lt;br /&gt;
community = actor&lt;br /&gt;
text = tm_kill_stalker_7_text&lt;br /&gt;
description = tm_kill_stalker_7_descr&lt;br /&gt;
parent = trader&lt;br /&gt;
target = esc_wolf&lt;br /&gt;
reward_money = 10000&lt;br /&gt;
reward_reputation = +3&lt;br /&gt;
reward_rank = 2&lt;br /&gt;
reward_item = vodka, conserva&lt;br /&gt;
time = 86400&lt;br /&gt;
prior = 1&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим структуру этих записей, заодно создав новую:&lt;br /&gt;
&lt;br /&gt;
* [tm_kill_stalker_7] – наше задание&lt;br /&gt;
* type = kill_stalker – тип задания, в данном случае – убийство сталкера&lt;br /&gt;
* community = actor – комьюнити, к которому принадлежит выполняющий задание (странный параметр, в игре используется - везде выставлен равным actor'у) &lt;br /&gt;
* text = tm_kill_stalker_7_text – описание нашего задания в диалоге&lt;br /&gt;
* description = tm_kill_stalker_7_descr – описание нашего задания в PDA&lt;br /&gt;
* parent = trader - заказчик&lt;br /&gt;
* target = esc_wolf – цель, в данном случае мы собираемся грохнуть Волка&lt;br /&gt;
* reward_money = 10000 – сколько денег нам дадут за выполнение&lt;br /&gt;
* reward_reputation = +3 – повышение/понижение репутации после выполнения задания&lt;br /&gt;
* reward_rank = 2 – кличество очков ранга, выдаваемых за выполнение&lt;br /&gt;
* reward_item = vodka, conserva – предметы, выдаваемые в награду за квест&lt;br /&gt;
* time = 86400 – время выполнения квеста&lt;br /&gt;
* prior = 1 – приоритет задания&lt;br /&gt;
&lt;br /&gt;
Не забываем про PDA. В файл:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gamedata\config\gameplay\storyline_info_taskmanager.xml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавляем следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;article id=&amp;quot;tm_kill_stalker_7_descr&amp;quot; name=&amp;quot;kill_stalker&amp;quot; article_type=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;tm_kill_stalker_7_descr&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/article&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Текст на русском для задания нужен? Тогда открываем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gamedata\config\text\rus\stable_task_manager.xml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И туда вгоняем следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;tm_kill_stalker_7&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;tm_kill_stalker_7_text&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Достал меня Волк! Понимаешь, достал! Ворует у меня водку, понимаешь, потом идет и клянчит деньги на &lt;br /&gt;
тушенку, потому что новички его не слушают и есть ничего не дают, а вот сойти со своего места и пойти охотится на кабанов, он, &lt;br /&gt;
видите ли, не хочет, ибо ЛЕНЬ! Грохни его, Меченый, я в долгу не останусь.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;tm_kill_stalker_7_descr&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Важно!''' Эти строки не должны выходить за пределы тегов &amp;lt;string_table&amp;gt; и &amp;lt;/string_table&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вот и все, теперь у Сидоровича появился новый квест - &amp;quot;Убить Волка&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
[[Участник:Arhet|Arhet]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%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</id>
		<title>Изменение текстур</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%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"/>
				<updated>2008-01-22T17:39:08Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Изменение иконок предметов==&lt;br /&gt;
&lt;br /&gt;
'''Внимание!''' Данный урок предполагает наличие у вас базовых навыков работы в Photoshop. Детальный пошаговый разбор работы в Photoshop в данном уроке производится не будет.&lt;br /&gt;
&lt;br /&gt;
Разберем изменение файла:&lt;br /&gt;
&amp;lt;pre&amp;gt;...\gamedata\textures\ui\ui_icon_equipment.dds&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Он содержит иконки предметов, отображаемые в инвентаре.&lt;br /&gt;
Допустим, вы сделали новый вид оружия, и хотите присвоить ему новую иконку.&lt;br /&gt;
&lt;br /&gt;
Нам понадобится следующее:&lt;br /&gt;
&lt;br /&gt;
* Adobe Photoshop (я использовал CS2, CS и 7.0 различаются незначительно)&lt;br /&gt;
* плагин для работы с .dds-изображениями ([http://developer.nvidia.com/object/photoshop_dds_plugins.html скачать])&lt;br /&gt;
&lt;br /&gt;
Итак, мы установили плагин и запустили Photoshop. Откройте в нем наш файл.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Icon editing 1.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Иконки расположены по сетке 50х50 пикселей.&lt;br /&gt;
&lt;br /&gt;
Чтобы включить её отображение, зайдите в меню:&lt;br /&gt;
&lt;br /&gt;
Редактирование -&amp;gt; Установки -&amp;gt; Направляющие, сетка и фрагменты&lt;br /&gt;
&lt;br /&gt;
И установите в нем следующие значения:&lt;br /&gt;
&lt;br /&gt;
* Линия через каждые: 50&lt;br /&gt;
* Единицы измерения: пиксели&lt;br /&gt;
* Внутреннее деление на: 1&lt;br /&gt;
&lt;br /&gt;
После чего выберите пункт:&lt;br /&gt;
&lt;br /&gt;
Просмотр -&amp;gt; Показать -&amp;gt; Сетку ( '''Ctrl''+'''''' )&lt;br /&gt;
&lt;br /&gt;
Всё, сетка теперь правильно настроена и отображается.&lt;br /&gt;
Выберем место для иконки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Icon editing 2.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Иконка будет размером 4х2, то есть 200х100 пикселей - это обычный размер иконки для автоматических винтовок.&lt;br /&gt;
Нарисуем её:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Icon editing 3.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;Иконка АК47У была нарисована следующим образом: я нашел качественную фотографию с однородным фоном (благо, фотографий АК в интернете немерено), открыл её в Photoshop, выделил с помощью второго вида инструмента &amp;quot;Лассо&amp;quot;, нажал '''Ctrl+C''', открыл файл с иконками, нажал '''Ctrl+V''', нажал '''Ctrl+T''', зажал Shift (&amp;quot;Сохранение пропорций&amp;quot;) и потянул за край выделения, сжимая изображение до нужного размера.&lt;br /&gt;
&lt;br /&gt;
После чего применил трансформацию, перетащил изображение на нужное место и нажал '''Shift+Ctrl+E''' (&amp;quot;Слить слои&amp;quot;).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь соответственно иконке изменим и альфа-канал.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Icon editing 7.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Выделим иконку оружия, и перейдем в окне со слоями на закладку:&lt;br /&gt;
&lt;br /&gt;
Каналы -&amp;gt; Alpha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Icon editing 8.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
После чего залейте выделение белым. Всё, мы сделали иконке альфа-канал.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно сохранить файл в правильном формате. Выберите:&lt;br /&gt;
&lt;br /&gt;
Файл -&amp;gt; Сохранить&lt;br /&gt;
&lt;br /&gt;
И выставьте в появившемся окне окне следующие настройки:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Icon editing 4.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Крайне важно выставить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* Save Format: DXT5 (Interpolated Alpha)&lt;br /&gt;
* MIP maps: No MIP maps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нажмите Save. Вот всё, мы добавили новую иконку.&lt;br /&gt;
&lt;br /&gt;
Теперь присвоим её предмету.&lt;br /&gt;
&lt;br /&gt;
Допустим, у вы создали некий '''wpn_ak47u''', которому и нарисовали иконку. Зайдем в его конфиг:&lt;br /&gt;
&amp;lt;pre&amp;gt;gamedata\config\weapons\w_ak47u.ltx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И найдем такие строки:&lt;br /&gt;
&amp;lt;pre&amp;gt;inv_grid_width	        		= 4&lt;br /&gt;
inv_grid_height			        = 2   &lt;br /&gt;
inv_grid_x				= ...&lt;br /&gt;
inv_grid_y				= ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
&lt;br /&gt;
* inv_grid_width - ширина в сетке 50х50&lt;br /&gt;
* inv_grid_height - высота в сетке 50х50&lt;br /&gt;
* inv_grid_x - местонахождение по х&lt;br /&gt;
* inv_grid_y - местонахождение по y&lt;br /&gt;
&lt;br /&gt;
==Изменение текстур моделей==&lt;br /&gt;
&lt;br /&gt;
Заменим, например, текстуру банки с энергетиком. Для этого откроем файл '''item_drink_nonstop.dds''':&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Texture editing 1.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
И отредактируем его по своему усмотрению:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Texture editing 2.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;Банка была перерисована через выделение элементов с помощью &amp;quot;Лассо&amp;quot; (в варианте с проставлением углов, а не непрерывного выделения - кажется, это называется &amp;quot;Геометрическое лассо&amp;quot;, если не так - поправьте), с последующим их закрашиванием зеленой кистью.&lt;br /&gt;
&lt;br /&gt;
Выделяем элементы синего цвета, закрашиваем выделение зеленым, идем дальше.&lt;br /&gt;
&lt;br /&gt;
В конце инструментом &amp;quot;Текст&amp;quot; (иконка в виде буквы &amp;quot;Т&amp;quot;) и шрифтом Space Age (не суть важно) была сделана надпись. После чего я нажал Ctrl+T (&amp;quot;Свободная трансформация&amp;quot;), повернул текст набок, и применил трансформацию, выбрав любой другой инструмент.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Не забываем на всякий случай сохранить резервную копию текстуры.&lt;br /&gt;
Делаем Save со следующими параметрами:&lt;br /&gt;
&lt;br /&gt;
* Save Format: DXT5 (Interpolated Alpha)&lt;br /&gt;
* MIP maps: Generate MIP maps&lt;br /&gt;
&lt;br /&gt;
==Создание новых visual для использования с новыми объектами==&lt;br /&gt;
&lt;br /&gt;
К чему изменять текстуры обычных предметов, лучше сделать свои - с собственной внешностью.&lt;br /&gt;
Сделаем новый visual (модель+текстура), который можно будет указать в свойствах нового предмета.&lt;br /&gt;
&lt;br /&gt;
Возьмем модель банки энергетика '''drink_nonstop.ogf''', сделаем её копию и назовем, скажем, '''drink_green.ogf''', после чего откроем в [[Hex-редактор|Hex-редакторе]] (в принципе, можно и Блокнотом). Метод кустарный, но работающий.&lt;br /&gt;
&lt;br /&gt;
В начале файла вы увидите имя текстуры:&lt;br /&gt;
&amp;lt;pre&amp;gt;item\item_drink_nonstop&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменим эту строку на:&lt;br /&gt;
&amp;lt;pre&amp;gt;item\item_drink_green_1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Внимание!''' Очень важно, чтобы длина строки с текстурой осталась той же, иначе файл не будет работать.&lt;br /&gt;
&lt;br /&gt;
Всё, теперь вы можете указать в конфиге своего нового предмета новый visual:&lt;br /&gt;
&amp;lt;pre&amp;gt;[energy_drink_green]:vodka&lt;br /&gt;
$spawn 				= &amp;quot;food and drugs\energy_drink&amp;quot;&lt;br /&gt;
inv_name			= energy_drink_green_name&lt;br /&gt;
inv_name_short		= energy_drink_green_short_name&lt;br /&gt;
visual				= '''equipments\drink_green.ogf''' ;equipments\drink_stalker.ogf&lt;br /&gt;
description			= enc_equipment_energy_drink_green&lt;br /&gt;
cost				= 75&lt;br /&gt;
&lt;br /&gt;
[...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:BAC9-FLCL|BAC9-FLCL]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9_%D0%B2_PDA</id>
		<title>SoC. Добавление статей в PDA</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_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9_%D0%B2_PDA"/>
				<updated>2008-01-22T17:32:34Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Добавление статьи==&lt;br /&gt;
&lt;br /&gt;
На примере статьи из Artefact Activation Mod разберем их добавление в PDA:&lt;br /&gt;
&lt;br /&gt;
* Добавим в файл config\gameplay\encyclopedia_zone.xml новую статью:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    &amp;lt;!-------------------------------- Activation - Basic -----------------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;article id=&amp;quot;zone_anomalies_activation_basic&amp;quot; name=&amp;quot;zone_anomalies_activation-basic&amp;quot; group=&amp;quot;Anomalies&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;texture x=&amp;quot;500&amp;quot; y=&amp;quot;150&amp;quot; width=&amp;quot;100&amp;quot; height=&amp;quot;100&amp;quot;&amp;gt;ui_icon_photo&amp;lt;/texture&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;enc_zone_anomalies_activation_basic&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/article&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
&lt;br /&gt;
** article id - внутреннее имя статьи, именно на него ссылаются в файлах игры&lt;br /&gt;
** name - имя статьи, отображаемое в игре, подгружается из строкового массива&lt;br /&gt;
** texture - картинка и её позиция в статье, в данном случае мы использовали обычный белый шум&lt;br /&gt;
** text - текст статьи, отображаемый в игре, подгружается из строкового массива&lt;br /&gt;
&lt;br /&gt;
* Добавим в, например, config\gameplay\info_l01escape.xml (инфопорции уровня &amp;quot;Кордон&amp;quot;) ссылку на получение статьи - скажем, к трупу у туннеля, при обыске которого выдается информация о аномалиях в туннеле (вы его обнаруживаете, проходя второе спецзадание от Сидоровича). Найдем эти строки и дополним их:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;!-- труп у аномалии --&amp;gt;&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;esc_tutorial_dead_novice&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;article&amp;gt;tutorial_moving_anomaly&amp;lt;/article&amp;gt;&lt;br /&gt;
		'''&amp;lt;article&amp;gt;zone_anomalies_activation_basic&amp;lt;/article&amp;gt;'''&lt;br /&gt;
	&amp;lt;/info_portion&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Главное - никогда не путайте article id, name и text статьи. Я в данном примере это сделать легко. Лучше называйте их непохожими друг на друга названиями.&lt;br /&gt;
&lt;br /&gt;
* Так как в статье у нас есть такое поле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;        &amp;lt;text&amp;gt;enc_zone_anomalies_activation_basic&amp;lt;/text&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Да и название тоже не написано прямо, а ссылается на определенную строку, то добавим этот самый text в config\text\rus\string_table_enc_zone.xml, в нашем случае:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;enc_zone_anomalies_activation-basic&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_zone_anomalies_activation_basic&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дополнительно==&lt;br /&gt;
&lt;br /&gt;
Чтобы статья добавлялась при получении определенного задания, в ..._task.xml (вместо ... стоит название уровня) нужно прописать конструкцию вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;article&amp;gt;название_задания_descr&amp;lt;/article&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Категория:Статьи участников]]&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
[[Участник:BAC9-FLCL|BAC9-FLCL]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82</id>
		<title>Спавн через скрипт</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82"/>
				<updated>2008-01-22T17:29:40Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Теория==&lt;br /&gt;
&lt;br /&gt;
В скриптах есть одна единственная функция, отвечающая за спавн объектов:&lt;br /&gt;
&amp;lt;pre&amp;gt;alife():create(section,position,levelvertex,gamevertex)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;Строго говоря, их две: create create_ammo но различия между ними не существенны. [[Участник:Imp|Imp]] 22:45, 23 июля 2007 (EEST)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первый параметр - секция в конфигурациях, описывающая объект, например &amp;quot;bolt&amp;quot;,&amp;quot;med_kit&amp;quot; - это простые секции, простых объектов&lt;br /&gt;
а есть объекты, которые переходят в онлайн/оффлайн, это неписи, монстры и так далее, например mil_killer_respawn_2 - спавнится снайпер группировки киллеров.&lt;br /&gt;
&lt;br /&gt;
С позицией, думаю объяснять не надо, только существует нюанс - высота это Y, а не Z.&lt;br /&gt;
Задать позицию можно такой конструкцией vector():set(x,y,z), где x, y и z - координаты точки на уровне, где спавним объект.&lt;br /&gt;
&lt;br /&gt;
Дальше сложнее, так как сам толком сформулировать не могу.&lt;br /&gt;
&lt;br /&gt;
Начнем от простого к сложному. На каждом уровне много объектов, все объекты состоят из полигонов, у каждого полигона есть вершины – вертексы.&lt;br /&gt;
&lt;br /&gt;
Именно они и должны здесь указываться, зачем - не особо понимаю, скорее всего для точного позиционирования объекта.&lt;br /&gt;
Например, можно получить вертекс ближайший к актору - db.actor:level_vertex()&lt;br /&gt;
&lt;br /&gt;
Дальше идет гораздо более интересный параметр game_vertex, это почти то же самое, что и level_vertex, но (!) это глобальные величины!&lt;br /&gt;
Если level_vertex считается для уровня, то game_vertex - для всей игры, и нужен он для того, чтобы указать на какой карте спавнить объект (более вразумительного объяснения я не нашел).&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы заспавнить что-нибудь на другой карте, достаточно указать game_vertex в четвертом параметре&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;db.actor:game_vertex()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итак, чтобы, например, заспавнить болт под ногами актора, пишем: &lt;br /&gt;
&amp;lt;pre&amp;gt;alife():create(&amp;quot;bolt&amp;quot;,db.actor():position(),1,db.actor:game_verte())&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Почему 1, а не level_vertex? Проверено - разницы особой нет, какой level_vertex, хотя в некоторых случаях надо прописывать валидный вертекс, а то предмет может просто заспавнится не там, где планировалось... Но по большей части все проходит нормально и с единицей.&lt;br /&gt;
(Игнорирование level_vertex может приводить к проваливанию произведенных предметов/персонажей под землю.)&lt;br /&gt;
А вот game_vertex решает все - он указывает на каком уровне спавнить предмет, поэтому его надо указывать. Теоретически можно просто найти для каждого уровня по одному game_vertex'у и использовать их в скриптах.&lt;br /&gt;
На самом деле game_vertex показывает какой фрагмент карты используется (вся карта разбита на кусочки имеющие сквозную нумерацию по всем уровням и game_vertex выбирает нужный) соответсвенно неправильное использование черевато....&lt;br /&gt;
&lt;br /&gt;
Кроме того - есть еще один параметр - ID объекта, если указать ID NPC или актора - то предмет заспавнится у него в инвентаре.&lt;br /&gt;
&lt;br /&gt;
Пример (спавним артефакт Медуза в инвентаре у актора):&lt;br /&gt;
&amp;lt;pre&amp;gt;alife():create(&amp;quot;af_medusa&amp;quot;, db.actor():position(), 1, db.actor:game_vertex(), db.actor:id())&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция спавна возвращает серверный объект, то есть ни NPC, ни монстра ни что-либо еще.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;Серверный обьект позволяет свеже созданного NPC или тайник затарить разными рулезами/артефактами. Например, вот так создадим перед входом к Сидоровичу долговца и засунем в него пачку патронов:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	local obj&lt;br /&gt;
	local a = vector() -- Задаем тип переменной&lt;br /&gt;
	local dir    = db.actor:direction()&lt;br /&gt;
&lt;br /&gt;
	a.x = -243.61	-- координата X&lt;br /&gt;
	a.y = -19.52	-- высота Y&lt;br /&gt;
	a.z = -127.17	-- координата Z&lt;br /&gt;
&lt;br /&gt;
	obj = alife():create(&amp;quot;bar_dolg_respawn_3&amp;quot;,a,13193,8,65535)&lt;br /&gt;
	alife():create_ammo(&amp;quot;ammo_9x18_fmj&amp;quot;,&lt;br /&gt;
		obj.position,&lt;br /&gt;
		obj.m_level_vertex_id,&lt;br /&gt;
		obj.m_game_vertex_id,&lt;br /&gt;
		obj.id,&lt;br /&gt;
		20) -- число патронов&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кстати, create_ammo - практически тоже самое, что и create, разница в том, что create_ammo предназначена специально для спавна патронов и позволяет создавать неполные пачки патронов. Возможно есть еще какие-то отличия. Стоит учесть, что сами авторы игры спавнят патроны исключительно через create_ammo. [[Участник:Imp|Imp]] 22:38, 23 июля 2007 (EEST)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Просто минимальный набор - координаты, ID, секция,а из него (серверного объекта) обычно нужен только ID, так как по ID можно получить этот самый серверный объект:&lt;br /&gt;
&amp;lt;pre&amp;gt;(alife():object(id))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Его можно использовать, чтобы поставить метку, например, но я его лично использую для других целей - спавн сложных объектов, конкретно – NPC.&lt;br /&gt;
&lt;br /&gt;
Например надо решить следующую задачу - надо создать наемника, сменить ему группировку и изменить его инвентарь, ну и в нагрузку - сделать другом для игрока.&lt;br /&gt;
&lt;br /&gt;
В определенный момент заспавненый объект переходит онлайн, в этот момент вызывается callback - net_spawn.&lt;br /&gt;
&lt;br /&gt;
Что мы делаем? Сверяем ID онлайн объекта с сохраненным ID!&lt;br /&gt;
&lt;br /&gt;
Если они совпадают, например так:&lt;br /&gt;
&amp;lt;pre&amp;gt;if obj:id()==saved_id then ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Важно то, что у серверного объекта ID - это параметр, а у онлайнового объекта ID получается с помощью функции. Это важно, а то можно прогореть.&lt;br /&gt;
&lt;br /&gt;
Итак, мы поймали нашего киллера по ID.&lt;br /&gt;
&lt;br /&gt;
Далее все очень просто - вызываем команды для спавна гаусса и патронов к нему в инвентаре NPC (см. выше), меняем группировку специальной функцией, и делаем его другом.&lt;br /&gt;
&lt;br /&gt;
Зачем такие сложности? Просто в оффлайне NPC как бы не существует, есть только косвенное упоминание о нем, и, плюс, все эти функции работают именно с объектом типа &amp;quot;NPC&amp;quot;, а не с серверными объектами.&lt;br /&gt;
&lt;br /&gt;
==Практика (часть 1)==&lt;br /&gt;
&lt;br /&gt;
'''1.''' Чтобы не повторяться в описании создания нового квеста, просто изучите [[Создание квестов (Fr3nzy)|статью по созданию квестов]] от Fr3nzy – лучшей статьи на эту тему я просто не видел :) Мы просто свяжем все воедино и научимся спавнить объекты из скрипта. &lt;br /&gt;
&lt;br /&gt;
Небольшое отступление:&lt;br /&gt;
&lt;br /&gt;
Почему предпочтительнее делать спавн скриптом, а не через тот же xrSpawner? Программа xrSpawner, при всех своих достоинствах, обладает одним недостатком, а именно – она делает спавн через файл all.spawn, что приводит к:&lt;br /&gt;
&lt;br /&gt;
* Невозможности совместить два мода, такой спавн использующих&lt;br /&gt;
* Необходимости каждый раз начинать новую игру&lt;br /&gt;
&lt;br /&gt;
При спавне через скрипт ситуация иная: в подавляющем большинстве случаев, ранее сохраненные игры будут работать, что не может не радовать :)&lt;br /&gt;
&lt;br /&gt;
Итак, определимся с квестом.&lt;br /&gt;
&lt;br /&gt;
'''Задача:''' после разговора с Сидоровичем спавним зомби на территории фабрики в первой локации. Для того, чтобы не повредить оригинальный сюжет игры, задание будет выдаваться '''после''' прохождения квеста с флешкой Шустрого, так как появись там зомби одновременно с бандитами и Шустрым... я думаю, исход боя предрешен :)&lt;br /&gt;
&lt;br /&gt;
Реализация: Постараюсь описать все действия максимально подробно, буквально по шагам. Первым делом запустите игру :) &lt;br /&gt;
&lt;br /&gt;
В консоли введите команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;rs_stats on или rs_stats 1 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тем самым мы включаем вывод информации на экран. &lt;br /&gt;
Далее вводим еще одну команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;demo_record 1 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И «летим» на фабрику. Нам нужно выбрать место для спавна объектов и данный режим как нельзя лучше подходит для реализации задуманного. Помещаем камеру в точке предполагаемого спавна и записываем координаты - у меня получились 115, -6, -16. &lt;br /&gt;
&lt;br /&gt;
Для выхода из режима demo_record нажимаем Esc, в консоли пишем rs_stats off или rs_stats 0 (убираем вывод информации).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;Другой способ получения тех же сведений - прийти в нужное место и запустить там скрипт, который выдаст все нужные координаты. Я пользуюсь следующим скриптом (вызываю общеизвестным способом, через main_menu):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function main_menu:main_cheat_f3()&lt;br /&gt;
	-- Выдадим сообщение о нашем местоположении&lt;br /&gt;
	local text&lt;br /&gt;
	local vid&lt;br /&gt;
	local gvid&lt;br /&gt;
	local a = vector() -- Тип переменной&lt;br /&gt;
	local text&lt;br /&gt;
&lt;br /&gt;
	a    = db.actor:position()        -- Наше положение в координатах&lt;br /&gt;
	vid  = db.actor:level_vertex_id() &lt;br /&gt;
	gvid = db.actor:game_vertex_id() &lt;br /&gt;
	text = &amp;quot;Позиция:\\nX= &amp;quot;..a.x..&amp;quot;\\nY= &amp;quot;..a.y..&amp;quot;\\nZ= &amp;quot;..a.z..&amp;quot;\\nlevel_vertex= &amp;quot;..vid..&amp;quot;\\ngame_vertex_id= &amp;quot;..gvid&lt;br /&gt;
	news_manager.send_tip(db.actor, text, nil, nil, 30000)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В результате не нужно эксперементировать мы сразу получаем все, в том числе и level_vertex и  game_vertex. [[Участник:Imp|Imp]] 22:38, 23 июля 2007 (EEST)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходим из игры, идем в папку с установленной игрой и создаем каталог gamedata (предполагается, что «лепим» свой «мод» на «чистую» игру,  без установленных модов, и имеем распакованные ресурсы игры в папке, скажем, gamedata source).&lt;br /&gt;
&lt;br /&gt;
В папке gamedata создаем папку config, а в ней - папку creatures. Скопируем из оригинальной папки файл m_zombie.ltx и откроем его на редактирование.&lt;br /&gt;
&lt;br /&gt;
В файлах игры присутствуют 5 моделей гражданских зомби:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;файлы zombi_1.ogf, zombi_1_ghost.ogf, zombi_2.ogf, zombi_trup.ogf, zombi_trup_2.ogf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вернем в игру их всех :)&lt;br /&gt;
&lt;br /&gt;
Уже имеются секции:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[zombie_weak]:m_zombie_e, [zombie_normal]:m_zombie_e, [zombie_strong]:m_zombie_e и [zombie_immortal]:zombie_strong. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Два последних типа используют одну и ту же модель zombi_trup.ogf, хм... непорядок, исправляем. &lt;br /&gt;
Последняя секция выглядит теперь так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[zombie_immortal]:zombie_strong&lt;br /&gt;
$spawn				= &amp;quot;monsters\zombies\zombie_immortal&amp;quot;&lt;br /&gt;
visual				= monsters\zombi\zombi_trup_2&lt;br /&gt;
panic_threshold		= 0.05	&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавим пятую модель. &lt;br /&gt;
&lt;br /&gt;
Для этого в конце файла создадим секцию:&lt;br /&gt;
&amp;lt;pre&amp;gt;[zombie_ghost]:zombie_strong&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что наш пятый зомби наследует все параметры zombie_strong, мы добавим лишь визуальное представление.&lt;br /&gt;
 &lt;br /&gt;
Пишем дальше:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$spawn				= &amp;quot;monsters\zombies\zombie_ghost&amp;quot;&lt;br /&gt;
visual				= monsters\zombi\zombi_1_ghost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все. Сохраняем изменения и закрываем файл.&lt;br /&gt;
&lt;br /&gt;
'''2.''' Пишем скрипт спавна. В папке gamedata создаем новую папку scripts, в ней создаем новый текстовый документ и называем его esc_zombie.script. &lt;br /&gt;
&lt;br /&gt;
Отступление третье:&lt;br /&gt;
&lt;br /&gt;
При написании статьи использовался оригинальный скрипт zombie_story.script из horror-mod’а. Концепция спавна перенесена практически без изменений, поэтому на авторство этого способа спавна я никоим образом не претендую :)&lt;br /&gt;
&lt;br /&gt;
Итак, открываем наш пустой файл на редактирование, первой строкой объявляем переменную, в которой хранятся наши зомби:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local zombie_types = {&amp;quot;zombie_weak&amp;quot;, &amp;quot;zombie_normal&amp;quot;, &amp;quot;zombie_strong&amp;quot;, &amp;quot;zombie_immortal&amp;quot;, &amp;quot;zombie_ghost&amp;quot;}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее пишем функцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function spawn_zombies( position, total )&lt;br /&gt;
	local zombie_index			-- тип зомби из массива zombie_types&lt;br /&gt;
	local new_pos, x_offset, z_offset	-- объявляем переменные 	&lt;br /&gt;
	for zombie_index=1, total do		-- крутим цикл столько раз, сколько &lt;br /&gt;
задает переменная total&lt;br /&gt;
		x_offset = math.random(5)	-- случайное (рандомное)  x от 1 до 5&lt;br /&gt;
		z_offset = math.random(5)	-- случайное (рандомное)  z от 1 до 5&lt;br /&gt;
		new_pos = position		-- передаем координаты в функцию&lt;br /&gt;
		new_pos.x = new_pos.x + x_offset	-- прибавляем к указанной нами &lt;br /&gt;
координате x полученное выше рандомное x&lt;br /&gt;
		new_pos.z = new_pos.z + z_offset	-- прибавляем к указанной нами &lt;br /&gt;
координате z полученное выше рандомное z&lt;br /&gt;
-- Ниже, собственно и вызывается функция спавна случайного типа зомби &lt;br /&gt;
zombie_types[math.random(5)] привязанного к нашим координатам&lt;br /&gt;
	alife():create(zombie_types[math.random(5)],new_pos,db.actor:level_vertex_id(),db.actor:game_vertex_id())&lt;br /&gt;
	end&lt;br /&gt;
end &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И последнее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function zomby_story_1( actor, npc )&lt;br /&gt;
--	десять зомби на фабрике (Кордон)&lt;br /&gt;
	local spawn_point = vector():set( 115, -6, -16 )	-- здесь указываем координаты, &lt;br /&gt;
выбранные нами для спавна, когда «летали» камерой :)&lt;br /&gt;
	spawn_zombies( spawn_point, 10 )		-- собственно вызов предыдущей функции &lt;br /&gt;
с передачей ей координат и количества объектов&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все. Сохраняем и закрываем файл.&lt;br /&gt;
&lt;br /&gt;
Продолжаем разговор :) &lt;br /&gt;
&lt;br /&gt;
Для того, чтобы игра не вылетала после того, как мы добавили новый тип монстров, их нужно добавить в файл xr_statistic.script. Итак, скопируем этот файл из папки игры scripts в нашу папку к файлу esc_zombie.script и откроем на редактирование. &lt;br /&gt;
&lt;br /&gt;
Добавим в local killCountProps  к монстрам строчку:&lt;br /&gt;
&amp;lt;pre&amp;gt;	zombie_weak = 1, zombie_normal = 2, zombie_strong = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В local sect_alias строчку:&lt;br /&gt;
&amp;lt;pre&amp;gt;	zombie_weak = &amp;quot;zombie_weak&amp;quot;, zombie_normal  = &amp;quot;zombie_normal&amp;quot;, zombie_strong = &amp;quot;zombie_strong&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
А ниже в monster_classes строчку:&lt;br /&gt;
&amp;lt;pre&amp;gt;			[clsid.zombie_s      ] = &amp;quot;zombie&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
В функцию getNpcType(npc) добавляем конструкцию:&lt;br /&gt;
&amp;lt;pre&amp;gt;		elseif npc:character_community() == &amp;quot;zombie&amp;quot; then&lt;br /&gt;
			community = &amp;quot;zombie&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сохраняем изменения и закрываем файл.&lt;br /&gt;
&lt;br /&gt;
Все будет работать на ура, пока мы не попробуем обыскать убитого зомби. Как только мы это сделаем, игра вылетит с примерно такой ошибкой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Expression    : fatal error&lt;br /&gt;
Function      : CInifile::r_string&lt;br /&gt;
File          : D:\xray-svn\xrCore\Xr_ini.cpp&lt;br /&gt;
Line          : 351&lt;br /&gt;
Description   : &amp;lt;no expression&amp;gt;&lt;br /&gt;
Arguments     : Can't find variable icon in [zombie_weak]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все верно – игра не знает какую иконку нам показывать для зомби. Иконки монстров хранятся в файле ui_npc_monster.dds. Здесь есть два варианта:&lt;br /&gt;
&lt;br /&gt;
* Если дружите с Фотошопом, отредактировать этот файл (нарисовать, добавить иконки);&lt;br /&gt;
* Взять готовый из любого мода, естественно, с разрешения авторов мода. Сейчас мы пропустим данный аспект и присвоим нашим зомби иконки контролера :)&lt;br /&gt;
&lt;br /&gt;
Вернемся к файлу m_zombie.ltx и в секцию [m_zombie_e]:monster_base впишем параметр&lt;br /&gt;
&amp;lt;pre&amp;gt; icon				 = ui_npc_monster_kontroler&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все. Вылетов не будет.&lt;br /&gt;
&lt;br /&gt;
3. Тема данной статьи не предусматривает подробного описания того, как сделать новый диалог. В начале статьи я упомянул источник, где можно найти исчерпывающую информацию по созданию диалогов, могу также привести в пример [[Создание диалогов (BAC9-FLCL)|статью по созданию диалогов]] от BAC9-FLCL.&lt;br /&gt;
&lt;br /&gt;
Нам нужно просто проверить работоспособность скриптового спавна, поэтому я приведу просто собственно сам измененный диалог из файла dialogs_escape.xml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;   &amp;lt;dialog id=&amp;quot;escape_trader_talk_info&amp;quot;&amp;gt;&lt;br /&gt;
………&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;999&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_999&amp;lt;/text&amp;gt;&lt;br /&gt;
	          &amp;lt;next&amp;gt;7770&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9991&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9992&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9993&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9994&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9996&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;9992&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_9992&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;99922&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;99922&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_99922&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9996&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;9993&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_9993&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;99933&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;9995&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_9995&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;3121&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_3121&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9996&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;3131&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_3131&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9996&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;41&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_41&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9996&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
	&amp;lt;/phrase&amp;gt;&lt;br /&gt;
	&amp;lt;!------Наш диалог: Начало-------&amp;gt;&lt;br /&gt;
		&amp;lt;phrase id=&amp;quot;7770&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;text&amp;gt;escape_trader_talk_info_7770&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;7771&amp;lt;/next&amp;gt;&lt;br /&gt;
			&amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;7771&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;text&amp;gt;escape_trader_talk_info_7771&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;7772&amp;lt;/next&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;7773&amp;lt;/next&amp;gt;&lt;br /&gt;
			&amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;7772&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;text&amp;gt;escape_trader_talk_info_7772&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;7777&amp;lt;/next&amp;gt;&lt;br /&gt;
			&amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;7773&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;text&amp;gt;escape_trader_talk_info_7773&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;7779&amp;lt;/next&amp;gt;&lt;br /&gt;
			&amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;7779&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;text&amp;gt;escape_trader_talk_info_7779&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;9996&amp;lt;/next&amp;gt;&lt;br /&gt;
               			 &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
			&amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;7777&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;text&amp;gt;escape_trader_talk_info_7777&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;esc_zombie.zombie_story_1&amp;lt;/action&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;9996&amp;lt;/next&amp;gt;&lt;br /&gt;
               			 &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
          			 &amp;lt;/phrase&amp;gt;&lt;br /&gt;
	&amp;lt;!------Наш диалог: Конец-------&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;51&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;escape_trader_talk_info_51&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9996&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;9995&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
……&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И также связанный с ним файл stable_dialogs_escape.xml.&lt;br /&gt;
В самом начале файла пишем следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;escape_trader_talk_info_7770&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;escape_trader_talk_info_7771&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Да знаешь... Вроде как тихо все у нас. Хотя, вот, вспомнил! Говорили мне &lt;br /&gt;
на днях, что на фабрике, ну, там, где бандюки околачиваются постоянно, видели какиих-то то ли &lt;br /&gt;
людей, то ли призраков... Мало ли что спьяну почудится - я и сказал этим паникерам, мол, &lt;br /&gt;
закусывать надо! Хех, блин, алкаши...&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;escape_trader_talk_info_7772&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Дык мне по любому мимо фабрики топать - заодно и посмотрю на этих &lt;br /&gt;
&amp;quot;людей-призраков&amp;quot;.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;escape_trader_talk_info_7773&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;escape_trader_talk_info_7779&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;escape_trader_talk_info_7777&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;esc_bridge_soldiers_start_11&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все. Можно запускать игру, идти на Кордон, после разговороа с Сидоровичем, в зависимости &lt;br /&gt;
от выбранного Меченным решения, бежим на фабрику и … смотрим сами :)&lt;br /&gt;
&lt;br /&gt;
 [http://data.cod.ru/1281523146 Готовые файлы примера]&lt;br /&gt;
 [http://slil.ru/24600587 Spawn Lib]&lt;br /&gt;
Домашнее задание - вернуть в игру 6-ой тип гражданского зомби :)&lt;br /&gt;
&lt;br /&gt;
Продолжение следует…&lt;br /&gt;
&lt;br /&gt;
==Практика (часть 2)==&lt;br /&gt;
&lt;br /&gt;
'''4.''' Сегодня мы закончим с зомби в полном объеме – добавим их описания в энциклопедию,  добавим иконки, и разберемся с «домашним заданием»:) Думаю, что внимательно изучив эту статью, вы ''сами'' сможете через скриптовые функции восстановить любого персонажа, не вошедшего в финальный релиз игры. Если у кого хватит времени и желания, те могут даже написать что-то типа «Ночи живых мертвецов» :)  - серию квестов, связанную своим собственным сюжетом. &lt;br /&gt;
Итак, «домашнее задание» - добавляем в игру шестого зомби.&lt;br /&gt;
&lt;br /&gt;
* Создаем в папке gamedata папку meshes, в ней папку monsters, а там – папку zombi. В папке meshes хранятся модели персонажей, объектов, окружения, присутствующих в игре. Как я уже говорил выше, в игре представлено 5 моделей гражданских зомби, а вот текстур – 6. Также немного смутила нумерация моделей – 1, 2, 4... А где третий? Наверное, сбежал :)&lt;br /&gt;
&lt;br /&gt;
* Скопируем из папки с оригинальными файлами игры в созданную нами папку zombi файл zombi_2.ogf и переименуем его в zombi_3.ogf. Откроем файл нашей новой модели любым HexEditor’ом, я использую BiEd (Binary Editor 1.00). Так как данная статья рассчитана не только на «продвинутых юзеров», но и на «обычных чайников», которые, тем не менее, хотят «что-нить замутить» и при этом не сильно «парить моск», я не буду рассказывать здесь про адресацию, двухбайтовую запись и т.д., я просто наглядно покажу, где что поправить :)&lt;br /&gt;
&lt;br /&gt;
[http://www.golushkov.pp.net.ua/photo/11-0-717-3 Файл модели '''до''' редактирования]&lt;br /&gt;
&lt;br /&gt;
[http://www.golushkov.pp.net.ua/photo/11-0-718-3 Файл модели '''после''' редактирования]&lt;br /&gt;
&lt;br /&gt;
На скринах видно, что мы просто изменили для этой модели путь к текстуре. Все. Без использования 3D-редакторов и затраты кучи времени на обработку модели в них, мы получили абсолютно новую (на внешний вид) модель. :)&lt;br /&gt;
&lt;br /&gt;
'''5.''' Теперь пропишем нашего нового зомби во все файлы, которые мы создали ранее. В файл m_zombie.ltx в самый конец добавляем секцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[zombie_old]:zombie_normal&lt;br /&gt;
$spawn				= &amp;quot;monsters\zombies\zombie_old&amp;quot;&lt;br /&gt;
visual				= monsters\zombi\zombi_3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в файле esc_zombie.script изменяем массив в первой строке:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local zombie_types = {&amp;quot;zombie_weak&amp;quot;, &amp;quot;zombie_normal&amp;quot;, &amp;quot;zombie_strong&amp;quot;, &amp;quot;zombie_immortal&amp;quot;, &lt;br /&gt;
&amp;quot;zombie_old&amp;quot;, &amp;quot;zombie_ghost&amp;quot;}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В функции spawn_zombies изменяем строку спавна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	alife():create(zombie_types[math.random(6)],new_pos,&lt;br /&gt;
db.actor:level_vertex_id(),db.actor:game_vertex_id())&amp;lt;/pre&amp;gt;&lt;br /&gt;
в функции zombie_story_1 меняем число объектов на кратное 6-ти (необязательно):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	spawn_zombies( spawn_point, 12 )&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё. Сохраняем и закрываем.&lt;br /&gt;
&lt;br /&gt;
'''6.''' Копируем в папку gamedata\config\gameplay\  файл encyclopedia_mutants.xml, добавляем описание зомби в энциклопедию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    &amp;lt;!-------------------------------- Zombieg -----------------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;article id=&amp;quot;mutant_zombieg_general&amp;quot; name=&amp;quot;Zombieg&amp;quot; group=&amp;quot;Mutants&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;texture&amp;gt;ui_npc_monster_zombieg&amp;lt;/texture&amp;gt;&lt;br /&gt;
        &amp;lt;text&amp;gt;enc_mutant_zombieg_general&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И в связанный с ним файл string_table_enc_mutants.xml в папке gamedata\config\text\rus\ добавляем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;Zombie&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;Zombieg&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_mutant_zombieg_general&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Зомби-привидение отличается от обычного зомби лишь тем, что &lt;br /&gt;
воздействие Выжигателя мозгов полностью разрушило не только структуру личности, но и &lt;br /&gt;
тело, поэтому зомби-призрак несколько более живуч по сравнению с обычным зомби.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;enc_mutant_zombie_general&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Воздействие Выжигателя мозгов полностью разрушает структуру личности, &lt;br /&gt;
оставляя только телесную оболочку.\n\n Побродив немного по Зоне, лишённые разума тела &lt;br /&gt;
начинают превращаться в настоящих зомби. Из рефлексов у них остаются лишь самые примитивные, &lt;br /&gt;
оружие и экипировка скоро приходят в негодность. В результате зомби становятся собой ни чем &lt;br /&gt;
иным, как медлительными полутрупами, которых наличествуют лишь два эффективных раздражителя: &lt;br /&gt;
еда и сон. Зомби совершенно неразборчивы в выборе пищи и питья, поэтому их тела буквально &lt;br /&gt;
пропитаны радиацией и токсинами. Как правило, эти существа бесцельно бродят по Зоне или, &lt;br /&gt;
словно трупы, валяются внутри заброшенных построек. Однако, лишь только зомби почует близкое &lt;br /&gt;
присутствие живого человека, он сразу же пытается атаковать. Умудрённые опытом сталкеры &lt;br /&gt;
стараются обходить эти неуклюжие опустошённые оболочки.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Копируем сюда же файл stable_statistic_caption.xml и изменяем в нем 3 строчки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot;zombie_normal&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;zombie_strong&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;zombie_weak&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сохраняем и закрываем.&lt;br /&gt;
&lt;br /&gt;
'''7.''' И последнее – добавим иконки. Скажу сразу, воспользовался готовым файлом, уже содержащим иконки зомби и других «восстановленных монстров» (спасибо Fr3nzy). Поэтому просто скопируйте файл ui_npc_monster.dds из архива в папку gamedata\textures\ui\, а файл ui_npc_monster.xml – в папку gamedata\config\ui\. Если вы хотите сделать собственные - прочитайте урок по [[Изменение текстур (BAC9-FLCL)|изменению текстур]].&lt;br /&gt;
&lt;br /&gt;
Вкратце, что описывает файл ui_npc_monster.xml: в нем задаются координаты иконок, расположенных в файле ui_npc_monster.dds, применительно к каждому типу монстров в игре.&lt;br /&gt;
&lt;br /&gt;
Заключительный штрих. Откройте файл m_zombie.ltx и в первой секции замените строку &lt;br /&gt;
&amp;lt;pre&amp;gt;icon				 = ui_npc_monster_kontroler&amp;lt;/pre&amp;gt;&lt;br /&gt;
На:&lt;br /&gt;
&amp;lt;pre&amp;gt;icon 				= ui_npc_monster_zombie&amp;lt;/pre&amp;gt;&lt;br /&gt;
В секцию [zombie_ghost] добавьте строку:&lt;br /&gt;
&amp;lt;pre&amp;gt;icon 				= ui_npc_monster_zombieg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сохраняйте изменения. Всё. &lt;br /&gt;
&lt;br /&gt;
Вот [http://data.cod.ru/1290894794 готовые файлы примера].&lt;br /&gt;
Удачи и спасибо за внимание :)&lt;br /&gt;
&lt;br /&gt;
==Спавн NPC==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;Эта часть статьи написана [[Участник:Arhet|Arhet]] и создана на примере того, как в SRP Mod были созданы NPC группировки &amp;quot;Грех&amp;quot;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задействуем файлы:&lt;br /&gt;
&lt;br /&gt;
* gamedata\config\gameplay\character_desc_escape.xml&lt;br /&gt;
* gamedata\config\gameplay\npc_profile.ltx&lt;br /&gt;
* gamedata\config\creatures\spawn_sections.ltx&lt;br /&gt;
&lt;br /&gt;
Начнем с ''character_desc_escape.xml''. Описание что значит каждая строка писать не буду, так как все до меня уже сделано.&lt;br /&gt;
&lt;br /&gt;
Тут создадим нового персонажа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;specific_character id=&amp;quot;esc_dark_stalker_1&amp;quot; team_default = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;name&amp;gt;GENERATE_NAME_bandit&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;icon&amp;gt;ui_npc_dark_1&amp;lt;/icon&amp;gt;&lt;br /&gt;
&amp;lt;map_icon x=&amp;quot;0&amp;quot; y=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/map_icon&amp;gt;&lt;br /&gt;
&amp;lt;bio&amp;gt;sim_stalker_novice_bio&amp;lt;/bio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;esc_dark_stalker_01&amp;lt;/class&amp;gt; - вот тут наш новый класс кстати.&lt;br /&gt;
&amp;lt;community&amp;gt;dark_stalker&amp;lt;/community&amp;gt; &amp;lt;terrain_sect&amp;gt;stalker_terrain&amp;lt;/terrain_sect&amp;gt;&lt;br /&gt;
&amp;lt;money min=&amp;quot;200&amp;quot; max=&amp;quot;600&amp;quot; infinitive=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/money&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;rank&amp;gt;198&amp;lt;/rank&amp;gt;&lt;br /&gt;
&amp;lt;reputation&amp;gt;-24&amp;lt;/reputation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;visual&amp;gt;actors\dark_stalker\dark_stalker_1&amp;lt;/visual&amp;gt;&lt;br /&gt;
&amp;lt;snd_config&amp;gt;characters_voice\human_01\monolith\&amp;lt;/snd_config&amp;gt;&lt;br /&gt;
&amp;lt;crouch_type&amp;gt;-1&amp;lt;/crouch_type&amp;gt;&lt;br /&gt;
&amp;lt;panic_treshold&amp;gt;0&amp;lt;/panic_treshold&amp;gt;&lt;br /&gt;
&amp;lt;supplies&amp;gt;&lt;br /&gt;
[spawn] \n&lt;br /&gt;
wpn_dark_colt1911 \n&lt;br /&gt;
ammo_11.43x23_hydro \n&lt;br /&gt;
#include &amp;quot;gameplay\character_items.xml&amp;quot; \n&lt;br /&gt;
#include &amp;quot;gameplay\character_drugs.xml&amp;quot; \n&lt;br /&gt;
#include &amp;quot;gameplay\character_food.xml&amp;quot;&lt;br /&gt;
&amp;lt;/supplies&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;gameplay\character_criticals_3.xml&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;start_dialog&amp;gt;dm_hello_dialog&amp;lt;/start_dialog&amp;gt;&lt;br /&gt;
&amp;lt;actor_dialog&amp;gt;dm_cool_info_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
&amp;lt;/specific_character&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Впишем наш код после какого-нибудь &amp;lt;/specific_character&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь идем в ''npc_profile.xml'' и туда вгоняем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;character id=&amp;quot;esc_dark_stalker_1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;class&amp;gt;esc_dark_stalker_01&amp;lt;/class&amp;gt;&lt;br /&gt;
&amp;lt;specific_character&amp;gt;esc_dark_stalker_1&amp;lt;/specific_character&amp;gt;&lt;br /&gt;
&amp;lt;/character&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь надо заняться ''spawn_sections.ltx''. Скрипт будет «брать NPC» как раз из этого файла. Пишем туда:&lt;br /&gt;
&lt;br /&gt;
* [esc_dark_stalker_1]:stalker – имя секции для скрипта..&lt;br /&gt;
* $spawn = &amp;quot;respawn\esc_dark_stalker_1&amp;quot;&lt;br /&gt;
* character_profile = esc_dark_stalker_1 – ссылка на описание нашего NPC&lt;br /&gt;
* spec_rank = regular – спец ранг&lt;br /&gt;
* community = dark_stalker – группировка.&lt;br /&gt;
&lt;br /&gt;
Теперь берем любой скрипт спавна NPC, вгоняем туда имя секции из spawn_sections.ltx и ву-а-ля.&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:XStream|xStream]]&lt;br /&gt;
* [[Участник:RekLatS|OffBar]]&lt;br /&gt;
* [[Участник:Fr3nzy|Fr3nzy]]&lt;br /&gt;
* [[Участник:Imp|Imp]]&lt;br /&gt;
* [[Участник:Arhet|Arhet]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_NPC</id>
		<title>SoC. Логика NPC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_NPC"/>
				<updated>2008-01-22T17:26:59Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Теория=&lt;br /&gt;
&lt;br /&gt;
Предполагается, что читатель этой статьи знаком с языком LUA и основами объектно-ориентированного программирования.&lt;br /&gt;
&lt;br /&gt;
==История==&lt;br /&gt;
&lt;br /&gt;
Подход к решению проблемы игрового ИИ, выбранный создателями S.T.A.L.K.E.R. (далее буду писать просто &amp;quot;Сталкер&amp;quot;), был &lt;br /&gt;
впервые применён в 1957 году Гербертом Саймоном (Herbert Simon) и Алленом Ньюэллом (Allen Newell) в программе GPS &lt;br /&gt;
(General Problem Solver или Универсальный Решатель Задач).&lt;br /&gt;
&lt;br /&gt;
Суть этого подхода заключается в том, что сначала задача представляется в виде набора условий, набора операторов, &lt;br /&gt;
изменяющих эти условия, и описания начального и конечного состояний. Затем осуществляется поиск последовательности &lt;br /&gt;
операторов, переводящей начальное состояние системы в конечное.&lt;br /&gt;
&lt;br /&gt;
В Сталкере подсистема поиска последовательности операторов называется «планировщик».&lt;br /&gt;
&lt;br /&gt;
==ИИ в Сталкере==&lt;br /&gt;
&lt;br /&gt;
Как видно, этот способ решения проблем не подходит для шутера, так как ситуация в игре может меняться &lt;br /&gt;
непредсказуемым образом и построенный план решения (последовательность операторов) станет неприменимым к текущей &lt;br /&gt;
ситуации. Поэтому планировщик запускается каждый раз при непредвиденном развитии событий и создаёт новую &lt;br /&gt;
последовательность действий (операторов).&lt;br /&gt;
&lt;br /&gt;
Условия в игре тоже вычисляются динамически. Для этого используются специальные объекты – эвалуаторы. Эвалуатор &lt;br /&gt;
должен содержать метод evaluate(), возвращающий true, если условие выполняется и false в противном случае. Операторы &lt;br /&gt;
также представлены как объекты. Планировщик вызывает метод initialize() при начале работы оператора, затем он &lt;br /&gt;
периодически вызывает метод execute().&lt;br /&gt;
&lt;br /&gt;
Например, можно создать эвалуатор для условия «NPC голоден», и привязать к этому условию оператор «поесть». &lt;br /&gt;
&lt;br /&gt;
Планировщик будет периодически проверять это условие (вызывать метод evaluate() эвалуатора), и если оно выполняется, &lt;br /&gt;
инициализирует и будет выполнять оператор «поесть» до тех пор, пока условие не станет ложным.&lt;br /&gt;
&lt;br /&gt;
К сожалению, в большей части скриптов все возможности планировщика не используются. &lt;br /&gt;
&lt;br /&gt;
===Разбор настройки и работы планировщика на примере скрипта xr_kamp===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим скрипт xr_kamp, заставляющий сталкеров сидеть у костра и рассказывать анекдоты.&lt;br /&gt;
Настройка планировщика осуществляется в функции add_to_binder. Параметры функции: object – объект для которого &lt;br /&gt;
настраивается планировщик (в нашем случае это сталкер), ini, scheme, section – инициализационный файл, название &lt;br /&gt;
схемы действий, секция ини-файла (эти параметры будут подробно разобраны в части по созданию мода), storage – &lt;br /&gt;
таблица для хранения текущих параметров схемы действий.&lt;br /&gt;
&lt;br /&gt;
Разберём, что делает эта функция. &lt;br /&gt;
&lt;br /&gt;
Сначала получаем планировщик для текущего объекта (object).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local manager = object:motivation_action_manager()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем присваиваем идентификаторы операторов и условий элементам массива. Это сделано просто для удобства. &lt;br /&gt;
&lt;br /&gt;
Идентификаторы могут иметь любое целочисленное значение, главное, чтобы они были уникальными, то есть не &lt;br /&gt;
использовались для других операторов и условий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;properties[&amp;quot;kamp_end&amp;quot;]=xr_evaluators_id.stohe_kamp_base+1&lt;br /&gt;
properties[&amp;quot;on_position&amp;quot;]=xr_evaluators_id.stohe_kamp_base+2&lt;br /&gt;
properties[&amp;quot;contact&amp;quot;]=xr_evaluators_id.stohe_meet_base+1&lt;br /&gt;
operators[&amp;quot;go_position&amp;quot;]=xr_actions_id.stohe_kamp_base+1&lt;br /&gt;
operators[&amp;quot;wait&amp;quot;]=xr_actions_id.stohe_kamp_base+3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для каждого идентификатора условия создадим соответствующий эвалуатор и добавим его в планировщик. В данном случае &lt;br /&gt;
это условия: «закончить ли посиделки около костра?» и «пришёл ли я на своё место у костра?»&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;manager:add_evaluator (properties[&amp;quot;kamp_end&amp;quot;],    &lt;br /&gt;
this.evaluator_kamp_end   (&amp;quot;kamp_end&amp;quot;, storage, &amp;quot;kamp_end&amp;quot;))manager:add_evaluator (properties[&amp;quot;on_position&amp;quot;], &lt;br /&gt;
this.evaluator_on_position  (&amp;quot;kamp_on_position&amp;quot;, storage, &amp;quot;kamp_on_position&amp;quot;))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь создадим оператор «сидеть около костра, рассказывать анекдоты, жевать колбасу и т.д.». Можно было бы &lt;br /&gt;
реализовать эти действия как набор разных операторов, выбором которых занимался бы планировщик, но автор скрипта &lt;br /&gt;
решил сделать один сложный оператор.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local action = this.action_wait (object:name(),&amp;quot;action_kamp_wait&amp;quot;, storage)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задаем предусловия для этого оператора. Планировщик выберет этот оператор при выполнении всех условий. Всё это &lt;br /&gt;
значит примерно следующее: я могу сидеть у костра, если: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_precondition   (world_property(stalker_ids.property_alive, true))&amp;lt;/pre&amp;gt;&lt;br /&gt;
я живой,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_precondition   (world_property(stalker_ids.property_danger,false))&amp;lt;/pre&amp;gt;&lt;br /&gt;
опасностей нет,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_precondition   (world_property(stalker_ids.property_enemy, false))&amp;lt;/pre&amp;gt;&lt;br /&gt;
врагов нет,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_precondition   (world_property(stalker_ids.property_anomaly,false))&amp;lt;/pre&amp;gt;&lt;br /&gt;
аномалий поблизости нет,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xr_motivator.addCommonPrecondition(action)&amp;lt;/pre&amp;gt;&lt;br /&gt;
выполняются другие важные условия (игрок не собирается со мной поговорить, я не собираюсь никого бить по морде, я не &lt;br /&gt;
ранен, я не собираюсь стрелять по вертолёту),&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_precondition   (world_property(properties[&amp;quot;on_position&amp;quot;],  true))&amp;lt;/pre&amp;gt;&lt;br /&gt;
я уже нахожусь около костра.&lt;br /&gt;
&lt;br /&gt;
Скажем планировщику, что он должен ожидать от выполнения этого оператора. В данном случае после выполнения этого &lt;br /&gt;
оператора условие «закончить ли посиделки около костра?» должно стать истинным. То есть если условие стало истинным, &lt;br /&gt;
планировщик прекратит выполнение оператора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_effect     (world_property(properties[&amp;quot;kamp_end&amp;quot;],   true))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание оператора завершено. Добавим его в планировщик.&lt;br /&gt;
&amp;lt;pre&amp;gt;manager:add_action (operators[&amp;quot;wait&amp;quot;], action)&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Эта строчка не имеет отношения к работе планировщика. Если коротко, то она позволяет объекту получать уведомления об &lt;br /&gt;
определённых событиях (смерть NPC – вызывается метод death_callback(), попадание пули в NPC – вызывается метод &lt;br /&gt;
hit_callback() и т.д.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xr_logic.subscribe_action_for_events(object, storage, action)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаем оператор, отвечающий за доставку NPC к его месту у костра.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action = this.action_go_position (object:name(),&amp;quot;action_go_kamp&amp;quot;, storage)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавляем предусловия, как и для предыдущего оператора.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_precondition   (world_property(stalker_ids.property_alive, true))&lt;br /&gt;
action:add_precondition   (world_property(stalker_ids.property_danger,false))&lt;br /&gt;
action:add_precondition   (world_property(stalker_ids.property_enemy, false))&lt;br /&gt;
action:add_precondition   (world_property(stalker_ids.property_anomaly,false))&lt;br /&gt;
xr_motivator.addCommonPrecondition(action)&lt;br /&gt;
action:add_precondition   (world_property(properties[&amp;quot;on_position&amp;quot;],  false))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Единственное отличие – последнее условие. Этот оператор будет выполняться только если NPC ещё не находится на своем &lt;br /&gt;
месте у костра, то есть если функция evaluator_on_position.evaluate() возвращает false.&lt;br /&gt;
&lt;br /&gt;
В результате выполнения этого действия условие «на своём ли я месте у костра?» должно стать истинным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_effect     (world_property(properties[&amp;quot;on_position&amp;quot;],  true))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание оператора завершено. Добавляем его к планировщику.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;manager:add_action (operators[&amp;quot;go_position&amp;quot;], action)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осталось ещё одна задача. Нужно запретить планировщику активировать оператор «alife», тот самый оператор, который &lt;br /&gt;
заставляет NPC болтаться по карте, отстреливать собачек и в конце концов попадать в аномалию. Впрочем, отстрелом &lt;br /&gt;
врагов занимается другой оператор с идентификатором stalker_ids.action_combat_planner.&lt;br /&gt;
&lt;br /&gt;
Для этого мы получаем оператор «alife»&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action = manager:action (xr_actions_id.alife)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И добавляем к его предусловиям следующее: условие «закончить ли посиделки у костра?» должно быть истинным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_precondition   (world_property(properties[&amp;quot;kamp_end&amp;quot;],   true))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итак, мы настроили планировщик. Посмотрим как всё это будет работать.&lt;br /&gt;
&lt;br /&gt;
В некоторый момент времени гулаг, в который попал NPC, назначает ему работу: сидеть у костра. В результате условие &lt;br /&gt;
«закончить ли посиделки у костра?» становится ложным. Планировщик видит это изменение и пытается выработать &lt;br /&gt;
последовательность операторов, после выполнения которой, условие бы стало истинным и NPC снова бы вернулся к &lt;br /&gt;
выполнению высокоприоритетного оператора «alife». Для выполнения этой задачи подходит оператор «посиделки у костра», &lt;br /&gt;
но для него не выполняется условие «я на своем месте у костра». Поэтому планировщик создаёт план из двух операторов: &lt;br /&gt;
«дойти до костра» и «посиделки у костра». Если во время выполнения одного из операторов возникнет непредвиденная &lt;br /&gt;
ситуация (появится враг, главный герой начнёт приставать с вопросами и т.п.), то планировщик скорректирует план, &lt;br /&gt;
добавив оператор для устранения этой непредвиденной ситуации.&lt;br /&gt;
&lt;br /&gt;
Как видно система ИИ в Сталкере обладает весьма большой гибкостью, что мы и продемонстрируем при создании мода.&lt;br /&gt;
&lt;br /&gt;
==Модели (или схемы) поведения в Сталкере==&lt;br /&gt;
&lt;br /&gt;
В наборе скриптов Сталкера предусмотрена возможность объединять операторы и условия в модели поведения. Модель &lt;br /&gt;
поведения – это набор логически связанных операторов и условий, служащих для выполнения определённой задачи. Так &lt;br /&gt;
скрипт xr_kamp представляет собой модель поведения, состоящую из двух операторов и двух условий.&lt;br /&gt;
&lt;br /&gt;
===Регистрация модели поведения===&lt;br /&gt;
&lt;br /&gt;
Для включения новой модели поведения в набор моделей, доступных NPC, сначала необходимо её зарегистрировать. &lt;br /&gt;
Предположим, нам нужно зарегистрировать модель поведения, описанную в скрипте actor_need_help.script. Регистрация &lt;br /&gt;
моделей осуществляется в скрипте modules.script.  Добавим туда следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;if actor_need_help then – в этой строке мы проверяем что наш скрипт действительно существует&lt;br /&gt;
    load_scheme(&amp;quot;actor_need_help&amp;quot;, &amp;quot;actor_need_help&amp;quot;, stype_stalker)&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первый параметр функции load_scheme задает имя файла скрипта, второй параметр – это название модели поведения, &lt;br /&gt;
третий параметр – тип модели поведения (возможны следующие значения: stype_stalker – модель поведения NPC, &lt;br /&gt;
stype_mobile – модель поведения монстра, stype_item – «модель поведения» физического объекта, stype_heli – модель &lt;br /&gt;
поведения вертолёта, stype_restrictor – «модель поведения» области пространства). Скрипты для моделей поведения &lt;br /&gt;
разных типов пишутся по-разному. Мы будем рассматривать только модели поведения NPC.&lt;br /&gt;
&lt;br /&gt;
Внимание! Для успешной работы модели поведения её скрипт должен содержать функцию add_to_binder, выполняющую &lt;br /&gt;
настройку планировщика.&lt;br /&gt;
&lt;br /&gt;
===Активация/деактивация модели поведения===&lt;br /&gt;
&lt;br /&gt;
Некоторые модели поведения применимы в любых ситуациях (например, реакция на попадание пули в NPC или реакция на &lt;br /&gt;
появление врага). Такие модели должны активироваться/деактивироваться в функциях &lt;br /&gt;
&lt;br /&gt;
enable_generic_schemes()/disable_generic_schemes() скрипта xr_logic. В случае с моделью поведения actor_need_help, &lt;br /&gt;
&lt;br /&gt;
это будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
1. Создаём функции set_actor_need_help и disable_scheme в нашем скрипте actor_need_help. Эти функции будут отвечать &lt;br /&gt;
за активацию и деактивацию нашей модели поведения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function set_actor_need_help(npc,ini,scheme)&lt;br /&gt;
  local st=xr_logic.assign_storage_and_bind(npc, ini, scheme, “actor_need_help”)&lt;br /&gt;
  st.enabled=true&lt;br /&gt;
end&lt;br /&gt;
function disable_scheme(npc,scheme)&lt;br /&gt;
  local st = db.storage[npc:id()][scheme]&lt;br /&gt;
  if st then&lt;br /&gt;
    st.enabled = false&lt;br /&gt;
  end&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Добавляем следующую строку в скрипт xr_logic.script после строки «if stype == modules.stype_stalker then» в &lt;br /&gt;
функции enable_generic_schemes()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  actor_need_help.set_actor_need_help(npc,ini,”actor_need_help”)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Добавляем следующую строку в скрипт xr_logic.script после строки «if stype == modules.stype_stalker then» в &lt;br /&gt;
функции disable_generic_schemes()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  actor_need_help.disable_scheme(npc,”actor_need_help”)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если же модель поведения предназначена только для использования в определённых ситуациях, то достаточно выполнить &lt;br /&gt;
шаг 1 и использовать созданные функции по мере надобности. Например, активируя эту схему через диалог с NPC (как мы &lt;br /&gt;
и сделаем в нашем моде).&lt;br /&gt;
&lt;br /&gt;
Внимание! Я максимально упростил функции активации/деактивации модели поведения. Чтобы полностью разобраться с ними, &lt;br /&gt;
посмотрите скрипты xr_combat, xr_kamp и другие подобные.&lt;br /&gt;
&lt;br /&gt;
===Приоритеты моделей поведения===&lt;br /&gt;
&lt;br /&gt;
Некоторые модели поведения настолько важны, что должны срабатывать в любой ситуации (например, реакция на попадание &lt;br /&gt;
пули). Для этого в скрипте xr_motivator предусмотрена функция addCommonPrecondition(action), в эту функцию можно &lt;br /&gt;
добавить одно из условий нашей модели поведения, чтобы другие модели поведения не могли сработать при выполнении &lt;br /&gt;
этого условия (здесь есть свои тонкости, но мы рассмотрим их позже). Предположим, что у нас есть модель поведения &lt;br /&gt;
actor_need_help, заставляющая NPC подбежать к ГГ и вылечить его. Пусть за проверку здоровья ГГ отвечает условие с &lt;br /&gt;
идентификатором actor_need_help.property_actor_is_wounded. Значит, если мы хотим, чтобы NPC подбегал к ГГ не обращая &lt;br /&gt;
внимание ни на что другое, то нужно добавить следующую строчку в функцию addCommonPrecondition(action):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;action:add_precondition(world_property(actor_need_help.property_actor_is_wounded,false))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эта строчка запретит выполнение всех других действий, если условие с идентификатором &lt;br /&gt;
actor_need_help.property_actor_is_wounded станет истинным (в нашем случае это будет означать, что ГГ сильно ранен. &lt;br /&gt;
&lt;br /&gt;
Конкретное значение здоровья ГГ при котором он считается сильно раненным будет определять эвалуатор этого условия).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Создаем мод=&lt;br /&gt;
&lt;br /&gt;
В этом разделе мы сделаем мод, позволяющий сказать дружественно настроенному NPC, чтобы он лечил главного героя во &lt;br /&gt;
время боя.&lt;br /&gt;
&lt;br /&gt;
==Постановка задачи==&lt;br /&gt;
&lt;br /&gt;
Итак, мы хотим, чтобы дружественные NPC наконец начали приносить пользу. Для этого научим их лечить ГГ во время боя.&lt;br /&gt;
Распишем по пунктам:&lt;br /&gt;
&lt;br /&gt;
1. Нужно добавить дружественным NPC ветку в диалоге с просьбой присматривать за ГГ и лечить его, если в этом &lt;br /&gt;
возникнет необходимость.&lt;br /&gt;
&lt;br /&gt;
2. Добавить NPC модель поведения, реализующую выполнение этой просьбы.&lt;br /&gt;
&lt;br /&gt;
2.1. NPC должен действовать согласно этой модели только если ГГ находится недалеко от него.&lt;br /&gt;
&lt;br /&gt;
2.2. NPC не должен далеко отходить от ГГ во время боя.&lt;br /&gt;
&lt;br /&gt;
2.3. Если здоровье ГГ упало ниже определённой отметки, NPC должен подойти/подбежать и вылечить ГГ.&lt;br /&gt;
&lt;br /&gt;
==Что потребуется для реализации==&lt;br /&gt;
&lt;br /&gt;
Нам придётся изменять диалоги для некоторых NPC, для этого нужно будет изменить файлы &lt;br /&gt;
config\gameplay\character_dialogs.xml (диалоги для всех NPC), config\localization.ltx и config\system.ltx (подробнее &lt;br /&gt;
см. статью BAC9-FLCL или Fr3nzy). Мы изменим диалоги для всех NPC, но для неподходящих NPC диалог будет отсекаться с &lt;br /&gt;
помощью предусловия. Потребуется также добавить файлы с текстами диалогов и функции для проверки условий, &lt;br /&gt;
используемых в диалогах.&lt;br /&gt;
&lt;br /&gt;
Для включения новой модели поведения NPC нужно будет внести изменения в скрипты scripts\modules.script (регистрация &lt;br /&gt;
моделей поведения) и scripts\xr_motivator.script (для установки высокого приоритета нашей модели). Модификации файла &lt;br /&gt;
xr_logic.script, в котором происходит установка общих моделей поведения, не потребуется, так как мы будем &lt;br /&gt;
активировать нашу схему поведения при выборе определённой ветки в диалоге.&lt;br /&gt;
&lt;br /&gt;
Теперь решим какие условия и операторы нам понадобятся.&lt;br /&gt;
&lt;br /&gt;
Условия:&lt;br /&gt;
&lt;br /&gt;
1. Состояние главного героя. Если оно ниже определённого порога, то условие станет истинным. Назначим ему &lt;br /&gt;
идентификатор property_actor_is_wounded и эвалуатор evaluator_actor_is_wounded. Далее я буду указывать идентификатор &lt;br /&gt;
и эвалуатор в скобках через запятую.&lt;br /&gt;
&lt;br /&gt;
2. Находится ли NPC достаточно близко, чтобы вылечить ГГ. (property_ready_to_heal, evaluator_ready_to_heal)&lt;br /&gt;
&lt;br /&gt;
3. Есть ли у NPC аптечки. (property_has_medkit, evaluator_has_medkit)&lt;br /&gt;
&lt;br /&gt;
4. Не отошёл ли NPC слишком далеко от ГГ или ГГ от NPC. (property_faraway, evaluator_faraway)&lt;br /&gt;
&lt;br /&gt;
5. Находится ли ГГ достаточно близко, чтобы имело смысл помогать ему. (property_near_enough, evaluator_near_enough).&lt;br /&gt;
&lt;br /&gt;
Операторы:&lt;br /&gt;
&lt;br /&gt;
1. Лечить ГГ. (act_heal, action_heal)&lt;br /&gt;
&lt;br /&gt;
2. Подбежать к ГГ на дистанцию, достаточную для лечения (act_run_to_actor, action_run_to_actor)&lt;br /&gt;
&lt;br /&gt;
3. Крикнуть что аптечки кончились (act_no_medkit, action_no_medkit)&lt;br /&gt;
&lt;br /&gt;
4. Подобраться поближе к ГГ, чтобы быть под рукой. (act_stay_close, action_stay_close).&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
&lt;br /&gt;
Я буду писать эту статью параллельно с разработкой мода, указывая все найденные ошибки. Надеюсь, это поможет другим &lt;br /&gt;
моддерам. Чтобы отделить результаты тестирования от описания процесса разработки мода, я буду выделять свои &lt;br /&gt;
комментарии другим шрифтом.&lt;br /&gt;
&lt;br /&gt;
===Диалоги===&lt;br /&gt;
&lt;br /&gt;
В этом моде будет всего один диалог, и довольно простой, поэтому начнём с него. Создаём файл &lt;br /&gt;
config\gameplay\dialogs_need_help.xml. Чтобы не возиться с идентификаторами текстов попробуем обойтись без них. &lt;br /&gt;
Начнём с простой тестовой версии:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1251&amp;quot; standalone=&amp;quot;yes&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;game_dialogs&amp;gt;&lt;br /&gt;
    &amp;lt;dialog id=&amp;quot;actor_will_need_help&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;actor_need_help.i_am_friend&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Дружище, сможешь присмотреть за мной, если стрелять начнут? Промедольчику, там, вколоть или &lt;br /&gt;
&lt;br /&gt;
перевязку сделать, если что...&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Нет проблем, конечно помогу.&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
&amp;lt;/game_dialogs&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавляем строку с идентификатором этого диалога в config\gameplay\character_dialogs.xml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;actor_dialog&amp;gt;actor_will_need_help&amp;lt;/actor_dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дописываем имя файла диалога в config\system.ltx в секцию «dialogs». Осталось создать функцию i_am_friend. Наш &lt;br /&gt;
скрипт с моделью поведения будет называться scripts\actor_need_help.script, заодно пропишем там и диалоговые &lt;br /&gt;
функции.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function i_am_friend(actor,npc)&lt;br /&gt;
  return npc:relation(actor)==game_object.friend&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При первом тестировании я заменил game_object.friend на game_object.neutral, чтобы не искать друзей по всей карте. &lt;br /&gt;
&lt;br /&gt;
Тестируем, что у нас получилось...&lt;br /&gt;
&lt;br /&gt;
Диалог работает, но вместо текста – набор значков, оказалось, я написал текст в кодировке CP866 (DOS), нужно &lt;br /&gt;
поменять её на CP1251. Так, теперь текст в порядке.&lt;br /&gt;
&lt;br /&gt;
Выбранный подход к созданию диалога оказался удачным.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, вместо идентификатора текста можно вписать сам текст. Это усложнит локализацию, но уменьшит время &lt;br /&gt;
создания диалогов.&lt;br /&gt;
&lt;br /&gt;
Теперь нам понадобятся функции проверки наличия аптечек у NPC, проверки активации схемы поведения, &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;
&amp;lt;pre&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1251&amp;quot; standalone=&amp;quot;yes&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;game_dialogs&amp;gt;&lt;br /&gt;
    &amp;lt;dialog id=&amp;quot;actor_will_need_help&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;actor_need_help.i_am_friend&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Дружище, сможешь присмотреть за мной, если стрелять начнут? Промедольчику, там, вколоть или &lt;br /&gt;
&lt;br /&gt;
перевязку сделать, если что...&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;precondition&amp;gt;actor_need_help.scheme_is_not_active&amp;lt;/precondition&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;11&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;12&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Нет проблем, конечно помогу.&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;precondition&amp;gt;actor_need_help.npc_have_medkit&amp;lt;/precondition&amp;gt;&lt;br /&gt;
                &amp;lt;action&amp;gt;actor_need_help.activate_scheme&amp;lt;/action&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Извини, друг, аптечек совсем не осталось.&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;precondition&amp;gt;actor_need_help.npc_havent_medkit&amp;lt;/precondition&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Спасибо, друг, теперь я сам справлюсь.&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;precondition&amp;gt;actor_need_help.scheme_is_active&amp;lt;/precondition&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;21&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Да не за что, ты мне помог, я - тебе.&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;action&amp;gt;actor_need_help.deactivate_scheme&amp;lt;/action&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
&amp;lt;/game_dialogs&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При первом запуске игра вылетела без сообщений об ошибках. Я внимательно просмотрел все файлы и оказалось, что в &lt;br /&gt;
скриптах вместо комментария ‘--‘ (два минуса) я поставил просто минус (рекомендую пользоваться компилятором с &lt;br /&gt;
[www.lua.org www.lua.org] для проверки корректности скриптов). После исправления ошибки игра запустилась, но диалог так и не &lt;br /&gt;
появился. Небольшая дискуссия на форуме (спасибо Z.E.N. и Arhet) показала, что придётся сделать два диалога.&lt;br /&gt;
&lt;br /&gt;
Кроме того, при тестах первых вариантов, выяснилось, что всегда выбирается вариант диалога с просьбой о помощи. То &lt;br /&gt;
есть схема поведения не активируется. &lt;br /&gt;
&lt;br /&gt;
Как оказалось, в качестве параметров в функции передаются не объекты ГГ и NPC, а объекты говорящего в данный момент &lt;br /&gt;
персонажа и его собеседника. То есть, если фраза принадлежит NPC, то первый параметр будет объектом  для NPC, а не &lt;br /&gt;
для ГГ. Поэтому я изменил названия параметров и переписал функции.&lt;br /&gt;
&lt;br /&gt;
Итак, все проблемы решены. Файл диалога принял следующий вид (config\gameplay\dialogs_need_help.xml):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1251&amp;quot; standalone=&amp;quot;yes&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;game_dialogs&amp;gt;&lt;br /&gt;
    &amp;lt;dialog id=&amp;quot;actor_will_need_help&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;actor_need_help.i_am_friend&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;actor_need_help.scheme_is_not_active&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Дружище, сможешь присмотреть за мной, если стрелять начнут? Промедольчику, там, вколоть или &lt;br /&gt;
&lt;br /&gt;
перевязку сделать, если что...&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;11&amp;lt;/next&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;12&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;11&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;precondition&amp;gt;actor_need_help.npc_have_medkit&amp;lt;/precondition&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Нет проблем, конечно помогу.&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;action&amp;gt;actor_need_help.activate_scheme&amp;lt;/action&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;precondition&amp;gt;actor_need_help.npc_havent_medkit&amp;lt;/precondition&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Извини, друг, аптечек совсем не осталось.&amp;lt;/text&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
    &amp;lt;dialog id=&amp;quot;actor_will_not_need_help&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;actor_need_help.i_am_friend&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;actor_need_help.scheme_is_active&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Спасибо, друг, теперь я сам справлюсь.&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;next&amp;gt;21&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;Да не за что, ты мне помог, я - тебе.&amp;lt;/text&amp;gt;&lt;br /&gt;
                &amp;lt;action&amp;gt;actor_need_help.deactivate_scheme&amp;lt;/action&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
&amp;lt;/game_dialogs&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функции, поддерживающие работу диалога, теперь выглядят так (файл scripts\actor_need_help.script): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function i_am_friend(talker,target)&lt;br /&gt;
  return target:relation(talker)==game_object.friend&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- За основу этой функции взята функция dialogs.actor_have_medkit&lt;br /&gt;
function npc_have_medkit(talker, target)&lt;br /&gt;
  return talker:object(&amp;quot;medkit&amp;quot;) ~= nil or&lt;br /&gt;
       talker:object(&amp;quot;medkit_army&amp;quot;) ~= nil or&lt;br /&gt;
       talker:object(&amp;quot;medkit_scientic&amp;quot;) ~= nil&lt;br /&gt;
end&lt;br /&gt;
function npc_havent_medkit(talker, target)&lt;br /&gt;
  return not npc_have_medkit(talker,target)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Так как модель поведения еще не написана, вставим заглушки&lt;br /&gt;
local scheme_status={}&lt;br /&gt;
function scheme_is_active(talker,target)&lt;br /&gt;
  return scheme_status[target:id()]==true -- сравниваем с true, чтобы функция не возвращала nil&lt;br /&gt;
end&lt;br /&gt;
function scheme_is_not_active(talker,target)&lt;br /&gt;
  return not scheme_is_active(talker,target)&lt;br /&gt;
end&lt;br /&gt;
function activate_scheme(talker,target)&lt;br /&gt;
  scheme_status[talker:id()]=true&lt;br /&gt;
end&lt;br /&gt;
function deactivate_scheme(talker,target)&lt;br /&gt;
  scheme_status[talker:id()]=nil -- присваиваем nil, чтобы освободить память, занятую этим элементом массива&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И в файл config\gameplay\character_dialogs.xml добавлены строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;actor_dialog&amp;gt;actor_will_need_help&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
&amp;lt;actor_dialog&amp;gt;actor_will_not_need_help&amp;lt;/actor_dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате получился работающий диалог, но NPC выглядит просто как ходячая аптечка. В окончательном варианте, я &lt;br /&gt;
добавил некоторые «человеческие» реакции. Да и сама модель поведения пока отсутствует - вместо неё стоят заглушки. Исправим это.&lt;br /&gt;
&lt;br /&gt;
===Модель поведения===&lt;br /&gt;
&lt;br /&gt;
Начнём создание модели поведения с разработки эвалуаторов. Эвалуатор должен представлять собой объект класса унаследованного от класса property_evaluator. &lt;br /&gt;
&lt;br /&gt;
Возьмём для начала эвалуатор evaluator_faraway определяющий, что NPC находится слишком далеко от ГГ. Этот эвалуатор требуется для того, чтобы NPC не отходил слишком далеко от ГГ и мог в случае надобности быстро подбежать к нему и оказать помощь. &lt;br /&gt;
&lt;br /&gt;
Объявляем класс эвалуатора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;class &amp;quot;evaluator_faraway&amp;quot; (property_evaluator)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Определяем функцию инициализации (в LUA это аналог конструктора объекта)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function evaluator_faraway:__init(name, storage) super (nil, name)&lt;br /&gt;
  self.st = storage&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ключевое слово «super» служит для вызова конструктора базового класса. Член «st» будет хранить ссылку на таблицу состояния нашей модели поведения.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно определить функцию evaluate(), ради которой и создавался эвалуатор. По-видимому всё просто, нужно проверить расстояние от NPC до ГГ и вернуть true, если это расстояние больше определённого значения. Но давайте подумаем. Когда эвалуатор возвратит true, заработает оператор, заставляющий NPC подойти поближе к ГГ, то есть расстояние моментально уменьшится и эвалуатор начнёт возвращать false, что приведёт к переходу NPC под управление игрового ИИ. ИИ может опять решить удалиться от ГГ, что приведёт к повторному срабатыванию эвалуатора. В результате возникнет замкнутый цикл, и NPC будет крутиться на одном месте (на самом деле этот цикл рано или поздно разорвётся из-за изменения игровой ситуации, но лучше вообще избежать его).&lt;br /&gt;
&lt;br /&gt;
Можно использовать разные пути для решения этой проблемы. Попробуем сделать так: будем использовать два расстояния, эвалуатор сработает при достижении первого и будет оставаться активным, пока расстояние не станет меньше второго.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local min_faraway_dist=10&lt;br /&gt;
local max_faraway_dist=20&lt;br /&gt;
&lt;br /&gt;
function evaluator_faraway:evaluate()&lt;br /&gt;
  local actor=db.actor&lt;br /&gt;
  if not actor then&lt;br /&gt;
  -- ГГ ещё не заспаунился&lt;br /&gt;
    return false&lt;br /&gt;
  end&lt;br /&gt;
  local dist=actor:position():distance_to(self.object:position())&lt;br /&gt;
  if dist&amp;gt;max_faraway_dist then&lt;br /&gt;
    self.st.faraway=true&lt;br /&gt;
  elseif dist&amp;lt;min_faraway_dist then&lt;br /&gt;
    self.st.faraway=false&lt;br /&gt;
  end&lt;br /&gt;
  return self.st.faraway==true&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эвалуатор готов, но нужно как-то его протестировать. Поэтому давайте создадим минимальную модель поведения из одного условия и одного оператора. Нам нужен оператор, перемещающий NPC поближе к ГГ. Объявляем класс action_stay_close, унаследованный от action_base, и определяем его конструктор.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;class &amp;quot;action_stay_close&amp;quot; (action_base)&lt;br /&gt;
&lt;br /&gt;
function action_stay_close:__init(name, storage) super (nil, name)&lt;br /&gt;
  self.st=storage&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оператор должен содержать функции initialize(), execute() и, возможно, finalize().&lt;br /&gt;
&lt;br /&gt;
Функция initialize() вызывается при начала работы оператора, то есть в момент, когда планировщик ставит этот оператор в первую позицию плана.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function action_stay_close:initialize()&lt;br /&gt;
  local npc=self.object&lt;br /&gt;
  -- Не знаю зачем эти две функции, но они используются во всех операторах&lt;br /&gt;
  npc:set_desired_position()&lt;br /&gt;
  npc:set_desired_direction()&lt;br /&gt;
  -- Сбрасываем текущие анимации&lt;br /&gt;
  npc:clear_animations()&lt;br /&gt;
  -- Задаём параметры движения&lt;br /&gt;
  npc:set_detail_path_type(move.line)&lt;br /&gt;
  npc:set_body_state(move.standing)&lt;br /&gt;
  npc:set_movement_type(move.run)&lt;br /&gt;
  npc:set_path_type(game_object.level_path)&lt;br /&gt;
  -- Эксперименты показали, что эта функция устанавливает скорость движения (anim.danger - &lt;br /&gt;
минимальная скорость, anim.free - нормальная, anim.panic - максимальная)&lt;br /&gt;
  npc:set_mental_state(anim.panic)&lt;br /&gt;
  -- Повышаем зоркость NPC&lt;br /&gt;
  npc:set_sight(look.danger, nil, 0)&lt;br /&gt;
  -- Освободим сталкера от всех идиотских ограничений&lt;br /&gt;
  npc:remove_all_restrictions()&lt;br /&gt;
-- Зададим смещение точки назначения, чтобы помощники не сбивались в кучу&lt;br /&gt;
  self.offset=vector():set(math.random()*6-3,0,math.random()*6-3)&lt;br /&gt;
  self.offset:normalize()&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция execute() периодически вызывается во время выполнения оператора. Частота вызовов, по-видимому, зависит от расстояния от NPC до ГГ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function action_stay_close:execute()&lt;br /&gt;
  local npc=self.object&lt;br /&gt;
  local actor=db.actor&lt;br /&gt;
  if not actor then&lt;br /&gt;
  -- Хм, что-то не так. Может быть ГГ перешёл на другой уровень? Запрещаем схему поведения&lt;br /&gt;
    self.st.enabled=false&lt;br /&gt;
  end&lt;br /&gt;
  -- Получаем ближайшую доступную точку в 5 метрах от ГГ&lt;br /&gt;
  -- Сначала, я попробавал использовать функцию npc:vertex_in_direction, но она не работает&lt;br /&gt;
  local vertex_id=level.vertex_in_direction(actor:level_vertex_id(),self.offset,5)&lt;br /&gt;
  local act_v_id=actor:level_vertex_id()&lt;br /&gt;
  -- Отправляем нашего NPC в найденную точку&lt;br /&gt;
  local acc_id=utils.send_to_nearest_accessible_vertex( npc, vertex_id )&lt;br /&gt;
  if self.st.dist and self.st.dist&amp;gt;max_faraway_dist then&lt;br /&gt;
-- если NPC находится слишком далеко от ГГ пусть пробежиться побыстрее&lt;br /&gt;
    npc:set_mental_state(anim.panic)&lt;br /&gt;
  else&lt;br /&gt;
    npc:set_mental_state(anim.free)&lt;br /&gt;
  end&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция настройки планировщика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function add_to_binder(object, char_ini, scheme, section, st)&lt;br /&gt;
  local manager = object:motivation_action_manager()&lt;br /&gt;
  local property_wounded = xr_evaluators_id.sidor_wounded_base&lt;br /&gt;
&lt;br /&gt;
  -- Удаляем эвалуатор, так как в xr_motivator мы установили его в property_evaluator_const&lt;br /&gt;
  manager:remove_evaluator(property_faraway)&lt;br /&gt;
  -- и заменяем его нашим&lt;br /&gt;
  manager:add_evaluator(property_faraway, evaluator_faraway(&amp;quot;evaluator_faraway&amp;quot;,st))&lt;br /&gt;
    -- Создаём оператор&lt;br /&gt;
  local action = action_stay_close(&amp;quot;action_stay_close&amp;quot;,st)&lt;br /&gt;
    -- и настраиваем предусловия. 1. Сталкер жив&lt;br /&gt;
  action:add_precondition(world_property(stalker_ids.property_alive, true))&lt;br /&gt;
  -- 2. Сталкер не ранен&lt;br /&gt;
  action:add_precondition(world_property(property_wounded, false))&lt;br /&gt;
  -- Я использую свой мод для обхода аномалий, иначе от помощников мало толку.&lt;br /&gt;
  if anomaly_evader then&lt;br /&gt;
  -- 3. Рядом нет аномалий&lt;br /&gt;
    action:add_precondition (world_property(1099,false))&lt;br /&gt;
  end&lt;br /&gt;
 -- 4. Сталкер слишком далеко от ГГ&lt;br /&gt;
   action:add_precondition(world_property(property_faraway, true))&lt;br /&gt;
  action:add_effect (world_property(property_faraway, false))&lt;br /&gt;
  -- Добавляем оператор в планировшик&lt;br /&gt;
  manager:add_action (act_stay_close, action)&lt;br /&gt;
  -- Теперь подкорректируем стандартные операторы, чтобы помощник не отвлекался на всякую ерунду.&lt;br /&gt;
  action=manager:action(stalker_ids.action_alife_planner)&lt;br /&gt;
  action:add_precondition(world_property(property_faraway, false))&lt;br /&gt;
  action=manager:action(stalker_ids.action_combat_planner)&lt;br /&gt;
  action:add_precondition(world_property(property_faraway, false))&lt;br /&gt;
  action=manager:action(stalker_ids.action_danger_planner)&lt;br /&gt;
  action:add_precondition(world_property(property_faraway, false))&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавим функции активации/деактивации схемы поведения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function set_help(npc, ini)&lt;br /&gt;
  local st = xr_logic.assign_storage_and_bind(npc, ini, &amp;quot;actor_need_help&amp;quot;)&lt;br /&gt;
  st.enabled=true&lt;br /&gt;
end&lt;br /&gt;
function disable_scheme(npc, scheme)&lt;br /&gt;
  local st = db.storage[npc:id()][scheme]&lt;br /&gt;
  if st then&lt;br /&gt;
    st.enabled = false&lt;br /&gt;
  end&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменим диалоговые функции-заглушки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function activate_scheme(talker,target)&lt;br /&gt;
  set_help(talker,talker:spawn_ini())&lt;br /&gt;
  scheme_status[talker:id()]=true&lt;br /&gt;
end&lt;br /&gt;
function deactivate_scheme(talker,target)&lt;br /&gt;
  disable_scheme(talker,&amp;quot;actor_need_help&amp;quot;)&lt;br /&gt;
  scheme_status[talker:id()]=nil&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавим в функцию xr_motivator.addCommonPrecondition() следующие строки, чтобы заблокировать стандартные схемы поведения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  if actor_need_help then&lt;br /&gt;
    action:add_precondition (world_property(actor_need_help.property_faraway,false))&lt;br /&gt;
  end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если попробовать запустить мод сейчас, то игра просто вылетит. Причина в том, что мы добавили предусловие для стандартных схем поведения, но не добавили эвалуатор этого условия. Поэтому добавляем в функцию xr_motivator.net_spawn() следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    local manager = self.object:motivation_action_manager()&lt;br /&gt;
    if actor_need_help then&lt;br /&gt;
      manager:add_evaluator(actor_need_help.property_faraway, property_evaluator_const(false))&lt;br /&gt;
    end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того чтобы снизить нагрузку на процессор, используем property_evaluator_const, который всегда возвращает одно и тоже значение.&lt;br /&gt;
В результате тестирования выяснилось, что не все NPC подчиняются нашей схеме поведения. Причины этого пока не ясны, требуется дополнительное тестирование и очень желательна помощь разработчиков (хотя бы для того чтобы узнать как выяснить какой оператор действует в данный момент на NPC).&lt;br /&gt;
&lt;br /&gt;
===Файлы мода===&lt;br /&gt;
&lt;br /&gt;
Мод можно скачать [[:Media:Напарники 0.2.zip|здесь]].&lt;br /&gt;
&lt;br /&gt;
Ссылка обновлена. Выложена новая версия. Причиной &amp;quot;зависаний&amp;quot; NPC был конфликт со state_mgr.script. Код мода, приведённый в статье, не устанавливал состояние NPC с помощью state_mgr.set_state(), в результате state_mgr пытался вернуть состояние NPC к начальному (до срабатывания нашей модели поведения), что и приводило к &amp;quot;зависаниям&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Более подробное описание мода смотри [[Mod:Напарники|здесь]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Спасибо за внимание,&lt;br /&gt;
Red75&lt;br /&gt;
&lt;br /&gt;
=Авторы=&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:Red75|Red75]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%BF%D0%BE%D1%81%D1%82%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%B8%D0%BD%D0%B3%D0%B0_(ppe)</id>
		<title>Формат файлов постпроцессинга (ppe)</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%BF%D0%BE%D1%81%D1%82%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%B8%D0%BD%D0%B3%D0%B0_(ppe)"/>
				<updated>2008-01-22T17:18:23Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Вступление==&lt;br /&gt;
&lt;br /&gt;
Представляю на суд общественности результаты моих изысканий по формату файлов постпроцессинга ('''.ppe''')&lt;br /&gt;
&lt;br /&gt;
Нераскрытыми для меня осталось 6 переменных (переменные, которые я для себя назвал free, обязательно идут перед каждой триадой цепочек, управляющих цветом и 3 коэффициента, идут в каждом правиле после байта функции), но простенькие '''ppe'''-файлы можно делать и без них.&lt;br /&gt;
&lt;br /&gt;
Вообще, оказалось, что возможности '''ppe''' были сильно мною переоценены (например тепловизор сделать с их помощью если и можно, то крайне проблематично). Основной недостаток - '''ppe''' можно применить только ко всему экрану, на отдельный обьект это не предусмотрено движком (даже стелс-режим кровососа реализуется подменой модели). Так что могу предложить только слегка улучшеный прибор ночного зрения.&lt;br /&gt;
&lt;br /&gt;
Получилось так себе, просто убрал шумы, добавил яркости/контрастности, но зато теперь со включенным nv днем не побегаешь - засветка почти как на настоящем (как в кино показывают) и туман гораздо сильнее мешает, клубы тумана почти непрозрачны.&lt;br /&gt;
&lt;br /&gt;
По поводу компилятора/декомпилятора, пришел к выводу, что фильтр постпроцесса изделие штучное, смысла в отдельных утилитах нет - я все анализировал, клепал, менял только с помощью блокнота и шестнадцатиричного редактора (кстати, выяснил, что при смене файла постпроцесса необязательно перезапускать сталкера и даже релоад делать ни к чему - изменения подхватываются при следующем выключении постпроцесса в данном случае nv).&lt;br /&gt;
&lt;br /&gt;
При анализе ppe сильно помог тот факт, что постпроцесс существует в игре в текстовом и компилированом виде (кому интересно, копайте '''\gamedata\script\postprocess.script''' - полный разбор текстовых файлов написан обычным скриптом, там же, в самом конце функция ''main'' загружает погоду и файл постпроцессинга, сами файлы лежат '''\gamedata\config\scripts''' например '''proba.ltx'''). Компилированные ppe лежат в anims.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Практика==&lt;br /&gt;
&lt;br /&gt;
Итак, '''ppe'''-файл - это набор правил, как должен изменяться тот или иной параметр изображения во времени, всего этих параметров - 16 (названия взяты из текстовых версий, чтобы путаницы не было). В отличие от текстовой версии, цепочки должны идти только в этом порядке и их всегда должно быть только 16 (если игра вывалилась с сообщением в логах ''noise.grain cannot be zer''o, значит вы что-то пропустили).&lt;br /&gt;
&lt;br /&gt;
Выбраная цветовая компонента умножается на коэффициент, то при параметре равным 1 чистый белый цвет останется белым, а чистый черный - черным, остальные преобретут компонентный оттенок.&lt;br /&gt;
&lt;br /&gt;
* '''free1'''	- об этой переменной чуть ниже&lt;br /&gt;
* '''color_add_red'''&lt;br /&gt;
* '''color_add_green'''&lt;br /&gt;
* '''color_add_blue'''&lt;br /&gt;
&lt;br /&gt;
Указанное значение принимается как база для данного цвета, то есть, если у данного пикселя значение цвета меньше указанного, то оно принимается как указанное, а если больше, то остается прежним. Следует заметить, что это единственный набор переменных, задирать значения в которых выше 0.5 не имеет смысла, 0.5 прибавляется где-то в дебрях движка.&lt;br /&gt;
&lt;br /&gt;
* '''free2'''&lt;br /&gt;
* '''color_base_red'''&lt;br /&gt;
* '''color_base_green'''&lt;br /&gt;
* '''color_base_blue'''&lt;br /&gt;
&lt;br /&gt;
Эта триада правил отвечает за вес цвета в сером/яркостном представлении и в обычном цветном режиме результат не виден. Но при увеличении правила '''gray''' становится ясно, что при например '''color_gray_red''' = -1 чисто красные компоненты становятся черными, 0 = остаются без изменений, 1 - чисто белыми:&lt;br /&gt;
&lt;br /&gt;
*'''free3'''&lt;br /&gt;
*'''color_gray_red'''&lt;br /&gt;
*'''color_gray_green'''&lt;br /&gt;
*'''color_gray_blue'''&lt;br /&gt;
&lt;br /&gt;
Переменная управляет величиной обратной насыщенности, то есть, чем больше gray (максимум +1) тем меньше насыщенность изображения:&lt;br /&gt;
&lt;br /&gt;
*'''gray'''&lt;br /&gt;
&lt;br /&gt;
Размытие изображения, при больших значениях (пробовал 25) начинаются косяки, портится нижняя часть, если долго стоять на месте:&lt;br /&gt;
&lt;br /&gt;
*'''blur'''&lt;br /&gt;
&lt;br /&gt;
Раздвоение изображения по горизонтали и вертикали соответственно. Значение указывается относительно экрана, то есть при 1 копии обьекта, первоначально находящегося в центре окажутся точно по краям:&lt;br /&gt;
&lt;br /&gt;
*'''duality_h'''&lt;br /&gt;
*'''duality_v'''&lt;br /&gt;
&lt;br /&gt;
*'''noise_intensity'''       - интенсивность шума&lt;br /&gt;
*'''noise_granularity'''     - размер зерна шума&lt;br /&gt;
*'''noise_fps  '''           - сколько раз в секунду шум должен пересчитываться&lt;br /&gt;
&lt;br /&gt;
Файл '''всегда''' начинается с '''01 00 00 00''' - скорее всего это синатура, по которой движок определяет содержимое(кстати, у файлов anm, которые содержать анимацию камеры и похоже имеют ту же логику строения, что и ppe сигнатурой является '''00 11 00 00''' ).&lt;br /&gt;
&lt;br /&gt;
Затем идет 4 байта неопределенной переменной, которую я для себя назвал free. Всего их 3. Эти переменные стоят только перед триадами, отвечающими за изменения цветов, обычно равны '''7C 00 00 00''', но есть небольшие вариации. Визуально определить, что меняется при изменении этой переменной я не смог, если кто совершит этот подвиг - вечная слава :)&lt;br /&gt;
&lt;br /&gt;
Затем начинаются цепочки в перечисленном выше порядке.&lt;br /&gt;
Цепочка начинается с '''01 01 ''ХХ'' 00''', где '''''ХХ''''' - число правил в данной цепочке. Если указано 01 01 00 00 (то есть цепочка с 0 правил, то данная цепочка в постпроцессинге не участвует и сразу после нее должна начинаться следующая цепочка). '''Основная ошибка, которую можно допустить - несоответствие реального числа правил с указаным в заголовке цепочки. Контроль, контроль, и еще раз контроль.'''&lt;br /&gt;
&lt;br /&gt;
Каждая цепочка состоит из правил изменения переменной. Исходя из скрипта разбора текстовых версий можно предположить, что правил в цепочке не должно быть больше 16 (хотя возможно это только для текстовых).Совершенно необязательно, что этих правил в разных цепочках будет одинаковое количество или даже длиться они будут одинаковое время.&lt;br /&gt;
&lt;br /&gt;
Правило содержит в себе всегда ровно 23 байта. Примерное описание - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
9A 99 99 3E 00 00 A0 40 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80&lt;br /&gt;
----------- ----------- -- ----- ----- ----- -----------------------&lt;br /&gt;
 значение      время    ф    k1    k2    k3                                   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''значение''' - 4-байтная float переменная, обычно меняется от -1 до +1&lt;br /&gt;
*'''время'''  - в секундах 4-байтная float переменная&lt;br /&gt;
*'''ф''' - функция, во всех ppe равна 00, но попробовал менять('''не должна быть 04 - игра вылетает'''). 00,03 - синус, 01,05 - косинус, 02 - линейная, остальные значения игнорируются и правило перестает работать вообще.&lt;br /&gt;
*'''k1, k2, k3''' - коэффициенты для функций вот с ними почти не разбирался, на линейную фунуцию изменений не выявил, на синус/косинус влияют очень сильно, но на поиск закономерности не хватило времени, по умолчанию равны 00 80 00 80 00 80&lt;br /&gt;
*остаток строки во всех файлах 00 80 00 80 00 80 00 80 - изменение визуально ничего не меняет, возможно зарезервировано для следующих версий.&lt;br /&gt;
&lt;br /&gt;
Вот и все. Поле для работы как видите еще есть - коэффициенты k[1,2,3] и переменные free[1,2,3] - предлагаю общественности устроить мозговой штурм на них. &lt;br /&gt;
&lt;br /&gt;
Напоследок мой файл ночного зрения с комментариями (для использования комменты удалить, шестнадцатиричный код загнать в WinHex и сохранить как '''anims\x.ppe'''(имя любое), и не забыть поправить '''config\misc\postprocess.ltx''' в нужной секции).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01 00 00 00 		// сигнатура&lt;br /&gt;
&lt;br /&gt;
// Цвета выкручиваем на максимум&lt;br /&gt;
7C 00 00 00 		// free1&lt;br /&gt;
01 01 02 00 		// color_add_red&lt;br /&gt;
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
01 01 02 00 		// color_add_green&lt;br /&gt;
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
01 01 02 00 		// color_add_blue&lt;br /&gt;
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
&lt;br /&gt;
// Не понимаю как, но эта триада подкрашивает уже переведенное в &lt;br /&gt;
// чб изображение, то есть делаем слегка синеватым результат, заодно&lt;br /&gt;
// огрубляем слегка красные или зеленые.&lt;br /&gt;
&lt;br /&gt;
6C 10 00 00  		// free2&lt;br /&gt;
01 01 02 00 		// color_base_red&lt;br /&gt;
CD CC CC 3D 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
CD CC CC 3D 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
01 01 02 00 		// color_base_green&lt;br /&gt;
CD CC CC 3D 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
CD CC CC 3D 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
01 01 02 00 		// color_base_blue&lt;br /&gt;
CD CC 4C 3E 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
CD CC 4C 3E 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
&lt;br /&gt;
// В сером режиме все красные обьекты - белым, синие и зеленые - черным&lt;br /&gt;
&lt;br /&gt;
7C 00 00 00  		// free3&lt;br /&gt;
01 01 02 00 		// color_gray_red&lt;br /&gt;
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
01 01 02 00 		// color_gray_green&lt;br /&gt;
00 00 80 BF 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
00 00 80 BF 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
01 01 02 00 		// color_gray_blue&lt;br /&gt;
00 00 80 BF 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
00 00 80 BF 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
&lt;br /&gt;
// Полностью черно-белое изображение с учетом правил color_gray_*&lt;br /&gt;
01 01 02 00 		// gray&lt;br /&gt;
00 00 80 3F 00 00 00 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
00 00 80 3F 00 00 00 41 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 &lt;br /&gt;
&lt;br /&gt;
01 01 00 00 		// blur&lt;br /&gt;
&lt;br /&gt;
// Двоения в глазах не будет&lt;br /&gt;
&lt;br /&gt;
01 01 00 00 		// duality_h&lt;br /&gt;
01 01 00 00 		// duality_v&lt;br /&gt;
&lt;br /&gt;
// Шума не будет&lt;br /&gt;
01 01 00 00 		// noise_intensivity&lt;br /&gt;
01 01 00 00 		// noise_granularity&lt;br /&gt;
01 01 00 00			// noise_fps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Форматы_файлов]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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_%D0%BA%D0%B2%D0%B5%D1%81%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_%D0%BA%D0%B2%D0%B5%D1%81%D1%82%D0%BE%D0%B2"/>
				<updated>2008-01-22T17:17:25Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Создание квестов и диалогов==&lt;br /&gt;
===Создание базового диалога===&lt;br /&gt;
&lt;br /&gt;
Итак, приступим к созданию диалога, в котором нам будет выдаваться новый квест.&lt;br /&gt;
Участвующие лица: Сидорович (С) и Меченый (М)&lt;br /&gt;
&lt;br /&gt;
'''М:''' Здравствуй, Сидорыч! Есть работенка?&lt;br /&gt;
&lt;br /&gt;
'''С:''' О, неужели заглянул к нам на огонек, Меченый? Ладно... ближе к телу... эээ, к делу. У меня к тебе следующая просьба: сбегай к Волку, у него что-то намечалось. &lt;br /&gt;
&lt;br /&gt;
'''М:''' Без проблем! Уже бегу.&lt;br /&gt;
&lt;br /&gt;
Будем считать, определились с фразами базового диалога. Теперь необходимо добавить его в соответствующем виде, чтобы игре он был «понятен».&lt;br /&gt;
&lt;br /&gt;
Создание «скелета» диалога.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы добавить наш диалог, необходимо открыть для редактирования файл gamedata\config\gameplay\dialogs_escape.xml&lt;br /&gt;
&lt;br /&gt;
Для тех, кто знаком с языком XML структура данного файла будет ясна с первого взгляда. Но, поподробнее об этом. &lt;br /&gt;
&lt;br /&gt;
Для того, чтобы добавить в игру диалог предусмотрены так называемые тэги. В данном случае, тэгами являются такие конструкции:&lt;br /&gt;
&lt;br /&gt;
'''1.''' &amp;lt;game_dialogs&amp;gt; и закрывающий к нему - &amp;lt;/game_dialogs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''2.''' &amp;lt;dialog id = «»&amp;gt; закрывающий - &amp;lt;/dialog&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3.''' &amp;lt;phrase_list&amp;gt; - &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4.''' &amp;lt;phrase id = «»&amp;gt; - &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.''' &amp;lt;text&amp;gt; &amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6.''' &amp;lt;next&amp;gt; &amp;lt;/next&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В принципе, этих конструкций уже достаточно для того, чтобы создать диалог. Но, диалог, созданный на основе этих конструкций, не сможет стать основой для нового квеста. Для того, чтобы во время диалога вам выдавался квест, есть соответствующий тэг. Но об этом – чуть позже.&lt;br /&gt;
&lt;br /&gt;
Поясню, что обозначает каждый тэг в отдельности.&lt;br /&gt;
&lt;br /&gt;
'''1.''' Определяет содержимое файла (в данном случае, говорит о том, что файл содержит диалоги);&lt;br /&gt;
&lt;br /&gt;
'''2.''' Определяет новый диалог с id = «». Где содержимое кавычек есть идентификатор диалога. Идентификатор диалога задается в файлах типа character_description_***.xml ;&lt;br /&gt;
&lt;br /&gt;
'''3.''' Этот тэг говорит XML-парсеру игры о том, что далее следуют фразы диалога. Иными словами, между &amp;lt;phrase_list&amp;gt; и &amp;lt;/phrase_list&amp;gt;  содержатся фразы диалога;&lt;br /&gt;
&lt;br /&gt;
'''4.''' Этот тэг определяет фразу с id = «». Внутри кавычек содержится идентификатор фразы (ВНИМАНИЕ: идентификатором в данном случае могут быть ТОЛЬКО цифры);&lt;br /&gt;
&lt;br /&gt;
'''5.''' Внутри этих двух тэгов содержится ссылка на соответствующий данной фразе текст (пример, esc_trader_talk_info_123). Сам текст берется из файлов типа stable_dialogs_*****.xml, в котором содержатся все фразы в текстовом виде. О создании текста фразы поговорим позже;&lt;br /&gt;
&lt;br /&gt;
'''6.''' Внутри этого тэга содержится ссылка (в числовом формате) на следующую (или следующие) фразы.&lt;br /&gt;
&lt;br /&gt;
Теперь приступим к тэгам, позволяющим производить какие-то действия во время диалога.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;precondition&amp;gt; &amp;lt;/precondition&amp;gt;. Представляет собой предусловие, в случае выполнения которого (то есть предусловие вернуло ИСТИНУ) данный диалог, или фраза будут появляться в списке доступных во время игры у NPC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;action&amp;gt; &amp;lt;/action&amp;gt;.  Данный тэг позволяет производить какое-либо действие во время диалога (например, передачу предметов между общающимися... так же позволяет производить более сложные действия). Внутри тэга располагается ссылка на какую-либо функцию (например, dialogs. actor_set_dolg сделает игрока членом группировки Долг). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;give_info&amp;gt; &amp;lt;/give_info&amp;gt;. Позволяет  выдавать игроку во время диалога так называемые info_portion'ы (кстати, инфопоршны можно выдавать так же и через &amp;lt;action&amp;gt;, только это потребует создания специальной функции). info_portion – является основой для квестов, info_portion’ы определяются в файлах типа info****.xml. Инфопоршны могут, как начинать квест, так и заканчивать (завершать) его.  Так же, с помощью инфопоршнов можно отслеживать действия игрока, для того, чтобы, например, вывести в нужное время диалог.&lt;br /&gt;
&amp;lt;has_info&amp;gt; &amp;lt;/has_info&amp;gt; и &amp;lt;dont_has_info&amp;gt; &amp;lt;/dont_has_info&amp;gt; являются предусловиями для текущей фразы/диалога. Первый тэг проверяет наличие данного инфопоршна у игрока, второй – отсутствие.&lt;br /&gt;
&lt;br /&gt;
Ну что, теперь мы можем создать диалог, в котором нам будет выдаваться квест. Но мы не создали самих info_portion'оф, которые позволяет активировать квест.&lt;br /&gt;
&lt;br /&gt;
===Создание info_portion'ов===&lt;br /&gt;
&lt;br /&gt;
Итак, открываем файл gamedata\config\gameplay\ info_l01escape.xml. Что мы там видим? Правильно, все ту же структуру XML. &lt;br /&gt;
В данном файле нас интересуют только два тэга:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;info_portion id = “”&amp;gt; &amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;task &amp;gt; &amp;lt;/task&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первый объявляет сам info_portion. Второй – объявляет задание (идентификатор задания id содержится внутри тэга &amp;lt;task&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Для примера, создадим 3 info_portion, которые понадобятся нам для будущего квеста:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;info_portion id = “new_task_started”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;task&amp;gt;new_task&amp;lt;/task&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это инфопоршн с именем new_task_started. Он активирует квест с именем new_task.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;info_portion id = “player_talked_with_wolf”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;info_portion id = “player_complete_new_task”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание нового квеста===&lt;br /&gt;
&lt;br /&gt;
Сами квесты содержаться в файлах типа tasks_*****.xml&lt;br /&gt;
&lt;br /&gt;
Откроем файл  gamedata\config\gameplay\tasks_escape.xml. Структура – все тот же XML.&lt;br /&gt;
&lt;br /&gt;
Для примера исследуем уже существующий квест:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;game_task id=&amp;quot;esc_help_wounded_from_raid&amp;quot; prio=&amp;quot;485&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;esc_help_wounded_from_raid&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;objective&amp;gt;&lt;br /&gt;
	&amp;lt;text&amp;gt;esc_help_wounded_from_raid_0&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;icon&amp;gt;ui_iconsTotal_esc_help_wounded_from_raid&amp;lt;/icon&amp;gt;&lt;br /&gt;
	&amp;lt;function_complete&amp;gt;escape_tasks.task_fox_complete&amp;lt;/function_complete&amp;gt;&lt;br /&gt;
	&amp;lt;infoportion_set_complete&amp;gt;garbage_meetstalker_start&amp;lt;/infoportion_set_complete&amp;gt;&lt;br /&gt;
        &amp;lt;article&amp;gt;esc_fox_help&amp;lt;/article&amp;gt;&lt;br /&gt;
	&amp;lt;/objective&amp;gt;&lt;br /&gt;
	&amp;lt;objective&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;esc_help_wounded_from_raid_1&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;map_location_type hint=&amp;quot;esc_fox&amp;quot;&amp;gt;green_location&amp;lt;/map_location_type&amp;gt;&lt;br /&gt;
	&amp;lt;object_story_id&amp;gt;Escape_stalker_from_raid&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
	&amp;lt;infoportion_complete&amp;gt;escape_fox_heal&amp;lt;/infoportion_complete&amp;gt;&lt;br /&gt;
	&amp;lt;infoportion_fail&amp;gt;esc_dogs_return&amp;lt;/infoportion_fail&amp;gt;&lt;br /&gt;
&amp;lt;/objective&amp;gt;&lt;br /&gt;
	&amp;lt;objective&amp;gt;&lt;br /&gt;
	&amp;lt;text&amp;gt;esc_help_wounded_from_raid_2&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;map_location_type hint=&amp;quot;esc_fox&amp;quot;&amp;gt;green_location&amp;lt;/map_location_type&amp;gt;&lt;br /&gt;
	&amp;lt;object_story_id&amp;gt;Escape_stalker_from_raid&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
	&amp;lt;infoportion_complete&amp;gt;escape_stalker_done&amp;lt;/infoportion_complete&amp;gt;&lt;br /&gt;
&amp;lt;/objective&amp;gt;&lt;br /&gt;
&amp;lt;/game_task&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По кусочкам:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;game_task id=&amp;quot;esc_help_wounded_from_raid&amp;quot; prio=&amp;quot;485&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/game_task&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задает имя (id) нового квеста. В данном случае, esc_help_wounded_from_raid. prio = “” задает приоритет задачи. Чем выше приоритет, тем больше вероятность того, что текущий маркер квеста будет переключен на ваше задание.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;title&amp;gt;esc_help_wounded_from_raid&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Задает заголовок квеста. Т. е. его название. Название можно прописать в виде текста, либо в виде ссылки. В данном случае используется ссылка на текст, который хранится в файле string_table_tasks_escape.xml. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;function_complete&amp;gt;escape_tasks.task_fox_complete&amp;lt;/function_complete&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Вызывает функцию из файла escape_tasks.script под именем task_fox_complete. При выполнении данной функции дается info_portion, который завершает данную подзадачу, в случае, если все условия функции соблюдаются.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;infoportion_complete&amp;gt;escape_fox_heal&amp;lt;/infoportion_complete&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Текущее подзадание будет завершено в случае, если игроку будет дан этот info_portion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;infoportion_fail&amp;gt;esc_dogs_return&amp;lt;/infoportion_fail&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Текущее подзадание будет провалено в случае, если игроку будет дан этот info_portion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;map_location_type hint=&amp;quot;esc_fox&amp;quot;&amp;gt;green_location&amp;lt;/map_location_type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создает указатель на карте с подсказкой esc_fox и типом green_location. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;object_story_id&amp;gt;Escape_stalker_from_raid&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Указывает на sid из файла gamedata\config\game_story_ids.ltx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;infoportion_set_complete&amp;gt;garbage_meetstalker_start&amp;lt;/infoportion_set_complete&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматически устанавливает данную подзадачу в положение «Выполнено», если у игрока есть данный info_portion. //!!!!!!Не уверен – не пользовался не разу.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;text&amp;gt;esc_help_wounded_from_raid_0&amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Содержит описание подзадачи. Может содержать внутри как текст, так и ссылку на текст.&lt;br /&gt;
&lt;br /&gt;
Создадим задание, которое потребуется нам для диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;game_task id=”new_task”&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Поговорить с Волком&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;objective&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Вернуться к Сидорычу&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;map_location_type hint=&amp;quot;escape_trader&amp;quot;&amp;gt;blue_location&amp;lt;/map_location_type&amp;gt;&lt;br /&gt;
		&amp;lt;object_story_id&amp;gt;Escape_Trader&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
		&amp;lt;infoportion_complete&amp;gt;player_complete_new_task&amp;lt;/ infoportion_complete&amp;gt;&lt;br /&gt;
	&amp;lt;/objective&amp;gt;&lt;br /&gt;
	&amp;lt;objective&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Поговорить с Волком&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;map_location_type hint=&amp;quot;volk&amp;quot;&amp;gt;green_location&amp;lt;/map_location_type&amp;gt;&lt;br /&gt;
		&amp;lt;object_story_id&amp;gt;Escape_novice_lager_volk&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
		&amp;lt;infoportion_complete&amp;gt;player_talked_with_wolf&amp;lt;/ infoportion_complete&amp;gt;&lt;br /&gt;
	&amp;lt;/objective&amp;gt;&lt;br /&gt;
	&amp;lt;objective&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Вернуться к Сидорычу&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;map_location_type hint=&amp;quot;escape_trader&amp;quot;&amp;gt;blue_location&amp;lt;/map_location_type&amp;gt;&lt;br /&gt;
		&amp;lt;object_story_id&amp;gt;Escape_Trader&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
		&amp;lt;infoportion_complete&amp;gt;player_complete_new_task&amp;lt;/ infoportion_complete&amp;gt;&lt;br /&gt;
	&amp;lt;/objective&amp;gt;&lt;br /&gt;
&amp;lt;/game_task&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь создадим скелеты диалогов для нашего квеста. Потребуется три: один для Волка и два для Сидорыча.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;dialog id = “volk_new_quest”&amp;gt;&lt;br /&gt;
	&amp;lt;has_info&amp;gt; new_task_started &amp;lt;/has_info&amp;gt;&lt;br /&gt;
	&amp;lt;dont_has_info&amp;gt; player_talked_with_wolf&amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
&amp;lt;dont_has_info&amp;gt; player_complete_new_task &amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
&amp;lt;phrase_list&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “0”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;esc_volk_new_quest_0&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
	&amp;lt;/phrase&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “1”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;esc_volk_new_quest_1&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;give_info&amp;gt;player_talked_with_wolf&amp;lt;/give_info&amp;gt;&lt;br /&gt;
		&amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
	&amp;lt;/phrase&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “2”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;esc_volk_new_quest_2&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;action&amp;gt;dialogs.break_dialog&amp;lt;/action&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/prhase_list&amp;gt;&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dialog id = “esc_trader_new_quest”&amp;gt;&lt;br /&gt;
&amp;lt;dont_has_info&amp;gt; player_complete_new_task &amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
&amp;lt;dont_has_info&amp;gt; player_talked_with_wolf&amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
&amp;lt;phrase_list&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “0”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;esc_trader_new_quest _0&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
	&amp;lt;/phrase&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “1”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;esc_trader_new_quest _1&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;give_info&amp;gt;new_task_started &amp;lt;/give_info&amp;gt;&lt;br /&gt;
		&amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
	&amp;lt;/phrase&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “2”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;esc_trader_new_quest _2&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;action&amp;gt;dialogs.break_dialog&amp;lt;/action&amp;gt; &lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/prhase_list&amp;gt;&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dialog id = “esc_trader_new_quest_complete”&amp;gt;&lt;br /&gt;
&amp;lt;dont_has_info&amp;gt; player_complete_new_task &amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
&amp;lt;phrase_list&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “0”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt; esc_trader_new_quest_complete _0&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
	&amp;lt;/phrase&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “1”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt; esc_trader_new_quest_complete _1&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;give_info&amp;gt;player_complete_new_task &amp;lt;/give_info&amp;gt;&lt;br /&gt;
		&amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
	&amp;lt;/phrase&amp;gt;&lt;br /&gt;
	&amp;lt;phrase id = “2”&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt; esc_trader_new_quest_complete _2&amp;lt;/text&amp;gt;&lt;br /&gt;
		&amp;lt;action&amp;gt;dialogs.break_dialog&amp;lt;/action&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;/prhase_list&amp;gt;&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все «скелеты» добавляем в файл dialogs_escape.xml. Между &amp;lt;game_dialogs&amp;gt; и &amp;lt;dialog id=...&amp;gt;! &lt;br /&gt;
&lt;br /&gt;
Примечание: посмотрите на уже готовые диалоги, которые создали разработчики игры – это облегчит вам жизнь.&lt;br /&gt;
&lt;br /&gt;
Теперь бежим в файл character_desc_escape.xml&lt;br /&gt;
&lt;br /&gt;
Ищем там NPC с id = “escape_trader” и добавляем два новых &amp;lt;actor_dialog&amp;gt;&amp;lt;/actor_dialog&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;actor_dialog&amp;gt;esc_trader_new_quest_complete &amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
&amp;lt;actor_dialog&amp;gt;esc_trader_new_quest &amp;lt;/actor_dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Там же ищем NPC с id = “esc_wolf” и добавляем один актор_диалог:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;actor_dialog&amp;gt; volk_new_quest &amp;lt;/actor_dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примечание: &amp;lt;actor_dialog&amp;gt; является диалогом, который активируется самим игроком по желанию. А &amp;lt;start_dialog&amp;gt; активируется только при выполнении определенных условий, заданных в нем, и обычно недоступен.&lt;br /&gt;
&lt;br /&gt;
Осталось только добавить текст трех диалогов, чтобы наш квест стал полноценным. Открываем файл stable_dialogs_escape.xml и добавляем в него новый текст в таком виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	&amp;lt;string id=&amp;quot; esc_trader_new_quest_complete_0 &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; esc_trader_new_quest_complete_1 &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; esc_trader_new_quest_complete_2 &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; esc_trader_new_quest _0 &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; esc_trader_new_quest _1 &amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt; О, неужели заглянул к нам на огонек, Меченый? Ладно… ближе к телу… эээ, к делу. У меня к тебе следующая &lt;br /&gt;
просьба: сбегай к Волку, у него что-то намечалось.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot; esc_trader_new_quest _2&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;esc_volk_new_quest_0&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;esc_volk_new_quest_1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Привет, Меченый. Верь ты ему больше, этому старому маразматику! Все спокойно сейчас. Так что иди к нему и &lt;br /&gt;
скажи, что все хорошо.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;esc_volk_new_quest_2&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;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все! Поздравляю! Вы только что написали новый квест.&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана: [[Участник:Fr3nzy|Fr3nzy]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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_%D0%BA%D0%B2%D0%B5%D1%81%D1%82%D0%BE%D0%B2_(%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C)</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_%D0%BA%D0%B2%D0%B5%D1%81%D1%82%D0%BE%D0%B2_(%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C)"/>
				<updated>2008-01-22T17:16:49Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Вступление==&lt;br /&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;
- перед началом работы создайте новую папку gamedata, а свои моды спрячьте подальше: работать с &amp;quot;чистой&amp;quot; версией игры не в пример удобнее и проще; особенно противопоказан Repair Mod, который с новыми диалогами часто конфликтует. О том, как создать диалоги и квесты, исключающие возможность конфликта с другими подобными модами, см. часть 4. &lt;br /&gt;
&lt;br /&gt;
==Создание базового диалога==&lt;br /&gt;
&lt;br /&gt;
Начнем создание квеста с написания небольшого линейного диалога.&lt;br /&gt;
&lt;br /&gt;
Открываем файл gamedata\config\gameplay\character_desc_escape.xml и проводим такие манипуляции:&lt;br /&gt;
&lt;br /&gt;
- находим строку &amp;quot;&amp;lt;actor_dialog&amp;gt;escape_trader_done_blockpost_box&amp;lt;/actor_dialog&amp;gt;&amp;quot;&lt;br /&gt;
- добавляем после нее новую - &amp;quot;&amp;lt;actor_dialog&amp;gt;escape_trader_oops&amp;lt;/actor_dialog&amp;gt;&amp;quot;&lt;br /&gt;
- сохраняем изменения&lt;br /&gt;
&lt;br /&gt;
Мы добавили к Диалогу с Сидоровичем новую ветку, вернее, только ссылку на неё. Сама внутренняя структура ветки хранится в файле gamedata\config\gameplay\dialogs_escape.xml, который мы открываем и производим:&lt;br /&gt;
&lt;br /&gt;
- находим в любом месте файла промежуток между &amp;lt;/dialog&amp;gt; и &amp;lt;dialog id=&amp;quot;...&amp;quot;&amp;gt;&lt;br /&gt;
- засовываем туда такую конструкцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &amp;lt;dialog id=&amp;quot;escape_trader_oops&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_alredy_give_job&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_0&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_1&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_2&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_3&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;/dialog&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- сохраняем изменения&lt;br /&gt;
&lt;br /&gt;
Теперь у нас прописана структура новой ветки диалога. Осталось сделать еще одну вещь - прописать строки, которые будут отображаться вместо &amp;quot;escape_trader_oops_...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для этого откроем файл gamedata\config\text\rus\stable_dialogs_escape.xml и сделаем следующее:&lt;br /&gt;
&lt;br /&gt;
- находим любой удобный промежуток между &amp;lt;/string&amp;gt; и &amp;lt;string id=&amp;quot;...&amp;quot;&amp;gt;&lt;br /&gt;
- прописываем туда следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;string id=&amp;quot;escape_trader_oops_0&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;escape_trader_oops_1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt; водке? Да какая водка? Нет её у меня, кончилась. Вроде у Волка на чердаке была, что-то он&lt;br /&gt;
однажды об этом упоминал... Принеси, а?&amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;escape_trader_oops_2&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;escape_trader_oops_3&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- сохраняем изменения&lt;br /&gt;
&lt;br /&gt;
Всё. Диалог готов. Можно грузить игру и смотреть, работает ли новая ветка.&lt;br /&gt;
А теперь будем прикреплять к этому безобразию квест &amp;quot;&amp;quot;Принеси водки Сидоровичу&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Создание базового квеста==&lt;br /&gt;
&lt;br /&gt;
Активацию квеста в диалог прикрепить достаточно просто. Проводим с файлом gamedata\config\gameplay\ dialogs_escape.xml следующие манипуляции:&lt;br /&gt;
&lt;br /&gt;
- добавляем содержимое фразы &amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt; следующим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
&amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;text&amp;gt;escape_trader_oops_2&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;give_info&amp;gt;kvest_vodka_started&amp;lt;/give_info&amp;gt;&lt;br /&gt;
&amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- сохраняем изменения&lt;br /&gt;
&lt;br /&gt;
Теперь после фразы Меченого &amp;quot;Да сбегаю я сейчас, сбегаю...&amp;quot; Сидорович таки всучивает нам квест &amp;quot;Принеси водку&amp;quot;. Но не спешите тестировать изменения. Мы добавили в диалог упоминание о квесте, хотя он еще не создан.&lt;br /&gt;
&lt;br /&gt;
Исправим это недоразумение. Откройте файл gamedata\config\gameplay\tasks_escape.xml и в начале файла создайте такую конструкцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;game_task id=&amp;quot;esc_test_vodka_task&amp;quot;&amp;gt;&lt;br /&gt;
        	&amp;lt;title&amp;gt;Принести водки&amp;lt;/title&amp;gt; &amp;lt;!-- заголовок квеста --&amp;gt;&lt;br /&gt;
        	&amp;lt;objective&amp;gt;&lt;br /&gt;
            		&amp;lt;text&amp;gt;Принести водки Сидоровичу&amp;lt;/text&amp;gt;&lt;br /&gt;
            		&amp;lt;icon&amp;gt;ui_iconsTotal_find_item&amp;lt;/icon&amp;gt;&lt;br /&gt;
            		&amp;lt;infoportion_complete&amp;gt;test_quest_vodka_otdana&amp;lt;/infoportion_complete&amp;gt;        	&amp;lt;/objective&amp;gt;&lt;br /&gt;
        	&amp;lt;objective&amp;gt;&lt;br /&gt;
            		&amp;lt;text&amp;gt;Вернуться с водкой обратно&amp;lt;/text&amp;gt; &lt;br /&gt;
            		&amp;lt;map_location_type hint=&amp;quot;esc_dinamit_to_volk&amp;quot;&amp;gt;green_location&amp;lt;/map_location_type&amp;gt; &lt;br /&gt;
            		&amp;lt;object_story_id&amp;gt;Escape_novice_lager_volk&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
            		&amp;lt;infoportion_complete&amp;gt;test_quest_vodka_otdana&amp;lt;/infoportion_complete&amp;gt;&lt;br /&gt;
        	&amp;lt;/objective&amp;gt;&lt;br /&gt;
        	&amp;lt;objective&amp;gt;&lt;br /&gt;
            		&amp;lt;text&amp;gt;Найти водку на чердаке&amp;lt;/text&amp;gt;&lt;br /&gt;
            		&amp;lt;map_location_type hint=&amp;quot;escape_trader&amp;quot;&amp;gt;blue_location&amp;lt;/map_location_type&amp;gt;&lt;br /&gt;
            		&amp;lt;object_story_id&amp;gt;Escape_Trader&amp;lt;/object_story_id&amp;gt;&lt;br /&gt;
            		&amp;lt;infoportion_complete&amp;gt;test_quest_vodka_otdana&amp;lt;/infoportion_complete&amp;gt;&lt;br /&gt;
        	&amp;lt;/objective&amp;gt;&lt;br /&gt;
&amp;lt;/game_task&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы прописали данные о квесте: название, иконку, строки заданий, расположение маркеров и т.д.&lt;br /&gt;
&lt;br /&gt;
К этому файлу мы еще вернемся, т.к. в этом варианте многое проставлялось не иначе как от балды. Я еще подумаю, как заставить задание &amp;quot;Вернуться с водкой обратно&amp;quot; появиться в PDA, а то оно что-то не желает явить себя народу... впрочем, ладно, главное, что все работает и не вылетает. А исправление столь мелких багов - дело десятое. Продолжим.&lt;br /&gt;
&lt;br /&gt;
Откроем файл gamedata\config\gameplay\info_l01escape.xml и зарегистрируем до того отсутствовавшие в игре типы условий (они нам еще пригодятся для завершения работы над квестом):&lt;br /&gt;
&lt;br /&gt;
- после строки &amp;lt;game_information_portions&amp;gt; прописываем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;info_portion id=&amp;quot;test_quest_vodka_otdana&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;info_portion id=&amp;quot;kvest_vodka_started&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;task&amp;gt;esc_test_vodka_task&amp;lt;/task&amp;gt;&lt;br /&gt;
&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;info_portion id=&amp;quot;otkazalsya_prinesty_vodku&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С прописыванием условий - всё.&lt;br /&gt;
&lt;br /&gt;
Теперь займемся одной небольшой, но нужной вещью - прописыванием экранных подсказок, которые высвечиваются при получении/выполнении этапа/завершении задания.&lt;br /&gt;
&lt;br /&gt;
Для этого откроем файл gamedata\config\text\rus\string_table_tasks_escape.xml и пропишем там:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;string id=&amp;quot;esc_test_prinesti_vodku&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;esc_test_prinesti_vodku_1&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;esc_test_prinesti_vodku_2&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь можно тестировать, что получилось. Сверяем результаты:&lt;br /&gt;
&lt;br /&gt;
- по окончанию разговора про водку у вас появляется новое задание&lt;br /&gt;
- в задании маркером отмечен Волк (ближайший к чердаку маркер, потому и отмечен)&lt;br /&gt;
- при получении задания на экране высвечивается уведомление&lt;br /&gt;
&lt;br /&gt;
Можно приступать к третьей стадии. Что мы забыли? Правильно - возможность выполнить квест.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Реализация возможности выполнить квест==&lt;br /&gt;
&lt;br /&gt;
На самом деле - все просто. Все условия и т.д. уже нами созданы, осталось только применить их в диалоге. Давайте несколько изменим его структуру, сделаем его ветвистым и функциональным:&lt;br /&gt;
&lt;br /&gt;
'''0.''' Сидрыч, давай поговорим о... водке. ( переход к 1)&lt;br /&gt;
&lt;br /&gt;
'''1.''' О водке? Да какая водка? Нет её у меня, кончилась. Вроде у Волка на чердаке была, что-то он однажды об этом упоминал... Принеси, а? ( выбор - переход к 2, 4, 5; изначально доступен только 2 вариант )&lt;br /&gt;
&lt;br /&gt;
'''2.''' Да сбегаю я сейчас, сбегаю... алкоголик, блин. ( получение квеста, переход к 3, после этого перестает быть доступен )&lt;br /&gt;
&lt;br /&gt;
'''3.''' Беги, беги... сил уж нет ждать. ( конец, переход к списку веток Сидоровича )&lt;br /&gt;
&lt;br /&gt;
'''4.''' Вот она, твоя бутылка водки. Ну, вернее, не твоя, а Волка... ( появляется только при наличии водки в инвентаре, при выборе водка передается Сидоровичу, квест выполняется, идет переход к 7 )&lt;br /&gt;
&lt;br /&gt;
'''5.''' Извини, Сидрыч, я пока еще не раздобыл, терпи... ( появляется только если взять квест, переход к 6 )&lt;br /&gt;
&lt;br /&gt;
'''6.''' А ну марш отсюда! Без бутылки пришел... ууу, вражина... ( переход к 8 )&lt;br /&gt;
&lt;br /&gt;
'''7.''' Теперь моя будет, Меченый! Ты так Волку и передай. Спасибо, выручил... держи награду. ( выдача награды, переход к 8 )&lt;br /&gt;
&lt;br /&gt;
'''8.''' Ну тебя в пень... ( конец, переход к списку веток Сидоровича )&lt;br /&gt;
&lt;br /&gt;
А вот так это будет выглядеть в файле gamedata\config\gameplay\dialogs_escape.xml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;dialog id=&amp;quot;escape_trader_oops&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_alredy_give_job&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_0&amp;lt;/text&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                               	&amp;lt;text&amp;gt;escape_trader_oops_1&amp;lt;/text&amp;gt;&lt;br /&gt;
                                &amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;4&amp;lt;/next&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;5&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;dont_has_info&amp;gt;kvest_vodka_started&amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
                                &amp;lt;text&amp;gt;escape_trader_oops_2&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;give_info&amp;gt;kvest_vodka_started&amp;lt;/give_info&amp;gt;&lt;br /&gt;
                                &amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
                     &amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;text&amp;gt;escape_trader_oops_3&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;dialogs.break_dialog&amp;lt;/action&amp;gt;&lt;br /&gt;
                     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_4&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;precondition&amp;gt;escape_dialog.have_a_vodka&amp;lt;/precondition&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;escape_dialog.otday_vodku&amp;lt;/action&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;7&amp;lt;/next&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;has_info&amp;gt;kvest_vodka_started&amp;lt;/has_info&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_5&amp;lt;/text&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;6&amp;lt;/next&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_6&amp;lt;/text&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;8&amp;lt;/next&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_7&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;give_info&amp;gt;test_quest_vodka_otdana&amp;lt;/give_info&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;escape_dialog.transfer_deneg&amp;lt;/action&amp;gt;&lt;br /&gt;
                              	&amp;lt;next&amp;gt;8&amp;lt;/next&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
		     &amp;lt;phrase id=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
                             	&amp;lt;text&amp;gt;escape_trader_oops_8&amp;lt;/text&amp;gt;&lt;br /&gt;
		     &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь добавим в игру скрипты &amp;quot;передача денег&amp;quot; и &amp;quot;передача водки&amp;quot;. Откройте файл gamedata\scripts\escape_dialog.script и перед разделителем &amp;quot;Trader&amp;quot; добавьте туда следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function transfer_deneg(first_speaker, second_speaker)&lt;br /&gt;
    dialogs.relocate_money(second_speaker, 4000, &amp;quot;in&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
   &lt;br /&gt;
function otday_vodku (npc, actor)&lt;br /&gt;
    dialogs.relocate_item_section(npc, &amp;quot;vodka&amp;quot;, &amp;quot;out&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function have_a_vodka (stalker, player)&lt;br /&gt;
    return stalker:object (&amp;quot;vodka&amp;quot;) ~= nil&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Готово. Запускайте игру и любуйтесь.&lt;br /&gt;
&lt;br /&gt;
Для тех, кто еще с нами - сейчас мы модифицируем квест так, чтобы исключить конфликты с другими подобными модами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Реализация совместимости==&lt;br /&gt;
&lt;br /&gt;
Из-за чего наш мод не может работать вместе с аналогичными ему модами? Да потому, что файлы dialogs_escape.xml и некоторые другие у них пересекаются. Поэтому выделим их отдельно от основных диалогов:&lt;br /&gt;
&lt;br /&gt;
Вместо dialogs_escape.xml мы будем испольховать новый - dialogs_new.xml&lt;br /&gt;
Вместо stable_dialogs_escape.xml мы будем использовать файл stable_dialogs_new.xml (важно! не знаю почему, но он должен лежать в text\..., а не в text\rus\...)&lt;br /&gt;
&lt;br /&gt;
Соответственно, весь реализованный нами новый контент перекидываем в пустые файлы (соблюдая форматирование), подчистив за собой на старом месте.&lt;br /&gt;
&lt;br /&gt;
Единственное, что останется сделать после установки того же Repair Mod'а - заново добавить ветку диалога Сидоровичу в файле character_desc_escape.xml. Остальное в новом варианте нашего мода переписывать не придется - для диалогов отведено три файла.&lt;br /&gt;
&lt;br /&gt;
Остальные файлы относятся уже к квестовой части и ни с чем пересекаться не могут - где вы видели другие моды с новыми квестами? Я - нет.&lt;br /&gt;
&lt;br /&gt;
Откройте файл gamedata\config\localization.ltx и зарегистрируйте там stable_dialogs_escape.ltx.&lt;br /&gt;
Потом откройте файл gamedata\config\system.ltx и в разделе &amp;quot;Dialogs&amp;quot; в конце строки (после dialogs_aes) пропишите dialogs_new (без &amp;quot;.ltx&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;
'''XiaNi''' - за страшный и непричесанный, но работающий пример квеста, на основе которого я и освоил принципы квестостроения =)&lt;br /&gt;
&lt;br /&gt;
'''Keha''' – за урок по созданию новых диалогов&lt;br /&gt;
&lt;br /&gt;
==Дополнения==&lt;br /&gt;
&lt;br /&gt;
1. Если изменить шапку нашего диалога в файле dialogs_escape.xml со старого варианта на такой, то ветка исчезнет после выполнения задания:&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;dialog id=&amp;quot;escape_trader_oops&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;precondition&amp;gt;escape_dialog.trader_alredy_give_job&amp;lt;/precondition&amp;gt;&lt;br /&gt;
        &amp;lt;has_info&amp;gt;tutorial_end&amp;lt;/has_info&amp;gt;&lt;br /&gt;
&amp;lt;dont_has_info&amp;gt;test_quest_vodka_otdana&amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
          &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Не тестировал. Дело за вами =)&lt;br /&gt;
&lt;br /&gt;
Фух, вроде всё...&lt;br /&gt;
Всем спасибо, занавес =)&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
[[Участник:BAC9-FLCL|BAC9-FLCL]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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%BD%D0%BE%D0%B2%D0%BE%D0%B9_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8</id>
		<title>Создание новой группировки</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B9_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8"/>
				<updated>2008-01-22T17:15:20Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Новая группировка==&lt;br /&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;
'''1.''' Для начала в '''game_relations.ltx''' и в таблицу отношений группировок в конце и в заголовке добавляем название своей группировки и коэффициенты отношений к ней у других группировок. Также, не забываем прописать её собственное отношение к другим группировкам:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[communities_relations]&lt;br /&gt;
;|actor  |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg   |freedom|bandit |zombied|strange|trader|arena_enemy|wind|&lt;br /&gt;
;=================================================================================================================================&lt;br /&gt;
actor = 0,	   0,	   0,	   0,  -5000,  -5000,  -5000,      0,	   0,	   0,  -5000,  -5000,	   0,	  0,  -5000, 0&lt;br /&gt;
actor_dolg = 0,	   0,	   0,      0,  -5000,   -500,  -5000,   5000,    600,  -5000,  -5000,  -5000,	   0,	  0,  -5000&lt;br /&gt;
actor_freedom = 0,	   0,	   0,	   0,  -5000,  -5000,  -5000,  -1500,  -5000,   5000,	   0,  -5000,	   0,	 0,  -5000, 0&lt;br /&gt;
&lt;br /&gt;
stalker	= 0,	   0,	   0,	   0,  -5000,  -5000,  -5000,      0,	   0,	   0,  -5000,  -5000,	   0,	  0,  -5000, 0&lt;br /&gt;
monolith = -5000,  -5000,  -5000,  -5000,   5000,  -5000,  -5000,  -5000,  -5000,  -5000,   5000,   5000,  -5000,	 0,  -5000, 0&lt;br /&gt;
military = -5000,  -5000,  -5000,  -5000,  -5000,   5000,  -5000,      0,  -5000,  -5000,  -5000,  -5000, 	   0,	 0,  -5000, 0&lt;br /&gt;
killer = -5000,  -5000,      0,  -5000,  -5000,  -5000,   5000,  -5000,  -5000,  -5000,	   0,  -5000,  -5000,	  0,  -5000, 0&lt;br /&gt;
ecolog = 0,	 600,  -5000,      0,  -5000,   1000,  -5000,   5000,    500,  -5000,   -500,  -5000,	   0,	  0,      0, 0&lt;br /&gt;
dolg = 0,    600,  -5000,      0,  -5000,   -500,  -5000,   5000,   5000,  -5000,  -5000,  -5000,	   0,	  0,      0, 0&lt;br /&gt;
freedom = 0,  -5000,	 600,	   0,  -5000,  -5000,  -5000,  -1500,  -5000,   5000,	   0,  -5000,	   0,	  0,      0, 0&lt;br /&gt;
bandit = -5000,  -5000,	   0,  -5000,  -5000,   -500,      0,  -5000,  -5000,	   0,	   0,  -5000,  -5000,	  0,  -5000, 0&lt;br /&gt;
zombied	= -5000,  -5000,  -5000,  -5000,   5000,  -5000,  -5000,  -5000,  -5000,  -5000,  -5000,   5000,  -5000,	 0,  -5000, 0&lt;br /&gt;
stranger = 0,	   0,	   0,      0,  -5000,  -5000,  -5000,      0,	   0,	   0,   -500,  -5000,	   0,	  0,      0, 0&lt;br /&gt;
trader = 0,	   0,	   0,	   0,	   0, 	   0,	   0,	   0,	   0,	   0,	   0,	   0,      0,	  0,      0&lt;br /&gt;
arena_enemy = -5000,  -5000,  -5000,  -5000,  -5000,  -5000,      0,      0,      0,  -5000,  -5000,      0,      0,	  0,     0, 0&lt;br /&gt;
&lt;br /&gt;
wind = 0,	   0,	   0,	   0,  -5000,  -5000,  -5000,      0,	   0,	   0,  -5000,  -5000,	   0,	  0,  -5000, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также, изменим эту строку, добавив туда имя и номер группировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;названия группировок&lt;br /&gt;
communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5, monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10, &lt;br /&gt;
freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, wind, 18,&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для wind выставили 18, так как мы эту группировку отделили от других.&lt;br /&gt;
&lt;br /&gt;
Далее, в разделе ''[communities_sympathy]'' в конце добавляем свою группировку и коэффициент &amp;quot;впечатлительности&amp;quot; - чем он меньше, тем меньше отношение группировки будет меняться к вам в целом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[communities_sympathy]&lt;br /&gt;
actor		=		0.0&lt;br /&gt;
actor_dolg	=		0.0&lt;br /&gt;
actor_freedom	=		0.0&lt;br /&gt;
stalker		=		0.0&lt;br /&gt;
monolith	=		0.0&lt;br /&gt;
military	=		0.0&lt;br /&gt;
killer		=		0.0&lt;br /&gt;
ecolog		=		0.0&lt;br /&gt;
dolg		=		0.1&lt;br /&gt;
freedom		=		0.1&lt;br /&gt;
bandit		=		0.0&lt;br /&gt;
zombied		=		0.0&lt;br /&gt;
trader		=		0.0&lt;br /&gt;
stranger	=		0.0&lt;br /&gt;
arena_enemy	=	    	0.0&lt;br /&gt;
wind 		= 		0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''2.''' После этого в файле '''death_manager.script''' ищем строку ''local community_list'' и в скобках добавляем название своей группировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function init_drop_settings()&lt;br /&gt;
	local community_list = { &amp;quot;stalker&amp;quot;, &amp;quot;dolg&amp;quot;, &amp;quot;freedom&amp;quot;, &amp;quot;bandit&amp;quot;, &amp;quot;military&amp;quot;, &amp;quot;zombied&amp;quot;, &amp;quot;ecolog&amp;quot;, &amp;quot;killer&amp;quot;, &amp;quot;monolith&amp;quot;, &lt;br /&gt;
&amp;quot;arena_enemy&amp;quot;, &amp;quot;actor_dolg&amp;quot;, &amp;quot;wind&amp;quot; }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3.''' В файле '''death_items_by_communities.ltx''' пишем ''[x]:stalker'' (вместо ''x'' - название вашей группировки):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[...]&lt;br /&gt;
af_dummy_spring			= 0&lt;br /&gt;
af_fuzz_kolobok			= 0&lt;br /&gt;
&lt;br /&gt;
;Еда&lt;br /&gt;
vodka					= 0&lt;br /&gt;
&lt;br /&gt;
[arena_enemy]&lt;br /&gt;
[actor_dolg]&lt;br /&gt;
&lt;br /&gt;
[wind]: stalker&lt;br /&gt;
bread					= 0&lt;br /&gt;
kolbasa					= 0&lt;br /&gt;
vodka					= 0&lt;br /&gt;
energy_drink			= 0.3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4.''' Если предусматривается респавн бойцов новой группировки, в '''se_respawn.script''' прописываем в '''local simMaxCount = {''' после строчек с зомбированными сталкерами строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wind_novice = 20, wind_regular = 20, wind_veteran = 20, wind_master = 6,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.''' Чтобы при убийстве непися новой группировки игра не вылетала в '''xr_statistic.script''',&lt;br /&gt;
&lt;br /&gt;
после строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
пишем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;dark_stalker_novice = 1, dark_stalker_experienced = 2, dark_stalker_veteran = 3, dark_stalker_master = 4,&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6.''' Ну а в '''character_desk_x.xml''' выбираем любого NPC (или группу) и меняем группировку на свою:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;!---esc_wolf---&amp;gt;&lt;br /&gt;
	&amp;lt;specific_character id=&amp;quot;esc_wolf&amp;quot; team_default = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;esc_wolf_name&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;icon&amp;gt;ui_npc_u_stalker_neytral_balon_1&amp;lt;/icon&amp;gt;&lt;br /&gt;
		&amp;lt;bio&amp;gt;esc_wolf_bio&amp;lt;/bio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;class&amp;gt;esc_wolf&amp;lt;/class&amp;gt;&lt;br /&gt;
		&amp;lt;community&amp;gt;wind&amp;lt;/community&amp;gt;&lt;br /&gt;
		[...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''7.''' Чтобы у персонажа в графе &amp;quot;Группировка&amp;quot; отображалось не &amp;quot;wind&amp;quot;, а &amp;quot;Ветер&amp;quot;, зарегистрируем соответствующую строку в файле string_table_general.xml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1251&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;string_table&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;wind&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;actor&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''8.''' Существует возможность создать для нашей новой группировки места, где они будут ходить (''*_terrain'' брать из '''m_stalker.ltx'''):&lt;br /&gt;
&lt;br /&gt;
То есть, к примеру, существует секция:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[stalker_terrain]&lt;br /&gt;
	255,000,255,255&lt;br /&gt;
	008,001,255,255 ;Разрешено ходить по опасным местам на баре&lt;br /&gt;
	012,001,255,255 ;Разрешено ходить по опасным местам на Милитари&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда можно создать новую, по аналогии:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[wind_terrain]&lt;br /&gt;
	255,000,255,255&lt;br /&gt;
	008,001,255,255 ;Разрешено ходить по опасным местам на баре&lt;br /&gt;
	012,001,255,255 ;Разрешено ходить по опасным местам на Милитари&lt;br /&gt;
	010,001,255,255	;Разрешено ходить по опасным местам на янтаре&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Здесь, очевидно, указаны координаты самого уровня. Для каждого уровня существует своя начальная координата.&lt;br /&gt;
&lt;br /&gt;
===Продвинутый уровень===&lt;br /&gt;
&lt;br /&gt;
Такой метод достаточно примитивен. Это не полноценная группировка. Нам нужны соответствующие диалоги, возможность получения квестов и вступления в группировку, уникальные NPC.&lt;br /&gt;
&lt;br /&gt;
====Квесты====&lt;br /&gt;
&lt;br /&gt;
Добавим квесты, которые нужно выполнить для группировки. Пока - простые поручения распространенных типов.&lt;br /&gt;
&lt;br /&gt;
Во-первых, пропишите в список диалогов персонажа следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;		&amp;lt;actor_dialog&amp;gt;[что-нибудь]_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;[что-нибудь]_reward&amp;lt;/actor_dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примеры названий: ''tm_trader_dialog'', ''tm_wolf_dialog''...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: gray&amp;quot;&amp;gt;Внимание! Метод не проверен.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этим мы добавили ему ветку диалога &amp;quot;Есть работа?&amp;quot;, а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в '''task_manager.ltx''' набор новых заданий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[list]&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
;--------Wind------------------------&lt;br /&gt;
;----------Kill Stalker----&lt;br /&gt;
wind_kill_stalker&lt;br /&gt;
;----------Find Item----	&lt;br /&gt;
wind_find_item&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
;tasks for Wind	&lt;br /&gt;
&lt;br /&gt;
[wind_find_item]&lt;br /&gt;
type = find_item&lt;br /&gt;
community = actor&lt;br /&gt;
text = [ссылка на текст с рассказом заказчика о задании]&lt;br /&gt;
description = [ссылка на текст с описанием задания]&lt;br /&gt;
parent = [имя NPC-заказчика]&lt;br /&gt;
target = scientific_outfit&lt;br /&gt;
reward_money = 5000&lt;br /&gt;
reward_reputation = +5&lt;br /&gt;
reward_rank = 4&lt;br /&gt;
reward_item = wpn_sig_m1&lt;br /&gt;
time = 86400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[wind_kill_stalker]&lt;br /&gt;
type = kill_stalker&lt;br /&gt;
community = actor&lt;br /&gt;
text = [ссылка на текст с рассказом заказчика о задании]&lt;br /&gt;
description = [ссылка на текст с описанием задания]&lt;br /&gt;
parent = [имя NPC-заказчика]&lt;br /&gt;
target = sim_stalker_master_master&lt;br /&gt;
reward_money = 4000&lt;br /&gt;
reward_reputation = +5&lt;br /&gt;
reward_rank = 9&lt;br /&gt;
reward_item = ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_5.56x45_ap&lt;br /&gt;
time = 86400&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Не забудьте прописать описания заданий в текстовые массивы. Подробнее о редактировании '''task_manager.ltx''' читайте в [[Однотипные квесты|уроке]], посвященном однотипным квестам.&lt;br /&gt;
&lt;br /&gt;
Да, и зарегистрируйте сами ветки диалогов в файле '''dialogs.xml'''. Вот пример того, как это сделано для заданий &amp;quot;Долга&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    &amp;lt;dialog id=&amp;quot;tm_dolg_dialog&amp;quot; priority=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;init_func&amp;gt;task_manager.init_dolg_task_dialog&amp;lt;/init_func&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
    &amp;lt;dialog id=&amp;quot;tm_dolg_reward&amp;quot; priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;init_func&amp;gt;task_manager.init_dolg_reward_dialog&amp;lt;/init_func&amp;gt;&lt;br /&gt;
		&amp;lt;precondition&amp;gt;task_manager.has_active_vendor_task&amp;lt;/precondition&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, пройдем туда, куда указывает строка ''task_manager.init_dolg_task_dialog'' - в '''task_manager.script''':	 &lt;br /&gt;
	 &lt;br /&gt;
&amp;lt;pre&amp;gt;function init_dolg_task_dialog(dlg)	 &lt;br /&gt;
	get_random_task():init_task_dialog(dlg, &amp;quot;dolg&amp;quot;)&amp;lt;/pre&amp;gt;	 &lt;br /&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;
Прописываем в '''dialogs.script''' такие action'ы:&lt;br /&gt;
&amp;lt;pre&amp;gt;-----------------------------------------------------------------------------------&lt;br /&gt;
-- Community&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
function actor_set_wind (actor, npc)&lt;br /&gt;
printf (&amp;quot;ACTOR NOW IN WIND COMMUNITY&amp;quot;&lt;br /&gt;
if db.actor then&lt;br /&gt;
db.actor:set_character_community (&amp;quot;actor_wind&amp;quot;, 0, 0)&lt;br /&gt;
end&lt;br /&gt;
return true&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После чего создадим диалог, и сделаем в нем фразу с action'ом вида ''&amp;lt;action&amp;gt;actor_set_wind&amp;lt;/action&amp;gt;''. Советую изучить [[Создание диалогов|урок]], посвященный диалогам.&lt;br /&gt;
&lt;br /&gt;
====Новые NPC====&lt;br /&gt;
&lt;br /&gt;
Лучше всего всё вышеприведенное повесить на нового, уникального персонажа. Способ его спавна описан [[Cпавн через скрипт#Спавн NPC|здесь]].&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья [[Участник:BAC9-FLCL|BAC9-FLCL]].&amp;lt;br&amp;gt;&lt;br /&gt;
Способ открыт [[Участник:Arhet|Arhet]] ([[Team:SRP Team|SRP Team]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Альтернатива - статья [[Участник:SenseyVit|SenseyVit]] ([http://stalkerhunt.ucoz.ru/publ/1-1-0-2 открыть]).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2</id>
		<title>Спавн новых предметов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2"/>
				<updated>2008-01-22T17:14:15Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой статье я расскажу как создавать новые предметы:&lt;br /&gt;
&lt;br /&gt;
Для начал находим файл items.ltx, находящийся в папке config/misc/, и копируем какой-нибудь предмет, я, например, взял:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[bread]:identity_immunities&lt;br /&gt;
GroupControlSection = spawn_group&lt;br /&gt;
discovery_dependency =&lt;br /&gt;
$spawn = &amp;quot;food and drugs\bread&amp;quot;&lt;br /&gt;
;$prefetch = 32&lt;br /&gt;
class = II_FOOD&lt;br /&gt;
cform = skeleton&lt;br /&gt;
visual = weapons\bred\bred.ogf&lt;br /&gt;
description = enc_equipment_food_bread1&lt;br /&gt;
&lt;br /&gt;
inv_name = Bread&lt;br /&gt;
inv_name_short = Bread&lt;br /&gt;
inv_weight = 0.3 ;0.2&lt;br /&gt;
&lt;br /&gt;
inv_grid_width = 1&lt;br /&gt;
inv_grid_height = 1&lt;br /&gt;
inv_grid_x = 11&lt;br /&gt;
inv_grid_y = 9&lt;br /&gt;
cost = 20&lt;br /&gt;
&lt;br /&gt;
attach_angle_offset = -0.287979, 1.560923, 1.544060&lt;br /&gt;
attach_position_offset = 0.096910, -0.013594, 0.107925&lt;br /&gt;
attach_bone_name = bip01_r_hand&lt;br /&gt;
auto_attach = false&lt;br /&gt;
&lt;br /&gt;
// should be deleted after update&lt;br /&gt;
bone_name = bip01_r_hand&lt;br /&gt;
position_offset = 0.0,0.0,0.0&lt;br /&gt;
angle_offset = 1.570790,1.570790,3.92699&lt;br /&gt;
&lt;br /&gt;
; eatable item&lt;br /&gt;
eat_health = 0.05&lt;br /&gt;
eat_satiety = 0.2&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;
&lt;br /&gt;
; food item&lt;br /&gt;
slot = 4&lt;br /&gt;
animation_slot = 4&lt;br /&gt;
&lt;br /&gt;
;hud item&lt;br /&gt;
hud = wpn_vodka_hud&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставляем его копию в конец, меняем название:&lt;br /&gt;
&lt;br /&gt;
[bread]&lt;br /&gt;
&lt;br /&gt;
На:&lt;br /&gt;
&lt;br /&gt;
[test]&lt;br /&gt;
&lt;br /&gt;
А также:&lt;br /&gt;
&lt;br /&gt;
 inv_name = Bread&lt;br /&gt;
 inv_name_short = Bread &lt;br /&gt;
&lt;br /&gt;
На:&lt;br /&gt;
&lt;br /&gt;
 inv_name = test&lt;br /&gt;
 inv_name_short = test&lt;br /&gt;
&lt;br /&gt;
И description = enc_equipment_food_bread1 на description = enc_equipment_food_bread1_test&lt;br /&gt;
&lt;br /&gt;
И, также, &amp;quot;по желанию&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
eat_health = 0.05&lt;br /&gt;
eat_satiety = 0.2&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;
&lt;br /&gt;
Всё, в item.ltx работа закончена, теперь переходим к редактированию описания, открываем string_table_enc_equipment &amp;quot;Блокнотом&amp;quot;. Что мы там видим: все описания и названия прописаны по тегам:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;string id=&amp;quot;название из inv_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;
&lt;br /&gt;
И:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;string id=&amp;quot;описание из description&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;
&lt;br /&gt;
Пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;string id=&amp;quot;test&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;
&lt;br /&gt;
И:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;string id=&amp;quot;enc_equipment_food_bread1_test&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;text&amp;gt;Тестовый предмет, разработанный в сверхсекретных лабораториях Зоны :)&amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сохраняем... Все! Основная работа завершена! Теперь добавим предмет торговцам, например, Сидоровичу.&lt;br /&gt;
&lt;br /&gt;
Открываем trader_trader из папки config/misc (работа с ним подробно описана в [[Редактирование торговцев|этой статье]]), прописываем:&lt;br /&gt;
&lt;br /&gt;
test = 0.3, 0.5&lt;br /&gt;
&lt;br /&gt;
В секции:&lt;br /&gt;
&lt;br /&gt;
[trader_generic_buy]&lt;br /&gt;
&lt;br /&gt;
И далее в:&lt;br /&gt;
&lt;br /&gt;
[supplies_start]&lt;br /&gt;
&lt;br /&gt;
test = 10, 1&lt;br /&gt;
&lt;br /&gt;
В [supplies_after_fabric]&lt;br /&gt;
&lt;br /&gt;
test = 10, 1&lt;br /&gt;
&lt;br /&gt;
В [trader_start_sell]&lt;br /&gt;
&lt;br /&gt;
И в:&lt;br /&gt;
&lt;br /&gt;
[trader_after_fabric_sell]&lt;br /&gt;
&lt;br /&gt;
test = 1. 3&lt;br /&gt;
&lt;br /&gt;
Сохраняем, запускаем игру, торгуем с Сидоровичем и видим у него два вида хлеба: один из них - наш :)&lt;br /&gt;
&lt;br /&gt;
О том как, делать иконки для новых предметов, детально описано в [[Изменение текстур|статье BAC9-FLCL.]]&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
[[Участник:Alwen|Alwen]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%B5%D0%BB%D0%B5%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82</id>
		<title>SoC. Спавн телепортов через скрипт</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%B5%D0%BB%D0%B5%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82"/>
				<updated>2008-01-22T17:13:29Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Создаем телепорт==&lt;br /&gt;
===Теория этого дела===&lt;br /&gt;
&lt;br /&gt;
В игре существует такой объект как &amp;quot;zone_teleport&amp;quot;, но если мы его создадим через create, то он будет выглядеть и переливаться как настоящий телепорт, но телепортировать нас куда-либо увы не сможет. Связано это с тем что, у аномалий ( а телепорт это такая разновидность аномалии ) параметры задаются хитромудро, через all.spawn. Вобщем штатным способом телепорты без полнофункционального редактора карт не получить (хотя возможно я не прав уже после написания этого текста появились идеи как это сделать через '''all.spawn'''). Значит на нашу долю остаються способы &amp;quot;не штатные&amp;quot; ;) Реализуем самый простой. Будем считать что у нас на карте есть квадрат с заданными координатами при попадании в который актера должно переместить в точку с другими координатами. Для этого будем периодически проверять координаты актера, и если он в квадрате - перемещяем. Вот в краце принцип действия нашего &amp;quot;самодельного&amp;quot; телепорта.&lt;br /&gt;
&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
В каталоге ''gamedata\scripts\'' Создадим файл '''bind_mteleport.script''' с логикой работы нашего телепорта.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- ************************************************&lt;br /&gt;
-- **                    Imp                     **&lt;br /&gt;
-- **       Биндер самодельных телепортов        **&lt;br /&gt;
-- ** Поддерживает работу самопальных телепортов **&lt;br /&gt;
-- ************************************************&lt;br /&gt;
&lt;br /&gt;
local teleport_binders ={}	-- Список телепортов&lt;br /&gt;
&lt;br /&gt;
function abs_comp(a,b)&lt;br /&gt;
	-- Служебная функция вычисления разности&lt;br /&gt;
	if( a &amp;lt; b) then&lt;br /&gt;
		return (b - a)&lt;br /&gt;
	else&lt;br /&gt;
		return (a - b)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function teleportate(x,y,z)&lt;br /&gt;
-- Функция телепортации&lt;br /&gt;
	local a = vector()&lt;br /&gt;
	-- Задаем координаты&lt;br /&gt;
	a.x = x&lt;br /&gt;
	a.y = y&lt;br /&gt;
	a.z = z&lt;br /&gt;
&lt;br /&gt;
	-- Сама телепортация&lt;br /&gt;
	db.actor:set_actor_position(a)&lt;br /&gt;
&lt;br /&gt;
	-- Звуковое сопровождение&lt;br /&gt;
	local snd_obj = xr_sound.get_safe_sound_object([[affects\tinnitus3a]])&lt;br /&gt;
	snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function actor_update(delta)&lt;br /&gt;
	local i,v,acter_poz,s&lt;br /&gt;
&lt;br /&gt;
	-- Получим позицию актера (что-бы каждый раз не запрашивать)&lt;br /&gt;
	acter_poz = db.actor:position()&lt;br /&gt;
&lt;br /&gt;
	-- Проверяем наши телепорты&lt;br /&gt;
	for i, v in pairs(teleport_binders) do&lt;br /&gt;
		s = v.parametrs&lt;br /&gt;
&lt;br /&gt;
		local obj = level.object_by_id( i )&lt;br /&gt;
		if obj ~= nil then&lt;br /&gt;
		-- Наш телепорт в онлайне проверяем дальше&lt;br /&gt;
			if s.teleporte ~= nil and s.teleporte ~= false then&lt;br /&gt;
				-- Телепорт запущен&lt;br /&gt;
				if ( time_global() &amp;lt;= s.time ) then&lt;br /&gt;
					-- Если время отведенное на показ спецэфектов&lt;br /&gt;
					-- прошло, производим телепортацию&lt;br /&gt;
					teleportate(s.poz_x,s.poz_y,s.poz_z)&lt;br /&gt;
					if s.rotate ~= nil then&lt;br /&gt;
						db.actor:set_actor_direction(s.rotate)&lt;br /&gt;
					end&lt;br /&gt;
					s.teleporte = false&lt;br /&gt;
				end&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Пороверим не забрел-ли актер в наш телепорт&lt;br /&gt;
			if (abs_comp(s.x, acter_poz.x)&amp;lt; v.parametrs.radius  and&lt;br /&gt;
			    abs_comp(s.z, acter_poz.z)&amp;lt; v.parametrs.radius  and&lt;br /&gt;
			    abs_comp(s.y, acter_poz.y)&amp;lt; v.parametrs.z_radius) then&lt;br /&gt;
				-- Актер в зоне действия телепорта, запустим телепорт&lt;br /&gt;
				s[&amp;quot;teleporte&amp;quot;] = true&lt;br /&gt;
				s[&amp;quot;time&amp;quot;] = time_global() + 500&lt;br /&gt;
&lt;br /&gt;
				-- Запускаем спецэфекты телепортации&lt;br /&gt;
				level.add_pp_effector (&amp;quot;teleport.ppe&amp;quot;, 2006, false)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function bind( obj )&lt;br /&gt;
	obj:bind_object( restrictor_teleport( obj ) ) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
class &amp;quot;restrictor_teleport&amp;quot; ( object_binder )&lt;br /&gt;
&lt;br /&gt;
function restrictor_teleport:__init(obj, char_ini) super(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function restrictor_teleport:net_spawn(data)&lt;br /&gt;
	local char_ini = system_ini()&lt;br /&gt;
&lt;br /&gt;
	-- Если это телепорт то занесем его в специальный список телепортов&lt;br /&gt;
	if self.teleport == true then&lt;br /&gt;
		teleport_binders[self.object:id()] = self&lt;br /&gt;
&lt;br /&gt;
		-- Заполним таблицу параметров&lt;br /&gt;
		self[&amp;quot;parametrs&amp;quot;] = {}&lt;br /&gt;
		if char_ini:line_exist(self.section, &amp;quot;radius&amp;quot;) then&lt;br /&gt;
			self.parametrs[&amp;quot;radius&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;radius&amp;quot;))&lt;br /&gt;
		else&lt;br /&gt;
			self.parametrs[&amp;quot;radius&amp;quot;] = 2 -- Дефолтный радиус по xy&lt;br /&gt;
		end&lt;br /&gt;
		if char_ini:line_exist(self.section, &amp;quot;z_radius&amp;quot;) then&lt;br /&gt;
			self.parametrs[&amp;quot;z_radius&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;z_radius&amp;quot;))&lt;br /&gt;
		else&lt;br /&gt;
			self.parametrs[&amp;quot;z_radius&amp;quot;] = self.parametrs[&amp;quot;radius&amp;quot;] -- если радиус высоты не задан то задаем равным радиусу xy&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Запомним позицию что-бы каждый раз не считать&lt;br /&gt;
		local s_obj = alife():object(self.object:id())&lt;br /&gt;
		self.parametrs[&amp;quot;x&amp;quot;] = tonumber(s_obj.position.x);&lt;br /&gt;
		self.parametrs[&amp;quot;y&amp;quot;] = tonumber(s_obj.position.y);&lt;br /&gt;
		self.parametrs[&amp;quot;z&amp;quot;] = tonumber(s_obj.position.z);&lt;br /&gt;
&lt;br /&gt;
		-- Запомним координаты куда телепортимся&lt;br /&gt;
		self.parametrs[&amp;quot;poz_x&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;poz_x&amp;quot;))&lt;br /&gt;
		self.parametrs[&amp;quot;poz_y&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;poz_y&amp;quot;))&lt;br /&gt;
		self.parametrs[&amp;quot;poz_z&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;poz_z&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
		if char_ini:line_exist(self.section, &amp;quot;rotate&amp;quot;) then&lt;br /&gt;
			self.parametrs[&amp;quot;rotate&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;rotate&amp;quot;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function restrictor_teleport:net_destroy()&lt;br /&gt;
	-- Удаляем наш телепорт&lt;br /&gt;
	teleport_binders[self.object:id()] = nil&lt;br /&gt;
	self.parametrs = nil&lt;br /&gt;
	object_binder.net_destroy(self)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function restrictor_teleport:reload(section)&lt;br /&gt;
	local char_ini = system_ini()&lt;br /&gt;
&lt;br /&gt;
	self.section = section&lt;br /&gt;
	-- Если это телепорт то &lt;br /&gt;
	if char_ini ~= nil and char_ini:line_exist(self.section, &amp;quot;teleport&amp;quot;) then&lt;br /&gt;
		self[&amp;quot;teleport&amp;quot;] = true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для постоянного обновления нужно прицепить функцию actor_update() к биндеру актера, для чего в файле '''bind_stalker.script''' найдем функцию:&lt;br /&gt;
&lt;br /&gt;
''function actor_binder:update(delta)''&lt;br /&gt;
&lt;br /&gt;
В ней найдем вызов обновления рестрикторов&lt;br /&gt;
		''bind_restrictor.actor_update(delta)''&lt;br /&gt;
под которым вставим строку с вызовом нашей функции обновления:&lt;br /&gt;
		''bind_mteleport.actor_update(delta)''&lt;br /&gt;
&lt;br /&gt;
Все с программной частью закончили, теперь задаем данные телепорта.&lt;br /&gt;
&lt;br /&gt;
В каталоге ''gamedata\config\misc'' открываем файл '''zone_teleport.ltx''' и в конце файла добавляем следующие строки описывающие конкретный телепорт:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[m_teleport_1]:zone_teleport&lt;br /&gt;
teleport			= standart&lt;br /&gt;
script_binding          	= bind_mteleport.bind&lt;br /&gt;
;Параметры нашего телепорта&lt;br /&gt;
radius				= 2&lt;br /&gt;
;Высота захвата телепорта&lt;br /&gt;
z_radius			= 2&lt;br /&gt;
&lt;br /&gt;
;Куда телепортируемся (телепортация всегда идет в пределах карты)&lt;br /&gt;
poz_x				= 22.78&lt;br /&gt;
poz_y				= 20.35&lt;br /&gt;
poz_z				= 659.24&lt;br /&gt;
&lt;br /&gt;
; Угол зрения при появлении. Если параметра нет то не меняется.&lt;br /&gt;
rotate = 1.5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры нашего телепорта:&lt;br /&gt;
&lt;br /&gt;
* radius - на самом деле не радиус, а половина длинны стороны нашего квадрата (в начале я хотел сделать его кругом, но посчитал, что лучше не тратить процессорное врямя по пусту). Центром квадрата является точка респавна телепорта.&lt;br /&gt;
&lt;br /&gt;
* z_radius - высота нашего телепорта.&lt;br /&gt;
&lt;br /&gt;
* poz_x, poz_y, poz_z - координаты точки телепортации.&lt;br /&gt;
&lt;br /&gt;
* rotate - Угол поворота после телепортации от оси X (я не разбирался в каких единицах задается, но 1.5 примерно равно 90 градусов). Если параметр удалить то будет оставатья угол под которым актер вошел в телепорт.&lt;br /&gt;
&lt;br /&gt;
=== Использование ===&lt;br /&gt;
Теперь с помощью create создадим наш телепорт:&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	local obj&lt;br /&gt;
	local a = vector()&lt;br /&gt;
	a.x = -244.55&lt;br /&gt;
	a.y = -19.46&lt;br /&gt;
	a.z = -125.42&lt;br /&gt;
	obj = alife():create(&amp;quot;m_teleport_1&amp;quot;,a,12829,8,65535)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаст телепорт возле выхода из бункера Сидоровича.&lt;br /&gt;
Наш телепорт перебрасывает игрока на вышку блокпоста (перед выходом с уровня).&lt;br /&gt;
&lt;br /&gt;
Все! Вот [http://www.imp.webhost.ru/stalker/ тут] вы можете взять готовый мод с двумя телепортами.&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:Imp|Imp]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</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%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F</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%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F"/>
				<updated>2008-01-22T17:12:48Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой статье мы научимся создавать новые образцы вооружения. Для начала, мы будем использовать модели из оригинальной игры. Если вы хотите создать оружие, имеющее уникальный внешний вид, ознакомьтесь с [[Создание моделей и их добавление в игру|уроком]] по созданию моделей.&lt;br /&gt;
&lt;br /&gt;
Добавим в игру '''АК101'''.&lt;br /&gt;
&lt;br /&gt;
==Внешний вид==&lt;br /&gt;
&lt;br /&gt;
Позаботимся о том, чтобы наше оружие отличалось внешне от того же '''АК74'''.&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
&lt;br /&gt;
Нарисуем для оружия новую текстуру. Подробно останавливаться на этом процессе не буду, ознакомьтесь с примером, приведенным [[Изменение текстур#Изменение текстур моделей|здесь]]. Итак, основываясь на текстуре '''АК74''', мы сделали вот такую текстуру:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:AK101_texture.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Файлы текстур мы назвали:&lt;br /&gt;
&lt;br /&gt;
* '''wpn_ak10.dds'''&lt;br /&gt;
* '''wpn_ak10_bump#.dds'''&lt;br /&gt;
* '''wpn_ak10_bump.dds'''&lt;br /&gt;
&lt;br /&gt;
===Модели===&lt;br /&gt;
&lt;br /&gt;
Новых моделей мы пока делать не станем, просто воспользуемся дублированными моделями от '''АК74'''. Скопируем папку:&lt;br /&gt;
&lt;br /&gt;
'''gamedata\meshes\weapons\ak47\''' &lt;br /&gt;
&lt;br /&gt;
И назовем её '''ak-101'''. Содержимое, соответственно, переименуем в:&lt;br /&gt;
&lt;br /&gt;
* '''wpn_ak101.ogf'''&lt;br /&gt;
* '''wpn_ak101_hud.ogf'''.&lt;br /&gt;
&lt;br /&gt;
Теперь пропишем в эти модели созданные нами текстуры. Способ описан [[Изменение текстур#Создание новых visual для использования с новыми объектами|здесь]]'''.&lt;br /&gt;
&lt;br /&gt;
===Иконки===&lt;br /&gt;
&lt;br /&gt;
Добавим в игру иконки, которыми оружие будет отображаться в инвентаре. Способ подробно описан [[Изменение текстур#Изменение иконок предметов|здесь]].&lt;br /&gt;
&lt;br /&gt;
Вот, что получилось в конечном итоге:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:AK101 icon.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
==Конфиги==&lt;br /&gt;
&lt;br /&gt;
Новое оружие мы будем делать на базе оригинальных конфигурационных файлов. Создадим '''АК101''' на базе конфигов '''АК74'''. &lt;br /&gt;
&lt;br /&gt;
===Свойства оружия===&lt;br /&gt;
&lt;br /&gt;
Скопируем файл из папки:&lt;br /&gt;
&lt;br /&gt;
'''gamedata\config\ak74.ltx'''&lt;br /&gt;
&lt;br /&gt;
Назовем его '''ak101.ltx'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Отредактируем свойства по своему усмотрению (но лучше - в соответствии с достоверной информацией о характеристиках оружия, т.к. '''АК101''' - всё-таки оружие реально существующее). Редактирование конфигов оружия подробно описано в отдельном [[Редактирование оружия|уроке]]. В данном случае конфиг был составлен таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
[wpn_ak101]:identity_immunities&lt;br /&gt;
GroupControlSection		= spawn_group&lt;br /&gt;
discovery_dependency	= &lt;br /&gt;
$spawn              	= &amp;quot;weapons\ak-101&amp;quot;	; name and section in level editor&lt;br /&gt;
$npc					= on				&lt;br /&gt;
$prefetch 				= 8&lt;br /&gt;
scheduled				= off               ;[] option for ALife Simulator&lt;br /&gt;
cform               	= skeleton&lt;br /&gt;
class               	= WP_AK74			; class of the weapon that corresponding to CPP class&lt;br /&gt;
min_radius          	= 30				; [] for AI&lt;br /&gt;
max_radius          	= 100				; [] for AI&lt;br /&gt;
description				= enc_weapons1_wpn-ak101&lt;br /&gt;
	&lt;br /&gt;
ef_main_weapon_type		= 2&lt;br /&gt;
ef_weapon_type			= 6&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------------------&lt;br /&gt;
holder_range_modifier	= 1.0		       ; во сколько раз увеличивается eye_range &lt;br /&gt;
holder_fov_modifier		= 0.7              ; во сколько раз увеличивается eye_fov&lt;br /&gt;
;-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cost					= 2;4000				&lt;br /&gt;
weapon_class			= assault_rifle		&lt;br /&gt;
	&lt;br /&gt;
ammo_limit				= 210				&lt;br /&gt;
ammo_elapsed			= 30				&lt;br /&gt;
	&lt;br /&gt;
ammo_mag_size			= 30				&lt;br /&gt;
fire_modes				= 1, -1&lt;br /&gt;
&lt;br /&gt;
ammo_class				= ammo_5.56x45_ss190, ammo_5.56x45_ap	  &lt;br /&gt;
grenade_class			= ammo_vog-25, ammo_vog-25p			&lt;br /&gt;
launch_speed			= 0&lt;br /&gt;
&lt;br /&gt;
hand_dependence			= 1									&lt;br /&gt;
single_handed			= 0&lt;br /&gt;
	&lt;br /&gt;
slot 					= 2									&lt;br /&gt;
animation_slot			= 2									&lt;br /&gt;
inv_name	        	= wpn-ak101								&lt;br /&gt;
inv_name_short			= wpn-ak101&lt;br /&gt;
inv_weight			= 3.3								&lt;br /&gt;
&lt;br /&gt;
inv_grid_width			= 5	 &lt;br /&gt;
inv_grid_height			= 2	    &lt;br /&gt;
inv_grid_x				= 11  &lt;br /&gt;
inv_grid_y				= 29&lt;br /&gt;
&lt;br /&gt;
kill_msg_x			= 0&lt;br /&gt;
kill_msg_y			= 28&lt;br /&gt;
kill_msg_width		= 84&lt;br /&gt;
kill_msg_height		= 28&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------------------&lt;br /&gt;
;params of weapon recoil&lt;br /&gt;
&lt;br /&gt;
fire_dispersion_base			= 0.15;0.2		&lt;br /&gt;
control_inertion_factor			= 1.1f;1.25f&lt;br /&gt;
&lt;br /&gt;
;отдача&lt;br /&gt;
cam_relax_speed         		=6;5;3.5; 0.15		&lt;br /&gt;
cam_dispersion          		= 0.1;0.15		&lt;br /&gt;
cam_dispersion_inc			= 0.2;0.3		&lt;br /&gt;
cam_dispertion_frac			= 0.8;0.9		&lt;br /&gt;
cam_max_angle				= 10.0	    	&lt;br /&gt;
cam_max_angle_horz			= 20.0		&lt;br /&gt;
cam_step_angle_horz			= 1.1;1		&lt;br /&gt;
&lt;br /&gt;
fire_dispersion_condition_factor 	= 5.7;5	    	 &lt;br /&gt;
misfire_probability 		= 0.0055;0.003	 &lt;br /&gt;
misfire_condition_k			= 0.06;0.05&lt;br /&gt;
condition_shot_dec 			= 0.00035;0.0001	&lt;br /&gt;
;-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
fire_point             		=  0,0.216,0.638			 &lt;br /&gt;
fire_point2            		=  0,0.216,0.730			&lt;br /&gt;
&lt;br /&gt;
flame_particles				= weapons\generic_weapon05	&lt;br /&gt;
smoke_particles				= weapons\generic_shoot_00&lt;br /&gt;
grenade_flame_particles		= weapons\generic_weapon01&lt;br /&gt;
	&lt;br /&gt;
shell_point		 			= 0,0.216,0.174				&lt;br /&gt;
shell_particles	 			= weapons\generic_shells	&lt;br /&gt;
&lt;br /&gt;
PDM_disp_base 				= 1.0&lt;br /&gt;
PDM_disp_vel_factor 		= 1.3&lt;br /&gt;
PDM_disp_accel_factor 		= 1.3&lt;br /&gt;
PDM_crouch	 				= 1.0&lt;br /&gt;
PDM_crouch_no_acc 			= 1.0&lt;br /&gt;
&lt;br /&gt;
; ttc&lt;br /&gt;
hit_power                	= 0.36, 0.4, 0.43, 0.46		&lt;br /&gt;
hit_impulse		 			= 140			&lt;br /&gt;
hit_type 					= fire_wound 	&lt;br /&gt;
fire_distance            	= 1700		&lt;br /&gt;
bullet_speed				= 1000		&lt;br /&gt;
rpm                      	= 750		&lt;br /&gt;
&lt;br /&gt;
use_aim_bullet				= true		&lt;br /&gt;
time_to_aim					= 1.0	&lt;br /&gt;
&lt;br /&gt;
;params when silencer is attached &lt;br /&gt;
;similar to corresponding params without prefix silencer_&lt;br /&gt;
&lt;br /&gt;
silencer_hit_power       	= 0.38&lt;br /&gt;
silencer_hit_impulse	 	= 120&lt;br /&gt;
silencer_fire_distance   	= 250&lt;br /&gt;
silencer_bullet_speed	 	= 600&lt;br /&gt;
&lt;br /&gt;
hud                      	= wpn_ak101_hud				&lt;br /&gt;
&lt;br /&gt;
position         	        = -0.026,-0.172,0			&lt;br /&gt;
orientation      	        = 0,0,0						&lt;br /&gt;
&lt;br /&gt;
;--STRAP PARAMETERS-----------------------------------------------------------------&lt;br /&gt;
strap_position         		= -0.16,-0.40,0.15			&lt;br /&gt;
strap_orientation      		= -10,-5,10					&lt;br /&gt;
strap_bone0					= bip01_spine2&lt;br /&gt;
strap_bone1					= bip01_spine1&lt;br /&gt;
&lt;br /&gt;
visual         		        = weapons\ak-101\wpn_ak101		&lt;br /&gt;
&lt;br /&gt;
light_color					= 0.6,0.5,0.3				&lt;br /&gt;
light_range					= 5							&lt;br /&gt;
light_var_color				= 0.05						&lt;br /&gt;
light_var_range				= 0.5&lt;br /&gt;
light_time 					= 0.2						&lt;br /&gt;
&lt;br /&gt;
ph_mass						= 5							&lt;br /&gt;
&lt;br /&gt;
;addons&lt;br /&gt;
scope_status				= 2							&lt;br /&gt;
silencer_status				= 2							&lt;br /&gt;
grenade_launcher_status		= 0;2							&lt;br /&gt;
&lt;br /&gt;
zoom_enabled				= true						&lt;br /&gt;
scope_zoom_factor	    	= 50						&lt;br /&gt;
&lt;br /&gt;
scope_name 					= wpn_addon_scope			&lt;br /&gt;
scope_x 					= 42						&lt;br /&gt;
scope_y 					= 3&lt;br /&gt;
silencer_name  				= wpn_addon_silencer		&lt;br /&gt;
silencer_x 					= 218						&lt;br /&gt;
silencer_y 					= 13					&lt;br /&gt;
grenade_launcher_name 		= wpn_addon_grenade_launcher&lt;br /&gt;
grenade_launcher_x 			= 116						&lt;br /&gt;
grenade_launcher_y 			= 23&lt;br /&gt;
&lt;br /&gt;
;sounds (name of the sound, volume (0.0 - 1.0), delay (sec))&lt;br /&gt;
snd_draw					= weapons\ak74_draw&lt;br /&gt;
snd_holster					= weapons\generic_holster&lt;br /&gt;
snd_shoot					= weapons\ak74_shot_0&lt;br /&gt;
snd_shoot1					= weapons\ak74_shot_1&lt;br /&gt;
snd_shoot2					= weapons\ak74_shot_2&lt;br /&gt;
snd_shoot3					= weapons\ak74_shot_3		&lt;br /&gt;
snd_empty					= weapons\gen_empty, 0.5&lt;br /&gt;
snd_reload					= weapons\ak74_reload, 0.7, 0.35&lt;br /&gt;
snd_shoot_grenade			= weapons\gen_grenshoot&lt;br /&gt;
snd_reload_grenade			= weapons\gen_grenload, 1.0, 0.8&lt;br /&gt;
snd_switch					= weapons\groza_switch, 1.0, 0.5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;params when silencer is attached &lt;br /&gt;
;similar to corresponding params without prefix silencer_&lt;br /&gt;
&lt;br /&gt;
;silencer_flame_particles 	= weapons\generic_weapon01&lt;br /&gt;
silencer_smoke_particles 	= weapons\generic_shoot_00&lt;br /&gt;
&lt;br /&gt;
snd_silncer_shot			= weapons\w_ak74_shot1 &lt;br /&gt;
&lt;br /&gt;
silencer_light_color		= 0.6,0.5,0.3&lt;br /&gt;
silencer_light_range		= 0.01&lt;br /&gt;
silencer_light_var_color	= 0.05&lt;br /&gt;
silencer_light_var_range	= 0.5&lt;br /&gt;
silencer_light_time 		= 0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
;-- HUD DESCRIPTION&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
[wpn_ak101_hud]&lt;br /&gt;
allow_inertion				= true&lt;br /&gt;
&lt;br /&gt;
;similar to corresponding params in weapon section but for 1st person view&lt;br /&gt;
&lt;br /&gt;
shell_point					= -0.065000,0.000000,-0.045000&lt;br /&gt;
shell_dir			     	= 0.0, 1.0, 0.0&lt;br /&gt;
&lt;br /&gt;
fire_point               	= 0.09,0.020,-0.06&lt;br /&gt;
fire_point2              	= 0.30, 0.00, 0.05&lt;br /&gt;
fire_bone               	= wpn_body&lt;br /&gt;
&lt;br /&gt;
orientation             	= 0, 0, 0		&lt;br /&gt;
position                	= 0, 0, 0.05&lt;br /&gt;
visual                  	= weapons\ak-101\wpn_ak101_hud&lt;br /&gt;
&lt;br /&gt;
grenade_bone            	= wpn_grenade	&lt;br /&gt;
&lt;br /&gt;
; animation names&lt;br /&gt;
&lt;br /&gt;
anim_idle					= idle&lt;br /&gt;
anim_idle_aim				= idle_aim&lt;br /&gt;
anim_reload					= reload&lt;br /&gt;
anim_draw					= draw_wo_gl&lt;br /&gt;
anim_holster				= holster_wo_gl&lt;br /&gt;
anim_shoot					= shoot&lt;br /&gt;
			&lt;br /&gt;
; animation names&lt;br /&gt;
; attached grenade launcher [GRENADE fire mode]&lt;br /&gt;
anim_idle_g					= idle_grenade&lt;br /&gt;
anim_idle_g_aim				= idle_g_aim&lt;br /&gt;
anim_reload_g				= reload_grenade&lt;br /&gt;
anim_shoot_g				= shoot_grenade&lt;br /&gt;
anim_switch_grenade_on		= switch_grenade&lt;br /&gt;
anim_switch_grenade_off		= switch_grenade_off&lt;br /&gt;
anim_draw_g					= draw_grenade_mode&lt;br /&gt;
anim_holster_g				= holster_grenade_mode&lt;br /&gt;
&lt;br /&gt;
; attached grenade launcher [NORMAL fire mode]&lt;br /&gt;
anim_idle_gl				= idle_w_gl&lt;br /&gt;
anim_idle_gl_aim			= idle_w_gl_aim&lt;br /&gt;
anim_reload_gl				= reload_w_gl&lt;br /&gt;
anim_draw_gl				= draw_w_gl&lt;br /&gt;
anim_holster_gl				= holster_w_gl&lt;br /&gt;
anim_shoot_gl				= shoot_w_gl&lt;br /&gt;
anim_idle_sprint			= idle_sprint&lt;br /&gt;
&lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
;HUD offset in zoom mode (to all)&lt;br /&gt;
;(use CONSOLE: hud_adjust_mode 0,1,2, then keys WSADQE and P to show current value in console)&lt;br /&gt;
&lt;br /&gt;
zoom_offset			= -0.112400,0.016800,-0.115000&lt;br /&gt;
zoom_rotate_x		= 0.000200&lt;br /&gt;
zoom_rotate_y		= 0.017500&lt;br /&gt;
&lt;br /&gt;
zoom_hide_crosshair	= true						&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; same as above, but for attached grenade launcher for&lt;br /&gt;
; in NORMAL shoot mode&lt;br /&gt;
&lt;br /&gt;
grenade_normal_zoom_offset			= -0.112500,0.014000,0.000000&lt;br /&gt;
grenade_normal_zoom_rotate_x		= -0.000900&lt;br /&gt;
grenade_normal_zoom_rotate_y		= 0.017200&lt;br /&gt;
&lt;br /&gt;
; same as above, but for attached grenade launcher for&lt;br /&gt;
; in GRENADE mode&lt;br /&gt;
&lt;br /&gt;
grenade_zoom_offset			= -0.039600,-0.433100,0.000000&lt;br /&gt;
grenade_zoom_rotate_x		= -0.538700&lt;br /&gt;
grenade_zoom_rotate_y		= -0.033800&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Регистрация===&lt;br /&gt;
&lt;br /&gt;
Итак, с характеристиками разобрались. Теперь зарегистрируем оружие в файле '''weapons.ltx'''. Для этого пропишем в него строку следующего вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;quot;w_ak101.ltx&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также, необходимо прописать модели, используемые для отображения оружия, в '''prefetch.ltx''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[...]&lt;br /&gt;
weapons\abakan\wpn_abakan&lt;br /&gt;
weapons\abakan\wpn_abakan_hud&lt;br /&gt;
weapons\ak-101\wpn_ak101&lt;br /&gt;
weapons\ak-101\wpn_ak101_hud&lt;br /&gt;
weapons\ak74\wpn_ak74&lt;br /&gt;
weapons\ak74\wpn_ak74_hud&lt;br /&gt;
[...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так же не забудте в файле '''mp_ranks.ltx''' прописать после '''available_items''' (которое внизу)&lt;br /&gt;
прописать название своего оружия. Это предотвратит вылет при убийстве ГГ.&lt;br /&gt;
&lt;br /&gt;
==Добавление в игру==&lt;br /&gt;
&lt;br /&gt;
Осталось добавить оружие в игру. &lt;br /&gt;
&lt;br /&gt;
Выдайте его некоторым NPC ([[Редактирование NPC#Практика|как это сделать?]]), расширьте ассортимент торговцев ([[Редактирование торговцев#Расширяем ассортимент|как это сделать?]]).&lt;br /&gt;
&lt;br /&gt;
А вот как оно будет выглядеть в игре:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Russian_Guns_3.jpeg]]&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
&lt;br /&gt;
Статья создана: &lt;br /&gt;
*[[Участник:BAC9-FLCL|BAC9-FLCL]]&lt;br /&gt;
&lt;br /&gt;
По материалам мода [[Mod:Russian Guns|Russian Guns]] за авторством: &lt;br /&gt;
*[[Участник:Tony|Tony]]&lt;br /&gt;
*[[Участник:lez0|lez0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=DCT:%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B0%D0%BD%D0%BE%D0%BC%D0%B0%D0%BB%D0%B8%D0%B9_%D0%B8_%D0%BA%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B2</id>
		<title>DCT:Добавление аномалий и костров</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=DCT:%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B0%D0%BD%D0%BE%D0%BC%D0%B0%D0%BB%D0%B8%D0%B9_%D0%B8_%D0%BA%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B2"/>
				<updated>2008-01-22T17:10:26Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Добавление аномалий==&lt;br /&gt;
===Первый способ===&lt;br /&gt;
*Edit Mode -&amp;gt; Group -&amp;gt;Select&lt;br /&gt;
*Выбираем необходимую аномалию.&lt;br /&gt;
[[image:Docs_leveleditor_zone_addanomalygroup.jpg|Выбор группы из библиотеки|center|frame|Выбор группы из библиотеки]]&lt;br /&gt;
* Жмём Add и добавляем в сцену.&lt;br /&gt;
[[image:Docs_leveleditor_zone_addanomalytoscene.jpg|Добавление группы в сцену|center|frame|Добавление группы в сцену]]&lt;br /&gt;
&lt;br /&gt;
===Второй способ===&lt;br /&gt;
*Добавляем Spawn элемент аномалии&lt;br /&gt;
[[image:Docs_leveleditor_zone_addspawn.jpg|Spawn элемент аномалии Gravi|center|frame|Spawn элемент аномалии Gravi]]&lt;br /&gt;
*Переименовываем аномалию&lt;br /&gt;
[[image:Docs_leveleditor_zone_renamespawn.jpg|Переименовываем аномалию на gravi_zone_average_1|center|frame|Переименовываем аномалию на gravi_zone_average_1]]&lt;br /&gt;
*Для определения области поражения аномалии используются Shape элементы&lt;br /&gt;
[[image:Docs_leveleditor_zone_addshape.jpg|Создания shape'а аномалии|center|frame|Создания shape'а аномалии]]&lt;br /&gt;
*Выбираем нашу аномалию gravi_zone_average_1 в сцене и соединяем её с Shape элементом&lt;br /&gt;
[[image:Docs_leveleditor_zone_spawnconnect.jpg|Присоединяем аномалию к shape'у|center|frame|Присоединяем аномалию к shape'у]]&lt;br /&gt;
&lt;br /&gt;
==Добавление костров==&lt;br /&gt;
*Выбираем группу костра&lt;br /&gt;
[[image:Docs_leveleditor_zone_addcampfire.jpg|Выбор группы из библиотеки|center|frame|Выбор группы из библиотеки]]&lt;br /&gt;
* Жмём Add и добавляем в сцену.&lt;br /&gt;
[[image:Docs_leveleditor_zone_addcampfiretoscene.jpg|Добавление группы в сцену|center|frame|Добавление группы в сцену]]&lt;br /&gt;
&lt;br /&gt;
==Вносим костры и аномалии в список зон карты==&lt;br /&gt;
*Открываем группы&lt;br /&gt;
[[image:Docs_leveleditor_zone_opengroup.jpg|Открываем группу костра|center|frame|Открываем группу костра]]&lt;br /&gt;
*Находим в Object List'е зону нашего костра&lt;br /&gt;
[[image:Docs_leveleditor_zone_objectlist.jpg|Зона нашего костра - zone_flame_small_0001|center|frame|Зона нашего костра - zone_flame_small_0001]]&lt;br /&gt;
*Вносим аномалию gravi_zone_average_1 и зону костра zone_flame_small_0001 в список зон карты&lt;br /&gt;
[[image:Docs_leveleditor_zone_customdata.jpg|Редактирование custom data карты|center|frame|Редактирование custom data карты]]&lt;br /&gt;
Список зон уникален для каждого типа сетевой игры &amp;lt;code&amp;gt;[deathmatch_game_anomaly_sets]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[teamdeathmatch_game_anomaly_sets]&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;[artefacthunt_game_anomaly_sets]&amp;lt;/code&amp;gt; соответственно.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[deathmatch_game_anomaly_sets]&lt;br /&gt;
permanent = &amp;lt;имя_зоны_1&amp;gt;, &amp;lt;имя_зоны_2&amp;gt;, …&lt;br /&gt;
set0 = &amp;lt;имя_зоны_3&amp;gt;, …&lt;br /&gt;
set1 = &amp;lt;имя_зоны_4&amp;gt;, …&lt;br /&gt;
set2 = &amp;lt;имя_зоны_5&amp;gt;, …&lt;br /&gt;
…&lt;br /&gt;
setn = &amp;lt;имя_зоны_n&amp;gt;, …&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В разделе '''permanent''' описываются зоны которые будут работать постоянно.&lt;br /&gt;
Разделы '''set0''', '''set1''', '''set2''', ..., '''setn''' включаются поочерёдно.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=Maya._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%86%D0%B5%D0%BD%D1%8B</id>
		<title>Maya. Создание сцены</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=Maya._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%86%D0%B5%D0%BD%D1%8B"/>
				<updated>2008-01-22T17:09:47Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Моделинг==&lt;br /&gt;
*Вся геометрия должна быть создана в реальных мировых размерах (если стол в реальной жизни высотой 1 метр, значит его надо и в Maya делать высотой 1 метр, всё предельно ясно и просто)&lt;br /&gt;
*Bounding box персонажа имеет три состояния: стоя &amp;lt;code&amp;gt;(1.8х0.7х0.7 в метрах)&amp;lt;/code&amp;gt;, сидя &amp;lt;code&amp;gt;(1.5х0.7х0.7 в метрах)&amp;lt;/code&amp;gt; и очень сидя &amp;lt;code&amp;gt;(1.2х0.7х0.7 в метрах)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Весь уровень должен быть не больше &amp;lt;code&amp;gt;150 тысяч треугольников&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[image: Docs_maya_outliner.jpg|outliner screenshot|center|frame|outliner screenshot]]&lt;br /&gt;
*Сцена должна состоять из групп. Название группы формируется по такому принципу: '''mp_имяуровня_назвгеометрии'''. Например, в нашей тестовой сцене такие группы: &amp;lt;code&amp;gt;mp_atp_terrain&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mp_atp_buildings&amp;lt;/code&amp;gt;. В группе может находится как и один объект, так и несколько. Имена объектов внутри группы никоем образом не должны совпадать с именем группы. &amp;lt;br /&amp;gt;&lt;br /&gt;
'''В переделах одной группы все имена должны быть уникальны'''.&lt;br /&gt;
[[image: Docs_maya_mp_atp_terrain.jpg|mp_atp_terrain - игровой ландшафт|center|frame|mp_atp_terrain - игровой ландшафт]]&lt;br /&gt;
[[image: Docs_maya_mp_atp_buildings.jpg|mp_atp_buildings - игровая геометрия|center|frame|mp_atp_buildings - игровая геометрия]]&lt;br /&gt;
*Шейп объекта должен содержать правильное имя. Формируется по такому принципу: объект - &amp;lt;code&amp;gt;имя_объекта&amp;lt;/code&amp;gt;, шейп - &amp;lt;code&amp;gt;имя_объектаShape&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[image: Docs_maya_objectname.jpg|Имена объектов в Maya|center|frame|Имена объектов в Maya]]&lt;br /&gt;
==Текстурирование==&lt;br /&gt;
===General issues===&lt;br /&gt;
X-ray шейдер, кроме текстуры использует надстройку состоящую из трёх частей - Engine, Compiler, Material.&lt;br /&gt;
*Engine - отображение текстуры в движке игры.&lt;br /&gt;
*Compiler - используется при компиляции уровня.&lt;br /&gt;
*Material - игровой материал (wallmark, sound и др.).&lt;br /&gt;
[[image:Docs_maya_xray_shaders.jpg|список доступных шейдеров|center|frame|список доступных шейдеров]]&lt;br /&gt;
===Описание шейдеров===&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; width=&amp;quot;550&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;border-collapse:collapse; border-color:#ccc;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot; | Engine&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#eaf1dd;&amp;quot; | Шейдера для статических объектов&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;150&amp;quot; | default&lt;br /&gt;
|Основной lightmap shader.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#f9f9f9;&amp;quot;| def_vertex&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Основной vertex shader.&lt;br /&gt;
|-&lt;br /&gt;
| def_aref&lt;br /&gt;
|Прозрачность. alpha test - aref (без градиентов).&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| def_trans&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Прозрачность. alpha test - trans (с градиентами).&lt;br /&gt;
|-&lt;br /&gt;
| selflight&lt;br /&gt;
|Самосветящийся материал.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#eaf1dd;&amp;quot; | Шейдера для динамических объектов&lt;br /&gt;
|-&lt;br /&gt;
| models/model&lt;br /&gt;
|Основной шейдер.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| models/antigas_glass&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Шейдер с отражением CubeMap - 1 вариант.&lt;br /&gt;
|-&lt;br /&gt;
| models/artefact&lt;br /&gt;
|Шейдер с отражением CubeMap - 2 вариант.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| models/artefact2&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Шейдер с отражением CubeMap - 3 вариант.&lt;br /&gt;
|-&lt;br /&gt;
| models/model_fur&lt;br /&gt;
|Прозрачность. alpha test - aref (без градиентов).&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| models/lightplanes&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Самосветящийся материал с прозрач. и с эффектом falloff.&lt;br /&gt;
|-&lt;br /&gt;
| models/model_aref&lt;br /&gt;
|Прозрачность. alpha test - trans (с градиентами).&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| models/pautina&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал с прозрачностью и с эффектом falloff.&lt;br /&gt;
|-&lt;br /&gt;
| models/selflight&lt;br /&gt;
|Основной самосветящийся материал.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| models/selflightl&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Самосветящийся материал с меньшей интенсивностью.&lt;br /&gt;
|-&lt;br /&gt;
| models/transparent&lt;br /&gt;
|Прозрачность.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| models/weapons&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Шейдер с отражением CubeMap - 4 вариант.&lt;br /&gt;
|-&lt;br /&gt;
| models/window&lt;br /&gt;
|Полупрозрачный шейдер с отражением CubeMap.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| effects/water&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Шейдер чистой воды.&lt;br /&gt;
|-&lt;br /&gt;
| effects/waterstuden&lt;br /&gt;
|Шейдер болота.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| effects/waterryaska&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Шейдер ряски.&lt;br /&gt;
|-&lt;br /&gt;
| terrain/asfalt&lt;br /&gt;
|Шейдер terrain, асфальт.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| terrain/grass&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Шейдер terrain, трава.&lt;br /&gt;
|-&lt;br /&gt;
| terrain/sand&lt;br /&gt;
|Шейдер terrain, земля.&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot; | Compiler&lt;br /&gt;
|-&lt;br /&gt;
| default&lt;br /&gt;
|Основной lightmap shader.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| def_vertex&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Основной vertex shader.&lt;br /&gt;
|-&lt;br /&gt;
| def_ghost&lt;br /&gt;
|Lightmap shader без collision.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| def_kolizion_vertex&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Специальный шейдер невидимой геометрии.&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot; | Material&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#eaf1dd;&amp;quot; | Игровые шейдера для статических объектов&lt;br /&gt;
|-&lt;br /&gt;
| default&lt;br /&gt;
|Основной материал.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/asphalt&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал асфальта.&lt;br /&gt;
|-&lt;br /&gt;
| material/bricks&lt;br /&gt;
|Материал кирпичной кладки.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/bush&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал куста.&lt;br /&gt;
|-&lt;br /&gt;
| material/cloth&lt;br /&gt;
|Материал ткани.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/concrete&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал бетона.&lt;br /&gt;
|-&lt;br /&gt;
| material/death&lt;br /&gt;
|Материал убивающий персонажа.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/dirt&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал вязкой грязи.&lt;br /&gt;
|-&lt;br /&gt;
| material/earth&lt;br /&gt;
|Материал земли.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/fake&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Невидимый материал ограничивающий перемещение.&lt;br /&gt;
|-&lt;br /&gt;
| material/fake_ladders&lt;br /&gt;
|Невидимая плоскость лестницы.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/flooring_tile&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал кафельной плитки.&lt;br /&gt;
|-&lt;br /&gt;
| material/glass&lt;br /&gt;
|Материал стекла.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/grass&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал травы (используется на текстуре terrain).&lt;br /&gt;
|-&lt;br /&gt;
| material/gravel&lt;br /&gt;
|Материал гравия.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/metal&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал массивного, непробиваемого металла.&lt;br /&gt;
|-&lt;br /&gt;
| material/metall_pipe&lt;br /&gt;
|Материал металлической трубы.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/metal_plate&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал листового, пробиваемого металла.&lt;br /&gt;
|-&lt;br /&gt;
| material/sand&lt;br /&gt;
|Материал песка.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/setka_rabica&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал металлической сетки.&lt;br /&gt;
|-&lt;br /&gt;
| material/shifer&lt;br /&gt;
|Материал шифера и толи.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/stucco&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал штукатурка.&lt;br /&gt;
|-&lt;br /&gt;
| material/tin&lt;br /&gt;
|Материал жестянки.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/tree_trunk&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал ствола дерева.&lt;br /&gt;
|-&lt;br /&gt;
| material/water&lt;br /&gt;
|Материал воды.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/wood&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал толстого деревянного изделия.&lt;br /&gt;
|-&lt;br /&gt;
| material/wooden_board&lt;br /&gt;
|Материал деревянных досок.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#eaf1dd;&amp;quot; | Игровые шейдера для динамических объектов&lt;br /&gt;
|-&lt;br /&gt;
| default_object&lt;br /&gt;
|Основной материал.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/barrel&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал бочки.&lt;br /&gt;
|-&lt;br /&gt;
| objects/bottle&lt;br /&gt;
|Материал маленького стекла.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/bullet&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал пули.&lt;br /&gt;
|-&lt;br /&gt;
| objects/car_cabine&lt;br /&gt;
|Материал кабины автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/car_wheel&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал шин автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| objects/clothes&lt;br /&gt;
|Материал ткани.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/concrete_box&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал бетона.&lt;br /&gt;
|-&lt;br /&gt;
| objects/dead_body&lt;br /&gt;
|Материал мёртвого тела.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/fuel_can&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал канистры с топливом.&lt;br /&gt;
|-&lt;br /&gt;
| objects/glass&lt;br /&gt;
|Материал стекла.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/knife&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал ножа.&lt;br /&gt;
|-&lt;br /&gt;
| objects/large_furnitura&lt;br /&gt;
|Материал деревянных изделий.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/large_metal_trash&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал массивного металла.&lt;br /&gt;
|-&lt;br /&gt;
| objects/large_weapon&lt;br /&gt;
|Материал автоматов.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/metal_box&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал листового металла.&lt;br /&gt;
|-&lt;br /&gt;
| objects/monster_body&lt;br /&gt;
|Материал мертвых монстров.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/small_box&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал маленьких металлических объектов.&lt;br /&gt;
|-&lt;br /&gt;
| objects/small_metal_trash&lt;br /&gt;
|Материал маленького металлического мусора.&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| objects/small_weapon&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Материал пистолетов.&lt;br /&gt;
|-&lt;br /&gt;
| objects/tin_can&lt;br /&gt;
|Материал жестянки.&lt;br /&gt;
|}&lt;br /&gt;
[[image:Docs_maya_xray_sahder.jpg|X-ray shader в Maya|center|frame|X-ray shader в Maya]]&lt;br /&gt;
&lt;br /&gt;
===X-Ray Shader Presets для статических объектов===&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;400&amp;quot; style=&amp;quot;border-collapse:collapse; border-color:#ccc;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Terrain Grass&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;150&amp;quot;|Double side&lt;br /&gt;
|no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|levels/mp_atp_grass&lt;br /&gt;
|-&lt;br /&gt;
|Compiler&lt;br /&gt;
|default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/grass&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Terrain Sand&lt;br /&gt;
|-&lt;br /&gt;
|Double side &lt;br /&gt;
| no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine &lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| levels/mp_atp_sand&lt;br /&gt;
|-&lt;br /&gt;
|Compiler &lt;br /&gt;
| default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material &lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;| material/earth&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Terrain Asphalt&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|levels/mp_atp_asfalt&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/asphalt&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Пробиваемый металлический лист&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/metal_plate&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Прозрачная металлическая сетка&lt;br /&gt;
|-&lt;br /&gt;
|Double side||yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|def_aref&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/setka_rabica&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Обычная металлическая поверхность&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/metal&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot; |Деревянные доски&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/wooden_board&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Толстые деревянные изделия&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/wood&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot; |Бетон&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/concrete&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Кирпичная кладка&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/bricks&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Шифер, толь&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/shifer&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Штукатурка&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/stucco&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Земляная насыпь&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|default&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||default&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/earth&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Невидимая плоскость, указывающая лестницу&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|def_vertex&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||def_kolizion_vertex&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/fake_ladders&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Невидимая плоскость, ограждающая проход персонажу&lt;br /&gt;
|-&lt;br /&gt;
|Double side||yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|def_vertex&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||def_kolizion_vertex&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/fake&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Разбиваемое стекло&lt;br /&gt;
|-&lt;br /&gt;
|Double side||yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|models/window&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||def_vertex&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|objects/glass&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#dbe5f1;&amp;quot;|Вода&lt;br /&gt;
|-&lt;br /&gt;
|Double side||no&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Engine||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|effects/water&lt;br /&gt;
|-&lt;br /&gt;
|Compiler||def_vertex&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#f9f9f9;&amp;quot;|Material||style=&amp;quot;background-color:#f9f9f9;&amp;quot;|material/water&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Simple Shader Setup===&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;flash&amp;gt;file=movie_02.swf|width=800|height=620|quality=medium|menu=false&amp;lt;/flash&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Экспортим геометрию из Maya==&lt;br /&gt;
Для ознакомления с процессом экспорта просмотрите ролик [[Docs:Создание мультиплеерной карты#Импортим в библиотеку LevelEditor'a.|здесь]]&lt;br /&gt;
&lt;br /&gt;
В случае если xrayMaya_export не экспортит объекты, то проведите проверку на наличие ошибок, и исправьте их.&lt;br /&gt;
&lt;br /&gt;
Ошибками для xrayMaya_export считаются:&lt;br /&gt;
*Неправильные текстурные координаты (потяжки).&lt;br /&gt;
*Полигон площадью 0 м&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
*Тонкие длинные треугольники.&lt;br /&gt;
*Не склеенные точки находящиеся в одном и том же месте и т.д.&lt;br /&gt;
[[image: Docs_maya_cleanup.jpg|настройки Cleanup ...|center|frame|настройки Cleanup ...]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=DCT:%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BF%D0%BB%D0%B5%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%BA%D0%B0%D1%80%D1%82%D1%8B</id>
		<title>DCT:Создание мультиплеерной карты</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=DCT:%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BF%D0%BB%D0%B5%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%BA%D0%B0%D1%80%D1%82%D1%8B"/>
				<updated>2008-01-22T17:08:11Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Создаём сцену в Maya.==&lt;br /&gt;
*Вся геометрия должна быть создана в реальных мировых размерах (если стол в реальной жизни высотой 1 метр, значит его надо и в Maya делать высотой 1 метр, всё предельно ясно и просто)&lt;br /&gt;
*Bounding box персонажа имеет три состояния: стоя &amp;lt;code&amp;gt;(1.8х0.7х0.7 в метрах)&amp;lt;/code&amp;gt;, сидя &amp;lt;code&amp;gt;(1.5х0.7х0.7 в метрах)&amp;lt;/code&amp;gt; и очень сидя &amp;lt;code&amp;gt;(1.2х0.7х0.7 в метрах)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Весь уровень должен быть не больше &amp;lt;code&amp;gt;150 тысяч треугольников&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[image: Docs_maya_outliner.jpg|outliner screenshot|center|frame|outliner screenshot]]&lt;br /&gt;
*Сцена должна состоять из групп. Название группы формируется по такому принципу: '''mp_имяуровня_назвгеометрии'''. Например, в нашей тестовой сцене такие группы: &amp;lt;code&amp;gt;mp_atp_terrain&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mp_atp_buildings&amp;lt;/code&amp;gt;. В группе может находится как и один объект, так и несколько. Имена объектов внутри группы никоем образом не должны совпадать с именем группы. &amp;lt;br /&amp;gt;&lt;br /&gt;
'''В переделах одной группы все имена должны быть уникальны'''.&lt;br /&gt;
[[image: Docs_maya_mp_atp_terrain.jpg|mp_atp_terrain - игровой ландшафт|center|frame|mp_atp_terrain - игровой ландшафт]]&lt;br /&gt;
[[image: Docs_maya_mp_atp_buildings.jpg|mp_atp_buildings - игровая геометрия|center|frame|mp_atp_buildings - игровая геометрия]]&lt;br /&gt;
*Шейп объекта должен содержать правильное имя. Формируется по такому принципу: объект - &amp;lt;code&amp;gt;имя_объекта&amp;lt;/code&amp;gt;, шейп - &amp;lt;code&amp;gt;имя_объектаShape&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[image: Docs_maya_objectname.jpg|Имена объектов в Maya|center|frame|Имена объектов в Maya]]&lt;br /&gt;
&lt;br /&gt;
==Экспортим геометрию из Maya.==&lt;br /&gt;
Для ознакомления с процессом экспорта просмотрите ролик в следующем параграфе.&lt;br /&gt;
В случае если xrayMaya_export не экспортит объекты, то проведите проверку на наличие ошибок, и исправьте их.&lt;br /&gt;
&lt;br /&gt;
Ошибками для xrayMaya_export считаются:&lt;br /&gt;
*Неправильные текстурные координаты (потяжки).&lt;br /&gt;
*Полигон площадью 0 м&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
*Тонкие длинные треугольники.&lt;br /&gt;
*Не склеенные точки находящиеся в одном и том же месте и т.д.&lt;br /&gt;
[[image: Docs_maya_cleanup.jpg|настройки Cleanup ...|center|frame|настройки Cleanup ...]]&lt;br /&gt;
&lt;br /&gt;
==Импортим в библиотеку LevelEditor'a.==&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;flash&amp;gt;file=movie_03.swf|width=800|height=620|quality=medium|menu=false&amp;lt;/flash&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Создаём сцену в LevelEditor.==&lt;br /&gt;
===Создание сцены===&lt;br /&gt;
Для ознакомления с процессом создания сцены просмотрите ролик.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;flash&amp;gt;file=movie_04.swf|width=800|height=620|quality=medium|menu=false&amp;lt;/flash&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление объектов из библиотеки LevelEditor'a===&lt;br /&gt;
*Edit Mode -&amp;gt; Object -&amp;gt;Select&lt;br /&gt;
*Выбираем необходимый объект.&lt;br /&gt;
[[image:Docs_leveleditor_select_object.jpg|Выбор объекта из библиотеки|center|frame|Выбор объекта из библиотеки]]&lt;br /&gt;
*Жмём Add и добавляем в сцену.&lt;br /&gt;
[[image:Docs_eveleditor_add_objecttoscene.jpg|Добавление объекта в сцену|center|frame|Добавление объекта в сцену]]&lt;br /&gt;
&lt;br /&gt;
==Настраиваем spawn элементы.==&lt;br /&gt;
===General issues===&lt;br /&gt;
В игре существует 3 типа мультиплеерной игры:&lt;br /&gt;
&lt;br /&gt;
*DeathMatch&lt;br /&gt;
*TeamDeathMatch (только 2 команды)&lt;br /&gt;
*ArtefactHunt&lt;br /&gt;
&lt;br /&gt;
Максимальное количество игроков - 32.&lt;br /&gt;
===DeathMatch Setup===&lt;br /&gt;
Добовляем в сцену необходимое количество '''$rpoint''' &amp;lt;code&amp;gt;(Edit Mode -&amp;gt; Spawn Element -&amp;gt; $rpoint)&amp;lt;/code&amp;gt; элементов с базовой настройкой.&lt;br /&gt;
&lt;br /&gt;
[[image:Docs_leveleditor_dethmatch.jpg|Базовая настройка для $rpoint|center|frame|Базовая настройка для $rpoint]]&lt;br /&gt;
===TeamDeathMatch Setup===&lt;br /&gt;
*Добовляем в сцену необходимое количество $rpoint (Edit Mode -&amp;gt; Spawn Element -&amp;gt; $rpoint) элементов с базовой настройкой.&lt;br /&gt;
*В случае если необходимо сделать $rpoint, принадлежащим только одной команде, меняем параметр &amp;lt;code&amp;gt;Team: 1 или 2&amp;lt;/code&amp;gt;, и &amp;lt;code&amp;gt;Game Type: TeamDeathMatch&amp;lt;/code&amp;gt; '''(работает только в версии 1.003 и выше)'''. В этом случае все $rpoint с базовыми настройками будут служить как spectator place.&lt;br /&gt;
[[image:Docs_leveleditor_teamdethmatch.jpg|TeamDeathMatch настройка для $rpoint|center|frame|TeamDeathMatch настройка для $rpoint]]&lt;br /&gt;
&lt;br /&gt;
===ArtefactHunt Setup===&lt;br /&gt;
====Создание баз====&lt;br /&gt;
*Создайте два box shapes (&amp;lt;code&amp;gt;Edit Mode -&amp;gt; Shape -&amp;gt; Box&amp;lt;/code&amp;gt;), в тех местах где будут располагаться противоборствующие базы. '''В пределах этого Box Shape’а''' игроки команды '''неуязвимы'''. &lt;br /&gt;
[[image:Docs_leveleditor_teambase_shape.jpg|Добавляем Box Shape|center|frame|Добавляем Box Shape]]&lt;br /&gt;
*Расположите в каждом $team_base (&amp;lt;code&amp;gt;Edit Mode -&amp;gt; Spawn Element -&amp;gt; $team_base&amp;lt;/code&amp;gt;) внутри box shapes.&lt;br /&gt;
[[image:Docs_leveleditor_teambase_spawn.jpg|Добавляем $team_base|center|frame|Добавляем $team_base]]&lt;br /&gt;
[[image:Docs_leveleditor_teambase.jpg|ArtefactHunt настройка для $team_base|center|frame|ArtefactHunt настройка для $team_base]]&lt;br /&gt;
*Выбрать $team_base.&lt;br /&gt;
*Нажать &amp;lt;code&amp;gt;Commands -&amp;gt; Attach Object&amp;lt;/code&amp;gt;…&lt;br /&gt;
*Выбрать необходимый Shape.&lt;br /&gt;
[[image:Docs_leveleditor_teambase_spawnattach.jpg|Присоединение $team_base к Box Shape|center|frame|Присоединение $team_base к Box Shape]]&lt;br /&gt;
&lt;br /&gt;
====Добавление spawn point членов команды====&lt;br /&gt;
*Добавляем в сцену необходимое количество $rpoint в пределах box shape 1ой команды с такими настройками:&lt;br /&gt;
[[image:Docs_leveleditor_artefacthunt1.jpg|ArtefactHunt настройка для $rpoint (игроки)|center|frame|ArtefactHunt настройка для $rpoint (игроки)]]&lt;br /&gt;
*Аналогично для 2ой каманды, только параметр Team меняем на 2.&lt;br /&gt;
====Добавление командных частиц (символизирует границы базы команды)====&lt;br /&gt;
*Добавляем в сцену необходимое количество $rpoint в пределах box shape 1ой команды с такими настройками:&lt;br /&gt;
[[image:Docs_leveleditor_artefacthunt2.jpg|ArtefactHunt настройка для $rpoint (частицы)|center|frame|ArtefactHunt настройка для $rpoint (частицы)]]&lt;br /&gt;
*Аналогично для 2ой каманды, только параметр Team меняем на 2.&lt;br /&gt;
====Добавление spawn point артефактов====&lt;br /&gt;
Артефакты не появляются случайным образом, места их рождения необходимо указывать самостоятельно. Добавляем в сцену необходимое количество $rpoint с такими настройками:&lt;br /&gt;
[[image:Docs_leveleditor_artefacthunt3.jpg|ArtefactHunt настройка для $rpoint (артефакты)|center|frame|ArtefactHunt настройка для $rpoint (артефакты)]]&lt;br /&gt;
&lt;br /&gt;
==Настраиваем тип карты==&lt;br /&gt;
Принадлежность карты к одному из трёх типов игры указывается таким образом:&lt;br /&gt;
*Нажать &amp;lt;code&amp;gt;Scene -&amp;gt; Options&amp;lt;/code&amp;gt;&lt;br /&gt;
*В секции Usage выбрать необходимые для вас типы&lt;br /&gt;
[[image:Docs_leveleditor_map_usage.jpg|Настройки типа карты|center|frame|Настройки типа карты]]&lt;br /&gt;
&lt;br /&gt;
==Компилируем==&lt;br /&gt;
&amp;lt;code&amp;gt;Windows -&amp;gt; start -&amp;gt; run&amp;lt;/code&amp;gt; и в командной строке пишем:&lt;br /&gt;
[[image:Docs_wind_run_comp_multiplayer.jpg|Запуск уровня на компиляцию|center|frame|Запуск уровня на компиляцию]]&lt;br /&gt;
После корректной компиляции:&lt;br /&gt;
[[image:Docs_wind_xray_levelcompiler.jpg|Завершение компиляции|center|frame|Завершение компиляции]]&lt;br /&gt;
&lt;br /&gt;
==Собираем карту и добавляем её в игру.==&lt;br /&gt;
*Нажать &amp;lt;code&amp;gt;File -&amp;gt; Make pack...&amp;lt;/code&amp;gt;&lt;br /&gt;
[[image:Docs_leveleditor_mod_pack.jpg|Собираем карту|center|frame|Собираем карту]]&lt;br /&gt;
*В корне диска &amp;lt;code&amp;gt;X:\&amp;lt;/code&amp;gt; создастся файл &amp;lt;code&amp;gt;gamedata.xdb0&amp;lt;/code&amp;gt;, его необходимо скопировать в папку игры &amp;lt;code&amp;gt;S.T.A.L.K.E.R\mods&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=Maya._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%B6%D0%B0</id>
		<title>Maya. Создание модели персонажа</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=Maya._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%B6%D0%B0"/>
				<updated>2008-01-22T17:07:27Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Создание модели, ограничения==&lt;br /&gt;
Создание 3d-модели персонажа и текстуры к ней не является темой данного урока.&lt;br /&gt;
&lt;br /&gt;
Информации по принципам создания персонажей в Интернете достаточно, мы лишь ознакомим вас с ограничениями нашего движка.&lt;br /&gt;
&lt;br /&gt;
===Ограничения===&lt;br /&gt;
*Персонаж должен находится в центре системы координат (см. пример из SDK)&lt;br /&gt;
*Модель персонажа создаётся в метрической системе измерений, размеры полностью соответствуют естественным размерам человека (&amp;lt;code&amp;gt;1.6 – 2 метра&amp;lt;/code&amp;gt;)&lt;br /&gt;
[[image:Docs_maya_character_limitation.jpg|Ограничения 3d-модели персонажа|center|frame|Ограничения 3d-модели персонажа]]&lt;br /&gt;
*В движке игры нет строгого ограничения на количество треугольников, но для получения стабильного и высокого FPS  применяются модели порядка '''3000-5000''' треугольников, при необходимости можно использовать и большее количество если это обосновано необходимо.&lt;br /&gt;
*3d-модели персонажа должна не содержать ошибок в геометрии, потяжек текстуры и тонких длинных треугольников (см. [[Docs:Создание сцены в Maya#Экспортим геометрию из Maya|исправление ошибок]]).  &lt;br /&gt;
*Движок поддерживает &amp;lt;code&amp;gt;отзеркаливание текстуры&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[image:Docs_maya_character_mirrortexture.jpg|Отзеркаливание текстуры|center|frame|Отзеркаливание текстуры]]&lt;br /&gt;
*Модель должна быть с UV координатами, &amp;lt;code&amp;gt;XRay Shader’ом&amp;lt;/code&amp;gt; и группами сглаживания.&lt;br /&gt;
*Обнулить все &amp;lt;code&amp;gt;трансформации&amp;lt;/code&amp;gt; модели и удалить &amp;lt;code&amp;gt;history&amp;lt;/code&amp;gt;, перед привязкой её к скелету&lt;br /&gt;
*Модель должна содержать один или более XRay Shader с параметрами показанными ниже, допустимо использование прозрачности, блеска и самосвечения. Описание возможных шейдеров смотрите в разделе [[Docs:Создание сцены в Maya|Docs:Создание сцены в Maya]]&lt;br /&gt;
[[image:Docs_maya_character_shader.jpg|Базовый XRay shader на 3d-модели персонажа|center|frame|Базовый XRay shader на 3d-модели персонажа]]&lt;br /&gt;
&lt;br /&gt;
==Создание и настройка скелета, скининг, ограничения==&lt;br /&gt;
*Создание скелета персонажа игры производится в пакете Maya стандартными средствами 3D пакета.&lt;br /&gt;
*Сцена может содержать несколько различных скелетов или моделей, экспорт в подобных случаях производится выделением необходимой модели и экспортом выбранного.&lt;br /&gt;
*Для использования '''анимаций из библиотеки игры''', необходимо использовать '''скелет из SDK''' без изменений&lt;br /&gt;
[[image:Docs_maya_character_jointoutliner.jpg|Скелет персонажа используемый в игре|center|frame|Скелет персонажа используемый в игре]]&lt;br /&gt;
*Joint’ы не должны содержать scale, rotate, transform. Перед финальным созданием скелета модели, проведите очистку всех перечисленных трансформаций. &lt;br /&gt;
*3d-модели должна быть присоединена к скелету с использованием Smooth Bind&lt;br /&gt;
[[image:Docs_maya_character_bindskin.jpg|Smooth Bind|center|frame|Smooth Bind]]&lt;br /&gt;
*На одну вершину не должно воздействовать более чем 4 joint’а. Общий вес суммарного влияния joint’ов на vertex при экспорте нормализуются до 1, при скининге будте внимательны при назначении весов.&lt;br /&gt;
*В движке игры нет строгого ограничения на количество используемых костей скелета в одной модели, но для получения стабильного и высокого FPS  желательно использовать возможно меньшее количество костей, например стандартная модель персонажа игры использует 44 кости.&lt;br /&gt;
[[image:Docs_maya_character_skeleton.jpg|Стандартный скелет персонажа|center|frame|Стандартный скелет персонажа]]&lt;br /&gt;
&lt;br /&gt;
==Анимация==&lt;br /&gt;
*Плагин экспорта поддерживает все доступные средства 3D пакета необходимые аниматору для создания качественной анимации: локаторы, инверсная кинематика, ограничители, применение физики во время анимирования, всё это и многое другое допустимо для создания анимаций и прекрасно понимается движком игры.&lt;br /&gt;
*Нет ограничений на способ хранения анимации модели, это может быть и внешний файл, и хранение всех анимаций в одной модели, всё зависит от предпочтений аниматора.&lt;br /&gt;
&lt;br /&gt;
==Экспорт модели==&lt;br /&gt;
&lt;br /&gt;
*При экспорте модели заранее проверьте саму модель и созданный скелет на наличие или отсутствие ошибок.&lt;br /&gt;
*Для экспорта модели выделяем объект, в нашем случае сталкер, затем идём в меню File -&amp;gt; Export Selection… &lt;br /&gt;
[[image:Docs_maya_character_export.jpg|Экспорт персонажа|center|frame|Экспорт персонажа]]&lt;br /&gt;
*Важно давать модели имя, аналогичное тому что и будет использоваться в игре, это в дальнейшем упростит работу с данной моделью у самого аниматора, нет необходимости вспоминать имя модели в редакторе, но и тех  кто производит настройку конфигурационных файлов и установку модели в игру.&lt;br /&gt;
[[image:Docs_maya_character_exportname.jpg|Имя экспортируемого объекта|center|frame|Имя экспортируемого объекта]]&lt;br /&gt;
&lt;br /&gt;
==Экспорт анимации==&lt;br /&gt;
&lt;br /&gt;
*Перед  экспортом  анимации необходимо внести изменения в настройки Maya, иначе анимация не будет экспортироваться.&lt;br /&gt;
[[image:Docs_maya_character_pref_path.jpg|Путь к настройкам Maya|center|frame|Путь к настройкам Maya]]&lt;br /&gt;
[[image:Docs_maya_character_pref_setup.jpg|Настраиваемые параметры|center|frame|Настраиваемые параметры]]&lt;br /&gt;
*Плагин экспорта использует текущие значения таймлайна 3D-пакета, при желании можно использовать возможности скриптового движка 3D пакета, и практически полностью автоматизировать процесс экспорта.&lt;br /&gt;
[[image:Docs_maya_character_timeline.jpg|Текущий таймлайн Maya|center|frame|Текущий таймлайн Maya]]&lt;br /&gt;
*Для экспорта анимации выделяем анимированный объект, в нашем случае сталкер, затем идём в меню File -&amp;gt; Export Selection… &lt;br /&gt;
[[image:Docs_maya_character_anim_export.jpg|Экспорт анимации|center|frame|Экспорт анимации]]&lt;br /&gt;
*Для удобства введите читабельное имя анимации, это в дальнейшем облегчит работу с моделью в редакторе.&lt;br /&gt;
[[image:Docs_maya_character_anim_exportname.jpg|Имя анимации|center|frame|Имя анимации]]&lt;br /&gt;
&lt;br /&gt;
==Импорт модели персонажа в ActorEditor==&lt;br /&gt;
&lt;br /&gt;
==Импорт анимации в ActorEditor==&lt;br /&gt;
&lt;br /&gt;
==Редактирование анимации персонажа, экспорт в единый файл анимации==&lt;br /&gt;
&lt;br /&gt;
==Настройка модели персонажа  в ActorEditor’е, назначение анимаций==&lt;br /&gt;
&lt;br /&gt;
==Экспорт модели персонажа  в ActorEditor’е==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=DCT:LevelEditor._%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%B8%D0%B9_%D0%BE%D0%B1%D0%B7%D0%BE%D1%80</id>
		<title>DCT:LevelEditor. Краткий обзор</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=DCT:LevelEditor._%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%B8%D0%B9_%D0%BE%D0%B1%D0%B7%D0%BE%D1%80"/>
				<updated>2008-01-22T17:06:44Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Интерфейс==&lt;br /&gt;
[[image:Docs_leveleditor_main_view.jpg|LevelEditor interface|center|frame|LevelEditor interface]]&lt;br /&gt;
#Main view window.&lt;br /&gt;
#Main Toolbar.&lt;br /&gt;
#Log window.&lt;br /&gt;
#Technical information.&lt;br /&gt;
#Main Bar.&lt;br /&gt;
#Status Bar.&lt;br /&gt;
&lt;br /&gt;
Любая работа с камерой происходит при нажатой клавише '''Shift''', перемещением мыши с нажатой левой (LMB), правой (RMB) или обоими клавишами (LMB+RMB). &amp;lt;br /&amp;gt;&lt;br /&gt;
Переключение режимов камеры осуществляется при помощи кнопок на Main Bar меню.&lt;br /&gt;
&lt;br /&gt;
==Кнопки==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border-collapse:collapse; border-color:#ccc;&amp;quot;&lt;br /&gt;
 |- &lt;br /&gt;
 |style=&amp;quot;width:60px;&amp;quot; align=&amp;quot;center&amp;quot; | [[image:Docs_edb_p.gif|p]]&lt;br /&gt;
 |обычный режим работы.&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+LMB&amp;lt;/code&amp;gt; - перемещение камеры в плоскости zx.&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+RMB&amp;lt;/code&amp;gt; - перемещение камеры вдоль оси y.&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+LMB+RMB&amp;lt;/code&amp;gt; - вращение камеры относительно своей оси.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_a.gif|a]]&lt;br /&gt;
 |режим осмотра объекта.&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+LMB&amp;lt;/code&amp;gt; - перемещение камеры вокруг объекта.&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+RMB&amp;lt;/code&amp;gt; - приближение/отдаление камеры от объекта.&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+LMB+RMB&amp;lt;/code&amp;gt; - приближение/отдаление камеры от объекта.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_f.gif|f]]&lt;br /&gt;
 |режим хождения (''для перемещения по коллижену вместе с Shift нужно удерживать Control'' (&amp;lt;code&amp;gt;Ctrl+Shift&amp;lt;/code&amp;gt;)).&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+LMB&amp;lt;/code&amp;gt; - движение вперёд с поворотом камеры.&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+RMB&amp;lt;/code&amp;gt; - движение назад с поворотом камеры.&lt;br /&gt;
*&amp;lt;code&amp;gt;Shift+LMB+RMB&amp;lt;/code&amp;gt; - поворот камеры.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_ff.gif|f]]&lt;br /&gt;
 |вид спереди.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_bb.gif|b]]&lt;br /&gt;
 |вид сзади.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_ll.gif|l]]&lt;br /&gt;
 |вид слева.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_rr.gif|r]]&lt;br /&gt;
 |вид справа.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_tt.gif|t]]&lt;br /&gt;
 |вид сверху.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_bb.gif|b]]&lt;br /&gt;
 |вид снизу.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_xx.gif|x]]&lt;br /&gt;
 |сброс вида.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_Undo.gif|undo]]&lt;br /&gt;
 |Undo.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_Redo.gif|redo]]&lt;br /&gt;
 |Redo.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_select.gif|select]]&lt;br /&gt;
 |Select.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_add.gif|add]]&lt;br /&gt;
 |Add new object.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_move.gif|move]]&lt;br /&gt;
 |Move.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_rotate.gif|rotate]]&lt;br /&gt;
 |Rotate.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_scale.gif|scale]]&lt;br /&gt;
 |Uniform scale.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_X.gif|X]]&lt;br /&gt;
 |Движение объекта по оси x.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_Y.gif|Y]]&lt;br /&gt;
 |Движение объекта по оси y.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_Z.gif|Z]]&lt;br /&gt;
 |Движение объекта по оси z.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_ZX.gif|Z]]&lt;br /&gt;
 |Движение объекта в плоскости zx.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_CSLocal.gif|Z]]&lt;br /&gt;
 |Временно не работает.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_NUScale.gif|non-uniform scale]]&lt;br /&gt;
 |Non-uniform scale.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_GSnap.gif|Snap]]&lt;br /&gt;
 |Snap объекта к сетке при создании или при &amp;lt;code&amp;gt;Move + Ctrl + LMB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_OSnap.gif|Snap-object]]&lt;br /&gt;
 |Snap объекта к объекту при создании или при &amp;lt;code&amp;gt;Move + Ctrl + LMB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_MoveToSnap.gif|Snap-move]]&lt;br /&gt;
 |Snap объекта к объекту в режиме Move.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_NSnap.gif|Snap-normal]]&lt;br /&gt;
 |Учитывать нормаль во время Snap объекта.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_VSnap.gif|Snap-vertex]]&lt;br /&gt;
 |Snap объекта к вершинам объекта при создании или при &amp;lt;code&amp;gt;Move + Ctrl + LMB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_ASnap.gif|Snap-A]]&lt;br /&gt;
 |Дискретный поворот (работает в нажатой кнопкой &amp;lt;code&amp;gt;Rotate&amp;lt;/code&amp;gt;).&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_MSnap.gif|Snap-Move]]&lt;br /&gt;
 |Дискретное движение (работает в нажатой кнопкой &amp;lt;code&amp;gt;Move&amp;lt;/code&amp;gt;).&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_zoom.gif|zoom]]&lt;br /&gt;
 |Zoom Extent.&lt;br /&gt;
 |-&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | [[image:Docs_edb_zoom_sel.gif|zoom-sel]]&lt;br /&gt;
 |Zoom Extents Selected.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Выделение объектов==&lt;br /&gt;
Объекты выделяются нажатием на них левой кнопки мыши (&amp;lt;code&amp;gt;LMB&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Также, перемещая мышь при нажатой левой кнопке мыши, можно выделять несколько объектов рамкой. &lt;br /&gt;
&lt;br /&gt;
Добавить или убрать объект из выделения можно щелчком мыши с нажатой клавишей Control (&amp;lt;code&amp;gt;Ctrl+LMB&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Выделить объект можно только в том случае, если его тип соответствует выбранному режиму редактирования. &lt;br /&gt;
Сменить режим можно, выбрав необходимый '''Edit Mode''' на основном Toolbar'е.&lt;br /&gt;
[[image:Docs_leveleditor_editmode.jpg|Режим редактирование - object|center|frame|Режим редактирование - object]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=DCT:LevelEditor._%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D1%86%D0%B5%D0%BD%D1%8B</id>
		<title>DCT:LevelEditor. Настройка сцены</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=DCT:LevelEditor._%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D1%86%D0%B5%D0%BD%D1%8B"/>
				<updated>2008-01-22T17:05:02Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Введение==&lt;br /&gt;
LevelEditor является компоновщиком.&lt;br /&gt;
&lt;br /&gt;
Системы координат между Maya и LevelEditor незначительно отличаются.&lt;br /&gt;
[[image:Docs_axis.jpg|Слева - система координат Maya, справа - система координат LevelEditor|center|frame|Слева - система координат Maya, справа - система координат LevelEditor]]&lt;br /&gt;
&lt;br /&gt;
==Добавление текстур==&lt;br /&gt;
===General issues===&lt;br /&gt;
Добавляемые текстуры должны быть в &amp;lt;code&amp;gt;.tga&amp;lt;/code&amp;gt; формате (могут содержать альфа канал). Имена текстур составляются по такому шаблону: '''&amp;lt;code&amp;gt;имядериктории_имятекстуры&amp;lt;/code&amp;gt;''' &amp;lt;br /&amp;gt;&lt;br /&gt;
(если создать текстуру с именем user_blablabla.tga, то при импорте она добавится в папку под именем user). &lt;br /&gt;
&lt;br /&gt;
При добавлении текстуры через LevelEditor, редактор (LevelEditor) выполняет такие действия:&lt;br /&gt;
*&amp;lt;code&amp;gt;user_blablabla.tga&amp;lt;/code&amp;gt; текстура копируется в директорию &amp;lt;code&amp;gt;X:\rawdata\textures\user\&amp;lt;/code&amp;gt;&lt;br /&gt;
*Создаётся файл описания с расширением &amp;lt;code&amp;gt;user_blablabla.thm&amp;lt;/code&amp;gt; в директории &amp;lt;code&amp;gt;X:\rawdata\textures\user\&amp;lt;/code&amp;gt;&lt;br /&gt;
*Создаётся &amp;lt;code&amp;gt;user_blablabla.dds&amp;lt;/code&amp;gt; файл в директории &amp;lt;code&amp;gt;X:\gamedata\textures\user\&amp;lt;/code&amp;gt;&lt;br /&gt;
*В файл &amp;lt;code&amp;gt;X:\gamedata\textures\textures.ltx&amp;lt;/code&amp;gt; записывается информация о текстуре &amp;lt;code&amp;gt;user_blablabla.dds&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Необходимые действия для добавления текстур===&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;flash&amp;gt;file=movie_01.swf|width=800|height=620|quality=medium|menu=false&amp;lt;/flash&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
*Копируем новую текстуру в папку &amp;lt;code&amp;gt;X:\import\&amp;lt;/code&amp;gt;&lt;br /&gt;
*Запускаем LevelEditor&lt;br /&gt;
*Images -&amp;gt; check new textures&lt;br /&gt;
[[image:Docs_leveleditor_add_new_texture.jpg|Добавление новой текстуры|center|frame|Добавление новой текстуры]]&lt;br /&gt;
*Делаем необходимые настройки&lt;br /&gt;
*Нажимаем ОК&lt;br /&gt;
&lt;br /&gt;
==Удаление текстур==&lt;br /&gt;
*Запускаем LevelEditor&lt;br /&gt;
*Images -&amp;gt; Image Editor&lt;br /&gt;
*Выбираем текстуру, которую необходимо удалить&lt;br /&gt;
[[image:Docs_leveleditor_del_texture.jpg|Удаление текстуры|center|frame|Удаление текстуры]]&lt;br /&gt;
*Жмём Remove Texture -&amp;gt; yes -&amp;gt; ok&lt;br /&gt;
*Images -&amp;gt; Image Editor -&amp;gt; Rebuild Association -&amp;gt; yes -&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Создание сцены==&lt;br /&gt;
===Создание сцены===&lt;br /&gt;
Для ознакомления с процессом создания сцены просмотрите ролик.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;flash&amp;gt;file=movie_04_.swf|width=800|height=620|quality=medium|menu=false&amp;lt;/flash&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление объектов из библиотеки LevelEditor'a===&lt;br /&gt;
*Edit Mode -&amp;gt; Object -&amp;gt;Select&lt;br /&gt;
*Выбираем необходимый объект.&lt;br /&gt;
[[image: Docs_leveleditor_select_object.jpg|Выбор объекта из библиотеки|center|frame|Выбор объекта из библиотеки]]&lt;br /&gt;
*Жмём Add и добавляем в сцену.&lt;br /&gt;
&lt;br /&gt;
==Spawns Setup==&lt;br /&gt;
===General issues===&lt;br /&gt;
В игре существует 3 типа мультиплеерной игры:&lt;br /&gt;
*DeathMatch&lt;br /&gt;
*TeamDeathMatch (только 2 команды)&lt;br /&gt;
*ArtefactHunt&lt;br /&gt;
&lt;br /&gt;
Максимальное количество игроков - 32.&lt;br /&gt;
===DeathMatch Setup===&lt;br /&gt;
Добавляем в сцену необходимое количество '''$rpoint''' &amp;lt;code&amp;gt;(Edit Mode -&amp;gt; Spawn Element -&amp;gt; $rpoint)&amp;lt;/code&amp;gt; элементов с базовой настройкой.&lt;br /&gt;
&lt;br /&gt;
[[image:Docs_leveleditor_dethmatch.jpg|Базовая настройка для $rpoint|center|frame|Базовая настройка для $rpoint]]&lt;br /&gt;
===TeamDeathMatch Setup===&lt;br /&gt;
*Добавляем в сцену необходимое количество $rpoint (Edit Mode -&amp;gt; Spawn Element -&amp;gt; $rpoint) элементов с базовой настройкой.&lt;br /&gt;
*В случае если необходимо сделать $rpoint, принадлежащим только одной команде, меняем параметр &amp;lt;code&amp;gt;Team: 1 или 2&amp;lt;/code&amp;gt;, и &amp;lt;code&amp;gt;Game Type: TeamDeathMatch&amp;lt;/code&amp;gt; (работает только в версии 1.003). В этом случае все $rpoint с базовыми настройками будут служить как spectator place.&lt;br /&gt;
[[image:Docs_leveleditor_teamdethmatch.jpg|TeamDeathMatch настройка для $rpoint|center|frame|TeamDeathMatch настройка для $rpoint]]&lt;br /&gt;
&lt;br /&gt;
===ArtefactHunt Setup===&lt;br /&gt;
====Создание баз====&lt;br /&gt;
*Создайте два box shapes (&amp;lt;code&amp;gt;Edit Mode -&amp;gt; Shape -&amp;gt; Box&amp;lt;/code&amp;gt;), в тех местах где будут располагаться противоборствующие базы.&lt;br /&gt;
*Расположите в каждом $team_base (&amp;lt;code&amp;gt;Edit Mode -&amp;gt; Spawn Element -&amp;gt; $team_base&amp;lt;/code&amp;gt;) внутри box shapes.&lt;br /&gt;
[[image:Docs_leveleditor_teambase.jpg|ArtefactHunt настройка для $team_base|center|frame|ArtefactHunt настройка для $team_base]]&lt;br /&gt;
*Выбрать $team_base.&lt;br /&gt;
*Нажать &amp;lt;code&amp;gt;Commands -&amp;gt; Attach Object&amp;lt;/code&amp;gt;…&lt;br /&gt;
*Выбрать необходимый Shape.&lt;br /&gt;
====Добавление spawn point членов команды====&lt;br /&gt;
*Добавляем в сцену необходимое количество $rpoint в пределах box shape 1ой команды с такими настройками:&lt;br /&gt;
[[image:Docs_leveleditor_artefacthunt1.jpg|ArtefactHunt настройка для $rpoint (игроки)|center|frame|ArtefactHunt настройка для $rpoint (игроки)]]&lt;br /&gt;
*Аналогично для 2ой команды, только параметр Team меняем на 2.&lt;br /&gt;
====Добавление командных частиц (символизирует границы базы команды)====&lt;br /&gt;
*Добавляем в сцену необходимое количество $rpoint в пределах box shape 1ой команды с такими настройками:&lt;br /&gt;
[[image:Docs_leveleditor_artefacthunt2.jpg|ArtefactHunt настройка для $rpoint (частицы)|center|frame|ArtefactHunt настройка для $rpoint (частицы)]]&lt;br /&gt;
*Аналогично для 2ой каманды, только параметр Team меняем на 2.&lt;br /&gt;
====Добавление spawn point артефактов====&lt;br /&gt;
Добавляем в сцену необходимое количество $rpoint с такими настройками:&lt;br /&gt;
[[image:Docs_leveleditor_artefacthunt3.jpg|ArtefactHunt настройка для $rpoint (артефакты)|center|frame|ArtefactHunt настройка для $rpoint (артефакты)]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=DCT:%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8</id>
		<title>DCT:Начальные настройки</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=DCT:%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8"/>
				<updated>2008-01-22T17:04:30Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Настройка виртуальных дисков X и T==&lt;br /&gt;
&lt;br /&gt;
Диск X необходим для работы редакторов и плагинов. Диск X является ссылкой на локальную директорию c:\Program Files\X-Ray SDK\editors &lt;br /&gt;
&lt;br /&gt;
Диск T необходим для работы с текстурами игры. Диск T является ссылкой на локальную директорию c:\Program Files\X-Ray SDK\editors\gamedata\textures &lt;br /&gt;
&lt;br /&gt;
ВНИМАНИЕ!: диск X и диск T обязательны для работы &lt;br /&gt;
&lt;br /&gt;
Для создания диска Х и диска T зайдите в меню Start -&amp;gt; Programs -&amp;gt; X-Ray SDK как показано на картинке: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Создание диска X&lt;br /&gt;
&lt;br /&gt;
Map Drives необходимо запускать каждый раз перед работой с SDK. &lt;br /&gt;
&lt;br /&gt;
Я предлагаю вам добавить его в атозагрузку.&lt;br /&gt;
 &lt;br /&gt;
==Настройки скриптов и плагинов==&lt;br /&gt;
Содержимое директории c:\Program Files\X-Ray SDK\scripts_plugins\scripts скопировать в папку C:\Documents and Settings\UserName\My Documents\maya\scripts &lt;br /&gt;
Содержимое директории c:\Program Files\X-Ray SDK\scripts_plugins\ver-8.5 скопировать в папку C:\Program Files\Autodesk\Maya8.5\bin&lt;br /&gt;
&lt;br /&gt;
==Настройки Maya 8.5==&lt;br /&gt;
Запустите Maya 8.5. &lt;br /&gt;
Зайдите в windows -&amp;gt; settings/preferences -&amp;gt; plug-in manager. &lt;br /&gt;
 &lt;br /&gt;
Путь к plug-in manager&lt;br /&gt;
Поставьте xrayMaya_export.mll, xrayMaya_material.mll на Loaded, Auto Load. &lt;br /&gt;
Это необходимо для того, чтобы загрузились плагины: экспорта геометрии в игровой формат и настройки игровых шейдеров.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_knife.ltx</id>
		<title>Файлы: w knife.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_knife.ltx"/>
				<updated>2008-01-22T11:47:51Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[wpn_knife]&lt;br /&gt;
[wpn_knife_hud]&lt;br /&gt;
;текстурка ножа&lt;br /&gt;
visual              		= weapons\knife\wpn_knife_hud.ogf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;анимация&lt;br /&gt;
anim_idle					= idle&lt;br /&gt;
anim_draw					= draw&lt;br /&gt;
anim_hide					= hide&lt;br /&gt;
anim_shoot1_start			= shoot1_start&lt;br /&gt;
anim_shoot2_start			= shoot2_start&lt;br /&gt;
anim_shoot1_end				= shoot1_end&lt;br /&gt;
anim_shoot2_end				= shoot2_end&lt;br /&gt;
anim_idle_sprint			= idle_sprint&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_sig220.ltx</id>
		<title>Файлы: w sig220.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_sig220.ltx"/>
				<updated>2008-01-22T11:47:03Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sig Zauer 220, известный так же под маркировкой Р-78 - штатный пистолет швейцарской армии и полиции, так же используемый в ряде стран Европы как вооруженными силами, так и подразделениями полиции и спецслужб. Разработанный в середине 70-х годов под стандартный патрон NATO 9х19, данный образец зарекомендовал себя как весьма надежное и живучее оружие.&lt;br /&gt;
&lt;br /&gt;
W sig220.ltx &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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
description				= enc_weapons1_wpn-abakan&amp;lt;/pre&amp;gt;&lt;br /&gt;
Калибр &lt;br /&gt;
ammo_class				= ammo_5.45x39_fmj, ammo_5.45x39_ap  ; name of the ltx-section of used ammo&lt;br /&gt;
&lt;br /&gt;
===Реальные параметры===&lt;br /&gt;
{| border=1&lt;br /&gt;
 !colspan=2 |ТТХ &lt;br /&gt;
 |-&lt;br /&gt;
 |Калибр, мм &lt;br /&gt;
 | 5,45&lt;br /&gt;
 |-&lt;br /&gt;
 |Вес без магазина, кг &lt;br /&gt;
 | 3,85&lt;br /&gt;
 |-&lt;br /&gt;
 |Общая длина с откинутым прикладом, мм &lt;br /&gt;
 | 943&lt;br /&gt;
 |-&lt;br /&gt;
 |Общая длина в сложенном состоянии, мм &lt;br /&gt;
 | 728&lt;br /&gt;
 |-&lt;br /&gt;
 |Длина ствола, мм &lt;br /&gt;
 | 405&lt;br /&gt;
 |-&lt;br /&gt;
 |Емкость магазина, количество патронов &lt;br /&gt;
 | 30 (60)&lt;br /&gt;
 |-&lt;br /&gt;
 |Прицельная дальность, м &lt;br /&gt;
 | 1000&lt;br /&gt;
 |-&lt;br /&gt;
 |Эффективная дальность, м &lt;br /&gt;
 | 650&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_hpsa.ltx</id>
		<title>Файлы: w hpsa.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_hpsa.ltx"/>
				<updated>2008-01-22T11:46:02Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Browning FN &amp;quot;High Power&amp;quot; /Браунинг ФН &amp;quot;Хай Пауэр&amp;quot; - классический образец армейского личного оружия западных армий в середине ХХ века. Выпускался с 1938 года бельгийской фирмой &amp;quot;Фабрик Националь&amp;quot; в Льеже. Относится к классу т.н. &amp;quot;автоматических&amp;quot; (реально - самозарядных) пистолетов, калибр - 9х19 мм (он же - 9Пар/9NATO).Автоматика работает за счет испольования энергии ствола при его коротком ходе. Ударно-спусковой механизм куркового типа, с открытым расположением курка. Пистолет имеет неавтоматический предохранитель (с левой стороны рамки позади спусковой скобы), блокирующий кожух и шептало. Возвратная пружина размещена под стволом. Прицел - открытого типа. В годы Второй Мировой войны по зказу вермахта было изготовлено около 320 тыс. экз. с маркировкой Р-640. На территории СССР вплоть до конца прошлого века находили рабочие экземпляры оружия - как &amp;quot;черные следопыты&amp;quot;, так и простые граждане, часть из которых поступило в криминальное обращение либо осело на руках у населения.&lt;br /&gt;
Масса пистолета без патронов - 882 грамма, длина - 200 мм, длина ствола - 118 мм. Начальная скорость пули - 350 м/с, техническая скорострельность - 40 выстрелов в минуту. Емкость магазина - 13 патронов. Прицельная дальность - 50 м.&lt;br /&gt;
Обладая достаточно высокой дульной энергией (447 Дж), хорошей балансировкой, простой и достаточно надежной конструкцией, данный пистолет в целом до сих пор соответствует армейским требованиям НАТО к подобному оружию. &lt;br /&gt;
&lt;br /&gt;
В 80-е годы в производстве появились две усовершенствованые модели: ЭйчПи 2 и Дабл Экшн (ДА). Основные изменения коснулись емкости магазина (увеличена до 15 патронов) и размещения внешних рычагов - затворной задержки и предохранителя, так же была изменена спусковая скоба, что увеличило удобство стрельбы с левой руки или с двух рук.&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_ak74.ltx</id>
		<title>Файлы: w ak74.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_ak74.ltx"/>
				<updated>2008-01-22T11:45:07Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На  ak74 нельзя ставить прицел&lt;br /&gt;
АК-74М - с планкой для крепления прицельных приспособлений на левой стороне ствольной коробки&lt;br /&gt;
Параметры в игре W ak74.ltx &lt;br /&gt;
Калибр 	ammo_5.45x39_fmj, ammo_5.45x39_ap &lt;br /&gt;
Вес 	3.3 &lt;br /&gt;
Емкость магазина, количество патронов 	30 &lt;br /&gt;
Цена, РУБ. 	2000 &lt;br /&gt;
Параметры расброса &lt;br /&gt;
Прицельная дальность, м 	 ??? &lt;br /&gt;
Эффективная дальность, м 	 ???&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_ak74.ltx</id>
		<title>Файлы: w ak74.ltx</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B:_w_ak74.ltx"/>
				<updated>2008-01-22T11:44:30Z</updated>
		
		<summary type="html">&lt;p&gt;200.43.68.7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На  ak74 нельзя ставить прицел&lt;br /&gt;
АК-74М - с планкой для крепления прицельных приспособлений на левой стороне ствольной коробки&lt;br /&gt;
{{Параметры:Оружие&lt;br /&gt;
|ammo_class=ammo_5.45x39_fmj, ammo_5.45x39_ap&lt;br /&gt;
|inv_weight			= 3.3	&lt;br /&gt;
|ammo_mag_size= 30&lt;br /&gt;
|class               	= WP_AK74&lt;br /&gt;
|cost					= 2000&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>200.43.68.7</name></author>	</entry>

	</feed>