<?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=90.157.85.184&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=90.157.85.184&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/90.157.85.184"/>
		<updated>2026-04-30T01:32:39Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_-%3DinGame_%D0%90%D0%98%3D-</id>
		<title>Компиляция -=inGame АИ=-</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_-%3DinGame_%D0%90%D0%98%3D-"/>
				<updated>2010-01-14T12:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: /* Список необходимых программ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак, приступим... Раз вы здесь, значит есть на то причина:&lt;br /&gt;
*1)либо вы нуп, увидевший аи-компилер и решивший забацать чтото крутое&lt;br /&gt;
*2)вы не нуп, но всё забыли или почти всё&lt;br /&gt;
*3)вы супер-аццкий про решивший глянуть на весь этот детсад свысока )&lt;br /&gt;
*4)вы обычный модер, решивший расширить свои текущие познания. ;)&lt;br /&gt;
&lt;br /&gt;
==Основы==&lt;br /&gt;
Ну что ж... начнем с самого простого, скомпилим левел с аи, монстрами на&lt;br /&gt;
карте '''mp_atp'''. Открываем левел.. первое что надо сделать убрать все &lt;br /&gt;
'''rpoint'''(мультиплеерные точки спавна). Убрали? Отлично. Создаем&lt;br /&gt;
'''Spawn elements -&amp;gt; actor''' ну и по желанию в свойствах ('''Properties''')&lt;br /&gt;
в '''custom data''' прописываем ему предположим вот это:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_ak74&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тем самым при появлении игрока у него в руках уже будет калаш. Далее,&lt;br /&gt;
создаем монстра... любого по желанию, предположим кровососа и ставим на уровень.&lt;br /&gt;
Теперь дело за '''AI map''' - аи сетка, которая необходима для того, чтобы&lt;br /&gt;
нпс, монстры могли ориентироваться по уровню. Жмем Object и кликаем на  земле(тем самым мы ее &amp;quot;выбрали&amp;quot; для дальнейших манипуляций), затем '''AI Map''' -&amp;gt; '''Commands''' -&amp;gt; '''Make list from selected''', жмем '''add''' в разделе '''AI Map Nodes''' и '''add''' для добавления объектов слева вверху(чайник) и ставим на карте ноды в нужном вам порядке(достаточно одного), жмем '''Generate Full'''. Всё, аи-сетка сгенерированна. Теперь добавляем на левел обязательно! 1 graph point ('''Spawns-&amp;gt;ai-&amp;gt;graph point'''), в нем можно ничего не писать. Сохраняем уровень, билдим ('''build'''). &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; и в командной строке пишем (mp_atp_test,здесь название карты):&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;
Следующим шагом будет правка конфигов. Править конфиги следует в папке gamedata\configs папки SDK, а потом можно перенести файлы в аналогичную папку с игрой.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
'''game_maps_single.ltx'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[level_maps_single]&lt;br /&gt;
...&lt;br /&gt;
testing_ai &lt;br /&gt;
//название вашего уровня&lt;br /&gt;
&lt;br /&gt;
[testing_ai]&lt;br /&gt;
global_rect  = -6,1220.0, 248.0,1481.0&lt;br /&gt;
texture      = map\map_escape&lt;br /&gt;
//текстура при загрузке&lt;br /&gt;
bound_rect  = -502.148,-412.284,379.976,474,479&lt;br /&gt;
weathers  = default&lt;br /&gt;
//погода&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''game_levels.ltx'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[levels]&lt;br /&gt;
...&lt;br /&gt;
level190&lt;br /&gt;
//номер вашего уровня&lt;br /&gt;
&lt;br /&gt;
[level190]&lt;br /&gt;
name   = testing_ai&lt;br /&gt;
caption = &amp;quot;testing_ai&amp;quot;&lt;br /&gt;
offset  = 2000.0, 800.0, 1000.0    // положение нового уровня на глобальной карте, X, Y, Z&lt;br /&gt;
id   = 193&lt;br /&gt;
//индентифакционный номер, должен быть уникальным&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''game_graphs.ltx'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
018   = &amp;quot;testing_ai&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь открываем AI Compiler, указываем папку с '''сдк'''(.../level_editor, либо если он объединен с игрой, путь до нее). Выбираем ваш уровень.&lt;br /&gt;
Проходим 1ую стадию чернового просчета аи карты('''шаг 1'''), либо если вы хотите долго ждать и просчитать укрытия для нпс то выбираем '''шаг 2'''.&lt;br /&gt;
Далее строим граф и кросс-таблицу уровня шаг 3, потом граф игры '''шаг 4''' и наконец фаил .spawn '''шаг 5'''. После всех стадий заходим в gamedata\spawns\ и переименовываем '''test.spawn''' в '''all.spawn'''&lt;br /&gt;
&lt;br /&gt;
''Важно - Если ваш X-Ray SDK НЕ объединён с игрой, то при переносе файлов для старта без вылетов вы должны перенести из папки с X-Ray SDK следующие файлы:&lt;br /&gt;
# gamedata\config\game_maps_single.ltx&lt;br /&gt;
# gamedata\config\game_graphs.ltx&lt;br /&gt;
# gamedata\config\game_levels.ltx&lt;br /&gt;
# gamedata\levels\папка с вашим уровнем&lt;br /&gt;
# gamedata\spawns\all.spawn'''''&lt;br /&gt;
# gamedata\game.graph(этот файл многие не копируют и получают вылет при запуске игры)'''&lt;br /&gt;
&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Важные моменты -- Loxotron|&lt;br /&gt;
message = При правке конфигов не забывайте указывать реально существующую там погоду и картинку загрузки, иначе вылетит; также не пытайтесь запустить уровень через .bat фаил, подобный указанному ниже, тоже будет вылет&lt;br /&gt;
&amp;lt;pre&amp;gt;bin\xr_3da.exe -ltx user.ltx -nointro -external -start server(level/single) client(localhost)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правильный .bat фаил&lt;br /&gt;
&amp;lt;pre&amp;gt;@start bin\XR_3DA.exe -start server(%1/single/alife) client(localhost)&amp;lt;/pre&amp;gt;&lt;br /&gt;
%1 - название левела&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Углубленное изучение==&lt;br /&gt;
Далее мы рассмотрим как собирать несколько уровней и устанавливать между ними переходы.&lt;br /&gt;
&lt;br /&gt;
Итак у вас два уровня... на одном из них стоит '''actor'''. Начнем с него:&lt;br /&gt;
создаем '''ai-&amp;gt;level changer''', затем '''shape-&amp;gt;sphere''', с помощью '''scale''' увеличиваем до необходимых размеров, теперь переключаемся в режим редактирования '''spawn element''', выделяем '''level changer''' и жмем '''commands-&amp;gt;attach object''', а затем кликаем на сферу... Всё, сфера и level changer теперь связаны. Далее идем в закладку '''properties''', указываем название, например '''to_atp_2''', теперь нужно прописать в '''custom data''' вейпоинт для возврата, в случае отказа игрока от перемещения с локации на локации(обязательно). Вписываем вот это:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[pt_move_if_reject]&lt;br /&gt;
path = atp_1_way_if_reject&lt;br /&gt;
//в случае отказа от перемещения на вторую локу, возвращаемся назад&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В '''Level to change''' вписываем наименование уровня, куда мы хотим переместиться с этого левела, например '''atp_2'''. &lt;br /&gt;
И самое главное, в параметрах level_changer в пункте &amp;quot;restrictor type&amp;quot; поставить значение &amp;quot;not a restrictor&amp;quot;, в противном случае будет вылет при переходе на вторую локу&lt;br /&gt;
&lt;br /&gt;
 - '''скорее всего, тип рестриктора был использован на версии раньше 1.0004. На версии 1.0004 тип рестриктора не имеет значения и рестриктор отвечает только за внутренние настройки локации - Эээ...'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В '''Level Point to change''' указываем точку, в которой игрок появится...&lt;br /&gt;
'''start_actor_01'''. С '''level changer''' на этом уровне всё, пошли далее.&lt;br /&gt;
Создаем '''graph point''' или используем пустой существующий если у вас есть.&lt;br /&gt;
В него вписываем '''start_actor_01''', этот поинт для того чтобы мы смогли со второго левела '''atp_2''' перейти на '''atp_1'''(первый). Создаем еще один '''graph point''' c названием '''exit_atp_1_01''', в разделе '''location''' выбираем, например &amp;quot;экскейп&amp;quot;. В '''Connection -&amp;gt; Level name''' указываем уровень, с которым будет связан '''atp_1''', то есть выбираем '''atp_2''', в '''Connection-&amp;gt;Point Name''' вписываем точку связи из второго уровня, которую мы создадим потом '''exit_atp_2_01'''. С первым уровнем всё...&lt;br /&gt;
&lt;br /&gt;
Для чего нам нужен graph point'ы ''exit_xxx''?&lt;br /&gt;
''exit_xxx'' представляет собой '''connection_point'''(точку связи) - для того, чтобы компилятор знал, какие уровни он соединяет, а если по другому: начальный граф уровня, от него потом считаются все ноды.&lt;br /&gt;
&lt;br /&gt;
'''start_actor_xx''' - точка появления актера после перехода.&lt;br /&gt;
&lt;br /&gt;
Помните мы вписали в '''custom data''' '''level changer''''а вейпоинт? Вот теперь нам придется его создать. Выбираем '''Way Points''' -&amp;gt; жмем &amp;quot;чайник&amp;quot; и стави 1 вейпоинт рядом с level changer(так мы создали начальную точку пути), теперь жмем '''point mode''' и ставим второй. Если они не соеденились стрелочкой, жмем '''create 1-link'''. Теперь у нас получился путь, который мы прописали в custom data '''level changer''', заходим в свойства и обзываем его также как и в '''custom data''', тоесть '''atp_1_way_if_reject'''. Всё с первым уровнем покончили.&lt;br /&gt;
&lt;br /&gt;
Итак, открываем второй уровень и поехали по новой...&lt;br /&gt;
&lt;br /&gt;
Создаем там путь из двух вейпоинтов по схеме выше и обзываем '''atp_2_way_if_reject'''. Создаем level changer называем его '''to_atp_1''',&lt;br /&gt;
в '''custom data''' пишем&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[pt_move_if_reject]&lt;br /&gt;
path = atp_2_way_if_reject //название вэйпоинта&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В '''level to change''' указываем atp_1 //куда переходим с atp_2&lt;br /&gt;
В '''level point to change''' - '''start_actor_01'''(дада, тот который мы создали на первом левеле :) )&lt;br /&gt;
&lt;br /&gt;
Теперь здесь же на atp_2 создаем graph point с названием '''start_actor_01'''.&lt;br /&gt;
И еще один где вписываем следущие значения:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Name: exit_atp_2_01&lt;br /&gt;
Location: &amp;quot;свалка&amp;quot; //наименование локации&lt;br /&gt;
&lt;br /&gt;
Connection:&lt;br /&gt;
 Level name: atp_1 //первый уровень&lt;br /&gt;
 Point name: exit_atp_1_01 //связующая точка с первого уровня&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Незабудьте, что '''ACTOR''' должен быть только на одной локации(в нашем случае на atp_1), иначе компилятор выдаст ошибку. Всё!... Сохраняем, прекомпилим.&lt;br /&gt;
&lt;br /&gt;
Запускаем '''Ai Compiler''', выбираем по очереди наши два уровня и просчитываем шаг 1, проверям сетку. Теперь создаем ''текстовый документ'' и вписываем туда&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
@start /wait bins\ai\1.exe -g atp_1&lt;br /&gt;
@start /wait bins\ai\1.exe -g atp_2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
сохраняем его как .bat и запускаем, в результате у каждого уровня &lt;br /&gt;
появится свой '''level.graph'''(граф и кросс-таблица).&lt;br /&gt;
&lt;br /&gt;
Создаем еще один текстовик, пишем&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
@start /wait bins\ai\1.exe -m&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
сохраняем как .bat и стартуем. Так мы собрали '''game.graph''' из '''level.graph''''ов.&lt;br /&gt;
&lt;br /&gt;
И наконец.. создаем 3ий &amp;quot;бантик&amp;quot; для сборки '''all.spawn'''!&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
bins\ai\1.exe -s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Компилим, заходим в '''gamedata\spawns\''', переименовываем получившийся спавн в '''all.spawn''' и запускаем через новую игру. Как видите, вы можете перемещаться с уровня на уровень, туда сюда без каких-либо проблем.&lt;br /&gt;
&lt;br /&gt;
Чуть не забыл, обязательно временно, на время компиляции переместите все остальные левелы игры кроме ваших в любую другую папку, иначе &lt;br /&gt;
могут быть ошибки при сборе графов и спавна.&lt;br /&gt;
&lt;br /&gt;
Для сборки '''всех''' сингл уровней из оригинальной игры &lt;br /&gt;
используйте bat фаил: [http://stalkerin.gameru.net/developer/mods/levelgraph_fullgame.bat fullgame.bat]&lt;br /&gt;
Если будут ошибки связанные с алайфом, жмем ''продолжить''. Потом выполняйте процедуры как написано выше, сборка '''game.graph''', а затем '''all.spawn'''.&lt;br /&gt;
&lt;br /&gt;
==Добавляем наш уровень в сингл-плеер!==&lt;br /&gt;
&lt;br /&gt;
Такс, продолжаем. Мне таки удалось наконец-то совместить свой тестовый левел с картами гсц. Итак приступим. Во первых нам необходим левел... свой, подготовленный. Если вы не читали инструкции выше, то дальше вам делать нечего. На нашем левеле должна быть во-первых '''connection point'''(соеденительная точка), вписываем в нее параметры данного примера, предположим такие:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
   Name: point_test_location_escape // название коннекшн-поинта&lt;br /&gt;
&lt;br /&gt;
  Connection&lt;br /&gt;
       Level Name:L01_Escape //с каким уровнем его связываем&lt;br /&gt;
       Point Name:esc_graph_point_0034 //соеденительный поинт на эскейпе, как &lt;br /&gt;
                                      //его добавить будет объяснено '''ниже'''.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Сделали?&lt;br /&gt;
&lt;br /&gt;
Теперь создаем еще один граф на уровне, вписываем просто его имя...&lt;br /&gt;
например '''Name: start_actor_01'''. Обязательно добавляем на уровень какой-нибудь уникальный объект... предположим '''машину'''. Зачем, узнаете потом. Но на левеле ни в коем случае не должно быть '''ACTOR''''а!! Сохраняем, прекомпилим левел. Компилим с помощью '''xrLC''' весь уровень, теперь открываем '''AICompiler''' от нео и выполняем '''1 или 2 и 3 шаги''' в отношении нашего левела. &lt;br /&gt;
&lt;br /&gt;
Теперь нам нужно заручиться ОСОБЫМИ инструментами, в нашем случае понадобится [http://www.rapidshare.ru/532500 скрипт] от бардака, который позволяет узнать при запуске любого левела его '''level_vertex_id''', '''game_vertex_id''', '''position'''(координаты игрока в данный момент), '''direction'''(координаты направления его &amp;quot;взгляда&amp;quot;), всё это потребуется при работе с '''acdc''' несколькими этапами ниже. Загружаем игру, находим подходящее место где хотим видеть в будущем триггер для перехода уровней и записываем все параметры на бумажку, они нам понадобятся потом. По хорошему, желательно '''отдельно''' потом еще зайти в '''LE(level editor)''', открыть наш уровень, поставив эктора прям на графе с '''start_actor_01''', закомпилировать проект, пройти все шаги компиляции в '''xraicompiler'''(1,3,4,5,6), '''обязательно''' предварительно забэкапив '''game.graph''', начать новую игру и записать координаты '''level_vertex_id''' и '''direction''', но это достаточно нудно и сложно, но '''желательно''', а потом надо будет, вернуть всё в состояние до всех этих действий..., то есть убрать '''эктора''', восстановить оригинальный '''game.graph'''.&lt;br /&gt;
&lt;br /&gt;
Итак... у вас обязательно должна быть распакованна '''вся''' игра, установлен '''aiwrapper''' от бардака(читайте ридми по установке!!!), и '''aicompiler''' он нео.&lt;br /&gt;
&lt;br /&gt;
Создаем .bat фаил в папке с aiwrapper'ом с текстом&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
aiwrapper -extract_spawns&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
либо вводим тоже в тотал коммандере, с помощью этого ключа мы обновили '''level.spawn''''ы всех сингл-уровней, так как они не обновлялись со времен первого патча. &lt;br /&gt;
&lt;br /&gt;
Теперь изучаем '''links.sample''' в блокноте. ничего не поняли? поясняю: '''aiwrapper''' обладает полезнейшим ключом '''-m2'''.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 -m2 &amp;lt;файл&amp;gt;	- склеить ИИ-графы карт в глобальный игровой граф с&lt;br /&gt;
		  учётом поправок для связей из указанного файла&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
То есть с помощью него мы можем взять любой существующий граф на уровне гсц, который &amp;quot;не занят&amp;quot;, и добавить ему нужные нам значения, например сделать его коннекшн поинтом(соеденительной точкой), а потом всё это склеится в общий глобальный '''game.graph'''.&lt;br /&gt;
&lt;br /&gt;
Выполняем  ''aiwrapper -dump_graph graphs.txt'' батом или тоталом. Комманда выведет нам  список исходных вершин ИИ-графа в указанный файл, то есть список скомпиленных графов всех сингл-уровней гсц в фаил '''graphs.txt'''. Находим там точку '''esc_graph_point_0034'''. Видите что она пуста в плане связей в отличии от exit_escape_01,02? Значит мы можем ее использовать, в оригинале разрабы их ставили для путей ботов, то есть по ним перемещается аи, но мы ее заюзаем для связи с нашим тестовым левелом.&lt;br /&gt;
&lt;br /&gt;
Итак, создаем например текстовик '''links_fixed.txt''' и вписываем туда&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[l01_escape]&lt;br /&gt;
; добавляем переход для ИИ с Кордона на тестовый уровень.&lt;br /&gt;
esc_graph_point_0034	= test_level_x, point_test_location_escape&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
'''test_level_x''' - название нашего уровня.&lt;br /&gt;
'''point_test_location_escape''' - коннекшн поинт на нашем уровне.&lt;br /&gt;
То есть мы прописываем у графпоинта на эскейпе эти два параметра, которые препращают его в коннекшн-поинт, связанный с тем, что на нашем левеле; сохраняем текстовик.&lt;br /&gt;
&lt;br /&gt;
Выполняем батом или тотал коммандером:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
aiwrapper -m2 links_fixed.txt&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
ЗЫЫ Желательно перед этим действом временно переместить куда-нибудь неиспользуемые левелы(мультиплеерные тоже) от греха подальше.&lt;br /&gt;
Ждем пока соберется '''game_graph''', ошибок быть недолжно.&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Важные моменты 2 -- Loxotron|&lt;br /&gt;
message = Найден более простой способ вычисления '''game_vertex_id'''. В папке '''utils''' у компилятора бардака есть тулза '''ggtool.pl''' - утилита для показа межуровневых связей в '''game.graph'''. Копируем к утилите откомпилированный '''game.graph''' из '''gamedata\''' и выполняем прогу (в командной строке или через батник):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ggtool.pl game.graph &amp;gt;svyazi.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В результате в фаиле '''svyazi.txt''' в скобках будет указан '''game_vertex_id''' для конкретного уровня, таким образом не нужно узнавать '''dest_game_vertex_id''' c помощью перекомпилирования.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
l01_escape (0) --1206.29--&amp;gt; l02_garbage (415)&lt;br /&gt;
&lt;br /&gt;
0 - '''game_vertex_id''', 415 - '''dest_game_vertex_id''',&lt;br /&gt;
1206.29 - '''distance'''(расстояние между точками), не тот который в '''level_changer''''е, а между '''connection_point''''ами.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь дело за '''all.spawn''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
aiwrapper -s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В результате соберется полноценный '''all.spawn''' из всех уровней которые есть в папке '''levels'''. Но на этом работа только начинается, теперь надо '''отредактировать''' этот получившийся '''all.spawn''' и добавить '''level_changer''' на уровень гсц, чтобы мы смогли перейти с него на наш.(в нашем случае с эскейпа на test_level_x). Копируем получившийся '''all.spawn''' в &amp;lt;туда, куда вы распаковали aiwrapper&amp;gt;\utils и создаем .bat с таким текстом: &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
acdc.pl -d all.spawn&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В результате мы разобрали all.spawn на ltx'сы, нам нужен '''alife_l01_escape.ltx''', вписываем в конец туда это:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[не забитый номер]&lt;br /&gt;
;например 9000&lt;br /&gt;
section_name = level_changer &lt;br /&gt;
name = exit_to_new_location_from_esc&lt;br /&gt;
;любое_название_на_англ, (только не использованное)&lt;br /&gt;
position =&lt;br /&gt;
;здесь координаты где находиться левел чейнджер&lt;br /&gt;
;помните бумажку с координатами и параметрами, которую мы писали раньше?&lt;br /&gt;
;смотрим ту где параметры и координаты эскейпа и вписываем&lt;br /&gt;
direction = 0,0,0 &lt;br /&gt;
;направление &amp;quot;взгляда&amp;quot; игрока&lt;br /&gt;
;по желанию, можно вписать координаты с бумажки&lt;br /&gt;
game_vertex_id =  &lt;br /&gt;
;номер вершины игрового графа, задаёт первую вершину графа на данной локации&lt;br /&gt;
;с бумажки эскейпа&lt;br /&gt;
distance = 14.6999998092651&lt;br /&gt;
;&amp;quot;Расстояние&amp;quot; между точкой перехода(level_changer) и точкой появления&lt;br /&gt;
;актера на другом уровне (если считать зону неделимой), можно и 0.&lt;br /&gt;
level_vertex_id = &lt;br /&gt;
;Вершина уровневого графа, должно покатить '''-1''', но &lt;br /&gt;
;ставьте лучше то что записано на бумажке с эскейпа&lt;br /&gt;
object_flags = 0xffffff3e&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[pt_move_if_reject]&lt;br /&gt;
path = esc_way_test_if_reject&lt;br /&gt;
END&lt;br /&gt;
;custom data, где указано имя вейпоинта, который мы потом создадим &lt;br /&gt;
;на карте с помощью acdc, таже '''custom data''', что в начале &lt;br /&gt;
;статьи.&lt;br /&gt;
story_id =&lt;br /&gt;
;поставьте здесь неиспользуемый ID, например 8435&lt;br /&gt;
shapes = shape0&lt;br /&gt;
shape0:type = box&lt;br /&gt;
shape0:axis_x = 5.8284006118774,0,0&lt;br /&gt;
shape0:axis_y = 0,5.0005970001221,0&lt;br /&gt;
shape0:axis_z = 0,0,5.3902206420898&lt;br /&gt;
shape0:offset = 0,0,0&lt;br /&gt;
;сфера, в данном случае куб, именно в нем будет активироваться наш переход&lt;br /&gt;
restrictor_type = 3&lt;br /&gt;
&lt;br /&gt;
;выставляем здесь все переменные для нового уровня&lt;br /&gt;
dest_game_vertex_id = &lt;br /&gt;
;номер вершины графа нашей новой локации, туда игрок переместится&lt;br /&gt;
;помните '''уникальный''' объект, который я просил вас поставить?&lt;br /&gt;
;открываем '''alife_lxx_unknown.ltx''' и ищем тачку, сдираем значение с нее&lt;br /&gt;
dest_level_vertex_id =&lt;br /&gt;
;вершина уровнего графа нового левела&lt;br /&gt;
;должно покатить -1, но лучше взять с бумажки с параметрами с тестового левела&lt;br /&gt;
dest_position =&lt;br /&gt;
;координаты на нашем уровне, где ты появляешься&lt;br /&gt;
;с бумажки тестового левела, либо наугад, либо используйте открорректированные&lt;br /&gt;
;координаты с любого объекта на вашей карте, то есть например есть дерево&lt;br /&gt;
;c координатами 0, 1 , 2, корректируем относительно дерева и &lt;br /&gt;
;вписываем например 4, 1, 2&lt;br /&gt;
dest_direction = 0,-1.12671363353729,0&lt;br /&gt;
;направление &amp;quot;взгляда игрока на новом уровне&amp;quot;&lt;br /&gt;
;по желанию&lt;br /&gt;
dest_level_name = &lt;br /&gt;
;название вашего уровня, в нашем случае test_level_x&lt;br /&gt;
dest_graph_point = &lt;br /&gt;
;название точки спавна игрока(графа, то есть в нашем случае&lt;br /&gt;
;start_actor_01)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Еще одно определение двух параметров для непонятливых:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
game_vertex_id - ставится как коннекшн поинт ('''graph_point''' c соответствующими настройками)&lt;br /&gt;
level_vertex_id - '''graph_point''' - ставится как обычная граф поинт с уникальным номером без параметров&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В них вписываем уникальный ID для каждого уровня, то есть в некоторых случаях просто смотрим эти два параметра у соседних объектов этого левела и вписываем значения. Как правило, '''level_vertex_id''' можно поставить '''-1''', но не для всех объектов, '''game_vertex_id''' = ид уровня.&lt;br /&gt;
&lt;br /&gt;
Устали? =) А ведь еще не всё, нужно создать вейпоинт, который мы прописали в '''custom data''' '''level changer''''а. Открываем '''way_l01_escape.ltx''' и вписываем чтото типа:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[esc_way_test_if_reject]&lt;br /&gt;
points = p0,p1&lt;br /&gt;
;два вейпоинта&lt;br /&gt;
p0:name = name_test1&lt;br /&gt;
;имя вейпоинта 1&lt;br /&gt;
p0:position = -243.491257,-19.758562,-140.328583&lt;br /&gt;
;его координаты, ставьте их рядом с координатами level_changer&lt;br /&gt;
;но не в нём, корректируйте их, как в примере с деревом &lt;br /&gt;
p0:game_vertex_id = 8&lt;br /&gt;
p0:level_vertex_id = -1&lt;br /&gt;
p0:links = p1(1)&lt;br /&gt;
&lt;br /&gt;
p1:name = name_test2&lt;br /&gt;
;имя вейпоинта 2&lt;br /&gt;
p1:position = -255.491257,-19.758562,-140.328583&lt;br /&gt;
;его координаты, всё тоже самое, только корректируйте относительно позиции&lt;br /&gt;
; вейпоинта 0, как в этом примере.&lt;br /&gt;
p1:game_vertex_id = 9&lt;br /&gt;
p1:level_vertex_id = -1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Поставили? Всё, осталось только собрать '''all.spawn''', батом или тотал коммандером выполняем это:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
acdc.pl -c all.ltx&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Теперь копируем получившийся '''all.spawn.new''' в '''gamedata\spawns\''' и переименовываем его в '''all.spawn'''.&lt;br /&gt;
&lt;br /&gt;
Мученья окончились :) Запускайте новую игру и наслаждайтесь вашим переходом...&lt;br /&gt;
&lt;br /&gt;
==В заключении==&lt;br /&gt;
Если вы хотите, чтобы ваша точка перехода отображалась на карте игрока, то лезем в '''level_tasks.script''' и добавляем в '''function add_lchanger_location()''' секцию, подобную представленной ниже:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		-- test_level_x&lt;br /&gt;
		local obj = sim:story_object(8435)&lt;br /&gt;
		if obj then&lt;br /&gt;
			level.map_add_object_spot(obj.id, &amp;quot;level_changer&amp;quot;, &amp;quot;exit_to_new_location_from_esc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В строке (obj.id, &amp;quot;level_changer&amp;quot;, &amp;quot;'''exit_to_new_location_from_esc'''&amp;quot;) выделенный текст - наименование вашего '''level_changer''', а число - его уникальный '''story_id''' на уровне, например на эскейпе или вашем левеле, список занятых '''story_id''' смотреть необязательно. Братьь любое число от 10000&lt;br /&gt;
&lt;br /&gt;
==Список необходимых программ ==&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewtheoned&amp;amp;lid=165 AiCompiler 0.1] от '''Neo'''&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewtheoned&amp;amp;lid=166 AiWrapper] от '''bardak''''а&lt;br /&gt;
*[http://www.rapidshare.ru/532500 Info_LVID_GVID] скрипт от '''bardak''''а&lt;br /&gt;
*[http://files.gsc-game.com/st/xray-sdk-setup-v0.4.exe SDK 0.4] от '''GSC'''&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewdownload&amp;amp;cid=13 SDK Update] от '''Neo''' + '''GSC'''&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewdownload&amp;amp;cid=13 Fixed Shaders] от '''Haron'''&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=getit&amp;amp;lid=308 патч для SDK  0.3] от '''Haron'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''written by Loxotron'''&lt;br /&gt;
&lt;br /&gt;
'''updated 11.01.08 by Loxotron'''&lt;br /&gt;
&lt;br /&gt;
'''24/06/08 небольшое добавление о компиляции - Kalinin11'''&lt;br /&gt;
&lt;br /&gt;
'''Дополнил информацией для тех, у кого X-Ray SDK не объединён с игрой  - Эээ...'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=All.spawn._%D0%9E%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F</id>
		<title>All.spawn. Отображения нового уровня</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=All.spawn._%D0%9E%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F"/>
				<updated>2009-06-27T15:53:27Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак, чтобы в распакованном all.spawn отображались новые уровни(а не lxx_unkown) проводим простую манипуляцию&lt;br /&gt;
Открываем блокнотом acdc.pl и находим в нём строчку constant levels_info&lt;br /&gt;
&amp;lt;pre&amp;gt;use constant levels_info =&amp;gt; (&lt;br /&gt;
	{ gvid0 =&amp;gt; 2792, },&lt;br /&gt;
	{ gvid0 =&amp;gt; 2697,	name =&amp;gt; 'deadcity' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 2332,	name =&amp;gt; 'l13_generators' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 2328,	name =&amp;gt; 'rem_basa' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 2326,	name =&amp;gt; 'marsh' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 2243,	name =&amp;gt; 'red_forest' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 2099,	name =&amp;gt; 'l12_stancia_2' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 2049,	name =&amp;gt; 'l12u_control_monolith' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 1984,	name =&amp;gt; 'l12u_sarcofag' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 1855,	name =&amp;gt; 'l12_stancia' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 1699,	name =&amp;gt; 'l11_pripyat' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 1029,	name =&amp;gt; 'l10_radar' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 1127,	name =&amp;gt; 'l07_military' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 1111,	name =&amp;gt; 'l08u_brainlab' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 1020,	name =&amp;gt; 'l08_yantar' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 890,	name =&amp;gt; 'l06_rostok' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 883,	name =&amp;gt; 'l05_bar' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 824,	name =&amp;gt; 'l04u_labx18' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 811,		name =&amp;gt; 'l04_darkvalley' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 703,		name =&amp;gt; 'l03u_agr_underground' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 416,		name =&amp;gt; 'l03_agroprom' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 252,		name =&amp;gt; 'l02_garbage' },&lt;br /&gt;
	{ gvid0 =&amp;gt; 0,		name =&amp;gt; 'l01_escape' },&lt;br /&gt;
);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Цифр..английские буквы..страшно? Я понимаю, думаете мне в первый раз было лучше?:)&lt;br /&gt;
Буду краток как наш призедент&lt;br /&gt;
 { gvid =&amp;gt; нижний гейм вертекс уровня,            name =&amp;gt; 'имя_левела_соотвествущюего_вертексу' },&lt;br /&gt;
Вот собсно и усё. Теперь рассмотрим траблу глубже.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Как известно, если добавляешь много локаций (более 3, а то и двух) сталкиваешься с этакой фигней: в ltx'сах спавна все обьекты сбиваются...Например то, что заспавнено на милитари появляется на кордоне...обьекты спавнятся не там где надо и.т.д короч полный зАд! Делаем следущее. Отедяем наши локи от общего спавна, стираем в acdc.pl в use constant levels_info все локи кроме нашй. Компилим. Подтираем лишние обьекты, берём спаун из СДК кидаем туда оригинальные обьекты, совмещаем с нашими локами и всё! Может пару десятков обьектов надо будет перелопатить, но не 8000 с лишним)&lt;br /&gt;
Статейка маленькая, но дмаю принесёт пользу. &lt;br /&gt;
&lt;br /&gt;
Немного теории. АСДС'шка создаёт лтиксы именно по &amp;lt;pre&amp;gt;use constant levels_info&amp;lt;/pre&amp;gt; этой схеме. На самом деле довольно просто, лтикс создаётся с именем уровня и в него вписываются обьекты с принадлежащим гейм_вертексом. Напомню, в gvid0 указывать только начальный вертекс уровня. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Авторы:&amp;lt;/math&amp;gt; Спс Xiani за добавление лтик'сов в спаун. А так FL TEAM(именно Rez@niy)&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=CS._%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B2%D1%83%D1%85_%D0%BB%D0%BE%D0%BA%D0%B0%D1%86%D0%B8%D0%B9_%D0%BA_%D1%81%D0%B8%D0%BD%D0%B3%D0%BB%D1%83</id>
		<title>CS. Подключение двух локаций к синглу</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=CS._%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B2%D1%83%D1%85_%D0%BB%D0%BE%D0%BA%D0%B0%D1%86%D0%B8%D0%B9_%D0%BA_%D1%81%D0%B8%D0%BD%D0%B3%D0%BB%D1%83"/>
				<updated>2009-06-16T18:21:40Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак, как же подключить две локации к синглу? А то и 4?Та легко! Подробный разбор для тугодумов&lt;br /&gt;
В конфигах game_maps_single.ltx&lt;br /&gt;
&amp;lt;pre&amp;gt;[level_maps_single]&lt;br /&gt;
................&lt;br /&gt;
..............&lt;br /&gt;
.............&lt;br /&gt;
red_forest&lt;br /&gt;
marsh&amp;lt;/pre&amp;gt; &lt;br /&gt;
и секцию в низ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
[red_forest]&lt;br /&gt;
texture			= map\map_aes_1&lt;br /&gt;
bound_rect		= -256.776, -747.782, 1398.440, 850.523&lt;br /&gt;
global_rect		= 253.0, 74.0,	737.0,541.358704&lt;br /&gt;
weathers		= default&lt;br /&gt;
music_tracks    = l12_stancia_2_musics&lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;br /&gt;
[marsh]&lt;br /&gt;
texture			= map\map_aes_1&lt;br /&gt;
bound_rect		= -256.776, -747.782, 1398.440, 850.523&lt;br /&gt;
global_rect		= 253.0, 74.0,	737.0,541.358704&lt;br /&gt;
weathers		= default&lt;br /&gt;
music_tracks    = l12_stancia_2_musics&lt;br /&gt;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь game_levels.ltx&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[levels]&lt;br /&gt;
.....&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
level190	&lt;br /&gt;
level191&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;[level190]&lt;br /&gt;
 name   = red_forest&lt;br /&gt;
 caption = &amp;quot;red_forest&amp;quot;&lt;br /&gt;
 offset  = 2000.0,	800.0,	1000.0&lt;br /&gt;
 id   = 190&lt;br /&gt;
&lt;br /&gt;
[level191]&lt;br /&gt;
 name   = marsh&lt;br /&gt;
 caption = &amp;quot;marsh&amp;quot;&lt;br /&gt;
 offset  = 2000.0,	800.0,	1000.0&lt;br /&gt;
 id   = 191&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь граф поинты&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;red_forest&amp;lt;/big&amp;gt;&lt;br /&gt;
первый граф;  Name start_actor_01&lt;br /&gt;
второй граф: Name exit_rf&lt;br /&gt;
             На уровень:marsh&lt;br /&gt;
             коннекшн поинт на marsh: exit_marsh&lt;br /&gt;
Левел чангер: Level marsh&lt;br /&gt;
              Левел поинт ту чанг: start_actor_01&lt;br /&gt;
         &lt;br /&gt;
&amp;lt;big&amp;gt;marsh&amp;lt;/big&amp;gt;&lt;br /&gt;
Первый граф: Name start_actor_01&lt;br /&gt;
Второй граф: Name exit_marsh&lt;br /&gt;
              На уровне rd_forest exit_rf&lt;br /&gt;
Левел Чангер: Level red_forest&lt;br /&gt;
              Левел поинт ту чанг start_actor_01&lt;br /&gt;
uгы))))))&lt;br /&gt;
Вроде всё. Способ проверен. &lt;br /&gt;
З,Ы, Коннекшн поинты должны быть на каждом уровне&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D1%8B_%D0%B8_%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F</id>
		<title>Настройка погоды и освещения</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D1%8B_%D0%B8_%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F"/>
				<updated>2009-06-11T10:57:03Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: /* Авторы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.quizilla.com/poems/9369496/viagra-commercials viagra commercials or http://www.quizilla.com/poems/9369498/rapid-tabs-viagra rapid tabs viagra or http://www.quizilla.com/poems/9369500/viagra-cheapest-online-sellers viagra cheapest online sellers or http://www.quizilla.com/poems/9369501/compare-levetria-and-viagra compare levetria and viagra or http://www.quizilla.com/poems/9369502/viagra-order-uk viagra order uk&lt;br /&gt;
&lt;br /&gt;
==Авторы==&lt;br /&gt;
ВЕРНПИТЕ СТАТЬЮ ПОЖАЛУЙСТО&amp;quot;&lt;br /&gt;
Статья создана по материалам, предоставленным:&lt;br /&gt;
&lt;br /&gt;
* [[Участник:Argus|Argus]]&lt;br /&gt;
* [[Участник:Saharov|Saharov]]&lt;br /&gt;
* [[Участник:sergy172|sergy172]]&lt;br /&gt;
* [[Участник:Xarvius|Xarvius]]&lt;br /&gt;
* [[Участник:NightVz|NightVz]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные_файлы]]&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B5%D1%81%D1%82%D1%80%D0%B8%D0%BA%D1%82%D0%BE%D1%80%D1%8B</id>
		<title>Рестрикторы</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B5%D1%81%D1%82%D1%80%D0%B8%D0%BA%D1%82%D0%BE%D1%80%D1%8B"/>
				<updated>2009-05-18T12:15:37Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: /* Простейший пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Очень интересный объект, я долго нифтыкал, зачем он нужен - теперь начинаю догадываться. Рестрикторы созданы для проверки условий и запуска определённых событий.&lt;br /&gt;
&lt;br /&gt;
== Простейший пример ==&lt;br /&gt;
Ну, например, зона убора оружия :-)&lt;br /&gt;
Режим: спаун-элементы.&lt;br /&gt;
Создайте на вашем уровне рестриктор, создайте зону влияния нужного размера, привяжите рестриктор к зоне влияния. Дальше можно приколоться, создав сосыча или бюрера, чтоб уж наверняка игрок обкакался у монитора за игрой X)&lt;br /&gt;
&lt;br /&gt;
Далее надо зайти в параметры рестриктора и в custom data(доп. параметры) записать следующие строки:&lt;br /&gt;
&lt;br /&gt;
[logic]&lt;br /&gt;
&lt;br /&gt;
active = sr_no_weapon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[sr_no_weapon]&lt;br /&gt;
&lt;br /&gt;
''В опциях restrictor type следует выбрать NOT a restrictor''&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;
[[Категория:SDK]]&lt;br /&gt;
НАРОД СТАТЬЯ БРЕДОВАЯ!ДЛЯ ВЫПОЛНЕНИЯ ДЕЙСТВИЙ СЛУЖАТ ИНФОПОРШНИ!ДЛЯ ПРОВЕРКИ - ГУЛАГИ(выполнения действий с НПС)тут ваще какаято чушь написано про обьект в all.spawn =&amp;gt; trader_zone зона в которой убираетсЯ оружие&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_-%3DinGame_%D0%90%D0%98%3D-</id>
		<title>Компиляция -=inGame АИ=-</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_-%3DinGame_%D0%90%D0%98%3D-"/>
				<updated>2009-03-05T08:45:50Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: /* В заключении */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак, приступим... Раз вы здесь, значит есть на то причина:&lt;br /&gt;
