Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

Влад,

Ты посмотри мод Hand Teleport. Там как раз сделано по этой статье. Сравнивай статью и файлы мода и все поймешь.

 

мож написать,попонятнее,что и куда писать?

Ты хоть начни делать-то. Если просто читать ничего понятно не будет. На практике все познается.

Изменено пользователем Kostya V

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

Поделиться этим сообщением


Ссылка на сообщение

Влад,

Влад, ты что делаешь? Телепорты или переходы между локациями? Так как это разные вещи, делать их надо по-разному. В той статье, которую ты указал создаются телепорты, которые действуют только в пределах локации, на которой находится ГГ.

Если тебе нужно создать переход на другую локацию, то это делается совсем по другой статье.

Посмотри в моде Hand Teleport файл spawn_level_changer.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 - идентифицируют уровень, на который level_changer будет перебрасывать игрока

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_s32(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_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

 

 

function exit_as()

create_level_changer(11077, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),

28719,

1758,

vector():set(-317.23675537109,-26.327833175659,55.278633117676),

vector():set(0.0, 0.0, 0.0),

"l07_military",

1)

end

 

 

Здесь уже все готово. В функцию подставляй свои координаты и потом тебе останется только вызвать эту функцию.

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

Поделиться этим сообщением


Ссылка на сообщение

sasha47007,

Посмотри в алл.спавне секцию с рестриктором и скопируй себе с подставлением своих координат. А далее этому рестриктору пропиши логику. Рестриктор заспавнится с началом новой игры. Но в логике можно прописать, чтобы он сработал только после получения определенного инфопоршина. А вот как это сделать, можно посмотреть в статьях про логику. Там все доступно написано.

  • Согласен 1

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

Поделиться этим сообщением


Ссылка на сообщение
и что за параметр: offset.

------------------------------

АГА!!! всё понял. offset позволяет смещать шейп. т.о. можно сделать следующее: входишь в арку церкви на болотах. а там тебе как жарка ******, причём зажгутся сразу все аномалии, расставленные по периметру забора.

Объясни, пожалуйста, подробней. Что значит "позволяет смещать шейп" и от чего аномалии срабатывают все сразу?

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...