Создание переходов между уровнями — S.T.A.L.K.E.R. Inside Wiki

Создание переходов между уровнями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

Создаем файл level_changer.script. В него пихаем.

 
function spawn_level_changer(sid, from_pos, from_level, dest_pos, dest_level, hint, mode, dest_dir)
 
local vertexes = {
l01_escape = {lvid=594266, gvid=0},
l04_darkvalley = {lvid=121712, gvid=815},
l11_pripyat = {lvid=142116, gvid=2270},
l12_stancia = {lvid=405348, gvid=2400},
l12_stancia_2 = {lvid=9914, gvid=2517}
-- l12_stancia_2 = {lvid=227423, gvid=2635}
}
 
local obj = alife():create("level_changer", from_pos, vertexes[from_level]["lvid"], vertexes[from_level]["gvid"])
 
if obj then
 
	level.map_add_object_spot(obj.id, "level_changer", hint)
 
	local packet = net_packet()
 
	obj:STATE_Write(packet)
 
	-- свойства cse_alife_object
	local game_vertex_id = packet:r_u16()
	local cse_alife_object__unk1_f32 = packet:r_float()
	local cse_alife_object__unk2_u32 = packet:r_s32()
	local level_vertex_id = packet:r_s32()
	local object_flags = packet:r_s32()
	local custom_data = packet:r_stringZ()
	local story_id = packet:r_s32()
	local cse_alife_object__unk3_u32 = packet:r_s32()
 
	-- свойства cse_shape
	local shape_count = packet:r_u8()
	local shape_type
	local center
	local radius
 
	if shape_count == 0 then
		shape_type = 0
		center = vector():set(0,0,0)
		radius = 10.0
		shape_count = 1
	else
		for i=1,shape_count do
			local shape_type = packet:r_u8()
			if shape_type == 0 then
				local center = packet:r_vec3()
				local radius = packet:r_float()
			else
				local v1 = packet:r_vec3()
				local v2 = packet:r_vec3()
				local v3 = packet:r_vec3()
				local v4 = packet:r_vec3()
			end
		end
	end
 
	-- свойства cse_alife_space_restrictor
	local restrictor_type = packet:r_u8()
 
	-- свойства cse_alife_level_changer
	local dest_game_vertex_id = packet:r_u16()
	local dest_level_vertex_id = packet:r_s32()
	local dest_position = packet:r_vec3()
	local dest_direction = packet:r_vec3()
	local dest_level_name = packet:r_stringZ()
	local dest_graph_point = packet:r_stringZ()
	local silent_mode = packet:r_u8()
 
	if packet:r_elapsed() ~= 0 then get_console():execute("left="..packet:r_elapsed()) end
 
	-- свойства cse_alife_object
	packet:w_u16(game_vertex_id)
	packet:w_float(cse_alife_object__unk1_f32)
	packet:w_s32(cse_alife_object__unk2_u32)
	packet:w_s32(level_vertex_id)
	packet:w_s32(object_flags)
	packet:w_stringZ(custom_data)
	packet:w_s32(sid)
	packet:w_s32(cse_alife_object__unk3_u32)
 
	-- свойства cse_shape
	packet:w_u8(shape_count)
 
	for i=1,shape_count do
		packet:w_u8(shape_type)
		if shape_type == 0 then
			packet:w_vec3(vector():set(0,0,0))
			packet:w_float(3)
		else
			packet:w_vec3(vector():set(3,0,0))
			packet:w_vec3(vector():set(0,3,0))
			packet:w_vec3(vector():set(0,0,3))
			packet:w_vec3(vector():set(0,0,0))
		end
	end
 
	-- свойства cse_alife_space_restrictor
	packet:w_u8(restrictor_type)
 
	-- свойства cse_alife_level_changer
	packet:w_u16(vertexes[dest_level]["gvid"])
	packet:w_s32(vertexes[dest_level]["lvid"])
	packet:w_vec3(dest_pos)
	if dest_dir then 
		packet:w_vec3(dest_dir)
	else
		packet:w_vec3(dest_direction)
	end
	packet:w_stringZ(dest_level)
	packet:w_stringZ(dest_graph_point)
	packet:w_u8(mode)
 
	obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())
 
end
 

Этому скрипту в обед 100 лет. В этом же файле через две строки пишем:

 
function start_lc()
spawn_level_changer(6001, vector():set(368.9,15.17,-42.65), "l01_escape", vector():set(-44.77, 0.43, -541.35), "l04_darkvalley", "to_darkvalley", 0)
 
-- ЧАЭС - Припять
spawn_level_changer(6002, vector():set(918.1,-0.1,-401.96), "l12_stancia", vector():set(31.28,1.135,420.61), "l11_pripyat", "to_pripyat", 0, vector():set(0,-3.1,0))
 
-- ЧАЭС2 - ЧАЭС
spawn_level_changer(6003, vector():set(-42.15,-0.02,56.03), "l12_stancia_2", vector():set(126,-0.1,-76.3), "l12_stancia", "to_aes", 0, vector():set(0,-1.5,0))
 
-- ЧАЭС - ЧАЭС2
spawn_level_changer(6004, vector():set(117.6,-0.1,-76.3), "l12_stancia", vector():set(-42.15,-0.02,64), "l12_stancia_2", "to_aes", 0)
end
 

Создает до кучи переходов (самых заветных). Чтобы в Интернете небыло больше вопросов "А как сделать переход с ЧАЭС в Припять, с Кордона в ТД?" и прочего.


Подключение

Через диалог:

<action>level_changer.start_lc</action>

После отключения Радара (Мозговыжигателя): <function_on_stop>level_changer.start_lc</function_on_stop>

Тогда после сна при отключении "мозговыжигателя" на Радаре создадутся переходы, которые мы с Вами написали

Автор

На YouTube я vllzl

Другие места
LANGUAGE