*1)либо вы нуп, увидевший аи-компилер и решивший забацать чтото крутое&lt;br /&gt;
*2)вы не нуп, но всё забыли или почти всё&lt;br /&gt;
*3)вы супер-аццкий про решивший глянуть на весь этот детсад свысока )&lt;br /&gt;
*4)вы обычный модер, решивший расширить свои текущие познания. ;)&lt;br /&gt;
&lt;br /&gt;
==Основы==&lt;br /&gt;
Ну что ж... начнем с самого простого, скомпилим левел с аи, монстрами на&lt;br /&gt;
карте '''mp_atp'''. Открываем левел.. первое что надо сделать убрать все &lt;br /&gt;
'''rpoint'''(мультиплеерные точки спавна). Убрали? Отлично. Создаем&lt;br /&gt;
'''Spawn elements -&amp;gt; actor''' ну и по желанию в свойствах ('''Properties''')&lt;br /&gt;
в '''custom data''' прописываем ему предположим вот это:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_ak74&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тем самым при появлении игрока у него в руках уже будет калаш. Далее,&lt;br /&gt;
создаем монстра... любого по желанию, предположим кровососа и ставим на уровень.&lt;br /&gt;
Теперь дело за '''AI map''' - аи сетка, которая необходима для того, чтобы&lt;br /&gt;
нпс, монстры могли ориентироваться по уровню. Жмем Object и кликаем на  земле(тем самым мы ее &amp;quot;выбрали&amp;quot; для дальнейших манипуляций), затем '''AI Map''' -&amp;gt; '''Commands''' -&amp;gt; '''Make list from selected''', жмем '''add''' в разделе '''AI Map Nodes''' и '''add''' для добавления объектов слева вверху(чайник) и ставим на карте ноды в нужном вам порядке(достаточно одного), жмем '''Generate Full'''. Всё, аи-сетка сгенерированна. Теперь добавляем на левел обязательно! 1 graph point ('''Spawns-&amp;gt;ai-&amp;gt;graph point'''), в нем можно ничего не писать. Сохраняем уровень, билдим ('''build'''). &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; и в командной строке пишем (mp_atp_test,здесь название карты):&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;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
'''game_maps_single.ltx'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[level_maps_single]&lt;br /&gt;
...&lt;br /&gt;
testing_ai &lt;br /&gt;
//название вашего уровня&lt;br /&gt;
&lt;br /&gt;
[testing_ai]&lt;br /&gt;
global_rect  = -6,1220.0, 248.0,1481.0&lt;br /&gt;
texture      = map\map_escape&lt;br /&gt;
//текстура при загрузке&lt;br /&gt;
bound_rect  = -502.148,-412.284,379.976,474,479&lt;br /&gt;
weathers  = default&lt;br /&gt;
//погода&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''game_levels.ltx'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[levels]&lt;br /&gt;
...&lt;br /&gt;
level190&lt;br /&gt;
//номер вашего уровня&lt;br /&gt;
&lt;br /&gt;
[level190]&lt;br /&gt;
name   = testing_ai&lt;br /&gt;
caption = &amp;quot;testing_ai&amp;quot;&lt;br /&gt;
offset  = 2000.0, 800.0, 1000.0    // положение нового уровня на глобальной карте, X, Y, Z&lt;br /&gt;
id   = 193&lt;br /&gt;
//индентифакционный номер, должен быть уникальным&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''game_graphs.ltx'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
018   = &amp;quot;testing_ai&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь открываем AI Compiler, указываем папку с '''сдк'''(.../level_editor, либо если он объединен с игрой, путь до нее). Выбираем ваш уровень.&lt;br /&gt;
Проходим 1ую стадию чернового просчета аи карты('''шаг 1'''), либо если вы хотите долго ждать и просчитать укрытия для нпс то выбираем '''шаг 2'''.&lt;br /&gt;
Далее строим граф и кросс-таблицу уровня шаг 3, потом граф игры '''шаг 4''' и наконец фаил .spawn '''шаг 5'''. После всех стадий заходим в gamedata\spawns\ и переименовываем '''test.spawn''' в '''all.spawn'''&lt;br /&gt;
&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Важные моменты -- Loxotron|&lt;br /&gt;
message = При правке конфигов не забывайте указывать реально существующую там погоду и картинку загрузки, иначе вылетит; также не пытайтесь запустить уровень через .bat фаил, подобный указанному ниже, тоже будет вылет&lt;br /&gt;
&amp;lt;pre&amp;gt;bin\xr_3da.exe -ltx user.ltx -nointro -external -start server(level/single) client(localhost)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правильный .bat фаил&lt;br /&gt;
&amp;lt;pre&amp;gt;@start bin\XR_3DA.exe -start server(%1/single/alife) client(localhost)&amp;lt;/pre&amp;gt;&lt;br /&gt;
%1 - название левела&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Углубленное изучение==&lt;br /&gt;
Далее мы рассмотрим как собирать несколько уровней и устанавливать между ними переходы.&lt;br /&gt;
&lt;br /&gt;
Итак у вас два уровня... на одном из них стоит '''actor'''. Начнем с него:&lt;br /&gt;
создаем '''ai-&amp;gt;level changer''', затем '''shape-&amp;gt;sphere''', с помощью '''scale''' увеличиваем до необходимых размеров, теперь переключаемся в режим редактирования '''spawn element''', выделяем '''level changer''' и жмем '''commands-&amp;gt;attach object''', а затем кликаем на сферу... Всё, сфера и level changer теперь связаны. Далее идем в закладку '''properties''', указываем название, например '''to_atp_2''', теперь нужно прописать в '''custom data''' вейпоинт для возврата, в случае отказа игрока от перемещения с локации на локации(обязательно). Вписываем вот это:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[pt_move_if_reject]&lt;br /&gt;
path = atp_1_way_if_reject&lt;br /&gt;
//в случае отказа от перемещения на вторую локу, возвращаемся назад&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В '''Level to change''' вписываем наименование уровня, куда мы хотим переместиться с этого левела, например '''atp_2'''. &lt;br /&gt;
В '''Level Point to change''' указываем точку, в которой игрок появится...&lt;br /&gt;
'''start_actor_01'''. С '''level changer''' на этом уровне всё, пошли далее.&lt;br /&gt;
И самое главное, в параметрах level_changer в пункте &amp;quot;restrictor type&amp;quot; поставить значение &amp;quot;not a restrictor&amp;quot;, в противном случае будет вылет при переходе на вторую локу.&lt;br /&gt;
Создаем '''graph point''' или используем пустой существующий если у вас есть.&lt;br /&gt;
В него вписываем '''start_actor_01''', этот поинт для того чтобы мы смогли со второго левела '''atp_2''' перейти на '''atp_1'''(первый). Создаем еще один '''graph point''' c названием '''exit_atp_1_01''', в разделе '''location''' выбираем, например &amp;quot;экскейп&amp;quot;. В '''Connection -&amp;gt; Level name''' указываем уровень, с которым будет связан '''atp_1''', то есть выбираем '''atp_2''', в '''Connection-&amp;gt;Point Name''' вписываем точку связи из второго уровня, которую мы создадим потом '''exit_atp_2_01'''. С первым уровнем всё...&lt;br /&gt;
&lt;br /&gt;
Для чего нам нужен graph point'ы ''exit_xxx''?&lt;br /&gt;
''exit_xxx'' представляет собой '''connection_point'''(точку связи) - для того, чтобы компилятор знал, какие уровни он соединяет, а если по другому: начальный граф уровня, от него потом считаются все ноды.&lt;br /&gt;
&lt;br /&gt;
'''start_actor_xx''' - точка появления актера после перехода.&lt;br /&gt;
&lt;br /&gt;
Помните мы вписали в '''custom data''' '''level changer''''а вейпоинт? Вот теперь нам придется его создать. Выбираем '''Way Points''' -&amp;gt; жмем &amp;quot;чайник&amp;quot; и стави 1 вейпоинт рядом с level changer(так мы создали начальную точку пути), теперь жмем '''point mode''' и ставим второй. Если они не соеденились стрелочкой, жмем '''create 1-link'''. Теперь у нас получился путь, который мы прописали в custom data '''level changer''', заходим в свойства и обзываем его также как и в '''custom data''', тоесть '''atp_1_way_if_reject'''. Всё с первым уровнем покончили.&lt;br /&gt;
&lt;br /&gt;
Итак, открываем второй уровень и поехали по новой...&lt;br /&gt;
&lt;br /&gt;
Создаем там путь из двух вейпоинтов по схеме выше и обзываем '''atp_2_way_if_reject'''. Создаем level changer называем его '''to_atp_1''',&lt;br /&gt;
в '''custom data''' пишем&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[pt_move_if_reject]&lt;br /&gt;
path = atp_2_way_if_reject //название вэйпоинта&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В '''level to change''' указываем atp_1 //куда переходим с atp_2&lt;br /&gt;
В '''level point to change''' - '''start_actor_01'''(дада, тот который мы создали на первом левеле :) )&lt;br /&gt;
&lt;br /&gt;
Теперь здесь же на atp_2 создаем graph point с названием '''start_actor_01'''.&lt;br /&gt;
И еще один где вписываем следущие значения:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Name: exit_atp_2_01&lt;br /&gt;
Location: &amp;quot;свалка&amp;quot; //наименование локации&lt;br /&gt;
&lt;br /&gt;
Connection:&lt;br /&gt;
 Level name: atp_1 //первый уровень&lt;br /&gt;
 Point name: exit_atp_1_01 //связующая точка с первого уровня&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Незабудьте, что '''ACTOR''' должен быть только на одной локации(в нашем случае на atp_1), иначе компилятор выдаст ошибку. Всё!... Сохраняем, прекомпилим.&lt;br /&gt;
&lt;br /&gt;
Запускаем '''Ai Compiler''', выбираем по очереди наши два уровня и просчитываем шаг 1, проверям сетку. Теперь создаем ''текстовый документ'' и вписываем туда&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
@start /wait bins\ai\1.exe -g atp_1&lt;br /&gt;
@start /wait bins\ai\1.exe -g atp_2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
сохраняем его как .bat и запускаем, в результате у каждого уровня &lt;br /&gt;
появится свой '''level.graph'''(граф и кросс-таблица).&lt;br /&gt;
&lt;br /&gt;
Создаем еще один текстовик, пишем&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
@start /wait bins\ai\1.exe -m&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
сохраняем как .bat и стартуем. Так мы собрали '''game.graph''' из '''level.graph''''ов.&lt;br /&gt;
&lt;br /&gt;
И наконец.. создаем 3ий &amp;quot;бантик&amp;quot; для сборки '''all.spawn'''!&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
bins\ai\1.exe -s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Компилим, заходим в '''gamedata\spawns\''', переименовываем получившийся спавн в '''all.spawn''' и запускаем через новую игру. Как видите, вы можете перемещаться с уровня на уровень, туда сюда без каких-либо проблем.&lt;br /&gt;
&lt;br /&gt;
Чуть не забыл, обязательно временно, на время компиляции переместите все остальные левелы игры кроме ваших в любую другую папку, иначе &lt;br /&gt;
могут быть ошибки при сборе графов и спавна.&lt;br /&gt;
&lt;br /&gt;
Для сборки '''всех''' сингл уровней из оригинальной игры &lt;br /&gt;
используйте bat фаил: [http://stalkerin.gameru.net/developer/mods/levelgraph_fullgame.bat fullgame.bat]&lt;br /&gt;
Если будут ошибки связанные с алайфом, жмем ''продолжить''. Потом выполняйте процедуры как написано выше, сборка '''game.graph''', а затем '''all.spawn'''.&lt;br /&gt;
&lt;br /&gt;
==Добавляем наш уровень в сингл-плеер!==&lt;br /&gt;
&lt;br /&gt;
Такс, продолжаем. Мне таки удалось наконец-то совместить свой тестовый левел с картами гсц. Итак приступим. Во первых нам необходим левел... свой, подготовленный. Если вы не читали инструкции выше, то дальше вам делать нечего. На нашем левеле должна быть во-первых '''connection point'''(соеденительная точка), вписываем в нее параметры данного примера, предположим такие:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
   Name: point_test_location_escape // название коннекшн-поинта&lt;br /&gt;
&lt;br /&gt;
  Connection&lt;br /&gt;
       Level Name:L01_Escape //с каким уровнем его связываем&lt;br /&gt;
       Point Name:esc_graph_point_0034 //соеденительный поинт на эскейпе, как &lt;br /&gt;
                                      //его добавить будет объяснено '''ниже'''.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Сделали?&lt;br /&gt;
&lt;br /&gt;
Теперь создаем еще один граф на уровне, вписываем просто его имя...&lt;br /&gt;
например '''Name: start_actor_01'''. Обязательно добавляем на уровень какой-нибудь уникальный объект... предположим '''машину'''. Зачем, узнаете потом. Но на левеле ни в коем случае не должно быть '''ACTOR''''а!! Сохраняем, прекомпилим левел. Компилим с помощью '''xrLC''' весь уровень, теперь открываем '''AICompiler''' от нео и выполняем '''1 или 2 и 3 шаги''' в отношении нашего левела. &lt;br /&gt;
&lt;br /&gt;
Теперь нам нужно заручиться ОСОБЫМИ инструментами, в нашем случае понадобится [http://www.rapidshare.ru/532500 скрипт] от бардака, который позволяет узнать при запуске любого левела его '''level_vertex_id''', '''game_vertex_id''', '''position'''(координаты игрока в данный момент), '''direction'''(координаты направления его &amp;quot;взгляда&amp;quot;), всё это потребуется при работе с '''acdc''' несколькими этапами ниже. Загружаем игру, находим подходящее место где хотим видеть в будущем триггер для перехода уровней и записываем все параметры на бумажку, они нам понадобятся потом. По хорошему, желательно '''отдельно''' потом еще зайти в '''LE(level editor)''', открыть наш уровень, поставив эктора прям на графе с '''start_actor_01''', закомпилировать проект, пройти все шаги компиляции в '''xraicompiler'''(1,3,4,5,6), '''обязательно''' предварительно забэкапив '''game.graph''', начать новую игру и записать координаты '''level_vertex_id''' и '''direction''', но это достаточно нудно и сложно, но '''желательно''', а потом надо будет, вернуть всё в состояние до всех этих действий..., то есть убрать '''эктора''', восстановить оригинальный '''game.graph'''.&lt;br /&gt;
&lt;br /&gt;
Итак... у вас обязательно должна быть распакованна '''вся''' игра, установлен '''aiwrapper''' от бардака(читайте ридми по установке!!!), и '''aicompiler''' он нео.&lt;br /&gt;
&lt;br /&gt;
Создаем .bat фаил в папке с aiwrapper'ом с текстом&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
aiwrapper -extract_spawns&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
либо вводим тоже в тотал коммандере, с помощью этого ключа мы обновили '''level.spawn''''ы всех сингл-уровней, так как они не обновлялись со времен первого патча. &lt;br /&gt;
&lt;br /&gt;
Теперь изучаем '''links.sample''' в блокноте. ничего не поняли? поясняю: '''aiwrapper''' обладает полезнейшим ключом '''-m2'''.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 -m2 &amp;lt;файл&amp;gt;	- склеить ИИ-графы карт в глобальный игровой граф с&lt;br /&gt;
		  учётом поправок для связей из указанного файла&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
То есть с помощью него мы можем взять любой существующий граф на уровне гсц, который &amp;quot;не занят&amp;quot;, и добавить ему нужные нам значения, например сделать его коннекшн поинтом(соеденительной точкой), а потом всё это склеится в общий глобальный '''game.graph'''.&lt;br /&gt;
&lt;br /&gt;
Выполняем  ''aiwrapper -dump_graph graphs.txt'' батом или тоталом. Комманда выведет нам  список исходных вершин ИИ-графа в указанный файл, то есть список скомпиленных графов всех сингл-уровней гсц в фаил '''graphs.txt'''. Находим там точку '''esc_graph_point_0034'''. Видите что она пуста в плане связей в отличии от exit_escape_01,02? Значит мы можем ее использовать, в оригинале разрабы их ставили для путей ботов, то есть по ним перемещается аи, но мы ее заюзаем для связи с нашим тестовым левелом.&lt;br /&gt;
&lt;br /&gt;
Итак, создаем например текстовик '''links_fixed.txt''' и вписываем туда&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[l01_escape]&lt;br /&gt;
; добавляем переход для ИИ с Кордона на тестовый уровень.&lt;br /&gt;
esc_graph_point_0034	= test_level_x, point_test_location_escape&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
'''test_level_x''' - название нашего уровня.&lt;br /&gt;
'''point_test_location_escape''' - коннекшн поинт на нашем уровне.&lt;br /&gt;
То есть мы прописываем у графпоинта на эскейпе эти два параметра, которые препращают его в коннекшн-поинт, связанный с тем, что на нашем левеле; сохраняем текстовик.&lt;br /&gt;
&lt;br /&gt;
Выполняем батом или тотал коммандером:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
aiwrapper -m2 links_fixed.txt&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
ЗЫЫ Желательно перед этим действом временно переместить куда-нибудь неиспользуемые левелы(мультиплеерные тоже) от греха подальше.&lt;br /&gt;
Ждем пока соберется '''game_graph''', ошибок быть недолжно.&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Важные моменты 2 -- Loxotron|&lt;br /&gt;
message = Найден более простой способ вычисления '''game_vertex_id'''. В папке '''utils''' у компилятора бардака есть тулза '''ggtool.pl''' - утилита для показа межуровневых связей в '''game.graph'''. Копируем к утилите откомпилированный '''game.graph''' из '''gamedata\''' и выполняем прогу (в командной строке или через батник):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ggtool.pl game.graph &amp;gt;svyazi.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В результате в фаиле '''svyazi.txt''' в скобках будет указан '''game_vertex_id''' для конкретного уровня, таким образом не нужно узнавать '''dest_game_vertex_id''' c помощью перекомпилирования.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
l01_escape (0) --1206.29--&amp;gt; l02_garbage (415)&lt;br /&gt;
&lt;br /&gt;
0 - '''game_vertex_id''', 415 - '''dest_game_vertex_id''',&lt;br /&gt;
1206.29 - '''distance'''(расстояние между точками), не тот который в '''level_changer''''е, а между '''connection_point''''ами.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь дело за '''all.spawn''':&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
aiwrapper -s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В результате соберется полноценный '''all.spawn''' из всех уровней которые есть в папке '''levels'''. Но на этом работа только начинается, теперь надо '''отредактировать''' этот получившийся '''all.spawn''' и добавить '''level_changer''' на уровень гсц, чтобы мы смогли перейти с него на наш.(в нашем случае с эскейпа на test_level_x). Копируем получившийся '''all.spawn''' в &amp;lt;туда, куда вы распаковали aiwrapper&amp;gt;\utils и создаем .bat с таким текстом: &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
acdc.pl -d all.spawn&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В результате мы разобрали all.spawn на ltx'сы, нам нужен '''alife_l01_escape.ltx''', вписываем в конец туда это:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[не забитый номер]&lt;br /&gt;
;например 9000&lt;br /&gt;
section_name = level_changer &lt;br /&gt;
name = exit_to_new_location_from_esc&lt;br /&gt;
;любое_название_на_англ, (только не использованное)&lt;br /&gt;
position =&lt;br /&gt;
;здесь координаты где находиться левел чейнджер&lt;br /&gt;
;помните бумажку с координатами и параметрами, которую мы писали раньше?&lt;br /&gt;
;смотрим ту где параметры и координаты эскейпа и вписываем&lt;br /&gt;
direction = 0,0,0 &lt;br /&gt;
;направление &amp;quot;взгляда&amp;quot; игрока&lt;br /&gt;
;по желанию, можно вписать координаты с бумажки&lt;br /&gt;
game_vertex_id =  &lt;br /&gt;
;номер вершины игрового графа, задаёт первую вершину графа на данной локации&lt;br /&gt;
;с бумажки эскейпа&lt;br /&gt;
distance = 14.6999998092651&lt;br /&gt;
;&amp;quot;Расстояние&amp;quot; между точкой перехода(level_changer) и точкой появления&lt;br /&gt;
;актера на другом уровне (если считать зону неделимой), можно и 0.&lt;br /&gt;
level_vertex_id = &lt;br /&gt;
;Вершина уровневого графа, должно покатить '''-1''', но &lt;br /&gt;
;ставьте лучше то что записано на бумажке с эскейпа&lt;br /&gt;
object_flags = 0xffffff3e&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[pt_move_if_reject]&lt;br /&gt;
path = esc_way_test_if_reject&lt;br /&gt;
END&lt;br /&gt;
;custom data, где указано имя вейпоинта, который мы потом создадим &lt;br /&gt;
;на карте с помощью acdc, таже '''custom data''', что в начале &lt;br /&gt;
;статьи.&lt;br /&gt;
story_id =&lt;br /&gt;
;поставьте здесь неиспользуемый ID, например 8435&lt;br /&gt;
shapes = shape0&lt;br /&gt;
shape0:type = box&lt;br /&gt;
shape0:axis_x = 5.8284006118774,0,0&lt;br /&gt;
shape0:axis_y = 0,5.0005970001221,0&lt;br /&gt;
shape0:axis_z = 0,0,5.3902206420898&lt;br /&gt;
shape0:offset = 0,0,0&lt;br /&gt;
;сфера, в данном случае куб, именно в нем будет активироваться наш переход&lt;br /&gt;
restrictor_type = 3&lt;br /&gt;
&lt;br /&gt;
;выставляем здесь все переменные для нового уровня&lt;br /&gt;
dest_game_vertex_id = &lt;br /&gt;
;номер вершины графа нашей новой локации, туда игрок переместится&lt;br /&gt;
;помните '''уникальный''' объект, который я просил вас поставить?&lt;br /&gt;
;открываем '''alife_lxx_unknown.ltx''' и ищем тачку, сдираем значение с нее&lt;br /&gt;
dest_level_vertex_id =&lt;br /&gt;
;вершина уровнего графа нового левела&lt;br /&gt;
;должно покатить -1, но лучше взять с бумажки с параметрами с тестового левела&lt;br /&gt;
dest_position =&lt;br /&gt;
;координаты на нашем уровне, где ты появляешься&lt;br /&gt;
;с бумажки тестового левела, либо наугад, либо используйте открорректированные&lt;br /&gt;
;координаты с любого объекта на вашей карте, то есть например есть дерево&lt;br /&gt;
;c координатами 0, 1 , 2, корректируем относительно дерева и &lt;br /&gt;
;вписываем например 4, 1, 2&lt;br /&gt;
dest_direction = 0,-1.12671363353729,0&lt;br /&gt;
;направление &amp;quot;взгляда игрока на новом уровне&amp;quot;&lt;br /&gt;
;по желанию&lt;br /&gt;
dest_level_name = &lt;br /&gt;
;название вашего уровня, в нашем случае test_level_x&lt;br /&gt;
dest_graph_point = &lt;br /&gt;
;название точки спавна игрока(графа, то есть в нашем случае&lt;br /&gt;
;start_actor_01)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Еще одно определение двух параметров для непонятливых:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
game_vertex_id - ставится как коннекшн поинт ('''graph_point''' c соответствующими настройками)&lt;br /&gt;
level_vertex_id - '''graph_point''' - ставится как обычная граф поинт с уникальным номером без параметров&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В них вписываем уникальный ID для каждого уровня, то есть в некоторых случаях просто смотрим эти два параметра у соседних объектов этого левела и вписываем значения. Как правило, '''level_vertex_id''' можно поставить '''-1''', но не для всех объектов, '''game_vertex_id''' = ид уровня.&lt;br /&gt;
&lt;br /&gt;
Устали? =) А ведь еще не всё, нужно создать вейпоинт, который мы прописали в '''custom data''' '''level changer''''а. Открываем '''way_l01_escape.ltx''' и вписываем чтото типа:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[esc_way_test_if_reject]&lt;br /&gt;
points = p0,p1&lt;br /&gt;
;два вейпоинта&lt;br /&gt;
p0:name = name_test1&lt;br /&gt;
;имя вейпоинта 1&lt;br /&gt;
p0:position = -243.491257,-19.758562,-140.328583&lt;br /&gt;
;его координаты, ставьте их рядом с координатами level_changer&lt;br /&gt;
;но не в нём, корректируйте их, как в примере с деревом &lt;br /&gt;
p0:game_vertex_id = 8&lt;br /&gt;
p0:level_vertex_id = -1&lt;br /&gt;
p0:links = p1(1)&lt;br /&gt;
&lt;br /&gt;
p1:name = name_test2&lt;br /&gt;
;имя вейпоинта 2&lt;br /&gt;
p1:position = -255.491257,-19.758562,-140.328583&lt;br /&gt;
;его координаты, всё тоже самое, только корректируйте относительно позиции&lt;br /&gt;
; вейпоинта 0, как в этом примере.&lt;br /&gt;
p1:game_vertex_id = 9&lt;br /&gt;
p1:level_vertex_id = -1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Поставили? Всё, осталось только собрать '''all.spawn''', батом или тотал коммандером выполняем это:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
acdc.pl -c all.ltx&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Теперь копируем получившийся '''all.spawn.new''' в '''gamedata\spawns\''' и переименовываем его в '''all.spawn'''.&lt;br /&gt;
&lt;br /&gt;
Мученья окончились :) Запускайте новую игру и наслаждайтесь вашим переходом...&lt;br /&gt;
&lt;br /&gt;
==В заключении==&lt;br /&gt;
Если вы хотите, чтобы ваша точка перехода отображалась на карте игрока, то лезем в '''level_tasks.script''' и добавляем в '''function add_lchanger_location()''' секцию, подобную представленной ниже:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		-- test_level_x&lt;br /&gt;
		local obj = sim:story_object(8435)&lt;br /&gt;
		if obj then&lt;br /&gt;
			level.map_add_object_spot(obj.id, &amp;quot;level_changer&amp;quot;, &amp;quot;exit_to_new_location_from_esc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В строке (obj.id, &amp;quot;level_changer&amp;quot;, &amp;quot;'''exit_to_new_location_from_esc'''&amp;quot;) выделенный текст - наименование вашего '''level_changer''', а число - его уникальный '''story_id''' на уровне, например на эскейпе или вашем левеле, список занятых '''story_id''' смотреть необязательно. Братьь любое число от 10000&lt;br /&gt;
&lt;br /&gt;
==Список необходимых программ ==&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewtheoned&amp;amp;lid=165 AiCompiler 0.1] от '''Neo'''&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewtheoned&amp;amp;lid=166 AiWrapper] от '''bardak''''а&lt;br /&gt;
*[http://www.rapidshare.ru/532500 Info_LVID_GVID] скрипт от '''bardak''''а&lt;br /&gt;
*[http://files.gsc-game.com/st/xray-sdk-setup-v0.4.exe SDK 0.4] от '''GSC'''&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewdownload&amp;amp;cid=13 SDK Update] от '''Neo''' + '''GSC'''&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=viewdownload&amp;amp;cid=13 Fixed Shaders] от '''Haron'''&lt;br /&gt;
*[http://stalkerin.gameru.net/modules.php?name=Downloads&amp;amp;d_op=getit&amp;amp;lid=308 патч для SDK  0.3] от '''Haron'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''written by Loxotron'''&lt;br /&gt;
&lt;br /&gt;
'''updated 11.01.08 by Loxotron'''&lt;br /&gt;
&lt;br /&gt;
'''24/06/08 небольшое добавление о компиляции - Kalinin11'''&lt;br /&gt;
[[Категория:Программы]][[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D1%85</id>
		<title>Начальные сведения о скриптах</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D1%85"/>
				<updated>2008-12-30T17:17:07Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ПРЕДИСЛОВИЕ&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Для чего нужны срипты и сведения и их использовании - Rez@niy|&lt;br /&gt;
message = В скриптах содержаться данные для выполнения по условиям.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Итак начнём. Рассмотрим простой скрипт спавна предмета:&lt;br /&gt;
--*********************************************&lt;br /&gt;
--**TESTING**&lt;br /&gt;
--*********************************************&lt;br /&gt;
--ЗДЕСЬ ВСЕГДА МОЖЕТ БЫТЬ ВАША РЕКЛАМА&lt;br /&gt;
-- Создает в заданном месте ящик с динамитом&lt;br /&gt;
function bandit_create()&lt;br /&gt;
	local a = vector() -- db.actor:position()&lt;br /&gt;
	a.x = -220.21&lt;br /&gt;
	a.y = -19.93&lt;br /&gt;
	a.z = -158.98&lt;br /&gt;
	alife():create(&amp;quot;wpn_ak47&amp;quot;,a,33447,47,65535)&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;ИМЯ ФУНКЦИИ&amp;lt;/big&amp;gt;&lt;br /&gt;
function - всегда обязательное поле, это что то вроде id, в языке LUA. После поля function отступаем и пишем текст произвольный. &lt;br /&gt;
Дальше идёт функциия о позиции, она обязательна для спавна скриптом.&lt;br /&gt;
Ниже кординаты. Для снятия кординат используем в консоли rs_stats on.&lt;br /&gt;
После кординат идёт сама функция спавна. &amp;lt;big&amp;gt;alife():create(&amp;quot;СИСТЕМНОЕ ИМЯ ОБЬЕКТА&amp;quot;,a,33447,47,65535)&amp;lt;/big&amp;gt;&lt;br /&gt;
Цифры пусть остануться такие же. Для обьекта спавна возмём wpn_ak47. Кординаты какие то левые, лучше снимите кординаты сами. И ещё кое что важное. В папке scripts, создаём файл bugaga.script и пишем туда готовый текст, только со своими кординатами.&lt;br /&gt;
&amp;lt;pre&amp;gt;--*********************************************&lt;br /&gt;
--**TESTING**&lt;br /&gt;
--*********************************************&lt;br /&gt;
--ЗДЕСЬ ВСЕГДА МОЖЕТ БЫТЬ ВАША РЕКЛАМА&lt;br /&gt;
-- Создает в заданном месте ящик с динамитом&lt;br /&gt;
function bandit_create()&lt;br /&gt;
	local a = vector() -- db.actor:position()&lt;br /&gt;
	a.x = -220.21&lt;br /&gt;
	a.y = -19.93&lt;br /&gt;
	a.z = -158.98&lt;br /&gt;
	alife():create(&amp;quot;wpn_ak47&amp;quot;,a,33447,47,65535)&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Написали? Отлично!. Теперь осталось только подключить это к игре.  Идём в файл dialogs_escape.xml и выбираем какое нить диалог. Там после поля text в диалоге приписываем &amp;lt;action&amp;gt;main.bandit_create&amp;lt;/action&amp;gt;&lt;br /&gt;
ТОЛЬКО ДИАЛОГ ВЫБИРАЕМ ИСПОЛЬЗУЮЩИЙСЯ. С волком например. Всё сохраняем  и тестим. В итоге, когда вы в игре нажмёте на фразу после которой находится action, заспауниться калаш на указанных кординатах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience1|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Углублённое изучение - Rez@niy|&lt;br /&gt;
message = Далее идём в более углублённое изучение. Изучаем построение&lt;br /&gt;
&lt;br /&gt;
Прописываем функцию. Задаём условие:&lt;br /&gt;
if =&lt;br /&gt;
Для закрытия тэга end&lt;br /&gt;
&lt;br /&gt;
ПОКА ВСЁ, МОЖЕТ НАПИШУ ЕЩЁ ЧЁ НИТЬ ПОЛЕЗНОЕ&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

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

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D0%B2_offline_%D0%B8_online</id>
		<title>SoC. Работа в offline и online</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D0%B2_offline_%D0%B8_online"/>
				<updated>2008-10-19T12:40:15Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В игре наверняка вы встречали такое - При получении какого то задания, или диалога появляются новые НПС или прочие ФПС. В этой статье мы будем рассматривать на Ростке. Итак нам понадобяться:&lt;br /&gt;
ФАЙЛЫ:&lt;br /&gt;
&amp;lt;pre&amp;gt;info_l07rostok.xml&lt;br /&gt;
all.spawn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Программа:&lt;br /&gt;
&amp;lt;pre&amp;gt;ACDC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
Мою статью &amp;quot;работа с ACDC&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Начем! Распакуем all.spawn и откроем файл alife_l06_rostok.ltx. В нём найдём такие строчки:&lt;br /&gt;
&amp;lt;pre&amp;gt;[3851]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = stalker&lt;br /&gt;
name = bar_freedom_attacker_1&lt;br /&gt;
position = -214.942504882813,-2.09808349609375e-005,164.513900756836&lt;br /&gt;
direction = 0,0,0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 5000&lt;br /&gt;
character_profile = bar_Killer_regular&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 1335&lt;br /&gt;
distance = 6.29999971389771&lt;br /&gt;
level_vertex_id = 23441&lt;br /&gt;
object_flags = 0xffffffff&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[spawner]&lt;br /&gt;
cond = {+bar_heli_scene_stay_online}&lt;br /&gt;
&lt;br /&gt;
[smart_terrains]&lt;br /&gt;
bar_freedom_attack = true&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\killer\stalker_ki_mask&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 5&lt;br /&gt;
g_group = 7&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0&lt;br /&gt;
upd:creature_flags = 0&lt;br /&gt;
upd:position = -214.942504882813,-2.09808349609375e-005,164.513900756836&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0,0,0&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 5&lt;br /&gt;
upd:g_group = 7&lt;br /&gt;
&lt;br /&gt;
; cse_alife_monster_abstract properties&lt;br /&gt;
&lt;br /&gt;
upd:next_game_vertex_id = 65535&lt;br /&gt;
upd:prev_game_vertex_id = 65535&lt;br /&gt;
upd:distance_from_point = 0&lt;br /&gt;
upd:distance_to_point = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_human_abstract properties&lt;br /&gt;
predicate5 = 0,1,2,0,2&lt;br /&gt;
predicate4 = 0,1,1,0&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
upd:start_dialog = &lt;br /&gt;
&lt;br /&gt;
; se_stalker properties&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этой писанине нам нужно только это:&lt;br /&gt;
&amp;lt;pre&amp;gt;[spawner]&lt;br /&gt;
cond = {+bar_heli_scene_stay_online}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это переход НПС в онлайн при выдаче инфопоршня. Чтбы убедится в этом найдём его в info_l07rostok.xml&lt;br /&gt;
Убедились? Отлично! Двигаемся дальше. Вместо знака + вы можете поставить знак -. Значит при этом инфопоршне НПС уйдет в оффлайн. &lt;br /&gt;
&lt;br /&gt;
Можно менять эти инфопоршны на любые другие, в том числе свои. Теперь поменяем его к примеру на... &lt;br /&gt;
&lt;br /&gt;
bar_kruglov_follow_tunnel В итоге:&lt;br /&gt;
&amp;lt;pre&amp;gt;[spawner]&lt;br /&gt;
cond = {+bar_kruglov_follow_tunnel}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Этот НПС (или нпсы несколько неписей) буду рождаться когда вы пройдете через тунель где наёмники снайепры. Все инфопоршны брать из файлы, соответствующему локации. Вы можете сделать свой квест и применить инфопоршы к этому делу. &lt;br /&gt;
&lt;br /&gt;
P.S.&lt;br /&gt;
Теперь сделаем чтобы всё до конца работала. Найдём смарт_терраин в котором прописан +bar_heli_scene_stay_online. И допишем туда свой.&lt;br /&gt;
&amp;lt;pre&amp;gt;[3857]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = smart_terrain&lt;br /&gt;
name = bar_ecolog_crush&lt;br /&gt;
position = -294.061706542969,7.43865966796875e-005,140.005218505859&lt;br /&gt;
direction = 1.01860559880151e-005,-7.54995954643789e-010,7.41205367376097e-005&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 1350&lt;br /&gt;
distance = 2.79999995231628&lt;br /&gt;
level_vertex_id = 100&lt;br /&gt;
object_flags = 0xffffffbe&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[smart_terrain]&lt;br /&gt;
type = bar_ecolog_crush&lt;br /&gt;
capacity = 5&lt;br /&gt;
squad = 5&lt;br /&gt;
groups = 1,2&lt;br /&gt;
cond = {+bar_heli_scene_stay_online},{+bar_kruglov_follow_tunnel}&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_shape properties&lt;br /&gt;
shapes = shape0&lt;br /&gt;
shape0:type = sphere&lt;br /&gt;
shape0:offset = 0,0,0&lt;br /&gt;
shape0:radius = 2.66736793518066&lt;br /&gt;
&lt;br /&gt;
; cse_alife_space_restrictor properties&lt;br /&gt;
restrictor_type = 0&lt;br /&gt;
&lt;br /&gt;
; se_smart_terrain properties&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Вот он.  Вот и всё!&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_ACDC</id>
		<title>Работа с ACDC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_ACDC"/>
				<updated>2008-08-31T15:18:17Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Сегодня мы разберем основу работы с ACDC. Но... Для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC нежели чем с xrSpawner? Отвечаю: xrSpawner при всех его преимуществах имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю работающие с xrSpawner, замечали что, порой обьекты которые они спаунят спаунером не всегда появляются на месте. Или вообще не появляются. Потому что повторяю xrSpawner не определяет вертексы т.е. точная позиция и распределение по АИ-сетке. Итак начнём работу!&lt;br /&gt;
У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник &amp;quot;распаковка&amp;quot;. Итак all.spawn распакован!Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и ест путь. По которому может двигаться живой обьект.Сейчас мы это рассмотрим:&lt;br /&gt;
Для начала устроим текстовый беспредел:)&lt;br /&gt;
Найдём файл alife_l01_escape, а в нём &lt;br /&gt;
&amp;lt;pre&amp;gt;[869]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = actor&lt;br /&gt;
name = level_prefix_actor_0001&lt;br /&gt;
s_rp = 0&lt;br /&gt;
position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
direction = 0,0.00895109120756388,0&lt;br /&gt;
s_flags = 0x29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_binoc&lt;br /&gt;
novice_outfit&lt;br /&gt;
device_torch&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\hero\stalker_novice&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 0&lt;br /&gt;
g_group = 0&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0x75732029&lt;br /&gt;
upd:creature_flags = 0x70&lt;br /&gt;
upd:position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0.00895109120756388,0,-0.999959945678711&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 0&lt;br /&gt;
upd:g_group = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 40&lt;br /&gt;
trader_flags = 0&lt;br /&gt;
character_profile = actor&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_actor properties&lt;br /&gt;
&lt;br /&gt;
upd:actor_state = 0xd20&lt;br /&gt;
upd:actor_accel_header = 0&lt;br /&gt;
upd:actor_accel_data = 0&lt;br /&gt;
upd:actor_velocity_header = 0&lt;br /&gt;
upd:actor_velocity_data = 0&lt;br /&gt;
upd:actor_radiation = 0&lt;br /&gt;
upd:actor_weapon = 110&lt;br /&gt;
upd:num_items = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Примерно такие строки. &lt;br /&gt;
Для начала расщедримся:) Припишем актору в [dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[spawn] такие строки.&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_binoc&lt;br /&gt;
wpn_vintorez&lt;br /&gt;
ammo_9x39_pab9 = 20&lt;br /&gt;
wpn_usp&lt;br /&gt;
ammo_11.43x23_hydro = 22&lt;br /&gt;
novice_outfit&lt;br /&gt;
device_torch&amp;lt;/pre&amp;gt;&lt;br /&gt;
Получиться что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему.&lt;br /&gt;
Так. Теперь Меченый у нас будет крутым рэмбо:)&lt;br /&gt;
Теперь ещё и подарим ему денежек.&lt;br /&gt;
&amp;lt;pre&amp;gt;; cse_alife_trader_abstract properties&lt;br /&gt;
money = 40&lt;br /&gt;
trader_flags = 0&lt;br /&gt;
character_profile = actor&amp;lt;/pre&amp;gt;&lt;br /&gt;
В строчке money напишем любое число. Тока астрономические не надо(не проверял).&lt;br /&gt;
Ну теперь Меченый не только рэмбо но и миллионер:).&lt;br /&gt;
Теперь займемся кординатами. У нас они такие: &lt;br /&gt;
&amp;lt;pre&amp;gt;position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
direction = 0,0.00895109120756388,0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Это наши позиция и дирекция.&lt;br /&gt;
&amp;lt;pre&amp;gt;; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 19 (Тот самный вертекс на игре)&lt;br /&gt;
distance = 0.699999988079071&lt;br /&gt;
level_vertex_id = 111256 (вертекс на уровне)&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&amp;lt;/pre&amp;gt;&lt;br /&gt;
А теперь пропишем туда такие кординаты:&lt;br /&gt;
&amp;lt;pre&amp;gt;position = -167.232299804688,-25.4363708496094,-354.692901611328&lt;br /&gt;
direction = 0,-0.365248799324036,0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 0&lt;br /&gt;
distance = 0.699999988079071&lt;br /&gt;
level_vertex_id = 82413&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;upd:health = 1&lt;br /&gt;
upd:timestamp = 0x75732029&lt;br /&gt;
upd:creature_flags = 0x70&lt;br /&gt;
upd:position = -167.232299804688,-25.4363708496094,-354.692901611328&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = -0.365248799324036,0,0.930909931659698&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 0&lt;br /&gt;
upd:g_group = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Тепер игра начнётся в здании блокпоста на 2 этаже:).&lt;br /&gt;
С этим мы закончим.&lt;br /&gt;
Теперь создадим нового НПС:&lt;br /&gt;
&amp;lt;pre&amp;gt;[871]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = stalker&lt;br /&gt;
name = esc_bridge_soldier1&lt;br /&gt;
position =  -133.27989196777,-30.146812438965,-372.0263671875&lt;br /&gt;
direction = 0.028013030067086,0,0.9996075630188&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 5000&lt;br /&gt;
character_profile = esc_soldier_regular&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 20&lt;br /&gt;
distance = 16.1000003814697&lt;br /&gt;
level_vertex_id = 118083&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = hodim_dvor&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\soldier\soldier_bandana_3&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 1&lt;br /&gt;
g_group = 2&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0&lt;br /&gt;
upd:creature_flags = 0&lt;br /&gt;
upd:position = -133.27989196777,-30.146812438965,-372.0263671875&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0.028013030067086,0,0.9996075630188&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 1&lt;br /&gt;
upd:g_group = 2&lt;br /&gt;
&lt;br /&gt;
; cse_alife_monster_abstract properties&lt;br /&gt;
&lt;br /&gt;
upd:next_game_vertex_id = 65535&lt;br /&gt;
upd:prev_game_vertex_id = 65535&lt;br /&gt;
upd:distance_from_point = 0&lt;br /&gt;
upd:distance_to_point = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_human_abstract properties&lt;br /&gt;
predicate5 = 1,2,2,1,2&lt;br /&gt;
predicate4 = 0,1,1,1&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
upd:start_dialog = &lt;br /&gt;
&lt;br /&gt;
; se_stalker properties&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так вот он наш друг НПС солдат на блокпосте:)&lt;br /&gt;
Тут уже знакомы строки. Позиция, дирекция вертексы... Но есть кое что новое:)&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = hodim_dvor&amp;lt;/pre&amp;gt;&lt;br /&gt;
Элементарная логика НПС. hodim_dvor-Это путь по которому будет ходить НПС. НПС есть всё готово. Но путя то у нас нет:)&lt;br /&gt;
Создадим его в файле way_l01_escape. Припишем вот такие строчки.&lt;br /&gt;
&amp;lt;pre&amp;gt;[hodim_dvor]&lt;br /&gt;
points = p0,p1&lt;br /&gt;
p0:name = name00&lt;br /&gt;
p0:position = -120.44634246826,-30.15016746521,-363.68786621094&lt;br /&gt;
p0:game_vertex_id = 24&lt;br /&gt;
p0:level_vertex_id = 132887&lt;br /&gt;
p0:links = p1(1)&lt;br /&gt;
&lt;br /&gt;
p1:name = name01 номер точки&lt;br /&gt;
p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция &lt;br /&gt;
p1:game_vertex_id = 19 вертекс на игре&lt;br /&gt;
p1:level_vertex_id = 118862 вертекс на уровне&lt;br /&gt;
p1:links = p0(1) на какую точку после этой перейдёт НПС. (тут он будет ходить туда сюда, если не написать линкс то он остановиться на месте)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Всё! Вгоняям в way  эти строки(тока мои коментарии  писать не надо)&lt;br /&gt;
Всё готово можно тестить изменения:_))))). Как снимать корзинаты и работать с PI расскажу в следующей статье. Теперь жмём на батник запаковка  и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он удет ходить от казармы до дома(там поймёте)&lt;br /&gt;
Статью написал [[Rez@niy&lt;br /&gt;
]]&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_ACDC</id>
		<title>Работа с ACDC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_ACDC"/>
				<updated>2008-08-31T15:17:49Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Сегодня мы разберем основу работы с ACDC. Но... Для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC нежели чем с xrSpawner? Отвечаю: xrSpawner при всех его преимуществах имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю работающие с xrSpawner, замечали что, порой обьекты которые они спаунят спаунером не всегда появляются на месте. Или вообще не появляются. Потому что повторяю xrSpawner не определяет вертексы т.е. точная позиция и распределение по АИ-сетке. Итак начнём работу!&lt;br /&gt;
