Уже вечность, как
Singapur22 довёл до ума переход с Инсайда.Делаешь новый скрипт,обзываешь его perehod.script.Пишешь в него:
function create_level_changer(
p_story_id, -- STORY_ID нового level_changer (понадобится нам позже)
p_position, -- вектор, координаты точки, в которой будет располагаться центр нового level_changer
p_lvertex_id, -- level_vertext_id - идентифицируют уровень, на котором будет создан level_changer
p_gvertex_id, -- game_vertext_id
p_dest_lv, -- level_vertex_id - идентифицируют уровень, на будет перебрасывать игрока
p_dest_gv, -- game_vertex_id
p_dest_pos, -- координаты точки, в которой на новом уровне окажется игрок
p_dest_dir, -- направрение взгляда игрока
p_dest_level, -- название уровня, например "L11_Pripyat"
p_silent -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)
)
local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id)
level.map_add_object_spot(obj.id, "level_changer", "")
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_u32()
local level_vertex_id = packet:r_u32()
local object_flags = packet:r_u32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_u32()
local spawn_story_id = packet:r_u32()
-- свойства cse_shape
local shape_count = packet:r_u8()
for i=1,shape_count do
local shape_type = packet:r_u8()
if shape_type == 0 then
-- sphere
local center = packet:r_vec3()
local radius = packet:r_float()
else
-- box
local axis_x_x = packet:r_float()
local axis_x_y = packet:r_float()
local axis_x_z = packet:r_float()
local axis_y_x = packet:r_float()
local axis_y_y = packet:r_float()
local axis_y_z = packet:r_float()
local axis_z_x = packet:r_float()
local axis_z_y = packet:r_float()
local axis_z_z = packet:r_float()
local offset_x = packet:r_float()
local offset_y = packet:r_float()
local offset_z = packet:r_float()
end
end
-- свойства cse_alife_space_restrictor
local restrictor_type = packet:r_u8()
-- свойства cse_level_changer
local dest_game_vertex_id = packet:r_u16()
local dest_level_vertex_id = packet:r_u32()
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()
packet:w_begin(game_vertex_id) -- game_vertex_id
packet:w_float(cse_alife_object__unk1_f32)
packet:w_u32(cse_alife_object__unk2_u32)
packet:w_u32(level_vertex_id) -- level_vertex_id
packet:w_u32( bit_not(193) ) -- object_flags = -193 = 0xFFFFFF3E
packet:w_stringZ(custom_data)
packet:w_u32(p_story_id) -- story_id
packet:w_u32(spawn_story_id)
packet:w_u8(1) -- количество фигур
-- packet:w_u8(0) -- тип фигуры: сфера
-- packet:w_vec3(vector():set(0, 0, 0)) -- sphere_center
-- packet:w_float(3.0)
packet:w_u8(1) -- тип фигуры: box
packet:w_float(2) -- axis_x_x
packet:w_float(0) -- axis_x_y
packet:w_float(0) -- axis_x_z
packet:w_float(0) -- axis_y_x
packet:w_float(4) -- axis_y_y
packet:w_float(0) -- axis_y_z
packet:w_float(0) -- axis_z_x
packet:w_float(0) -- axis_z_y
packet:w_float(4) -- axis_z_z
packet:w_float(0) -- offset_x
packet:w_float(0) -- offset_y
packet:w_float(0) -- offset_z
packet:w_u8(3) -- restrictor_type
packet:w_u16(p_dest_gv) -- destination game_vertex_id
packet:w_u32(p_dest_lv) -- destination level_vertex_id
packet:w_vec3(p_dest_pos) -- destination position
packet:w_vec3(p_dest_dir) -- destination direction (направление взгляда)
packet:w_stringZ(p_dest_level) -- destination level name
packet:w_stringZ("start_actor_99") -- some string, always const
packet:w_u8(p_silent) -- 1 for silent level changing
packet:r_seek(0)
obj:STATE_Read(packet, packet:w_tell())
end
Ниже пишешь скрипты своих переходов:
function changer_escape_darkscape()
create_level_changer(6002, vector():set( 369.6816,15.1765,-43.0454 ), 594337,252,
497,
2721,
vector():set( -614.567,-2.590,-385.790 ),
vector():set( 0.0, 0.0, -1.0 ),
"k01_darkscape",
0)
end
6002 - это story_id перехода(от балды,лишь бы не совпадал с другими идами)
369.6816,15.1765,-43.0454 ), 594337,252, --\\ откуда переходим
-614.567,-2.590,-385.790 --\\ координаты,куа переходим
497 --\\ левелвертекс,куда переходим
2721 --\\ геймвертекс,куда переходим
"k01_darkscape", --\\ лока,на которую переходим(любое название)
0) --\\поставишь
1), не будет вопроса:
вы хотите перйти Вызвать можешь через диалог,как обычно:
<action>perehod.changer_escape_darkscape</action>
Отметки переходов в level_tasks.script, в
function add_lchanger_location() Добавь свою со своим стори_ид(типа 6002):
obj = sim:story_object(6002)
if obj then
level.map_add_object_spot(obj.id, "level_changer", "to_darkskape")
end
Можешь писать вместо
to_darkskape, в Кишку,если лень в text\rus\***.xml пиСать.Остальные переходы так же, в этот же файл,добавляй функции,типа
function changer_escape_darkscape() Всё!