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

Ковыряемся в файлах ОП 2.1


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

Есть две установленные оп2.1 в разных папках.

Как вторую копию заставить читать и сохранять сейвы в папке первой копии?

 

$game_saves$        = true|        true|    $app_data_root$|    C:\Games\OP-2.1\userdata\savedgames

вписанное в fsgame внутри папки второй копии не помогло, она перестала видеть любые сейвы, может я как-то неправильно вписал?

 

PS решено.

Помогло в таком виде, теперь две копии опы делают и загружают сейвы из одного и того же места, удобно. Одна опа с правками, другая без.

 

$game_saves$        = true|        true|    C:\Games\OP-2.1\userdata\savedgames

Изменено пользователем W.A.S.P.

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


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

Дописал в \gamedata\scripts\callbacks\key_handlers.script

Скрытый текст

и в начале файла дописал

local ctrl_state=false

Скрытый текст

        [DIK_keys.DIK_LSHIFT]={
            func=function()
                shift_state=true
            end            
        },
        [DIK_keys.DIK_LCTRL]={
            func=function()
                ctrl_state=true
            end            
        },
        [DIK_keys.DIK_RCTRL]={
            func=function()
                ctrl_state=true
            end            
        },

 

        [DIK_keys.DIK_R]={
            func=function()
                if ctrl_state then
                db.actor:set_actor_position(device().cam_pos:add(device().cam_dir:mul(5.0)))
                end
                if shift_state then
                db.actor:set_actor_position(device().cam_pos:add(device().cam_dir:mul(30.0)))
                end
                if alt_state then
                db.actor:set_actor_position(device().cam_pos:add(device().cam_dir:mul(100.0)))
                end
            end
        }        
    },

Скрытый текст

 ["release"]={
        [DIK_keys.DIK_LSHIFT]={
            func=function()
                shift_state=false
            end            
        },
        [DIK_keys.DIK_LALT]={
            func=function()
                alt_state=false
            end            
        },
        [DIK_keys.DIK_RALT]={
            func=function()
                alt_state=false
            end            
        }
        [DIK_keys.DIK_LCTRL]={
            func=function()
                ctrl_state=false
            end            
        },
        [DIK_keys.DIK_RCTRL]={
            func=function()
                ctrl_state=false
            end            
        }
    }
}

 

Во время игры стало возможным портоваться в направлении взгляда.

Как сделать этот телепорт безопаснее и не проваливаться под текстуры?

Ведь к примеру дистанция для "hud_crosshair_dist" считается до какой то точки,

может есть вариант получить координаты этой точки и портануться на поверхность?

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

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


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

@Aleks1, смотри в распакованной игре расположение одноимённых файлов.

У себя создай папку gamedata и там уже помести правки в идентичное расположение.

Если рюкзак у тебя в файле drrr.script то его расположение

\gamedata\scripts\drrr.script

Если бег по воде gamemtl.xr то в \gamedata\gamemtl.xr

 

@nface777, в правке из шапки редактировали \gamedata\scripts\inventory.script

Скрытый текст

 

вместо

    self.imm_limits = {100, 86, 73, 60}

это

    self.imm_limits = {9999, 9999, 9999, 9999}

 

Она должна работать вроде как на любом патче.

 

@wdfgosdgf, в свойства ярлыка допиши -smap8192 И качество теней возрастёт в разы. К примеру

C:\Games\OP_2.1\bin\XR_3DA.exe -nointro -smap8192

 

  • Спасибо 1
  • Полезно 2

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


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

@GSB_Helik, файлы system.ltx и actor.ltx содержат характеристики ГГ.

Личное сопротивление урону(если не ошибаюсь) зависит от уровня сложности.

Смотри в \gamedata\config\creatures\actor.ltx

hit_probability_gd_(сложность игры) = процент входящего урона

actor_immunities_gd_(сложность игры) секции имунитетов.

  • Спасибо 1
  • Полезно 1

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


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

@Voland-Li, не совсем.

Из-за куска в \gamedata\scripts\akill.script могут быть вылеты от сокращения списка в \gamedata\scripts\test_pistols.script

Скрытый текст
Скрытый текст

-- ТЕСТ ПИСТОЛЕТОВ
function arny_pistol_have_all()
    return
        has_good("wpn_tt33",1) and
        has_good("wpn_pmm",1) and
        has_good("wpn_mp444",1) and
        has_good("wpn_beretta",1) and
        has_good("wpn_hpsa",1) and
        has_good("wpn_walther",1) and
        has_good("wpn_cz75",1) and
        has_good("wpn_glock23",1) and
        has_good("wpn_colt1911",1) and
        has_good("wpn_sig220",1) and
        has_good("wpn_usp_40",1) and
        has_good("wpn_fnp45",1)
end

 

Скрытый текст