У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник &amp;quot;распаковка&amp;quot;. Итак all.spawn распакован!Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и ест путь. По которому может двигаться живой обьект.Сейчас мы это рассмотрим:&lt;br /&gt;
Для начала устроим текстовый беспредел:)&lt;br /&gt;
Найдём файл alife_l01_escape, а в нём &lt;br /&gt;
&amp;lt;pre&amp;gt;[869]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = actor&lt;br /&gt;
name = level_prefix_actor_0001&lt;br /&gt;
s_rp = 0&lt;br /&gt;
position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
direction = 0,0.00895109120756388,0&lt;br /&gt;
s_flags = 0x29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_binoc&lt;br /&gt;
novice_outfit&lt;br /&gt;
device_torch&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\hero\stalker_novice&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 0&lt;br /&gt;
g_group = 0&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0x75732029&lt;br /&gt;
upd:creature_flags = 0x70&lt;br /&gt;
upd:position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0.00895109120756388,0,-0.999959945678711&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 0&lt;br /&gt;
upd:g_group = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 40&lt;br /&gt;
trader_flags = 0&lt;br /&gt;
character_profile = actor&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_actor properties&lt;br /&gt;
&lt;br /&gt;
upd:actor_state = 0xd20&lt;br /&gt;
upd:actor_accel_header = 0&lt;br /&gt;
upd:actor_accel_data = 0&lt;br /&gt;
upd:actor_velocity_header = 0&lt;br /&gt;
upd:actor_velocity_data = 0&lt;br /&gt;
upd:actor_radiation = 0&lt;br /&gt;
upd:actor_weapon = 110&lt;br /&gt;
upd:num_items = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Примерно такие строки. &lt;br /&gt;
Для начала расщедримся:) Припишем актору в [dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[spawn] такие строки.&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_binoc&lt;br /&gt;
wpn_vintorez&lt;br /&gt;
ammo_9x39_pab9 = 20&lt;br /&gt;
wpn_usp&lt;br /&gt;
ammo_11.43x23_hydro = 22&lt;br /&gt;
novice_outfit&lt;br /&gt;
device_torch&amp;lt;/pre&amp;gt;&lt;br /&gt;
Получиться что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему.&lt;br /&gt;
Так. Теперь Меченый у нас будет крутым рэмбо:)&lt;br /&gt;
Теперь ещё и подарим ему денежек.&lt;br /&gt;
&amp;lt;pre&amp;gt;; cse_alife_trader_abstract properties&lt;br /&gt;
money = 40&lt;br /&gt;
trader_flags = 0&lt;br /&gt;
character_profile = actor&amp;lt;/pre&amp;gt;&lt;br /&gt;
В строчке money напишем любое число. Тока астрономические не надо(не проверял).&lt;br /&gt;
Ну теперь Меченый не только рэмбо но и миллионер:).&lt;br /&gt;
Теперь займемся кординатами. У нас они такие: &lt;br /&gt;
&amp;lt;pre&amp;gt;position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
direction = 0,0.00895109120756388,0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Это наши позиция и дирекция.&lt;br /&gt;
&amp;lt;pre&amp;gt;; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 19 (Тот самный вертекс на игре)&lt;br /&gt;
distance = 0.699999988079071&lt;br /&gt;
level_vertex_id = 111256 (вертекс на уровне)&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&amp;lt;/pre&amp;gt;&lt;br /&gt;
А теперь пропишем туда такие кординаты:&lt;br /&gt;
&amp;lt;pre&amp;gt;position = -167.232299804688,-25.4363708496094,-354.692901611328&lt;br /&gt;
direction = 0,-0.365248799324036,0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 0&lt;br /&gt;
distance = 0.699999988079071&lt;br /&gt;
level_vertex_id = 82413&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;upd:health = 1&lt;br /&gt;
upd:timestamp = 0x75732029&lt;br /&gt;
upd:creature_flags = 0x70&lt;br /&gt;
upd:position = -167.232299804688,-25.4363708496094,-354.692901611328&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = -0.365248799324036,0,0.930909931659698&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 0&lt;br /&gt;
upd:g_group = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Тепер игра начнётся в здании блокпоста на 2 этаже:).&lt;br /&gt;
С этим мы закончим.&lt;br /&gt;
Теперь создадим нового НПС:&lt;br /&gt;
&amp;lt;pre&amp;gt;[871]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = stalker&lt;br /&gt;
name = esc_bridge_soldier1&lt;br /&gt;
position =  -133.27989196777,-30.146812438965,-372.0263671875&lt;br /&gt;
direction = 0.028013030067086,0,0.9996075630188&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 5000&lt;br /&gt;
character_profile = esc_soldier_regular&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 20&lt;br /&gt;
distance = 16.1000003814697&lt;br /&gt;
level_vertex_id = 118083&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = hodim_dvor&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\soldier\soldier_bandana_3&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 1&lt;br /&gt;
g_group = 2&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0&lt;br /&gt;
upd:creature_flags = 0&lt;br /&gt;
upd:position = -133.27989196777,-30.146812438965,-372.0263671875&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0.028013030067086,0,0.9996075630188&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 1&lt;br /&gt;
upd:g_group = 2&lt;br /&gt;
&lt;br /&gt;
; cse_alife_monster_abstract properties&lt;br /&gt;
&lt;br /&gt;
upd:next_game_vertex_id = 65535&lt;br /&gt;
upd:prev_game_vertex_id = 65535&lt;br /&gt;
upd:distance_from_point = 0&lt;br /&gt;
upd:distance_to_point = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_human_abstract properties&lt;br /&gt;
predicate5 = 1,2,2,1,2&lt;br /&gt;
predicate4 = 0,1,1,1&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
upd:start_dialog = &lt;br /&gt;
&lt;br /&gt;
; se_stalker properties&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так вот он наш друг НПС солдат на блокпосте:)&lt;br /&gt;
Тут уже знакомы строки. Позиция, дирекция вертексы... Но есть кое что новое:)&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = hodim_dvor&amp;lt;/pre&amp;gt;&lt;br /&gt;
Элементарная логика НПС. hodim_dvor-Это путь по которому будет ходить НПС. НПС есть всё готово. Но путя то у нас нет:)&lt;br /&gt;
Создадим его в файле way_l01_escape. Припишем вот такие строчки.&lt;br /&gt;
&amp;lt;pre&amp;gt;[hodim_dvor]&lt;br /&gt;
points = p0,p1&lt;br /&gt;
p0:name = name00&lt;br /&gt;
p0:position = -120.44634246826,-30.15016746521,-363.68786621094&lt;br /&gt;
p0:game_vertex_id = 24&lt;br /&gt;
p0:level_vertex_id = 132887&lt;br /&gt;
p0:links = p1(1)&lt;br /&gt;
&lt;br /&gt;
p1:name = name01 номер точки&lt;br /&gt;
p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция &lt;br /&gt;
p1:game_vertex_id = 19 вертекс на игре&lt;br /&gt;
p1:level_vertex_id = 118862 вертекс на уровне&lt;br /&gt;
p1:links = p0(1) на какую точку после этой перейдёт НПС. (тут он будет ходить туда сюда, если не написать линкс то он остановиться на месте)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Всё! Вгоняям в way  эти строки(тока мои коментарии  писать не надо)&lt;br /&gt;
Всё готово можно тестить изменения:_))))). Как снимать корзинаты и работать с PI расскажу в следующей статье. Теперь жмём на батник запаковка  и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он удет ходить от казармы до дома(там поймёте)&lt;br /&gt;
Статью написал [[Участник:Rez@niy&lt;br /&gt;
]]&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_ACDC</id>
		<title>Работа с ACDC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_ACDC"/>
				<updated>2008-08-31T15:16:35Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Сегодня мы разберем основу работы с ACDC. Но... Для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC нежели чем с xrSpawner? Отвечаю: xrSpawner при всех его преимуществах имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю работающие с xrSpawner, замечали что, порой обьекты которые они спаунят спаунером не всегда появляются на месте. Или вообще не появляются. Потому что повторяю xrSpawner не определяет вертексы т.е. точная позиция и распределение по АИ-сетке. Итак начнём работу!&lt;br /&gt;
