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

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D0%BC_%D1%81%D0%BC%D0%B5%D1%80%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B7%D0%BE%D0%BD%D1%8B_%D0%BD%D0%B0_%D0%A7%D0%90%D0%AD%D0%A1-2</id>
		<title>SoC. Отключаем смертельные зоны на ЧАЭС-2</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9E%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D0%BC_%D1%81%D0%BC%D0%B5%D1%80%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B7%D0%BE%D0%BD%D1%8B_%D0%BD%D0%B0_%D0%A7%D0%90%D0%AD%D0%A1-2"/>
				<updated>2012-05-13T17:23:11Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: Новая страница: «Наконец нашелся способ отключить смертельные зоны на ЧАЭС, и всласть побегать по земле на ...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Наконец нашелся способ отключить смертельные зоны на ЧАЭС, и всласть побегать по земле на ЧАЭС. В файле '''sr_aes_deadzone.script''' уже есть функция деактивации. Осталось ее вызвать. Есть 2 способа. 1-й известный через диалог. Второй через обновление рестрикторов.&lt;br /&gt;
&lt;br /&gt;
== Без вызова через диалог ==&lt;br /&gt;
Открываем bind_stalker.script. В функции '''function actor_binder:update(delta)''' под строкой '''bind_restrictor.actor_update(delta)''', пропустив одну строку пишем: '''sr_aes_deadzone.action_postprocess:deactivate()'''. Загружаем сохранение.&lt;br /&gt;
&lt;br /&gt;
== Через диалог ==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;sr_aes_deadzone.action_postprocess:deactivate&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Автор функции отключения зоны ==&lt;br /&gt;
Ее оставили разработчики. Это '''наверное, но не факт''' использовалось в ранних билдах игры.&lt;br /&gt;
&lt;br /&gt;
== Автор статьи ==&lt;br /&gt;
Vllzl&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2</id>
		<title>SoC. Создание проводников</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2"/>
				<updated>2012-05-13T16:57:28Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: Новая страница: «Открываем файл dialog_локация.script и в конце пишем: &amp;lt;lua&amp;gt; function first_teleport(npc, actor)         -- останавливаем...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Открываем файл dialog_локация.script и в конце пишем:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function first_teleport(npc, actor)&lt;br /&gt;
        -- останавливаем диалог&lt;br /&gt;
        npc:stop_talk()&lt;br /&gt;
        actor:stop_talk()&lt;br /&gt;
&lt;br /&gt;
        -- чтобы телепортация не выглядела резкой&lt;br /&gt;
        level.add_pp_effector (&amp;quot;teleport.ppe&amp;quot;, 2006, false)&lt;br /&gt;
&lt;br /&gt;
        -- телепортация&lt;br /&gt;
        db.actor:set_actor_position( vector():set(X,Y,Z) )  -- заменить X,Y,Z на координаты.&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Теперь активируем через диалог:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;dialog_локация.first_teleport&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Авторы ==&lt;br /&gt;
Авторы скрипта: GSC Game World&lt;br /&gt;
Автор статьи: Vllzl&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC_%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2</id>
		<title>SoC. Создаем проводников</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC_%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2"/>
				<updated>2012-05-12T15:11:10Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: Новая страница: «Создаем файл '''teleport.script'''. Туда вы будете писать все свои функции телепортации. Туда пишем: ...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создаем файл '''teleport.script'''. Туда вы будете писать все свои функции телепортации. Туда пишем:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function first_teleport(npc, actor)&lt;br /&gt;
        -- останавливаем разговор&lt;br /&gt;
        npc:stop_talk()&lt;br /&gt;
        actor:stop_talk()&lt;br /&gt;
        -- перемещение&lt;br /&gt;
        level.add_pp_effector (&amp;quot;teleport.ppe&amp;quot;, 2006, false)&lt;br /&gt;
        db.actor:set_actor_position( vector():set(x,y,z) )  -- вместо x,y,z координаты&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Если не хотите спецэффекты, уберите '''level.add_pp_effector (&amp;quot;teleport.ppe&amp;quot;, 2006, false)'''. Но спецэффекты нужны, иначе вы телепортитесь резко. ВСТАВИТЬ В ДИАЛОГ&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BE%D0%B2_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D0%BC%D0%B8</id>
		<title>Создание переходов между уровнями</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BE%D0%B2_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D0%BC%D0%B8"/>
				<updated>2012-05-12T13:26:42Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создаем файл '''level_changer.script'''. В него пихаем.&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function spawn_level_changer(sid, from_pos, from_level, dest_pos, dest_level, hint, mode, dest_dir)&lt;br /&gt;