function arny_test_disable()
    disable_info("arny_test_tt")
    disable_info("arny_test_pmm")
    disable_info("arny_test_mp444")
    disable_info("arny_test_beretta")
    disable_info("arny_test_hpsa")
    disable_info("arny_test_walther")
    disable_info("arny_test_cz")
    disable_info("arny_test_glock")
    disable_info("arny_test_colt")
    disable_info("arny_test_sig")
    disable_info("arny_test_usp")
    disable_info("arny_test_fnp")
end

Скрытый текст

function arny_test_have()
    local arny_test = {
    "arny_test_tt",
    "arny_test_pmm",
    "arny_test_mp444",
    "arny_test_beretta",
    "arny_test_hpsa",
    "arny_test_walther",
    "arny_test_cz",
    "arny_test_glock",
    "arny_test_colt",
    "arny_test_sig",
    "arny_test_usp",
    "arny_test_fnp"
        }
    give_info(arny_test[math.random(#arny_test)])
end

 

Скрытый текст

function arny_test_wpn_tt()
    lost_good("wpn_tt33",1)
end
function arny_test_wpn_pmm()
    lost_good("wpn_pmm",1)
end
function arny_test_wpn_mp()
    lost_good("wpn_mp444",1)
end
function arny_test_wpn_beretta()
    lost_good("wpn_beretta",1)
end
function arny_test_wpn_hpsa()
    lost_good("wpn_hpsa",1)
end
function arny_test_wpn_walther()
    lost_good("wpn_walther",1)
end
function arny_test_wpn_cz()
    lost_good("wpn_cz75",1)
end
function arny_test_wpn_glock()
    lost_good("wpn_glock23",1)
end
function arny_test_wpn_colt()
    lost_good("wpn_colt1911",1)
end
function arny_test_wpn_sig()
    lost_good("wpn_sig220",1)
end
function arny_test_wpn_usp()
    lost_good("wpn_usp_40",1)
end
function arny_test_wpn_fnp()
    lost_good("wpn_fnp45",1)
end
function arny_test_done()
    kostya_dialog.give_ammo(8)
    got("strelok_turret",1)
end

 

 

@Voland-Li , да , если сокращать список тестируемых пушек - то во всех списках сразу.

Но ИМХО лучше оставить хотя бы 2 пушки и каждой задать в требованиях по 2 убийства.

Пару килов из пма и пару из тт - и турель у тебя в кармане. Если сокращать до 1оружия то могут быть глюки с функцией math random.

Изменено пользователем Alexey Goncharenko
  • Полезно 2

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


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

@Vecz, тут копай

gamedata\scripts\amk\amk_mod.script

Скрытый текст

function blowout_modif_arts()
    local arts = {
        ["af_cry_2"] = true,
        ["af_cry_3"] = true,
        ["af_babka_3"] = true,
        ["af_babka_4"] = true,
        ["af_dik_3"] = true,
        ["af_dik_4"] = true,
        ["af_spirit_3"] = true,
        ["af_spirit_4"] = true,
        ["af_armor_3"] = true,
        ["af_armor_4"] = true,
        ["af_pudd_3"] = true,
        ["af_pudd_4"] = true,
        ["af_kol_3"] = true,
        ["af_kol_4"] = true,
        ["af_caterpillar"] = true,
        ["af_simbion"] = true,
        ["af_dummy_battery_red"] = true,
        ["af_dummy_spring_red"] = true,
        ["af_dummy_pellicle_red"] = true,
    }

    local obj
    for i=1,65534 do
        obj = server_object(i)
        if obj and arts[obj:section_name()] and math.random() < 0.05 then
            if obj.parent_id == 65535 then
                create("af_buliz", obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id)
            else
                create("af_buliz", obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.parent_id)
                if obj.parent_id == 0 then
                    sms(translate("blowout_modif_arts_0_0")..get_inv_name(obj:section_name())..".", nil, "nano", 20000)
                end
            end
            release(obj)
        end
    end
end

 

  • Спасибо 2
  • Полезно 1

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


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

@wdfgosdgf, заметил что с играющим Пулей можно болтать во время анимации музицирования.

Надо копнуть глубже.

\gamedata\scripts\xr_kamp.script

self.timeout

self.trans_kamp

 

function CKampManager:checkNpcAbility(npc)

и

function CKampManager:addNpc(npc)

 

Тут можно заменить разрешения перехода на анимацию музыцирования.

 

Изменено пользователем Alexey Goncharenko
  • Полезно 4

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


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

@Kakos, показометр установи и нажми в меню кнопку F1 , отобразит для текущей локации.

В скрипте показометра можно удалить ограничение отображения и отображать со всей игры а не только текущей локации, но лучше не надо.

 

@Kakos, лишняя нагрузка ни к чему. Может вылета и не будет, но кто его знает, может прощупывание каких тайников/сундуков пнет какой рестриктор/поршень.

 

Скрытый текст

-- Удаление меток в ручную --
function del_spots()
    for i, v in pairs( t_labels ) do
        if sim:object( i ) and level.map_has_object_spot( i, v ) ~= 0 then
            level.map_remove_object_spot(  i, v )
        end
    end
    amk.send_tip( "Метки удалены" )
end

-- Вывод меток на арты, разбиваемые ящики и тайники --
function set_spots()
    if not reinit() then return end

    local obj, gvid, cls_id

    for i = 1, 65534 do    -- Ищем вообще все существующие объекты в игре
        obj = sim:object( i )
        if obj then
            cls_id = obj:clsid()
            if cls_id == c_af then    -- арты
                if obj.parent_id == 65535 then    -- лежат на земле

                    gvid = obj.m_game_vertex_id    -- только те, что на текущей локации
                    if gg:valid_vertex_id( gvid ) then
                        if gg:vertex( gvid ):level_id() == level_id then

                            t_labels = "artefact_location"
                            add_spot( i, "artefact_location", obj:name() )

                    end    end
                end

            elseif ( cls_id == c_ibox )        -- тайники
              and ( obj.position.y >= -290 )    -- ящики Бака исключаем
                -- ниже дополнительные фильтры, чтобы показывать НЕ ВСЕ
              -- and ( string_sub(obj:section_name(), 1, 1) == "m" or string_sub(obj:section_name(), 1, 1) == "e" )
              -- and string_sub( obj:section_name(), 1, 1 ) ~= "m"

              then
                gvid = obj.m_game_vertex_id    -- только те, что на текущей локации
                if gg:valid_vertex_id( gvid ) then
                    if gg:vertex( gvid ):level_id() == level_id then

                        local box = lobj_by_id( i )    -- только те, что в онлайне
                        if box and not box:is_inv_box_empty() then    -- и с хабаром
                            t_labels = "habar_clear_location"
                            add_spot( i, "habar_clear_location", obj:name()
                                -- высоту здесь покажем, чтоб искать проще
                                .. "y = " .. tostring( obj.position.y )
                            )
                        end
                end    end

            elseif cls_id == c_box then    -- разбиваемые ящики
                gvid = obj.m_game_vertex_id    -- только те, что на текущей локации
                if gg:valid_vertex_id( gvid ) then
                    if gg:vertex( gvid ):level_id() == level_id then

                        local ini = obj:spawn_ini()    -- только те, из которых что-то выпадает
                        if ini and ini:section_exist( "drop_box" ) then
                             t_labels = "green_location"
                            add_spot( i, "green_location", obj:name() )
                        end
                end    end

            elseif t_sect[obj:section_name()] then    -- показываем объекты по имени секции
                -- log( "found " .. obj:name() )
                gvid = obj.m_game_vertex_id    -- только те, что на текущей локации
                if gg:valid_vertex_id( gvid ) then
                    if gg:vertex( gvid ):level_id() == level_id then

                        t_labels = "alife_combat_attack"
                        add_spot( i, "alife_combat_attack", obj:name() )

                end    end

            elseif t_names[obj:name()] then    -- показываем объекты по уникальному имени
                gvid = obj.m_game_vertex_id    -- только те, что на текущей локации
                if gg:valid_vertex_id( gvid ) then
                    if gg:vertex( gvid ):level_id() == level_id then

                        t_labels = "alife_combat_attack"
                        add_spot( i, "alife_combat_attack", obj:name() )

                end    end
            end
    end    end

    amk.send_tip( "Метки установлены" )
end

 

Изменено пользователем Alexey Goncharenko
  • Спасибо 1

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


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

@aleks nevskiy, зачем? Если можно в key_handlers вписать

Скрытый текст

        [DIK_keys.DIK_R]={
            func=function()
                if ctrl_state then
                    db.actor:set_actor_position(device().cam_pos:add(device().cam_dir:mul(5.0)))
                end
                if shift_state then
                    db.actor:set_actor_position(device().cam_pos:add(device().cam_dir:mul(15.0)))
                end
                if alt_state then
                    db.actor:set_actor_position(device().cam_pos:add(device().cam_dir:mul(45.0)))
                end
            end

Телепорт в направлении взгляда на 5 или 15 или 45 метров по сочетанию кнопок (CTRL или SHIFT или ALT) с кнопкой R.

 

@arthur, смотри у меня в подписи под сообщением.

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

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


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

@KOSTA153, скопируй к себе в файл zone_teleport.ltx секцию по которой вылет.

 

Скрытый текст

 

; Защитный телепорт Гарика в баре
[zashit_garik_teleport]:tele_base
radius                = 1.0
z_radius            = 1.75
poz_x                = 131.66
poz_y                = -4.82
poz_z                = 23.87

 

А еще лучше - скачай распакованный патч 6.2 и адаптируй свои правки под патч.

Изменено пользователем Alexey Goncharenko
  • Спасибо 1

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


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

@MakcParavoz, редактирование

"gamedata\scripts\binders\binder_minigan.script"

в помощь.

Скрытый текст

Ставь там в первых двух абзацах false (но я не проверял поможет ли это).

 

А вот изменение

exo:update_charge(-delta_charge)

на

exo:update_charge(+delta_charge)

 

должно помочь.

 

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


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

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