У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник &amp;quot;распаковка&amp;quot;. Итак all.spawn распакован!Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и ест путь. По которому может двигаться живой обьект.Сейчас мы это рассмотрим:&lt;br /&gt;
Для начала устроим текстовый беспредел:)&lt;br /&gt;
Найдём файл alife_l01_escape, а в нём &lt;br /&gt;
&amp;lt;pre&amp;gt;[869]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = actor&lt;br /&gt;
name = level_prefix_actor_0001&lt;br /&gt;
s_rp = 0&lt;br /&gt;
position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
direction = 0,0.00895109120756388,0&lt;br /&gt;
s_flags = 0x29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_binoc&lt;br /&gt;
novice_outfit&lt;br /&gt;
device_torch&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\hero\stalker_novice&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 0&lt;br /&gt;
g_group = 0&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0x75732029&lt;br /&gt;
upd:creature_flags = 0x70&lt;br /&gt;
upd:position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0.00895109120756388,0,-0.999959945678711&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 0&lt;br /&gt;
upd:g_group = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 40&lt;br /&gt;
trader_flags = 0&lt;br /&gt;
character_profile = actor&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_actor properties&lt;br /&gt;
&lt;br /&gt;
upd:actor_state = 0xd20&lt;br /&gt;
upd:actor_accel_header = 0&lt;br /&gt;
upd:actor_accel_data = 0&lt;br /&gt;
upd:actor_velocity_header = 0&lt;br /&gt;
upd:actor_velocity_data = 0&lt;br /&gt;
upd:actor_radiation = 0&lt;br /&gt;
upd:actor_weapon = 110&lt;br /&gt;
upd:num_items = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Примерно такие строки. &lt;br /&gt;
Для начала расщедримся:) Припишем актору в [dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[spawn] такие строки.&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_binoc&lt;br /&gt;
wpn_vintorez&lt;br /&gt;
ammo_9x39_pab9 = 20&lt;br /&gt;
wpn_usp&lt;br /&gt;
ammo_11.43x23_hydro = 22&lt;br /&gt;
novice_outfit&lt;br /&gt;
device_torch&amp;lt;/pre&amp;gt;&lt;br /&gt;
Получиться что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему.&lt;br /&gt;
Так. Теперь Меченый у нас будет крутым рэмбо:)&lt;br /&gt;
Теперь ещё и подарим ему денежек.&lt;br /&gt;
&amp;lt;pre&amp;gt;; cse_alife_trader_abstract properties&lt;br /&gt;
money = 40&lt;br /&gt;
trader_flags = 0&lt;br /&gt;
character_profile = actor&amp;lt;/pre&amp;gt;&lt;br /&gt;
В строчке money напишем любое число. Тока астрономические не надо(не проверял).&lt;br /&gt;
Ну теперь Меченый не только рэмбо но и миллионер:).&lt;br /&gt;
Теперь займемся кординатами. У нас они такие: &lt;br /&gt;
&amp;lt;pre&amp;gt;position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
direction = 0,0.00895109120756388,0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Это наши позиция и дирекция.&lt;br /&gt;
&amp;lt;pre&amp;gt;; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 19 (Тот самный вертекс на игре)&lt;br /&gt;
distance = 0.699999988079071&lt;br /&gt;
level_vertex_id = 111256 (вертекс на уровне)&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&amp;lt;/pre&amp;gt;&lt;br /&gt;
А теперь пропишем туда такие кординаты:&lt;br /&gt;
&amp;lt;pre&amp;gt;position = -167.232299804688,-25.4363708496094,-354.692901611328&lt;br /&gt;
direction = 0,-0.365248799324036,0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 0&lt;br /&gt;
distance = 0.699999988079071&lt;br /&gt;
level_vertex_id = 82413&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;upd:health = 1&lt;br /&gt;
upd:timestamp = 0x75732029&lt;br /&gt;
upd:creature_flags = 0x70&lt;br /&gt;
upd:position = -167.232299804688,-25.4363708496094,-354.692901611328&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = -0.365248799324036,0,0.930909931659698&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 0&lt;br /&gt;
upd:g_group = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Тепер игра начнётся в здании блокпоста на 2 этаже:).&lt;br /&gt;
С этим мы закончим.&lt;br /&gt;
Теперь создадим нового НПС:&lt;br /&gt;
&amp;lt;pre&amp;gt;[871]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = stalker&lt;br /&gt;
name = esc_bridge_soldier1&lt;br /&gt;
position =  -133.27989196777,-30.146812438965,-372.0263671875&lt;br /&gt;
direction = 0.028013030067086,0,0.9996075630188&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 5000&lt;br /&gt;
character_profile = esc_soldier_regular&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 20&lt;br /&gt;
distance = 16.1000003814697&lt;br /&gt;
level_vertex_id = 118083&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = hodim_dvor&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\soldier\soldier_bandana_3&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 1&lt;br /&gt;
g_group = 2&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0&lt;br /&gt;
upd:creature_flags = 0&lt;br /&gt;
upd:position = -133.27989196777,-30.146812438965,-372.0263671875&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0.028013030067086,0,0.9996075630188&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 1&lt;br /&gt;
upd:g_group = 2&lt;br /&gt;
&lt;br /&gt;
; cse_alife_monster_abstract properties&lt;br /&gt;
&lt;br /&gt;
upd:next_game_vertex_id = 65535&lt;br /&gt;
upd:prev_game_vertex_id = 65535&lt;br /&gt;
upd:distance_from_point = 0&lt;br /&gt;
upd:distance_to_point = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_human_abstract properties&lt;br /&gt;
predicate5 = 1,2,2,1,2&lt;br /&gt;
predicate4 = 0,1,1,1&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
upd:start_dialog = &lt;br /&gt;
&lt;br /&gt;
; se_stalker properties&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так вот он наш друг НПС солдат на блокпосте:)&lt;br /&gt;
Тут уже знакомы строки. Позиция, дирекция вертексы... Но есть кое что новое:)&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = hodim_dvor&amp;lt;/pre&amp;gt;&lt;br /&gt;
Элементарная логика НПС. hodim_dvor-Это путь по которому будет ходить НПС. НПС есть всё готово. Но путя то у нас нет:)&lt;br /&gt;
Создадим его в файле way_l01_escape. Припишем вот такие строчки.&lt;br /&gt;
&amp;lt;pre&amp;gt;[hodim_dvor]&lt;br /&gt;
points = p0,p1&lt;br /&gt;
p0:name = name00&lt;br /&gt;
p0:position = -120.44634246826,-30.15016746521,-363.68786621094&lt;br /&gt;
p0:game_vertex_id = 24&lt;br /&gt;
p0:level_vertex_id = 132887&lt;br /&gt;
p0:links = p1(1)&lt;br /&gt;
&lt;br /&gt;
p1:name = name01 номер точки&lt;br /&gt;
p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция &lt;br /&gt;
p1:game_vertex_id = 19 вертекс на игре&lt;br /&gt;
p1:level_vertex_id = 118862 вертекс на уровне&lt;br /&gt;
p1:links = p0(1) на какую точку после этой перейдёт НПС. (тут он будет ходить туда сюда, если не написать линкс то он остановиться на месте)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Всё! Вгоняям в way  эти строки(тока мои коментарии  писать не надо)&lt;br /&gt;
Всё готово можно тестить изменения:_))))). Как снимать корзинаты и работать с PI расскажу в следующей статье. Теперь жмём на батник запаковка  и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он удет ходить от казармы до дома(там поймёте)&lt;br /&gt;
Вот и путь. Разберем по частям&lt;br /&gt;
[[Rez@niy:]]&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_ACDC</id>
		<title>Работа с ACDC</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_ACDC"/>
				<updated>2008-08-31T15:15:36Z</updated>
		
		<summary type="html">&lt;p&gt;90.157.85.184: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Сегодня мы разберем основу работы с ACDC. Но... Для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC нежели чем с xrSpawner? Отвечаю: xrSpawner при всех его преимуществах имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю работающие с xrSpawner, замечали что, порой обьекты которые они спаунят спаунером не всегда появляются на месте. Или вообще не появляются. Потому что повторяю xrSpawner не определяет вертексы т.е. точная позиция и распределение по АИ-сетке. Итак начнём работу!&lt;br /&gt;
