Jump to content

Teleportacja przez skrypt [SoC]


Recommended Posts

NAZWA: Teleportacja przez skrypt [SoC]
AUTOR: ?

 

TWORZENIE WŁASNEGO PLIKU:

Spoiler

Tworzymy własny plik z końcówką .script. Dodajemy do niego to:

function create_level_changer(
p_story_id, -- STORY_ID nowego level_changer (przyda nam się później)
p_position, -- wektor, współrzędne punktu, w którym będzie znajdował się środek nowego level_changer
p_lvertex_id, -- level_vertext_id - identyfikuje poziom, na którym będzie stworzony level_changer
p_gvertex_id, -- game_vertext_id

p_dest_lv, -- level_vertex_id - identyfikuje poziom, na którym level_changer będzie przerzucać gracza
p_dest_gv, -- game_vertex_id
p_dest_pos, -- współrzędne punktu, w którym na nowym poziomie pojawi się gracz
p_dest_dir, -- kierunek, w którym będzie patrzył gracz
p_dest_level, -- nazwa poziomu, np. "L11_Pripyat"
p_silent -- należy ustawić 1, aby "uciszyć" (aby nie pojawiało się) pytanie o zmianę poziomu (przejście automatyczne)
)
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)

-- właściwości 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()

-- właściwości 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

-- właściwości cse_alife_space_restrictor
local restrictor_type = packet:r_u8()

-- właściwości 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) -- ilość figur
-- packet:w_u8(0) -- typ figury: kula
-- packet:w_vec3(vector():set(0, 0, 0)) -- sphere_center
-- packet:w_float(3.0)
packet:w_u8(1) -- typ figury: 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_s32(p_dest_lv) -- destination level_vertex_id
packet:w_vec3(p_dest_pos) -- destination position
packet:w_vec3(p_dest_dir) -- destination direction (kierunek patrzenia GG)
packet:w_stringZ(p_dest_level) -- destination level name
packet:w_stringZ("start_actor_02") -- 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())
level.add_pp_effector ("teleport.ppe", 2006, false)
end

 

 

TELEPORTACJA:

Spoiler

Funkcja teleportacji - poleteli():

function poleteli()
create_level_changer(20101, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),
10193,
2437,
vector():set(66.210,15.040,4.250),
vector():set(0.0, 0.0, 0.0),
"l12u_sarcofag",
1)
end

 

Funkcja usunięcia - delete_poleteli():

function delete_poleteli() -- funkcja usunięcia(jeśli trzeba)
local sim = alife()
local se_obj = sim:story_object(20101)
if se_obj then
sim:release(se_obj, true)
end
local actor = db.actor
end

 

Informacja:

  • 20101 - STORY_ID nowego level_changer
  • 10193 - level_vertex_id
  • 2437 - game_vertex_id
  • vector():set(66.210,15.040,4.250) - współrzędne
  • vector():set(0.0, 0.0, 0.0) - kierunek patrzenia aktora
  • "l12u_sarcofag" - nazwa lokacji

 

Funkcję teleportacji można wywołać dowolnym sposobem.

 

ŹRÓDŁO:

https://ap-pro.ru/forums/topic/1205-soc-teleportaciya-cherez-skript/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.