Skocz do zawartości

Teleportacja przez skrypt [SoC]


Rekomendowane odpowiedzi

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/

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z tej strony, zgadzasz się na nasze Warunki użytkowania.