&lt;br /&gt;
local vertexes = {&lt;br /&gt;
l01_escape = {lvid=594266, gvid=0},&lt;br /&gt;
l04_darkvalley = {lvid=121712, gvid=815},&lt;br /&gt;
l11_pripyat = {lvid=142116, gvid=2270},&lt;br /&gt;
l12_stancia = {lvid=405348, gvid=2400},&lt;br /&gt;
l12_stancia_2 = {lvid=9914, gvid=2517}&lt;br /&gt;
-- l12_stancia_2 = {lvid=227423, gvid=2635}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local obj = alife():create(&amp;quot;level_changer&amp;quot;, from_pos, vertexes[from_level][&amp;quot;lvid&amp;quot;], vertexes[from_level][&amp;quot;gvid&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if obj then&lt;br /&gt;
&lt;br /&gt;
	level.map_add_object_spot(obj.id, &amp;quot;level_changer&amp;quot;, hint)&lt;br /&gt;
&lt;br /&gt;
	local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
	obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_object&lt;br /&gt;
	local game_vertex_id = packet:r_u16()&lt;br /&gt;
	local cse_alife_object__unk1_f32 = packet:r_float()&lt;br /&gt;
	local cse_alife_object__unk2_u32 = packet:r_s32()&lt;br /&gt;
	local level_vertex_id = packet:r_s32()&lt;br /&gt;
	local object_flags = packet:r_s32()&lt;br /&gt;
	local custom_data = packet:r_stringZ()&lt;br /&gt;
	local story_id = packet:r_s32()&lt;br /&gt;
	local cse_alife_object__unk3_u32 = packet:r_s32()&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_shape&lt;br /&gt;
	local shape_count = packet:r_u8()&lt;br /&gt;
	local shape_type&lt;br /&gt;
	local center&lt;br /&gt;
	local radius&lt;br /&gt;
&lt;br /&gt;
	if shape_count == 0 then&lt;br /&gt;
		shape_type = 0&lt;br /&gt;
		center = vector():set(0,0,0)&lt;br /&gt;
		radius = 10.0&lt;br /&gt;
		shape_count = 1&lt;br /&gt;
	else&lt;br /&gt;
		for i=1,shape_count do&lt;br /&gt;
			local shape_type = packet:r_u8()&lt;br /&gt;
			if shape_type == 0 then&lt;br /&gt;
				local center = packet:r_vec3()&lt;br /&gt;
				local radius = packet:r_float()&lt;br /&gt;
			else&lt;br /&gt;
				local v1 = packet:r_vec3()&lt;br /&gt;
				local v2 = packet:r_vec3()&lt;br /&gt;
				local v3 = packet:r_vec3()&lt;br /&gt;
				local v4 = packet:r_vec3()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_space_restrictor&lt;br /&gt;
	local restrictor_type = packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_level_changer&lt;br /&gt;
	local dest_game_vertex_id = packet:r_u16()&lt;br /&gt;
	local dest_level_vertex_id = packet:r_s32()&lt;br /&gt;
	local dest_position = packet:r_vec3()&lt;br /&gt;
	local dest_direction = packet:r_vec3()&lt;br /&gt;
	local dest_level_name = packet:r_stringZ()&lt;br /&gt;
	local dest_graph_point = packet:r_stringZ()&lt;br /&gt;
	local silent_mode = packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
	if packet:r_elapsed() ~= 0 then get_console():execute(&amp;quot;left=&amp;quot;..packet:r_elapsed()) end&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_object&lt;br /&gt;
	packet:w_u16(game_vertex_id)&lt;br /&gt;
	packet:w_float(cse_alife_object__unk1_f32)&lt;br /&gt;
	packet:w_s32(cse_alife_object__unk2_u32)&lt;br /&gt;
	packet:w_s32(level_vertex_id)&lt;br /&gt;
	packet:w_s32(object_flags)&lt;br /&gt;
	packet:w_stringZ(custom_data)&lt;br /&gt;
	packet:w_s32(sid)&lt;br /&gt;
	packet:w_s32(cse_alife_object__unk3_u32)&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_shape&lt;br /&gt;
	packet:w_u8(shape_count)&lt;br /&gt;
&lt;br /&gt;
	for i=1,shape_count do&lt;br /&gt;
		packet:w_u8(shape_type)&lt;br /&gt;
		if shape_type == 0 then&lt;br /&gt;
			packet:w_vec3(vector():set(0,0,0))&lt;br /&gt;
			packet:w_float(3)&lt;br /&gt;
		else&lt;br /&gt;
			packet:w_vec3(vector():set(3,0,0))&lt;br /&gt;
			packet:w_vec3(vector():set(0,3,0))&lt;br /&gt;
			packet:w_vec3(vector():set(0,0,3))&lt;br /&gt;
			packet:w_vec3(vector():set(0,0,0))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_space_restrictor&lt;br /&gt;
	packet:w_u8(restrictor_type)&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_level_changer&lt;br /&gt;
	packet:w_u16(vertexes[dest_level][&amp;quot;gvid&amp;quot;])&lt;br /&gt;
	packet:w_s32(vertexes[dest_level][&amp;quot;lvid&amp;quot;])&lt;br /&gt;
	packet:w_vec3(dest_pos)&lt;br /&gt;
	if dest_dir then &lt;br /&gt;
		packet:w_vec3(dest_dir)&lt;br /&gt;
	else&lt;br /&gt;
		packet:w_vec3(dest_direction)&lt;br /&gt;
	end&lt;br /&gt;
	packet:w_stringZ(dest_level)&lt;br /&gt;
	packet:w_stringZ(dest_graph_point)&lt;br /&gt;
	packet:w_u8(mode)&lt;br /&gt;
&lt;br /&gt;
	obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Этому скрипту в обед 100 лет. В этом же файле через две строки пишем:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function start_lc()&lt;br /&gt;
spawn_level_changer(6001, vector():set(368.9,15.17,-42.65), &amp;quot;l01_escape&amp;quot;, vector():set(-44.77, 0.43, -541.35), &amp;quot;l04_darkvalley&amp;quot;, &amp;quot;to_darkvalley&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
-- ЧАЭС - Припять&lt;br /&gt;
spawn_level_changer(6002, vector():set(918.1,-0.1,-401.96), &amp;quot;l12_stancia&amp;quot;, vector():set(31.28,1.135,420.61), &amp;quot;l11_pripyat&amp;quot;, &amp;quot;to_pripyat&amp;quot;, 0, vector():set(0,-3.1,0))&lt;br /&gt;
&lt;br /&gt;
-- ЧАЭС2 - ЧАЭС&lt;br /&gt;
spawn_level_changer(6003, vector():set(-42.15,-0.02,56.03), &amp;quot;l12_stancia_2&amp;quot;, vector():set(126,-0.1,-76.3), &amp;quot;l12_stancia&amp;quot;, &amp;quot;to_aes&amp;quot;, 0, vector():set(0,-1.5,0))&lt;br /&gt;
&lt;br /&gt;
-- ЧАЭС - ЧАЭС2&lt;br /&gt;
spawn_level_changer(6004, vector():set(117.6,-0.1,-76.3), &amp;quot;l12_stancia&amp;quot;, vector():set(-42.15,-0.02,64), &amp;quot;l12_stancia_2&amp;quot;, &amp;quot;to_aes&amp;quot;, 0)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Создает до кучи переходов (самых заветных). Чтобы в Интернете небыло больше вопросов &amp;quot;А как сделать переход с ЧАЭС в Припять, с Кордона в ТД?&amp;quot; и прочего.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Подключение ==&lt;br /&gt;
Через диалог:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;level_changer.start_lc&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
После отключения Радара (Мозговыжигателя):&lt;br /&gt;
&amp;lt;function_on_stop&amp;gt;level_changer.start_lc&amp;lt;/function_on_stop&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Тогда после сна при отключении &amp;quot;мозговыжигателя&amp;quot; на Радаре создадутся переходы, которые мы с Вами написали&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Автор ==&lt;br /&gt;
На YouTube я vllzl&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BE%D0%B2_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D0%BC%D0%B8</id>
		<title>Создание переходов между уровнями</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BE%D0%B2_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D0%BC%D0%B8"/>
				<updated>2012-05-12T13:25:21Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: Новая страница: «Создаем файл '''level_changer.script'''. В него пихаем. &amp;lt;lua&amp;gt; function spawn_level_changer(sid, from_pos, from_level, dest_pos, dest_level, hin...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создаем файл '''level_changer.script'''. В него пихаем.&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function spawn_level_changer(sid, from_pos, from_level, dest_pos, dest_level, hint, mode, dest_dir)&lt;br /&gt;
&lt;br /&gt;
local vertexes = {&lt;br /&gt;
l01_escape = {lvid=594266, gvid=0},&lt;br /&gt;
l04_darkvalley = {lvid=121712, gvid=815},&lt;br /&gt;
l11_pripyat = {lvid=142116, gvid=2270},&lt;br /&gt;
l12_stancia = {lvid=405348, gvid=2400},&lt;br /&gt;
l12_stancia_2 = {lvid=9914, gvid=2517}&lt;br /&gt;
-- l12_stancia_2 = {lvid=227423, gvid=2635}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local obj = alife():create(&amp;quot;level_changer&amp;quot;, from_pos, vertexes[from_level][&amp;quot;lvid&amp;quot;], vertexes[from_level][&amp;quot;gvid&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if obj then&lt;br /&gt;
&lt;br /&gt;
	level.map_add_object_spot(obj.id, &amp;quot;level_changer&amp;quot;, hint)&lt;br /&gt;
&lt;br /&gt;
	local packet = net_packet()&lt;br /&gt;
&lt;br /&gt;
	obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_object&lt;br /&gt;
	local game_vertex_id = packet:r_u16()&lt;br /&gt;
	local cse_alife_object__unk1_f32 = packet:r_float()&lt;br /&gt;
	local cse_alife_object__unk2_u32 = packet:r_s32()&lt;br /&gt;
	local level_vertex_id = packet:r_s32()&lt;br /&gt;
	local object_flags = packet:r_s32()&lt;br /&gt;
	local custom_data = packet:r_stringZ()&lt;br /&gt;
	local story_id = packet:r_s32()&lt;br /&gt;
	local cse_alife_object__unk3_u32 = packet:r_s32()&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_shape&lt;br /&gt;
	local shape_count = packet:r_u8()&lt;br /&gt;
	local shape_type&lt;br /&gt;
	local center&lt;br /&gt;
	local radius&lt;br /&gt;
&lt;br /&gt;
	if shape_count == 0 then&lt;br /&gt;
		shape_type = 0&lt;br /&gt;
		center = vector():set(0,0,0)&lt;br /&gt;
		radius = 10.0&lt;br /&gt;
		shape_count = 1&lt;br /&gt;
	else&lt;br /&gt;
		for i=1,shape_count do&lt;br /&gt;
			local shape_type = packet:r_u8()&lt;br /&gt;
			if shape_type == 0 then&lt;br /&gt;
				local center = packet:r_vec3()&lt;br /&gt;
				local radius = packet:r_float()&lt;br /&gt;
			else&lt;br /&gt;
				local v1 = packet:r_vec3()&lt;br /&gt;
				local v2 = packet:r_vec3()&lt;br /&gt;
				local v3 = packet:r_vec3()&lt;br /&gt;
				local v4 = packet:r_vec3()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_space_restrictor&lt;br /&gt;
	local restrictor_type = packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_level_changer&lt;br /&gt;
	local dest_game_vertex_id = packet:r_u16()&lt;br /&gt;
	local dest_level_vertex_id = packet:r_s32()&lt;br /&gt;
	local dest_position = packet:r_vec3()&lt;br /&gt;
	local dest_direction = packet:r_vec3()&lt;br /&gt;
	local dest_level_name = packet:r_stringZ()&lt;br /&gt;
	local dest_graph_point = packet:r_stringZ()&lt;br /&gt;
	local silent_mode = packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
	if packet:r_elapsed() ~= 0 then get_console():execute(&amp;quot;left=&amp;quot;..packet:r_elapsed()) end&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_object&lt;br /&gt;
	packet:w_u16(game_vertex_id)&lt;br /&gt;
	packet:w_float(cse_alife_object__unk1_f32)&lt;br /&gt;
	packet:w_s32(cse_alife_object__unk2_u32)&lt;br /&gt;
	packet:w_s32(level_vertex_id)&lt;br /&gt;
	packet:w_s32(object_flags)&lt;br /&gt;
	packet:w_stringZ(custom_data)&lt;br /&gt;
	packet:w_s32(sid)&lt;br /&gt;
	packet:w_s32(cse_alife_object__unk3_u32)&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_shape&lt;br /&gt;
	packet:w_u8(shape_count)&lt;br /&gt;
&lt;br /&gt;
	for i=1,shape_count do&lt;br /&gt;
		packet:w_u8(shape_type)&lt;br /&gt;
		if shape_type == 0 then&lt;br /&gt;
			packet:w_vec3(vector():set(0,0,0))&lt;br /&gt;
			packet:w_float(3)&lt;br /&gt;
		else&lt;br /&gt;
			packet:w_vec3(vector():set(3,0,0))&lt;br /&gt;
			packet:w_vec3(vector():set(0,3,0))&lt;br /&gt;
			packet:w_vec3(vector():set(0,0,3))&lt;br /&gt;
			packet:w_vec3(vector():set(0,0,0))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_space_restrictor&lt;br /&gt;
	packet:w_u8(restrictor_type)&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_level_changer&lt;br /&gt;
	packet:w_u16(vertexes[dest_level][&amp;quot;gvid&amp;quot;])&lt;br /&gt;
	packet:w_s32(vertexes[dest_level][&amp;quot;lvid&amp;quot;])&lt;br /&gt;
	packet:w_vec3(dest_pos)&lt;br /&gt;
	if dest_dir then &lt;br /&gt;
		packet:w_vec3(dest_dir)&lt;br /&gt;
	else&lt;br /&gt;
		packet:w_vec3(dest_direction)&lt;br /&gt;
	end&lt;br /&gt;
	packet:w_stringZ(dest_level)&lt;br /&gt;
	packet:w_stringZ(dest_graph_point)&lt;br /&gt;
	packet:w_u8(mode)&lt;br /&gt;
&lt;br /&gt;
	obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Этому скрипту в обед 100 лет. В этом же файле через две строки пишем:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function start_lc()&lt;br /&gt;
spawn_level_changer(6001, vector():set(368.9,15.17,-42.65), &amp;quot;l01_escape&amp;quot;, vector():set(-44.77, 0.43, -541.35), &amp;quot;l04_darkvalley&amp;quot;, &amp;quot;to_darkvalley&amp;quot;, 0)&lt;br /&gt;
&lt;br /&gt;
-- ЧАЭС - Припять&lt;br /&gt;
spawn_level_changer(6002, vector():set(918.1,-0.1,-401.96), &amp;quot;l12_stancia&amp;quot;, vector():set(31.28,1.135,420.61), &amp;quot;l11_pripyat&amp;quot;, &amp;quot;to_pripyat&amp;quot;, 0, vector():set(0,-3.1,0))&lt;br /&gt;
&lt;br /&gt;
-- ЧАЭС2 - ЧАЭС&lt;br /&gt;
-- spawn_level_changer(6003, vector():set(554.52,150,201), &amp;quot;l12_stancia_2&amp;quot;, vector():set(117.6,-0.1,-76.3), &amp;quot;l12_stancia&amp;quot;, &amp;quot;to_aes&amp;quot;, 1, vector():set(0,-1.5,0))&lt;br /&gt;
spawn_level_changer(6003, vector():set(-42.15,-0.02,56.03), &amp;quot;l12_stancia_2&amp;quot;, vector():set(126,-0.1,-76.3), &amp;quot;l12_stancia&amp;quot;, &amp;quot;to_aes&amp;quot;, 0, vector():set(0,-1.5,0))&lt;br /&gt;
&lt;br /&gt;
-- ЧАЭС - ЧАЭС2&lt;br /&gt;
spawn_level_changer(6004, vector():set(117.6,-0.1,-76.3), &amp;quot;l12_stancia&amp;quot;, vector():set(-42.15,-0.02,64), &amp;quot;l12_stancia_2&amp;quot;, &amp;quot;to_aes&amp;quot;, 0)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Создает до кучи переходов (самых заветных). Чтобы в Интернете небыло больше вопросов &amp;quot;А как сделать переход с ЧАЭС в Припять, с Кордона в ТД?&amp;quot; и прочего.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Подключение ==&lt;br /&gt;
Через диалог:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;level_changer.start_lc&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
После отключения Радара (Мозговыжигателя):&lt;br /&gt;
&amp;lt;function_on_stop&amp;gt;level_changer.start_lc&amp;lt;/function_on_stop&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Тогда после сна при отключении &amp;quot;мозговыжигателя&amp;quot; на Радаре создадутся переходы, которые мы с Вами написали&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Автор ==&lt;br /&gt;
На YouTube я vllzl&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%BE%D1%87%D0%B5%D0%BA_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D0%BC%D0%B8</id>
		<title>SoC. Спавн точек перехода между уровнями</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%BE%D1%87%D0%B5%D0%BA_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D0%BC%D0%B8"/>
				<updated>2012-05-12T11:22:24Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой статье я попытаюсь передать практический опыт скриптового создания точек перехода между уровнями. Файл ''all.spawn'' меняться не будет, поэтому такой механизм более удобен для совмещения модов и не требует начала новой игры.&lt;br /&gt;
&lt;br /&gt;
В качестве примера попробуем реализовать режим ''freeplay'' - продолжение игры после уничтожения О-Сознания. Для этого нужно создать как минимум две точки — возврат на ЧАЭС-1 со внутреннего дворика (после уничтожения О-Сознания) и переход из ЧАЭС-1 в Припять. К слову сказать, если вернуться на ЧАЭС-1, то там будет продолжать действовать таймер &amp;quot;выброса&amp;quot;, который в конце-концов включит &amp;quot;deadzone&amp;quot;. Отключить счетчик мне пока не удалось, но зато можно легко отключить сам &amp;quot;выброс&amp;quot; и всласть побегать по уровню.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Часть 1. Генерация работающего LEVEL_CHANGER ==&lt;br /&gt;
&lt;br /&gt;
Стандартной функции alife():create(…) недостаточно для создания полноценного level_changer.&lt;br /&gt;
&lt;br /&gt;
Ниже я привожу код функции, которая создает и инициализирует level_changer (пишется в созданный нами файл '''_freeplay_sa.script'''): НИЧЕГО НЕ ПОДСТАВЛЯЙТЕ! &lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function create_level_changer(&lt;br /&gt;
	p_story_id,	-- STORY_ID нового level_changer (понадобится нам позже)&lt;br /&gt;
	p_position,	-- вектор, координаты точки, в которой будет располагаться центр нового level_changer&lt;br /&gt;
	p_lvertex_id,	-- level_vertext_id  - идентифицируют уровень, на котором будет создан level_changer&lt;br /&gt;
	p_gvertex_id,	-- game_vertext_id   	&lt;br /&gt;
&lt;br /&gt;
	p_dest_lv,	-- level_vertex_id   - идентифицируют уровень, на который level_changer будет перебрасывать игрока &lt;br /&gt;
	p_dest_gv,	-- game_vertex_id&lt;br /&gt;
	p_dest_pos,	-- координаты точки, в которой на новом уровне окажется игрок&lt;br /&gt;
	p_dest_dir,	-- направрение взгляда игрока&lt;br /&gt;
	p_dest_level,	-- название уровня, например &amp;quot;L11_Pripyat&amp;quot;&lt;br /&gt;
	p_silent	-- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)&lt;br /&gt;
)&lt;br /&gt;
	local obj = alife():create(&amp;quot;level_changer&amp;quot;, p_position, p_lvertex_id, p_gvertex_id)&lt;br /&gt;
&lt;br /&gt;
	level.map_add_object_spot(obj.id, &amp;quot;level_changer&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local packet = net_packet()&lt;br /&gt;
	obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_object&lt;br /&gt;
	local game_vertex_id 			= packet:r_u16()&lt;br /&gt;
	local cse_alife_object__unk1_f32 	= packet:r_float()&lt;br /&gt;
	local cse_alife_object__unk2_u32 	= packet:r_u32()&lt;br /&gt;
	local level_vertex_id 			= packet:r_u32()&lt;br /&gt;
	local object_flags 			= packet:r_u32()&lt;br /&gt;
	local custom_data 			= packet:r_stringZ()&lt;br /&gt;
	local story_id 				= packet:r_u32()&lt;br /&gt;
	local spawn_story_id			= packet:r_u32()&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_shape&lt;br /&gt;
	local shape_count 			= packet:r_u8()&lt;br /&gt;
	for i=1,shape_count do&lt;br /&gt;
		local shape_type 		= packet:r_u8()&lt;br /&gt;
		if shape_type == 0 then&lt;br /&gt;
			-- sphere&lt;br /&gt;
			local center 		= packet:r_vec3()&lt;br /&gt;
			local radius 		= packet:r_float()&lt;br /&gt;
		else&lt;br /&gt;
			-- box&lt;br /&gt;
			local axis_x_x = packet:r_float()&lt;br /&gt;
			local axis_x_y = packet:r_float()&lt;br /&gt;
			local axis_x_z = packet:r_float()&lt;br /&gt;
			local axis_y_x = packet:r_float()&lt;br /&gt;
			local axis_y_y = packet:r_float()&lt;br /&gt;
			local axis_y_z = packet:r_float()&lt;br /&gt;
			local axis_z_x = packet:r_float()&lt;br /&gt;
			local axis_z_y = packet:r_float()&lt;br /&gt;
			local axis_z_z = packet:r_float()&lt;br /&gt;
			local offset_x = packet:r_float()&lt;br /&gt;
			local offset_y = packet:r_float()&lt;br /&gt;
			local offset_z = packet:r_float()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_space_restrictor&lt;br /&gt;
	local restrictor_type 			= packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_level_changer&lt;br /&gt;
	local dest_game_vertex_id		= packet:r_u16()  &lt;br /&gt;
	local dest_level_vertex_id 		= packet:r_u32()  &lt;br /&gt;
	local dest_position 			= packet:r_vec3()&lt;br /&gt;
	local dest_direction 			= packet:r_vec3()&lt;br /&gt;
	local dest_level_name 			= packet:r_stringZ()&lt;br /&gt;
	local dest_graph_point 			= packet:r_stringZ()&lt;br /&gt;
	local silent_mode 			= packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	packet:w_begin(game_vertex_id)			-- game_vertex_id&lt;br /&gt;
	packet:w_float(cse_alife_object__unk1_f32)&lt;br /&gt;
	packet:w_u32(cse_alife_object__unk2_u32) &lt;br /&gt;
	packet:w_u32(level_vertex_id)			-- level_vertex_id&lt;br /&gt;
	packet:w_u32( bit_not(193) )			-- object_flags = -193 = 0xFFFFFF3E&lt;br /&gt;
	packet:w_stringZ(custom_data)&lt;br /&gt;
	packet:w_u32(p_story_id)			-- story_id&lt;br /&gt;
	packet:w_u32(spawn_story_id)&lt;br /&gt;
&lt;br /&gt;
	packet:w_u8(1)			-- количество фигур&lt;br /&gt;
--		packet:w_u8(0)			-- тип фигуры: сфера&lt;br /&gt;
--		packet:w_vec3(vector():set(0, 0, 0))  -- sphere_center&lt;br /&gt;
--		packet:w_float(3.0)&lt;br /&gt;
	packet:w_u8(1)			-- тип фигуры: box&lt;br /&gt;
	packet:w_float(2)	   -- axis_x_x&lt;br /&gt;
	packet:w_float(0)	   -- axis_x_y&lt;br /&gt;
	packet:w_float(0)	   -- axis_x_z&lt;br /&gt;
	packet:w_float(0)	   -- axis_y_x&lt;br /&gt;
	packet:w_float(4)	   -- axis_y_y&lt;br /&gt;
	packet:w_float(0)	   -- axis_y_z&lt;br /&gt;
	packet:w_float(0)	   -- axis_z_x&lt;br /&gt;
	packet:w_float(0)	   -- axis_z_y&lt;br /&gt;
	packet:w_float(4)	   -- axis_z_z&lt;br /&gt;
	packet:w_float(0)	   -- offset_x&lt;br /&gt;
	packet:w_float(0)	   -- offset_y&lt;br /&gt;
	packet:w_float(0)          -- offset_z&lt;br /&gt;
&lt;br /&gt;
	packet:w_u8(3)	 	   -- restrictor_type&lt;br /&gt;
&lt;br /&gt;
	packet:w_u16(p_dest_gv)			-- destination game_vertex_id&lt;br /&gt;
	packet:w_u32(p_dest_lv)			-- destination level_vertex_id&lt;br /&gt;
	packet:w_vec3(p_dest_pos)		-- destination position&lt;br /&gt;
	packet:w_vec3(p_dest_dir)		-- destination direction (направление взгляда)&lt;br /&gt;
	packet:w_stringZ(p_dest_level)		-- destination level name&lt;br /&gt;
	packet:w_stringZ(&amp;quot;start_actor_99&amp;quot;)	-- some string, always const&lt;br /&gt;
	packet:w_u8(p_silent)			-- 1 for silent level changing&lt;br /&gt;
&lt;br /&gt;
	packet:r_seek(0)&lt;br /&gt;
	obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
--	news_manager.send_tip(db.actor, &amp;quot;LC creation finished&amp;quot;, nil, nil, 30000)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Часть 2. '''Создание точек перехода''' ==&lt;br /&gt;
&lt;br /&gt;
Теперь следует написать функции создания нужных точек перехода и подключить их к игре. Сами функции просты (тоже в файл '''_freeplay_sa.script''')&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function exit_monolit()&lt;br /&gt;
	if (not has_alife_info(&amp;quot;freeplay_activated1&amp;quot;)) then&lt;br /&gt;
		create_level_changer(11410, vector():set(-13.26, 47.71, 46.57), 200, 2417,&lt;br /&gt;
			162109,&lt;br /&gt;
                        2384,&lt;br /&gt;
			vector():set( 375.615, 0.224, 27.737 ),&lt;br /&gt;
			vector():set(     0.0, 0.0  ,  0.0 ),&lt;br /&gt;
			&amp;quot;L12_Stancia&amp;quot;,&lt;br /&gt;
			1)&lt;br /&gt;
	&lt;br /&gt;
		db.actor:give_info_portion(&amp;quot;freeplay_activated1&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- создается переход из ЧАЭС в Припять&lt;br /&gt;
	create_chaes2pripyat_exit()&lt;br /&gt;
&lt;br /&gt;
	-- актер перебрасывается в level_changer, возвращающий его на ЧАЭС, ко входу в бункер&lt;br /&gt;
	db.actor:set_actor_position( vector():set(-13.26, 47.71, 46.57) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function refuze_o_sozn()&lt;br /&gt;
	if (not has_alife_info(&amp;quot;freeplay_activated2&amp;quot;)) then&lt;br /&gt;
		create_level_changer(21410, vector():set(946.872, 6.0, 167.66), 240852, 2637,&lt;br /&gt;
			472710,&lt;br /&gt;
			2280,&lt;br /&gt;
			vector():set( 1062.15, -0.0982, -3.512 ),&lt;br /&gt;
			vector():set(    0.0 ,  0.0   , -1.0 ),&lt;br /&gt;
			&amp;quot;L12_Stancia&amp;quot;,&lt;br /&gt;
			1)&lt;br /&gt;
	&lt;br /&gt;
		db.actor:give_info_portion(&amp;quot;freeplay_activated2&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- создается переход из ЧАЭС в Припять&lt;br /&gt;
	create_chaes2pripyat_exit()&lt;br /&gt;
&lt;br /&gt;
	-- актер перебрасывается в level_changer, возвращающий его к правым воротам ЧАЭС&lt;br /&gt;
	db.actor:set_actor_position( vector():set(946.872, 6.0, 167.66) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function create_chaes2pripyat_exit()&lt;br /&gt;
	-- создается переход из ЧАЭС в Припять&lt;br /&gt;
	if (not has_alife_info(	&amp;quot;exit_chaes2pripyat_created&amp;quot; )) then&lt;br /&gt;
		create_level_changer(31410, vector():set( 917.35, 0.419, -316.35 ), 403866, 2401,&lt;br /&gt;
			73868,&lt;br /&gt;
			2117,&lt;br /&gt;
			vector():set( 31.3, 3.0, 240.0 ),&lt;br /&gt;
			vector():set(  0.0, 0.0,  -1.0 ),&lt;br /&gt;
			&amp;quot;L11_Pripyat&amp;quot;,&lt;br /&gt;
			0)&lt;br /&gt;
&lt;br /&gt;
		db.actor:give_info_portion(&amp;quot;exit_chaes2pripyat_created&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция '''exit_monolit''' создает «тихий» переход на уровень ЧАЭС-1 и обычный - в начале уровня ЧАЭС-1 для возврата в Припять, после чего перебрасывает актера прямо внутрь созданного перехода. Функция '''refuze_o_sozn''' делает тоже самое, только игрок появляется перед воротами в правом верхем углу карты (мне кажется, что так более логично). Все телепорты защищаются уникальными info_portions, дабы избежать их повторного создания, ведь игрок может захотеть «закончить» игру несколько раз.&lt;br /&gt;
&lt;br /&gt;
Теперь подключение.&lt;br /&gt;
Во-первых надо добавить новые info-portions. Я решил не изменять оригинальные файлы игры, а сделал для них (ну и для других тоже) отдельный файл&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		config\gameplay\_info_sa.xml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
следующего вида:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1251&amp;quot; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;game_information_portions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;freeplay_activated1&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;freeplay_activated2&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;exit_chaes2pripyat_created&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/game_information_portions&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Теперь в этот файл можно будет добавлять новые info_portion, которые вы будете использовать в своих сюжетах.&lt;br /&gt;
Подключается этот файл в system.ltx в секции «info_portions»:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[info_portions]&lt;br /&gt;
;список xml файлов, содержащих info_portions&lt;br /&gt;
files = _info_sa, info_portions, ....................&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Кстати, именно так я рекомендую добавлять новые диалоги и новых персонажей. Это упростит процессы совмещения модов и аддонов.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Следующий шаг - подключение наших скриптов к игре. Для этого откройте файл &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		config\ui\ui_movies.xml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
найдите элементы «''mov_desire_''» (их пять, по количеству ложных концовок игры - все варианты общения с Монолитом). Внутри каждого элемента есть дочерние элементы «''function_on_stop''», которые задают функцию, запускающуюся сразу после ролика. Стандартное содержимое:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		&amp;lt;function_on_stop&amp;gt;xr_effects.game_credits&amp;lt;/function_on_stop&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Функция '''xr_effects.game_credits''' запускает финальные титры. Именно ее и нужно заменить на вызов нашей функции _freeplay_sa.exit_monolit. Вот что должно получиться:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		&amp;lt;function_on_stop&amp;gt;_freeplay_sa.exit_monolit&amp;lt;/function_on_stop&amp;gt;&lt;br /&gt;
&amp;lt;!-- original:	&amp;lt;function_on_stop&amp;gt;xr_effects.game_credits&amp;lt;/function_on_stop&amp;gt;  --&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
''Старый элемент я советую не удалять, а закомментировать.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чуть ниже «''mov_desire_5''» находится тэг ролика для концовки «Присоединение к О-Сознанию». Его мы трогать не будем - Меченый станет медузой. А вот после него - тэг для ролика «Отказ от О-Сознания»: «''mov_refuse_osoznanie''». Функцию завершения в нем заменим следующим образом:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		&amp;lt;function_on_stop&amp;gt;_freeplay_sa.refuze_o_sozn&amp;lt;/function_on_stop&amp;gt;&lt;br /&gt;
&amp;lt;!-- original:	&amp;lt;function_on_stop&amp;gt;xr_effects.game_credits&amp;lt;/function_on_stop&amp;gt;  --&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Можно запускать и, если есть сохранения перед монолитом и/или о-сознанием, тестировать. Первые переходы срабатывают «тихо» - запрос на смену уровня не выдается (в параметре p_silent задана 1). До перехода в Припять можно успеть добежать, пока не сработал выброс... Но это как-то неправильно, выброс надо остановить (он же произошел, пока мы были внутри станции). «По-честному» (скриптом, без модификации ''all.spawn'') таймер выброса отключить не получится, но зато выброс можно подавить небольшим «хаком». Найдите файл xr_logic.script, а в нем - функцию '''switch_to_section'''. Ее нужно модифицировать следующим образом:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
-- Выполняет переключение на указанную секцию, если задана.&lt;br /&gt;
-- Если section == nil, остается работать старая секция.&lt;br /&gt;
function switch_to_section(npc, st, section)&lt;br /&gt;
  if section == nil or section == &amp;quot;&amp;quot; then&lt;br /&gt;
    return false&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- 15.03.2008 by SA:&lt;br /&gt;
  -- отключает &amp;quot;смертельные зоны&amp;quot; на ЧАЭС после запуска режима FREEPLAY&lt;br /&gt;
  -- 	таймер не отключается, но сам &amp;quot;выброс&amp;quot; не происходит&lt;br /&gt;
  if (section == &amp;quot;sr_aes_deadzone&amp;quot;) then&lt;br /&gt;
	if (has_alife_info(&amp;quot;freeplay_activated1&amp;quot;) or has_alife_info(&amp;quot;freeplay_activated2&amp;quot;)) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  ... далее без изменений ...&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данный способ оставляет висящий на нулях таймер и все эффекты начала выброса, но сам «''выброс''» отключается.&lt;br /&gt;
&lt;br /&gt;
И последнее: переход ЧАЭС1-Припять необходимо отметить на карте. Для этого существует вполне «легальный» механизм. Находим файл '''level_tasks.script''' и в конце функции '''add_lchanger_location''' дописываем следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		-- aes&lt;br /&gt;
		obj = sim:story_object(31410)&lt;br /&gt;
		if obj then&lt;br /&gt;
			level.map_add_object_spot(obj.id, &amp;quot;level_changer&amp;quot;, &amp;quot;to_pripyat&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь 31410 - story_id нашего level_changer, который создается нашей функцией '''create_chaes2pripyat_exit'''.&lt;br /&gt;
&lt;br /&gt;
На этом пока все (мелкие огрехи типа направления взгляда игрока после смены уровня исправлю позже).&lt;br /&gt;
Прошу тестировать и дополнять.&lt;br /&gt;
&lt;br /&gt;
С уважением, sarthur.&lt;br /&gt;
&lt;br /&gt;
== Дополняет авторы: vllzl ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
«По-честному» (скриптом, без модификации ''all.spawn'') таймер выброса отключить не получится.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Можно удалить таймер скриптом (удаляет рестриктор из игры)&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function delete_aes_timer()&lt;br /&gt;
        local obj = alife():object(&amp;quot;aes_space_restrictor_timer&amp;quot;)&lt;br /&gt;
        if obj then&lt;br /&gt;
        alife():release(obj, true)&lt;br /&gt;
        end&lt;br /&gt;
        local se_obj = alife():object(&amp;quot;aes_space_restrictor_timer_go&amp;quot;)&lt;br /&gt;
        if se_obj then&lt;br /&gt;
        alife():release(se_obj, true)&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Удалит таймер и выброс из игры. Vllzl&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%B5%D0%BB%D0%B5%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7</id>
		<title>Спавн телепортов в ТЧ</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%B5%D0%BB%D0%B5%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7"/>
				<updated>2012-05-10T17:15:02Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: Новая страница: «Создаем файл bind_mteleport.script. В него просто копируем, ничего не меняем: &amp;lt;code&amp;gt; -- *********************************...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создаем файл bind_mteleport.script. В него просто копируем, ничего не меняем:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
-- ************************************************&lt;br /&gt;
-- **                    Imp                     **&lt;br /&gt;
-- **       Биндер самодельных телепортов        **&lt;br /&gt;
-- ** Поддерживает работу самопальных телепортов **&lt;br /&gt;
-- ************************************************&lt;br /&gt;
&lt;br /&gt;
local teleport_binders ={}	-- Список телепортов&lt;br /&gt;
&lt;br /&gt;
function abs_comp(a,b)&lt;br /&gt;
	-- Служебная функция вычисления разности&lt;br /&gt;
	if( a &amp;lt; b) then&lt;br /&gt;
		return (b - a)&lt;br /&gt;
	else&lt;br /&gt;
		return (a - b)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function teleportate(x,y,z)&lt;br /&gt;
-- Функция телепортации&lt;br /&gt;
	local a = vector()&lt;br /&gt;
	-- Задаем координаты&lt;br /&gt;
	a.x = x&lt;br /&gt;
	a.y = y&lt;br /&gt;
	a.z = z&lt;br /&gt;
&lt;br /&gt;
	-- Сама телепортация&lt;br /&gt;
	db.actor:set_actor_position(a)&lt;br /&gt;
&lt;br /&gt;
	-- Звуковое сопровождение&lt;br /&gt;
	local snd_obj = xr_sound.get_safe_sound_object([[affects\tinnitus3a]])&lt;br /&gt;
	snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function actor_update(delta)&lt;br /&gt;
	local i,v,acter_poz,s&lt;br /&gt;
&lt;br /&gt;
	-- Получим позицию актера (что-бы каждый раз не запрашивать)&lt;br /&gt;
	acter_poz = db.actor:position()&lt;br /&gt;
&lt;br /&gt;
	-- Проверяем наши телепорты&lt;br /&gt;
	for i, v in pairs(teleport_binders) do&lt;br /&gt;
		s = v.parametrs&lt;br /&gt;
&lt;br /&gt;
		local obj = level.object_by_id( i )&lt;br /&gt;
		if obj ~= nil then&lt;br /&gt;
		-- Наш телепорт в онлайне проверяем дальше&lt;br /&gt;
			if s.teleporte ~= nil and s.teleporte ~= false then&lt;br /&gt;
				-- Телепорт запущен&lt;br /&gt;
				if ( time_global() &amp;lt;= s.time ) then&lt;br /&gt;
					-- Если время отведенное на показ спецэфектов&lt;br /&gt;
					-- прошло, производим телепортацию&lt;br /&gt;
					teleportate(s.poz_x,s.poz_y,s.poz_z)&lt;br /&gt;
					if s.rotate ~= nil then&lt;br /&gt;
						db.actor:set_actor_direction(s.rotate)&lt;br /&gt;
					end&lt;br /&gt;
					s.teleporte = false&lt;br /&gt;
				end&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Пороверим не забрел-ли актер в наш телепорт&lt;br /&gt;
			if (abs_comp(s.x, acter_poz.x)&amp;lt; v.parametrs.radius  and&lt;br /&gt;
			    abs_comp(s.z, acter_poz.z)&amp;lt; v.parametrs.radius  and&lt;br /&gt;
			    abs_comp(s.y, acter_poz.y)&amp;lt; v.parametrs.z_radius) then&lt;br /&gt;
				-- Актер в зоне действия телепорта, запустим телепорт&lt;br /&gt;
				s[&amp;quot;teleporte&amp;quot;] = true&lt;br /&gt;
				s[&amp;quot;time&amp;quot;] = time_global() + 500&lt;br /&gt;
&lt;br /&gt;
				-- Запускаем спецэфекты телепортации&lt;br /&gt;
				level.add_pp_effector (&amp;quot;teleport.ppe&amp;quot;, 2006, false)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function bind( obj )&lt;br /&gt;
	obj:bind_object( restrictor_teleport( obj ) ) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
class &amp;quot;restrictor_teleport&amp;quot; ( object_binder )&lt;br /&gt;
&lt;br /&gt;
function restrictor_teleport:__init(obj, char_ini) super(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function restrictor_teleport:net_spawn(data)&lt;br /&gt;
	local char_ini = system_ini()&lt;br /&gt;
&lt;br /&gt;
	-- Если это телепорт то занесем его в специальный список телепортов&lt;br /&gt;
	if self.teleport == true then&lt;br /&gt;
		teleport_binders[self.object:id()] = self&lt;br /&gt;
&lt;br /&gt;
		-- Заполним таблицу параметров&lt;br /&gt;
		self[&amp;quot;parametrs&amp;quot;] = {}&lt;br /&gt;
		if char_ini:line_exist(self.section, &amp;quot;radius&amp;quot;) then&lt;br /&gt;
			self.parametrs[&amp;quot;radius&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;radius&amp;quot;))&lt;br /&gt;
		else&lt;br /&gt;
			self.parametrs[&amp;quot;radius&amp;quot;] = 2 -- Дефолтный радиус по xy&lt;br /&gt;
		end&lt;br /&gt;
		if char_ini:line_exist(self.section, &amp;quot;z_radius&amp;quot;) then&lt;br /&gt;
			self.parametrs[&amp;quot;z_radius&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;z_radius&amp;quot;))&lt;br /&gt;
		else&lt;br /&gt;
			self.parametrs[&amp;quot;z_radius&amp;quot;] = self.parametrs[&amp;quot;radius&amp;quot;] -- если радиус высоты не задан то задаем равным радиусу xy&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Запомним позицию что-бы каждый раз не считать&lt;br /&gt;
		local s_obj = alife():object(self.object:id())&lt;br /&gt;
		self.parametrs[&amp;quot;x&amp;quot;] = tonumber(s_obj.position.x);&lt;br /&gt;
		self.parametrs[&amp;quot;y&amp;quot;] = tonumber(s_obj.position.y);&lt;br /&gt;
		self.parametrs[&amp;quot;z&amp;quot;] = tonumber(s_obj.position.z);&lt;br /&gt;
&lt;br /&gt;
		-- Запомним координаты куда телепортимся&lt;br /&gt;
		self.parametrs[&amp;quot;poz_x&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;poz_x&amp;quot;))&lt;br /&gt;
		self.parametrs[&amp;quot;poz_y&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;poz_y&amp;quot;))&lt;br /&gt;
		self.parametrs[&amp;quot;poz_z&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;poz_z&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
		if char_ini:line_exist(self.section, &amp;quot;rotate&amp;quot;) then&lt;br /&gt;
			self.parametrs[&amp;quot;rotate&amp;quot;] = tonumber(char_ini:r_string(self.section, &amp;quot;rotate&amp;quot;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function restrictor_teleport:net_destroy()&lt;br /&gt;
	-- Удаляем наш телепорт&lt;br /&gt;
	teleport_binders[self.object:id()] = nil&lt;br /&gt;
	self.parametrs = nil&lt;br /&gt;
	object_binder.net_destroy(self)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function restrictor_teleport:reload(section)&lt;br /&gt;
	local char_ini = system_ini()&lt;br /&gt;
&lt;br /&gt;
	self.section = section&lt;br /&gt;
	-- Если это телепорт то &lt;br /&gt;
	if char_ini ~= nil and char_ini:line_exist(self.section, &amp;quot;teleport&amp;quot;) then&lt;br /&gt;
		self[&amp;quot;teleport&amp;quot;] = true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В файле bind_stalker прописываем спавн и обновление телепортатора. Находим:&lt;br /&gt;
function actor_binder:update(delta) &lt;br /&gt;
&lt;br /&gt;
В ней найдем вызов обновления рестрикторов bind_restrictor.actor_update(delta) под которым вставим строку с вызовом нашей функции обновления: bind_mteleport.actor_update(delta) &lt;br /&gt;
&lt;br /&gt;
Мы запрограммировали телепорт. Осталось его заспавнить. В config\misc\zone_teleport.ltx в конце пишем:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[m_teleport]:zone_teleport&lt;br /&gt;
teleport			= standart&lt;br /&gt;
script_binding          	= bind_mteleport.bind&lt;br /&gt;
;Параметры нашего телепорта&lt;br /&gt;
radius				= 2&lt;br /&gt;
;Высота захвата телепорта&lt;br /&gt;
z_radius			= 2&lt;br /&gt;
&lt;br /&gt;
;Куда телепортируемся (телепортация всегда идет в пределах карты)&lt;br /&gt;
poz_x				= 22.78&lt;br /&gt;
poz_y				= 20.35&lt;br /&gt;
poz_z				= 659.24&lt;br /&gt;
&lt;br /&gt;
; Угол зрения при появлении. Если параметра нет то не меняется.&lt;br /&gt;
rotate = 1.5&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Теперь создаем файл create_teleport.script в gamedata/scripts, и в него суем:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function create_teleport()&lt;br /&gt;
	local obj&lt;br /&gt;
	local a = vector()  -- тип переменной&lt;br /&gt;
	a.x = x  -- подставьте вектор&lt;br /&gt;
	a.y = y  -- подставьте вектор&lt;br /&gt;
	a.z = z  -- подставьте вектор&lt;br /&gt;
	obj = alife():create(&amp;quot;m_teleport&amp;quot;,a,lvertex,gvertex)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Теперь в том-же bind_stalker.script под bind_restrictor.actor_update(delta) в функции function actor_binder:update(delta) пишем &amp;quot;create_teleport.create_teleport&amp;quot; БЕЗ КАВЫЧЕК.&lt;br /&gt;
ГОТОВО!&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=CoP._%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%BE%D1%87%D0%B5%D0%BA_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BB%D0%BE%D0%BA%D0%B0%D1%86%D0%B8%D1%8F%D0%BC%D0%B8</id>
		<title>CoP. Спавн точек перехода между локациями</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=CoP._%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%BE%D1%87%D0%B5%D0%BA_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BB%D0%BE%D0%BA%D0%B0%D1%86%D0%B8%D1%8F%D0%BC%D0%B8"/>
				<updated>2012-05-10T16:52:26Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: Новая страница: «Создание точек перехода между локациями. &amp;lt;lua&amp;gt; function create_level_changer( p_story_id, -- STORY_ID нового level_changer p...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Создание точек перехода между локациями.&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function create_level_changer(&lt;br /&gt;
p_story_id, -- STORY_ID нового level_changer&lt;br /&gt;
p_position, -- вектор, центр нового level_changer&lt;br /&gt;
p_lvertex_id, -- level_vertext_id&lt;br /&gt;
p_gvertex_id, -- game_vertext_id &lt;br /&gt;
p_dest_lv, -- level_vertex_id &lt;br /&gt;
p_dest_gv, -- game_vertex_id&lt;br /&gt;
p_dest_pos, -- координаты на новом уровне&lt;br /&gt;
p_dest_dir, -- направление взгляда игрока&lt;br /&gt;
p_dest_level, -- название уровня&lt;br /&gt;
p_silent, -- 1 автоматический переход&lt;br /&gt;
P_spotdir, -- метка на карте&lt;br /&gt;
p_desr -- описание &lt;br /&gt;
)&lt;br /&gt;
local obj = alife():create(&amp;quot;level_changer&amp;quot;, p_position, p_lvertex_id, p_gvertex_id)&lt;br /&gt;
level.map_add_object_spot_ser(obj.id,P_spotdir,p_desr)&lt;br /&gt;
&lt;br /&gt;
local packet = net_packet()&lt;br /&gt;
obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
-- свойства cse_alife_object&lt;br /&gt;
local game_vertex_id = packet:r_u16()&lt;br /&gt;
local cse_alife_object__unk1_f32 = packet:r_float()&lt;br /&gt;
local cse_alife_object__unk2_u32 = packet:r_u32()&lt;br /&gt;
local level_vertex_id = packet:r_u32()&lt;br /&gt;
local object_flags = packet:r_u32()&lt;br /&gt;
local custom_data = packet:r_stringZ()&lt;br /&gt;
local story_id = packet:r_u32()&lt;br /&gt;
local spawn_story_id = packet:r_u32()&lt;br /&gt;
&lt;br /&gt;
-- свойства cse_shape&lt;br /&gt;
local shape_count = packet:r_u8()&lt;br /&gt;
for i=1,shape_count do&lt;br /&gt;
local shape_type = packet:r_u8()&lt;br /&gt;
if shape_type == 0 then&lt;br /&gt;
-- sphere&lt;br /&gt;
local center = packet:r_vec3()&lt;br /&gt;
local radius = packet:r_float()&lt;br /&gt;
else&lt;br /&gt;
-- box&lt;br /&gt;
local axis_x_x = packet:r_float()&lt;br /&gt;
local axis_x_y = packet:r_float()&lt;br /&gt;
local axis_x_z = packet:r_float()&lt;br /&gt;
local axis_y_x = packet:r_float()&lt;br /&gt;
local axis_y_y = packet:r_float()&lt;br /&gt;
local axis_y_z = packet:r_float()&lt;br /&gt;
local axis_z_x = packet:r_float()&lt;br /&gt;
local axis_z_y = packet:r_float()&lt;br /&gt;
local axis_z_z = packet:r_float()&lt;br /&gt;
local offset_x = packet:r_float()&lt;br /&gt;
local offset_y = packet:r_float()&lt;br /&gt;
local offset_z = packet:r_float()&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- свойства cse_alife_space_restrictor&lt;br /&gt;
local restrictor_type = packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
-- свойства cse_level_changer&lt;br /&gt;
local dest_game_vertex_id = packet:r_u16() &lt;br /&gt;
local dest_level_vertex_id = packet:r_u32() &lt;br /&gt;
local dest_position = packet:r_vec3()&lt;br /&gt;
local dest_direction = packet:r_vec3()&lt;br /&gt;
local dest_level_name = packet:r_stringZ()&lt;br /&gt;
local dest_graph_point = packet:r_stringZ()&lt;br /&gt;
local silent_mode = packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
packet:w_begin(game_vertex_id) &lt;br /&gt;
packet:w_float(cse_alife_object__unk1_f32)&lt;br /&gt;
packet:w_u32(cse_alife_object__unk2_u32) &lt;br /&gt;
packet:w_u32(level_vertex_id) &lt;br /&gt;
packet:w_u32( bit_not(193) ) &lt;br /&gt;
packet:w_stringZ(custom_data)&lt;br /&gt;
packet:w_u32(p_story_id) &lt;br /&gt;
packet:w_u32(spawn_story_id)&lt;br /&gt;
&lt;br /&gt;
packet:w_u8(1) -- количество фигур&lt;br /&gt;
packet:w_u8(1) -- тип фигуры: box&lt;br /&gt;
packet:w_float(2) -- axis_x_x&lt;br /&gt;
packet:w_float(0) -- axis_x_y&lt;br /&gt;
packet:w_float(0) -- axis_x_z&lt;br /&gt;
packet:w_float(0) -- axis_y_x&lt;br /&gt;
packet:w_float(4) -- axis_y_y&lt;br /&gt;
packet:w_float(0) -- axis_y_z&lt;br /&gt;
packet:w_float(0) -- axis_z_x&lt;br /&gt;
packet:w_float(0) -- axis_z_y&lt;br /&gt;
packet:w_float(4) -- axis_z_z&lt;br /&gt;
packet:w_float(0) -- offset_x&lt;br /&gt;
packet:w_float(0) -- offset_y&lt;br /&gt;
packet:w_float(0) -- offset_z&lt;br /&gt;
&lt;br /&gt;
packet:w_u8(3)&lt;br /&gt;
&lt;br /&gt;
packet:w_u16(p_dest_gv) -- destination game_vertex_id&lt;br /&gt;
packet:w_u32(p_dest_lv) -- destination level_vertex_id&lt;br /&gt;
packet:w_vec3(p_dest_pos) -- destination position&lt;br /&gt;
packet:w_vec3(p_dest_dir) -- destination direction&lt;br /&gt;
packet:w_stringZ(p_dest_level) -- destination level name&lt;br /&gt;
packet:w_stringZ(&amp;quot;start_actor_99&amp;quot;) -- some string, always const&lt;br /&gt;
packet:w_u8(p_silent) -- 1 for silent level changing&lt;br /&gt;
&lt;br /&gt;
packet:r_seek(0)&lt;br /&gt;
obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример перехода с Затона в Окрестности &amp;quot;Юпитера&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function nlc()&lt;br /&gt;
 -- создается переход с Затона на Юпитер&lt;br /&gt;
create_level_changer(52000, vector():set(32.82,0.39,612.30), 1011443, 192, 81204, 422, vector():set(-376.06,6.46,412.87), vector():set(0.0, 0.0, 0.0), &amp;quot;jupiter&amp;quot;, 1, &amp;quot;exit_to_jupiter&amp;quot;, &amp;quot;на Янов&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вот так создается переход через скрипт.&lt;br /&gt;
&lt;br /&gt;
== Автор ==&lt;br /&gt;
vllzl&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%BE%D1%87%D0%B5%D0%BA_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D0%BC%D0%B8</id>
		<title>SoC. Спавн точек перехода между уровнями</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%A1%D0%BF%D0%B0%D0%B2%D0%BD_%D1%82%D0%BE%D1%87%D0%B5%D0%BA_%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D0%BC%D0%B8"/>
				<updated>2012-05-10T14:15:52Z</updated>
		
		<summary type="html">&lt;p&gt;188.134.33.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой статье я попытаюсь передать практический опыт скриптового создания точек перехода между уровнями. Файл ''all.spawn'' меняться не будет, поэтому такой механизм более удобен для совмещения модов и не требует начала новой игры.&lt;br /&gt;
&lt;br /&gt;
В качестве примера попробуем реализовать режим ''freeplay'' - продолжение игры после уничтожения О-Сознания. Для этого нужно создать как минимум две точки — возврат на ЧАЭС-1 со внутреннего дворика (после уничтожения О-Сознания) и переход из ЧАЭС-1 в Припять. К слову сказать, если вернуться на ЧАЭС-1, то там будет продолжать действовать таймер &amp;quot;выброса&amp;quot;, который в конце-концов включит &amp;quot;deadzone&amp;quot;. Отключить счетчик мне пока не удалось, но зато можно легко отключить сам &amp;quot;выброс&amp;quot; и всласть побегать по уровню.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Часть 1. Генерация работающего LEVEL_CHANGER ==&lt;br /&gt;
&lt;br /&gt;
Стандартной функции alife():create(…) недостаточно для создания полноценного level_changer. Собственно методика создания сложных объектов описана в статье [[Один из методов спавна]]. Сложность заключалась лишь в порядке полей и свойствах Shape. Неоценимую помощь в этом вопросе оказала утилита ACDC (created by bardak).&lt;br /&gt;
&lt;br /&gt;
Ниже я привожу код функции, которая создает и инициализирует level_changer:&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function create_level_changer(&lt;br /&gt;
	p_story_id,	-- STORY_ID нового level_changer (понадобится нам позже)&lt;br /&gt;
	p_position,	-- вектор, координаты точки, в которой будет располагаться центр нового level_changer&lt;br /&gt;
	p_lvertex_id,	-- level_vertext_id  - идентифицируют уровень, на котором будет создан level_changer&lt;br /&gt;
	p_gvertex_id,	-- game_vertext_id   	&lt;br /&gt;
&lt;br /&gt;
	p_dest_lv,	-- level_vertex_id   - идентифицируют уровень, на который level_changer будет перебрасывать игрока &lt;br /&gt;
	p_dest_gv,	-- game_vertex_id&lt;br /&gt;
	p_dest_pos,	-- координаты точки, в которой на новом уровне окажется игрок&lt;br /&gt;
	p_dest_dir,	-- направрение взгляда игрока&lt;br /&gt;
	p_dest_level,	-- название уровня, например &amp;quot;L11_Pripyat&amp;quot;&lt;br /&gt;
	p_silent	-- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)&lt;br /&gt;
)&lt;br /&gt;
	local obj = alife():create(&amp;quot;level_changer&amp;quot;, p_position, p_lvertex_id, p_gvertex_id)&lt;br /&gt;
&lt;br /&gt;
	level.map_add_object_spot(obj.id, &amp;quot;level_changer&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local packet = net_packet()&lt;br /&gt;
	obj:STATE_Write(packet)&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_object&lt;br /&gt;
	local game_vertex_id 			= packet:r_u16()&lt;br /&gt;
	local cse_alife_object__unk1_f32 	= packet:r_float()&lt;br /&gt;
	local cse_alife_object__unk2_u32 	= packet:r_u32()&lt;br /&gt;
	local level_vertex_id 			= packet:r_u32()&lt;br /&gt;
	local object_flags 			= packet:r_u32()&lt;br /&gt;
	local custom_data 			= packet:r_stringZ()&lt;br /&gt;
	local story_id 				= packet:r_u32()&lt;br /&gt;
	local spawn_story_id			= packet:r_u32()&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_shape&lt;br /&gt;
	local shape_count 			= packet:r_u8()&lt;br /&gt;
	for i=1,shape_count do&lt;br /&gt;
		local shape_type 		= packet:r_u8()&lt;br /&gt;
		if shape_type == 0 then&lt;br /&gt;
			-- sphere&lt;br /&gt;
			local center 		= packet:r_vec3()&lt;br /&gt;
			local radius 		= packet:r_float()&lt;br /&gt;
		else&lt;br /&gt;
			-- box&lt;br /&gt;
			local axis_x_x = packet:r_float()&lt;br /&gt;
			local axis_x_y = packet:r_float()&lt;br /&gt;
			local axis_x_z = packet:r_float()&lt;br /&gt;
			local axis_y_x = packet:r_float()&lt;br /&gt;
			local axis_y_y = packet:r_float()&lt;br /&gt;
			local axis_y_z = packet:r_float()&lt;br /&gt;
			local axis_z_x = packet:r_float()&lt;br /&gt;
			local axis_z_y = packet:r_float()&lt;br /&gt;
			local axis_z_z = packet:r_float()&lt;br /&gt;
			local offset_x = packet:r_float()&lt;br /&gt;
			local offset_y = packet:r_float()&lt;br /&gt;
			local offset_z = packet:r_float()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_alife_space_restrictor&lt;br /&gt;
	local restrictor_type 			= packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
	-- свойства cse_level_changer&lt;br /&gt;
	local dest_game_vertex_id		= packet:r_u16()  &lt;br /&gt;
	local dest_level_vertex_id 		= packet:r_u32()  &lt;br /&gt;
	local dest_position 			= packet:r_vec3()&lt;br /&gt;
	local dest_direction 			= packet:r_vec3()&lt;br /&gt;
	local dest_level_name 			= packet:r_stringZ()&lt;br /&gt;
	local dest_graph_point 			= packet:r_stringZ()&lt;br /&gt;
	local silent_mode 			= packet:r_u8()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	packet:w_begin(game_vertex_id)			-- game_vertex_id&lt;br /&gt;
	packet:w_float(cse_alife_object__unk1_f32)&lt;br /&gt;
	packet:w_u32(cse_alife_object__unk2_u32) &lt;br /&gt;
	packet:w_u32(level_vertex_id)			-- level_vertex_id&lt;br /&gt;
	packet:w_u32( bit_not(193) )			-- object_flags = -193 = 0xFFFFFF3E&lt;br /&gt;
	packet:w_stringZ(custom_data)&lt;br /&gt;
	packet:w_u32(p_story_id)			-- story_id&lt;br /&gt;
	packet:w_u32(spawn_story_id)&lt;br /&gt;
&lt;br /&gt;
	packet:w_u8(1)			-- количество фигур&lt;br /&gt;
--		packet:w_u8(0)			-- тип фигуры: сфера&lt;br /&gt;
--		packet:w_vec3(vector():set(0, 0, 0))  -- sphere_center&lt;br /&gt;
--		packet:w_float(3.0)&lt;br /&gt;
	packet:w_u8(1)			-- тип фигуры: box&lt;br /&gt;
	packet:w_float(2)	   -- axis_x_x&lt;br /&gt;
	packet:w_float(0)	   -- axis_x_y&lt;br /&gt;
	packet:w_float(0)	   -- axis_x_z&lt;br /&gt;
	packet:w_float(0)	   -- axis_y_x&lt;br /&gt;
	packet:w_float(4)	   -- axis_y_y&lt;br /&gt;
	packet:w_float(0)	   -- axis_y_z&lt;br /&gt;
	packet:w_float(0)	   -- axis_z_x&lt;br /&gt;
	packet:w_float(0)	   -- axis_z_y&lt;br /&gt;
	packet:w_float(4)	   -- axis_z_z&lt;br /&gt;
	packet:w_float(0)	   -- offset_x&lt;br /&gt;
	packet:w_float(0)	   -- offset_y&lt;br /&gt;
	packet:w_float(0)          -- offset_z&lt;br /&gt;
&lt;br /&gt;
	packet:w_u8(3)	 	   -- restrictor_type&lt;br /&gt;
&lt;br /&gt;
	packet:w_u16(p_dest_gv)			-- destination game_vertex_id&lt;br /&gt;
	packet:w_u32(p_dest_lv)			-- destination level_vertex_id&lt;br /&gt;
	packet:w_vec3(p_dest_pos)		-- destination position&lt;br /&gt;
	packet:w_vec3(p_dest_dir)		-- destination direction (направление взгляда)&lt;br /&gt;
	packet:w_stringZ(p_dest_level)		-- destination level name&lt;br /&gt;
	packet:w_stringZ(&amp;quot;start_actor_99&amp;quot;)	-- some string, always const&lt;br /&gt;
	packet:w_u8(p_silent)			-- 1 for silent level changing&lt;br /&gt;
&lt;br /&gt;
	packet:r_seek(0)&lt;br /&gt;
	obj:STATE_Read(packet, packet:w_tell())&lt;br /&gt;
&lt;br /&gt;
--	news_manager.send_tip(db.actor, &amp;quot;LC creation finished&amp;quot;, nil, nil, 30000)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
''Для shape типа &amp;quot;box&amp;quot; загрузка координат методом packet:r_matrix() окончилась неудачей. Я подозреваю, что не был прочитан вектор &amp;quot;offset&amp;quot;, но точной уверенности нет, поэтому пока остановился на покомпонентной выборке и сохранении координат.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Часть 2. '''Создание точек перехода''' ==&lt;br /&gt;
&lt;br /&gt;
Теперь следует написать функции создания нужных точек перехода и подключить их к игре. Сами функции просты:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function exit_monolit()&lt;br /&gt;
	if (not has_alife_info(&amp;quot;freeplay_activated1&amp;quot;)) then&lt;br /&gt;
		create_level_changer(11410, vector():set(-13.26, 47.71, 46.57), 200, 2417,&lt;br /&gt;
			162109,&lt;br /&gt;
                        2384,&lt;br /&gt;
			vector():set( 375.615, 0.224, 27.737 ),&lt;br /&gt;
			vector():set(     0.0, 0.0  ,  0.0 ),&lt;br /&gt;
			&amp;quot;L12_Stancia&amp;quot;,&lt;br /&gt;
			1)&lt;br /&gt;
	&lt;br /&gt;
		db.actor:give_info_portion(&amp;quot;freeplay_activated1&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- создается переход из ЧАЭС в Припять&lt;br /&gt;
	create_chaes2pripyat_exit()&lt;br /&gt;
&lt;br /&gt;
	-- актер перебрасывается в level_changer, возвращающий его на ЧАЭС, ко входу в бункер&lt;br /&gt;
	db.actor:set_actor_position( vector():set(-13.26, 47.71, 46.57) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function refuze_o_sozn()&lt;br /&gt;
	if (not has_alife_info(&amp;quot;freeplay_activated2&amp;quot;)) then&lt;br /&gt;
		create_level_changer(21410, vector():set(946.872, 6.0, 167.66), 240852, 2637,&lt;br /&gt;
			472710,&lt;br /&gt;
			2280,&lt;br /&gt;
			vector():set( 1062.15, -0.0982, -3.512 ),&lt;br /&gt;
			vector():set(    0.0 ,  0.0   , -1.0 ),&lt;br /&gt;
			&amp;quot;L12_Stancia&amp;quot;,&lt;br /&gt;
			1)&lt;br /&gt;
	&lt;br /&gt;
		db.actor:give_info_portion(&amp;quot;freeplay_activated2&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- создается переход из ЧАЭС в Припять&lt;br /&gt;
	create_chaes2pripyat_exit()&lt;br /&gt;
&lt;br /&gt;
	-- актер перебрасывается в level_changer, возвращающий его к правым воротам ЧАЭС&lt;br /&gt;
	db.actor:set_actor_position( vector():set(946.872, 6.0, 167.66) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function create_chaes2pripyat_exit()&lt;br /&gt;
	-- создается переход из ЧАЭС в Припять&lt;br /&gt;
	if (not has_alife_info(	&amp;quot;exit_chaes2pripyat_created&amp;quot; )) then&lt;br /&gt;
		create_level_changer(31410, vector():set( 917.35, 0.419, -316.35 ), 403866, 2401,&lt;br /&gt;
			73868,&lt;br /&gt;
			2117,&lt;br /&gt;
			vector():set( 31.3, 3.0, 240.0 ),&lt;br /&gt;
			vector():set(  0.0, 0.0,  -1.0 ),&lt;br /&gt;
			&amp;quot;L11_Pripyat&amp;quot;,&lt;br /&gt;
			0)&lt;br /&gt;
&lt;br /&gt;
		db.actor:give_info_portion(&amp;quot;exit_chaes2pripyat_created&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
''Функцию '''exit_monolit''' я создал исключительно для тестирования, но решил оставить и тут. Вдруг кто-то захочет реализовать более сложный возврат: Меченого грузят в &amp;quot;грузовик смерти&amp;quot; и он снова приходит в себя на кордоне...''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция '''exit_monolit''' создает «тихий» переход на уровень ЧАЭС-1 и обычный - в начале уровня ЧАЭС-1 для возврата в Припять, после чего перебрасывает актера прямо внутрь созданного перехода. Функция '''refuze_o_sozn''' делает тоже самое, только игрок появляется перед воротами в правом верхем углу карты (мне кажется, что так более логично). Все телепорты защищаются уникальными info_portions, дабы избежать их повторного создания, ведь игрок может захотеть «закончить» игру несколько раз.&lt;br /&gt;
&lt;br /&gt;
Теперь подключение.&lt;br /&gt;
Во-первых надо добавить новые info-portions. Я решил не изменять оригинальные файлы игры, а сделал для них (ну и для других тоже) отдельный файл&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		config\gameplay\_info_sa.xml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
следующего вида:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1251&amp;quot; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;game_information_portions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;freeplay_activated1&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;freeplay_activated2&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;exit_chaes2pripyat_created&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/game_information_portions&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Теперь в этот файл можно будет добавлять новые info_portion, которые вы будете использовать в своих сюжетах.&lt;br /&gt;
Подключается этот файл в system.ltx в секции «info_portions»:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[info_portions]&lt;br /&gt;
;список xml файлов, содержащих info_portions&lt;br /&gt;
files = _info_sa, info_portions, ....................&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Кстати, именно так я рекомендую добавлять новые диалоги и новых персонажей. Это упростит процессы совмещения модов и аддонов.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Следующий шаг - подключение наших скриптов к игре. Для этого откройте файл &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		config\ui\ui_movies.xml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
найдите элементы «''mov_desire_''» (их пять, по количеству ложных концовок игры - все варианты общения с Монолитом). Внутри каждого элемента есть дочерние элементы «''function_on_stop''», которые задают функцию, запускающуюся сразу после ролика. Стандартное содержимое:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		&amp;lt;function_on_stop&amp;gt;xr_effects.game_credits&amp;lt;/function_on_stop&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Функция '''xr_effects.game_credits''' запускает финальные титры. Именно ее и нужно заменить на вызов нашей функции _freeplay_sa.exit_monolit. Вот что должно получиться:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		&amp;lt;function_on_stop&amp;gt;_freeplay_sa.exit_monolit&amp;lt;/function_on_stop&amp;gt;&lt;br /&gt;
&amp;lt;!-- original:	&amp;lt;function_on_stop&amp;gt;xr_effects.game_credits&amp;lt;/function_on_stop&amp;gt;  --&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
''Старый элемент я советую не удалять, а закомментировать.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чуть ниже «''mov_desire_5''» находится тэг ролика для концовки «Присоединение к О-Сознанию». Его мы трогать не будем - Меченый станет медузой. А вот после него - тэг для ролика «Отказ от О-Сознания»: «''mov_refuse_osoznanie''». Функцию завершения в нем заменим следующим образом:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		&amp;lt;function_on_stop&amp;gt;_freeplay_sa.refuze_o_sozn&amp;lt;/function_on_stop&amp;gt;&lt;br /&gt;
&amp;lt;!-- original:	&amp;lt;function_on_stop&amp;gt;xr_effects.game_credits&amp;lt;/function_on_stop&amp;gt;  --&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Можно запускать и, если есть сохранения перед монолитом и/или о-сознанием, тестировать. Первые переходы срабатывают «тихо» - запрос на смену уровня не выдается (в параметре p_silent задана 1). До перехода в Припять можно успеть добежать, пока не сработал выброс... Но это как-то неправильно, выброс надо остановить (он же произошел, пока мы были внутри станции). «По-честному» (скриптом, без модификации ''all.spawn'') таймер выброса отключить не получится, но зато выброс можно подавить небольшим «хаком». Найдите файл xr_logic.script, а в нем - функцию '''switch_to_section'''. Ее нужно модифицировать следующим образом:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
-- Выполняет переключение на указанную секцию, если задана.&lt;br /&gt;
-- Если section == nil, остается работать старая секция.&lt;br /&gt;
function switch_to_section(npc, st, section)&lt;br /&gt;
  if section == nil or section == &amp;quot;&amp;quot; then&lt;br /&gt;
    return false&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- 15.03.2008 by SA:&lt;br /&gt;
  -- отключает &amp;quot;смертельные зоны&amp;quot; на ЧАЭС после запуска режима FREEPLAY&lt;br /&gt;
  -- 	таймер не отключается, но сам &amp;quot;выброс&amp;quot; не происходит&lt;br /&gt;
  if (section == &amp;quot;sr_aes_deadzone&amp;quot;) then&lt;br /&gt;
	if (has_alife_info(&amp;quot;freeplay_activated1&amp;quot;) or has_alife_info(&amp;quot;freeplay_activated2&amp;quot;)) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  ... далее без изменений ...&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данный способ оставляет висящий на нулях таймер и все эффекты начала выброса, но сам «''выброс''» отключается.&lt;br /&gt;
&lt;br /&gt;
И последнее: переход ЧАЭС1-Припять необходимо отметить на карте. Для этого существует вполне «легальный» механизм. Находим файл '''level_tasks.script''' и в конце функции '''add_lchanger_location''' дописываем следующее:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
		-- aes (++16.03.2008 by SA):&lt;br /&gt;
		obj = sim:story_object(31410)&lt;br /&gt;
		if obj then&lt;br /&gt;
			level.map_add_object_spot(obj.id, &amp;quot;level_changer&amp;quot;, &amp;quot;To Pripyat&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь 31410 - story_id нашего level_changer, который создается нашей функцией '''create_chaes2pripyat_exit'''.&lt;br /&gt;
&lt;br /&gt;
На этом пока все (мелкие огрехи типа направления взгляда игрока после смены уровня исправлю позже).&lt;br /&gt;
Прошу тестировать и дополнять.&lt;br /&gt;
&lt;br /&gt;
С уважением, sarthur.&lt;br /&gt;
&lt;br /&gt;
== Дополняет авторы: vllzl ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
«По-честному» (скриптом, без модификации ''all.spawn'') таймер выброса отключить не получится.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Можно удалить таймер скриптом (удаляет рестриктор из игры)&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function delete_aes_timer()&lt;br /&gt;
        local obj = alife():object(&amp;quot;aes_space_restrictor_timer&amp;quot;)&lt;br /&gt;
        if obj then&lt;br /&gt;
        alife():release(obj, true)&lt;br /&gt;
        end&lt;br /&gt;
        local se_obj = alife():object(&amp;quot;aes_space_restrictor_timer_go&amp;quot;)&lt;br /&gt;
        if se_obj then&lt;br /&gt;
        alife():release(se_obj, true)&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
Удалит таймер и выброс из игры. Vllzl&lt;br /&gt;
[[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>188.134.33.162</name></author>	</entry>

	</feed>