У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник &amp;quot;распаковка&amp;quot;. Итак all.spawn распакован!Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и ест путь. По которому может двигаться живой обьект.Сейчас мы это рассмотрим:&lt;br /&gt;
Для начала устроим текстовый беспредел:)&lt;br /&gt;
Найдём файл alife_l01_escape, а в нём &lt;br /&gt;
&amp;lt;pre&amp;gt;[869]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = actor&lt;br /&gt;
name = level_prefix_actor_0001&lt;br /&gt;
s_rp = 0&lt;br /&gt;
position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
direction = 0,0.00895109120756388,0&lt;br /&gt;
s_flags = 0x29&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_binoc&lt;br /&gt;
novice_outfit&lt;br /&gt;
device_torch&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\hero\stalker_novice&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 0&lt;br /&gt;
g_group = 0&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0x75732029&lt;br /&gt;
upd:creature_flags = 0x70&lt;br /&gt;
upd:position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0.00895109120756388,0,-0.999959945678711&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 0&lt;br /&gt;
upd:g_group = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 40&lt;br /&gt;
trader_flags = 0&lt;br /&gt;
character_profile = actor&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_actor properties&lt;br /&gt;
&lt;br /&gt;
upd:actor_state = 0xd20&lt;br /&gt;
upd:actor_accel_header = 0&lt;br /&gt;
upd:actor_accel_data = 0&lt;br /&gt;
upd:actor_velocity_header = 0&lt;br /&gt;
upd:actor_velocity_data = 0&lt;br /&gt;
upd:actor_radiation = 0&lt;br /&gt;
upd:actor_weapon = 110&lt;br /&gt;
upd:num_items = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Примерно такие строки. &lt;br /&gt;
Для начала расщедримся:) Припишем актору в [dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[spawn] такие строки.&lt;br /&gt;
[dont_spawn_character_supplies]&lt;br /&gt;
&lt;br /&gt;
[spawn]&lt;br /&gt;
wpn_binoc&lt;br /&gt;
wpn_vintorez&lt;br /&gt;
ammo_9x39_pab9 = 20&lt;br /&gt;
wpn_usp&lt;br /&gt;
ammo_11.43x23_hydro = 22&lt;br /&gt;
novice_outfit&lt;br /&gt;
device_torch&amp;lt;/pre&amp;gt;&lt;br /&gt;
Получиться что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему.&lt;br /&gt;
Так. Теперь Меченый у нас будет крутым рэмбо:)&lt;br /&gt;
Теперь ещё и подарим ему денежек.&lt;br /&gt;
&amp;lt;pre&amp;gt;; cse_alife_trader_abstract properties&lt;br /&gt;
money = 40&lt;br /&gt;
trader_flags = 0&lt;br /&gt;
character_profile = actor&amp;lt;/pre&amp;gt;&lt;br /&gt;
В строчке money напишем любое число. Тока астрономические не надо(не проверял).&lt;br /&gt;
Ну теперь Меченый не только рэмбо но и миллионер:).&lt;br /&gt;
Теперь займемся кординатами. У нас они такие: &lt;br /&gt;
&amp;lt;pre&amp;gt;position = -139.449829101563,-29.6908683776855,-351.492797851563&lt;br /&gt;
direction = 0,0.00895109120756388,0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Это наши позиция и дирекция.&lt;br /&gt;
&amp;lt;pre&amp;gt;; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 19 (Тот самный вертекс на игре)&lt;br /&gt;
distance = 0.699999988079071&lt;br /&gt;
level_vertex_id = 111256 (вертекс на уровне)&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&amp;lt;/pre&amp;gt;&lt;br /&gt;
А теперь пропишем туда такие кординаты:&lt;br /&gt;
&amp;lt;pre&amp;gt;position = -167.232299804688,-25.4363708496094,-354.692901611328&lt;br /&gt;
direction = 0,-0.365248799324036,0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 0&lt;br /&gt;
distance = 0.699999988079071&lt;br /&gt;
level_vertex_id = 82413&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;upd:health = 1&lt;br /&gt;
upd:timestamp = 0x75732029&lt;br /&gt;
upd:creature_flags = 0x70&lt;br /&gt;
upd:position = -167.232299804688,-25.4363708496094,-354.692901611328&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = -0.365248799324036,0,0.930909931659698&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 0&lt;br /&gt;
upd:g_group = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Тепер игра начнётся в здании блокпоста на 2 этаже:).&lt;br /&gt;
С этим мы закончим.&lt;br /&gt;
Теперь создадим нового НПС:&lt;br /&gt;
&amp;lt;pre&amp;gt;[871]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = stalker&lt;br /&gt;
name = esc_bridge_soldier1&lt;br /&gt;
position =  -133.27989196777,-30.146812438965,-372.0263671875&lt;br /&gt;
direction = 0.028013030067086,0,0.9996075630188&lt;br /&gt;
&lt;br /&gt;
; cse_alife_trader_abstract properties&lt;br /&gt;
money = 5000&lt;br /&gt;
character_profile = esc_soldier_regular&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 20&lt;br /&gt;
distance = 16.1000003814697&lt;br /&gt;
level_vertex_id = 118083&lt;br /&gt;
object_flags = 0xffffffbf&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = hodim_dvor&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_visual properties&lt;br /&gt;
visual_name = actors\soldier\soldier_bandana_3&lt;br /&gt;
&lt;br /&gt;
; cse_alife_creature_abstract properties&lt;br /&gt;
g_team = 0&lt;br /&gt;
g_squad = 1&lt;br /&gt;
g_group = 2&lt;br /&gt;
health = 1&lt;br /&gt;
dynamic_out_restrictions = &lt;br /&gt;
dynamic_in_restrictions = &lt;br /&gt;
&lt;br /&gt;
upd:health = 1&lt;br /&gt;
upd:timestamp = 0&lt;br /&gt;
upd:creature_flags = 0&lt;br /&gt;
upd:position = -133.27989196777,-30.146812438965,-372.0263671875&lt;br /&gt;
upd:o_model = 0&lt;br /&gt;
upd:o_torso = 0.028013030067086,0,0.9996075630188&lt;br /&gt;
upd:g_team = 0&lt;br /&gt;
upd:g_squad = 1&lt;br /&gt;
upd:g_group = 2&lt;br /&gt;
&lt;br /&gt;
; cse_alife_monster_abstract properties&lt;br /&gt;
&lt;br /&gt;
upd:next_game_vertex_id = 65535&lt;br /&gt;
upd:prev_game_vertex_id = 65535&lt;br /&gt;
upd:distance_from_point = 0&lt;br /&gt;
upd:distance_to_point = 0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_human_abstract properties&lt;br /&gt;
predicate5 = 1,2,2,1,2&lt;br /&gt;
predicate4 = 0,1,1,1&lt;br /&gt;
&lt;br /&gt;
; cse_ph_skeleton properties&lt;br /&gt;
&lt;br /&gt;
upd:start_dialog = &lt;br /&gt;
&lt;br /&gt;
; se_stalker properties&amp;lt;/pre&amp;gt;&lt;br /&gt;
Так вот он наш друг НПС солдат на блокпосте:)&lt;br /&gt;
Тут уже знакомы строки. Позиция, дирекция вертексы... Но есть кое что новое:)&lt;br /&gt;
&amp;lt;pre&amp;gt;[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = hodim_dvor&amp;lt;/pre&amp;gt;&lt;br /&gt;
Элементарная логика НПС. hodim_dvor-Это путь по которому будет ходить НПС. НПС есть всё готово. Но путя то у нас нет:)&lt;br /&gt;
Создадим его в файле way_l01_escape. Припишем вот такие строчки.&lt;br /&gt;
&amp;lt;pre&amp;gt;[hodim_dvor]&lt;br /&gt;
points = p0,p1&lt;br /&gt;
p0:name = name00&lt;br /&gt;
p0:position = -120.44634246826,-30.15016746521,-363.68786621094&lt;br /&gt;
p0:game_vertex_id = 24&lt;br /&gt;
p0:level_vertex_id = 132887&lt;br /&gt;
p0:links = p1(1)&lt;br /&gt;
&lt;br /&gt;
p1:name = name01 номер точки&lt;br /&gt;
p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция &lt;br /&gt;
p1:game_vertex_id = 19 вертекс на игре&lt;br /&gt;
p1:level_vertex_id = 118862 вертекс на уровне&lt;br /&gt;
p1:links = p0(1) на какую точку после этой перейдёт НПС. (тут он будет ходить туда сюда, если не написать линкс то он остановиться на месте)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Всё! Вгоняям в way  эти строки(тока мои коментарии  писать не надо)&lt;br /&gt;
Всё готово можно тестить изменения:_))))). Как снимать корзинаты и работать с PI расскажу в следующей статье. Теперь жмём на батник запаковка  и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он удет ходить от казармы до дома(там поймёте)&lt;br /&gt;
Вот и путь. Разберем по частям&lt;/div&gt;</summary>
		<author><name>90.157.85.184</name></author>	</entry>

	</feed>