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

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


Svoboда

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

Помогите привинтить данный скрипт к АМК 1.4.1. А то чувствую сам я всё это не осилю.

И так:

Часть 1 - Не понял, нужен ли вообще этот кусок кода и если да, то куда его пихать?

Часть 2 - Тоже не известно в какой файл прописывать всё это добро, понял только что нужно оставить все функции кроме:

-- создается переход из ЧАЭС в Припять
    create_chaes2pripyat_exit()

Т.к. в АМК она уже имеется.

Далее нужно прописать info-portions в config\gameplay\_info_sa.xml и всё, остальные шаги можно пропустить за ненадобностью.

 

 

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


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

Нужно дописать к стандартному АМК фриплею точки перехода ЧАЭС1>ЧАЭС2 и обратно. Можно ли это реализовать без редактирования all.spawn и как бы проще всего это осуществить?

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


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

В ogsm_freeplay.script из OGSM мод глянь функцию спавна level_changera - для перехода между уровнями. В АМК она м.б тоже есть, я не помню как они переходы делали.

Я выковырял оттуда данные функции:

-- Спавним левел-чейнджер
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
end

-- Удаление лишних переходов
function disable_sar_entrance()
for i=1,65535 do
    local obj = alife():object(i)
    if obj and obj:name()=="exit_to_sarcofag_01" then
        alife():release(obj, true)
    end
end
end

-- Спавн всех нужных переходов
function set_lc()

if not db.actor or not has_alife_info("game_end") then
    xr_effects.after_credits()
else

level.add_pp_effector("teleport.ppe", 2008, false)

-- ЧАЭС2 - ЧАЭС
-- spawn_level_changer(6003, vector():set(554.52,150,201), "l12_stancia_2", vector():set(117.6,-0.1,-76.3), "l12_stancia", "to_aes", 1, vector():set(0,-1.5,0))
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
end

-- Отмечаем на карте новые точки перехода
function mark_lc()

local obj = alife():story_object(6003)
if obj then
    level.map_add_object_spot(obj.id, "level_changer", "to_aes")
end
local obj = alife():story_object(6004)
if obj then
    level.map_add_object_spot(obj.id, "level_changer", "to_aes")
end
if has_alife_info("freeplay") and (level.name()=="l12_stancia" or level.name()=="l12_stancia_2" or level.name()=="l11_pripyat" or level.name()=="l10_radar") then
    level.set_weather("default")
end
end

 

И закинул это всё в xr_logic.script, однако безрезультатно. Может я что-то делают не так или переход должен быть не через бункер саркофага а где-то в другом месте?

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


Ссылка на сообщение
Habaromaniac, функцию мало закинуть, её ещё и нужно вызвать, в данном случае, вроде достаточно вызвать set_lc() и spawn_level_changer() и желательно mark_lc().

Ulman, Я почему-то думал что они должны выполнятся автоматически, но если это не так, то как тогда прописать автовызов определенной функции?

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

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


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

Ulman,

Shadows,

Спасибо за разъяснения, буду пробовать.

 

Добавлено через 175 мин.:

Таки всё безрезультатно, через after_credits(actor, npc) в xr_effects тоже функции не вызываются.

Shadows, хотел уточнить, а где брать координаты для create_level_changer? По идее эти точки уже должны быть прописаны в каком-то файле (в сюжете ведь прекрасно все переходы работали)...

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


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

Shadows,

Ну это всё конечно хорошо, но не буду же я начинать новую игру и снова проходить всю сюжетку, чтобы добраться до ЧАЭС и потестить работоспособность функции. Неужели нет более приемлемого способа вызова?

 

ziStam, Спасибо, это полезная информация, может быть пригодится. А на каком языке кстати написан аll.sраwn? Не легче ли раскодировать его и достать всю нужную информацию из исходника?

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

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


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

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