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

[CoP] Ковыряемся в файлах


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

В 27.10.2018 в 17:07, alex5773 сказал:

иконки при ремонте тоже так убрать можно?

Конечно. Можно указать координаты пустой области.

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий

Ребят, помогите.
Выдергнул "Beretta 92" из оружейного мода. Настроил, прописал все, подравнял как полагается. 
Слепил ей свою схему апгрейдов, всю поднастроил, но одно но: в оригинале "Beretta" может стрелять режимом по 3 патрона, у меня на стволе данный апгрейд ставится, но режим ни в какую не хочет переключаться. Параметр (fire_modes) отказывается работать, ссылаясь на класс ствола. Поменял класс с WP_PM на LR300, режим заработал, однако, когда магаз у пистолета пустой, затворная рама не отходит назад. Та же самая ситуация и с Walther-ом. Перебрал все стандартные классы, без толку, то затвор отказывается работать, то режим стрельбы.
Подскажите, как заставить ствол видеть режим и затвору как следует ходить?

Ссылка на комментарий

Движком никак, насколько я знаю

Класс пистолета не умеет автоматически стрелять, а класс винтовки не умеет играть анимации anim_empty и подобные, потому рама и не отходит назад.

Выхода 2: либо править движок (искать уже правленый) либо играть анимации скриптами через play_hud_animation

Ссылка на комментарий
1 час назад, lordmuzer сказал:

Движком никак, насколько я знаю

Класс пистолета не умеет автоматически стрелять, а класс винтовки не умеет играть анимации anim_empty и подобные, потому рама и не отходит назад.

Выхода 2: либо править движок (искать уже правленый) либо играть анимации скриптами через play_hud_animation

У тебя нет ссылки на исправленный движок? Порылся по форуму, ничего не нашел. Может, искал не так. Нашел один пост, но выложен он в 2012, и ссылки уже не работают. А что, касается, скрипта, так вообще тишина, никто даже наброском примерным не делился.

Ссылка на комментарий

Ребят, это снова я. У меня тут первооткрывательский вопрос. Упоминаний даже не нашел.
Полазил я поглубже по файлам и наткнулся на маленький такой парамер "Боеприпасы". Который отображается, когда наводишь на ствол под ёмк. маг. 
Я поперерывал, там половину файлов даже в скриптах проверял, не нашел упоминания. Откуда он вообще берет название? Куда его вмонтировали?
Просто хотелось бы его изменить. Написать: "Калибр 9х18,9х19".

Ссылка на комментарий
22 минуты назад, Купер сказал:

@Mr.Srears, поиск рулит!

actor_menu.xml -> 

<cap_ammo_types>"ui_ammo_types"</cap_ammo_types>

Это отсылка к размещению самой надписи "Боеприпасы". А после нее идет же "9х18", вот где эти строки, в которых задается этот текст?
И не в самом "actor_menu" эта остылка находится, а в "actor_menu_item".

Ссылка на комментарий

А можно как-нибудь это переписать под ЗП?

            --fx_snd = xr_sound.get_safe_sound_object(fx_snd)
            --fx_snd:play_no_feedback(act_item, sound_object.s3d, 0, act_item:position(), 1)

Это строчки с ogse_wpn_explode_fx.script из за этих строк в ЗП вылет при выстреле со сломанного оружия, а без этих строк звука взрыва оружия нет.

Вот интересно, в СоС 1.4.22 работает нормально этот скрипт, а в ЗП не хочет. Просто с ТЧ на СоС его ставлю, и всё норм работает.

Вот сам скрипт

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

function on_npc_hit(victim,amount,local_direction,who,bone_index)
    local active_slot = db.actor:active_slot()
    local active_item = db.actor:active_item()
    local pistol_in_slot = db.actor:item_in_slot(1)
    local rifle_in_slot = db.actor:item_in_slot(2)
    if victim ~= nil and active_item and who:clsid() == clsid.script_actor then
        local active_sect = active_item:section()
        param_point = math.random(1,3)/10
        if param_info ~= nil and param_point ~= nil and has_alife_info(active_sect.."_info") then
            local point_s = hit()
            point_s.draftsman = victim
            point_s.type = hit.fire_wound
            point_s.power = param_point
            point_s.impulse = 0.1
            victim:hit(point_s)
        end
    end
end

--/ wpn_explode_fx.script /--
--/ Weapon explode module /--
--/ OGS Evolution Team 2010 /--
--/ version 1.1 /--

--/ Модуль подрыва патрона в стволе при значительном износе оружия /--


-- Параметры
local fx_is_enable = true                                    -- "true"-обработка подрыва патрона включена, "false"-выключена
local critical_condition = 0.2                                -- кондиция оружия, ниже которой может случиться разрыв патрона в стволе

-- Малый калибр (пистолеты, пистолеты-пулемёты)
local fx_snd_1 = "weapons\\explosions\\grenade_f1_explosion"                        -- звук, воспроизводимый как разрыв патрона в стволе
local fx_particle_1 = "anomaly2\\heat_01"                    -- партикл, воспроизводимый как разрыв патрона в стволе
local explode_impulse_1 = 0.1                                -- импульс хита, наносимого при разрыве
local explode_power_1 = 0.4                                    -- сила хита, наносимого при разрыве

-- Средний калибр (автоматы, пулемёты, винтовки)
local fx_snd_2 = "weapons\\explosions\\grenade_f1_explosion"
local fx_particle_2 = "anomaly2\\heat_01"
local explode_impulse_2 = 0.2
local explode_power_2 = 0.6

-- Большой калибр (дробовики, крупнокалиберные винтовки)
local fx_snd_3 = "weapons\\explosions\\grenade_f1_explosion"
local fx_particle_3 = "anomaly2\\heat_01"
local explode_impulse_3 = 0.3
local explode_power_3 = 0.8

-- Спецбоеприпас (огнемёт)
local fx_snd_4 = "weapons\\explosions\\grenade_f1_explosion"
local fx_particle_4 = "anomaly2\\heat_01"
local explode_impulse_4 = 0.7
local explode_power_4 = 1.1

-- Аномальный боеприпас (гауссовка)
local fx_snd_5 = "weapons\\explosions\\grenade_f1_explosion"
local fx_particle_5 = "anomaly2\\heat_01"
local explode_impulse_5 = 0.5
local explode_power_5 = 1.2
-- Параметры

local stored_ammo_num = nil
local stored_it_id = nil

function update()
    if fx_is_enable and db.actor:alive() then
        local act_it = db.actor:active_item()
        if act_it == nil then
            stored_it_id = nil
        return end
        local act_it_sect = act_it:section()
        if act_it and string.find(act_it_sect, "wpn_") and act_it_sect ~= "wpn_binoc" then
            local it_id = act_it:id()
            local ammo_num = act_it:get_ammo_in_magazine()
            if stored_it_id ~= nil and stored_ammo_num ~= nil then
                if stored_it_id == it_id and ammo_num < stored_ammo_num then
                    proceed(act_it)
                end
            end
            stored_ammo_num = ammo_num
            stored_it_id = it_id
        end
    end
end

function proceed(act_item)
-- amk.logf("Выстрел!")
    if act_item:condition() < critical_condition then
-- amk.logf("Авария!")
        if math.random()*0.5 > act_item:condition() then
-- amk.logf("БУМ!")

            local fx_snd            -- объявляем переменные. можно не присваивать значения, так как они присвоятся обязательно
            local fx_particle
            local explode_impulse
            local explode_power

-- определяем тип визуализации
            local act_item_sect = act_item:section()
            local type_of_visual = identy_type_of_visual(act_item_sect)
            if type_of_visual == 1 then
                fx_snd = fx_snd_1
                fx_particle = fx_particle_1
                explode_impulse = explode_impulse_1
                explode_power = explode_power_1
-- amk.logf("Тип визуализации 1")
            elseif type_of_visual == 2 then
                fx_snd = fx_snd_2
                fx_particle = fx_particle_2
                explode_impulse = explode_impulse_2
                explode_power = explode_power_2
-- amk.logf("Тип визуализации 2")
            elseif type_of_visual == 3 then
                fx_snd = fx_snd_3
                fx_particle = fx_particle_3
                explode_impulse = explode_impulse_3
                explode_power = explode_power_3
-- amk.logf("Тип визуализации 3")
            elseif type_of_visual == 4 then
                fx_snd = fx_snd_4
                fx_particle = fx_particle_4
                explode_impulse = explode_impulse_4
                explode_power = explode_power_4
-- amk.logf("Тип визуализации 4")
            elseif type_of_visual == 5 then
                fx_snd = fx_snd_5
                fx_particle = fx_particle_5
                explode_impulse = explode_impulse_5
                explode_power = explode_power_5
-- amk.logf("Тип визуализации 5")
            end

-- визуализация
            fx_snd = xr_sound.get_safe_sound_object(fx_snd)
            fx_snd:play_no_feedback(act_item, sound_object.s3d, 0, act_item:position(), 1)
            fx_particle = particles_object(fx_particle)
            fx_particle:play_at_pos(act_item:position())
-- нанесение хита
            local explode_vec = vector():set(db.actor:position()):sub(act_item:position())
            local explode = hit()
            explode.direction = explode_vec
            explode.draftsman = db.actor
            explode.impulse = explode_impulse
            explode.power = explode_power
            explode.type = hit.explosion
            db.actor:hit(explode)

-- удаление предмета
            alife():release(alife():object(act_item:id()), true)
            if fx_particle and fx_particle:playing() then fx_particle:stop() end

        end
    end
end

function identy_type_of_visual(act_item_section)
    local type_of_visualise = 2            -- определяем тип визуализации по умолчанию на тот случай, когда тип боеприпаса не определится 
    if system_ini():line_exist(act_item_section, "ammo_class") then
        local ammo_list = system_ini():r_string(act_item_section, "ammo_class")
        if string.find(ammo_list, "ammo_9x18") or string.find(ammo_list, "ammo_9x19") then
            type_of_visualise = 1
        elseif string.find(ammo_list, "ammo_5.45x39") or 
                string.find(ammo_list, "ammo_5.56x45") or  
            string.find(ammo_list, "ammo_7.62x25") or 
                string.find(ammo_list, "ammo_7.62x39") or 
                string.find(ammo_list, "ammo_7.62x54") or  
                string.find(ammo_list, "ammo_9x39") then
            type_of_visualise = 2
        elseif string.find(ammo_list, "ammo_11.43x23") or 
            string.find(ammo_list, "ammo_5.7x28") or
            string.find(ammo_list, "ammo_10.9x32.5") or
                string.find(ammo_list, "ammo_12x70") or 
            string.find(ammo_list, "ammo_12x76") then
            type_of_visualise = 3
        elseif string.find(ammo_list, "ammo_og-7b") then
            type_of_visualise = 4
        elseif string.find(ammo_list, "ammo_gauss") then
            type_of_visualise = 5
        end
    end
    return type_of_visualise
end

 

Ссылка на комментарий

Пришлось ещё задействовать xr_sound.script. Вставил в конец скрипта вот это всё

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

---------------------------------------------------------------------------------------------------------------------
--    Схема озвучки
--    автор:  Диденко Руслан  (Stohe)
--    update: Чугай Александр (Chugai)
----------------------------------------------------------------------------------------------------------------------
key_by_id = {}
group_idle = {}

--function printf()
--end

function get_sound(path, tt, npc)
    if path == nil then return nil end
    if path.exec == nil then
        -- чтение настроек темы
        tt.into_id = path.into_id
        tt.into_max = path.max_ids[npc:id()].into_max
        tt.into_last = nil

        tt.rnd_id = path.rnd_id
        tt.rnd_max = path.max_ids[npc:id()].rnd_max
        tt.rnd_last = nil

        tt.min_snd = path.min_snd
        tt.max_snd = path.max_snd
        tt.rnd_snd = path.rnd_snd
    else
        get_sound(path.types[path.exec(path.types, npc)], tt, npc)
    end
end
-- Формирование ключа персонажа
function get_key(npc)
    local key

    -- формирование ключа
    local overrides = xr_logic.generic_scheme_overrides(npc)
    if overrides and
       overrides.soundgroup
    then
        key = overrides.soundgroup
    else
        key = utils.to_str(npc:id())
    end

    -- апдейт таблиц :) не менять!
    if xr_sound.key_by_id[npc:id()] ~= key then
        if xr_sound.group_idle[xr_sound.key_by_id[npc:id()]] ~= nil    then
           xr_sound.group_idle[xr_sound.key_by_id[npc:id()]].num_in_group = xr_sound.group_idle[xr_sound.key_by_id[npc:id()]].num_in_group - 1
        end
        xr_sound.key_by_id[npc:id()] = key
        if xr_sound.group_idle[key] == nil then
            xr_sound.group_idle[key] = {num_in_group = 1}
        else
            xr_sound.group_idle[key].num_in_group = xr_sound.group_idle[key].num_in_group + 1
        end
    end
    return key
end

-----------------------------------------------------------------------------------------------------------------------------------
--    Установка и распарсивание тем в файлы.
-----------------------------------------------------------------------------------------------------------------------------------
function set_sound(npc, sound, now, into_timeout)
--    printf("*SND* [%s] try to change SND to [%s]", npc:name(), tostring(sound))

    local npc_id = npc:id()
    if (db.sound[npc_id] == nil or
       db.sound[npc_id].theme ~= sound) or
       now == true
    then
--        if db.sound[npc_id] == nil then
--            printf("*SND* change SND [_] to [%s] for [%s]", tostring(sound), npc:name())
--        else
--            printf("*SND* change SND [%s] to [%s] for [%s]", tostring(db.sound[npc_id].theme), tostring(sound), npc:name())
--        end
        -- Туточки надобно распарсить имена тем в их id
        if sound == nil then sound = "" end
        if db.sound[npc_id] == nil then db.sound[npc_id] = {} end
        db.sound[npc_id].theme = sound
        db.sound[npc_id].snd = parse_names(sound)
        if db.sound[npc_id].last_snd == nil then
            db.sound[npc_id].last_snd = {}
        else

            local snd_table = {}
            local t = 0
            for k,v in pairs(db.sound[npc_id].snd) do
                snd_table[t] = {}
                get_sound(sound_theme.theme[v], snd_table[t], npc)
                t = t + 1
            end
            for k,v in pairs(snd_table) do
                if v.into_id then db.sound[npc_id].last_snd[v.into_id] = nil end
                if v.rnd_id then db.sound[npc_id].last_snd[v.rnd_id] = nil end
            end


        end
        -- Устанавливаем входную паузу
        local key = get_key(npc)
        xr_sound.group_idle[key].begin = time_global()
        if into_timeout then
            xr_sound.group_idle[key].idle = into_timeout
        else
            xr_sound.group_idle[key].idle = 0
        end

        if now == true then
            stop_play_sound(npc)
        end
    end
end


function play_sound(npc, themes, timeout)
    --alun_utils.debug_write(strformat("xr_sound:play_sound %s",npc and npc:name()))
    -- нужно составить список тем
    local snd_table = {}
    local t = 0
    for k,v in pairs(themes) do
        snd_table[t] = {}
        if sound_theme.theme[v] ~= nil then
            snd_table[t].theme = v
            get_sound(sound_theme.theme[v], snd_table[t], npc)
        else
            printf("ERROR: ILLEGAL PLAY SOUND!!! %s for %s", v, npc:name())
        end
        t = t + 1
    end
    --printf("*")
    --print_table(snd_table)
    if t == 0 then return end
    -- из списка тем выбираем одну.
    local snd = snd_table[math.random(0, t-1)]
    if snd ~= nil then
        --printf("!")
        --print_table(snd)
        if snd.min_snd == nil then return end
        local npc_id = npc:id()
        local group_table = xr_sound.group_idle[get_key(npc)]
        group_table.idle = math.random(snd.min_snd, snd.max_snd)*1000
        if group_table.last_snd    == nil then
            group_table.last_snd = {}
        end
        -- необходимо ли нам играть into или rnd звуки
        if snd.into_max ~= nil and
            snd.into_max > 0
        then
            if db.sound[npc_id].last_snd[snd.into_id] == snd.into_max - 1 then
                if snd.into_cycled == true then
                    db.sound[npc_id].last_snd[snd.into_id] = nil
                else
                    return
                end
            end

            -- играем входные
            if db.sound[npc_id].last_snd[snd.into_id] == nil then db.sound[npc_id].last_snd[snd.into_id] = -1 end

            --printf("*SND* play seq [%s] for [%s]", db.sound[npc_id].last_snd[snd.into_id]+1, npc:name())
            process_tutor_on_sound(snd.theme)
            npc:play_sound(snd.into_id, 1, 0, 1, 0, db.sound[npc_id].last_snd[snd.into_id]+1)
            db.sound[npc_id].last_snd[snd.into_id] = db.sound[npc_id].last_snd[snd.into_id] + 1
            --printf("*SND* play seq [%s] for [%s]", db.sound[npc_id].last_snd[snd.into_id], npc:name())
            return
        end
        if snd.rnd_max ~= nil and
            snd.rnd_max > 0
        then
            -- играем рандомные
            local s = 0
            if snd.rnd_max == 1 then
                s = 0
            else
                -- Если прошлый раз проигрывался такой же набор тем
                -- то учитывать последний звук для группы.
--                if db.sound[npc_id].last_snd[snd.rnd_id] ~= nil then
                if group_table.last_snd[snd.rnd_id] ~= nil then
                    s = math.random(0, snd.rnd_max-2)
                    if s >= group_table.last_snd[snd.rnd_id] then s = s + 1 end
                else
                    s = math.random(0, snd.rnd_max-1)
                end
            end

            if timeout == nil then
                timeout = 0
            end
            --printf("*SND* play rnd [%s] for [%s]", s, npc:name())
            process_tutor_on_sound(snd.theme)
            npc:play_sound(snd.rnd_id, timeout+1, timeout, 1, 0, s)
            --db.sound[npc_id].last_snd[snd.rnd_id] = s
            group_table.last_snd[snd.rnd_id] = s
        end
    end
end

function get_last_IDS(npc, theme)
    local last_table = db.sound[npc:id()].last_snd
    local snd_table = {}
    if sound_theme.theme[theme] ~= nil then
        get_sound(sound_theme.theme[theme], snd_table, npc)
    end
    --printf("LAST INTO ID for [%s] = [%s], max [%s]", theme, last_table[snd_table.into_id], snd_table.into_max)
    return last_table[snd_table.into_id], snd_table.into_max
end


function process_tutor_on_sound(theme)
end


--' Actor sound player
local actor_sound = {}
function set_actor_sound(sound)
    --printf("*ACTOR SND* try to change SND to [%s]", tostring(sound))
    if actor_sound.theme ~= sound then
        --' Туточки надобно распарсить имена тем в их id
        if sound == nil then sound = "" end
        actor_sound.theme = sound
        actor_sound.begin = nil

        this.set_actor_sound_factor(1)
    end
end

function set_actor_sound_factor(factor)
    local theme = sound_theme.actor_theme[actor_sound.theme]
    if theme ~= nil then
        actor_sound.min_snd = theme.min_snd * factor
        actor_sound.max_snd = theme.max_snd * factor
    end
end

function update_actor()
    local theme = sound_theme.actor_theme[actor_sound.theme]
    if theme == nil then return end

    if table.getn(theme.sounds) == 0 then
        return
    end

    if actor_sound.begin == nil or
       time_global() - actor_sound.begin >= actor_sound.idle
    then
        actor_sound.begin = time_global()

        --' Тут надо отыграть звук
        local sound = theme.sounds[math.random(table.getn(theme.sounds))]
        if sound ~= nil then
            sound:play(db.actor, 0, sound_object.s2d)
        end
        actor_sound.idle = math.random(actor_sound.min_snd, actor_sound.max_snd)
    end
end

-- modified by Alundaio (original: ????)
--' Таблица для хранения созданных саунд обжектов.
--' type = [random|seq|looped]
local ltx = ini_file("plugins\\xr_sound.ltx")
function get_sound_object(theme, t_type)
    if not (ph_snd_themes) then
        ph_snd_themes = {}
        ph_snd_themes[theme] = alun_utils.collect_section(ltx,theme)
        --printf("collect theme=%s",theme)
    end

    if (not ph_snd_themes or not ph_snd_themes[theme]) then
        --printf("no ph_snd_themes theme=%s",theme)
        return
    end

    if not (sound_object_by_theme) then
        sound_object_by_theme = {}
    end

    if (not sound_object_by_theme[theme])then
        sound_object_by_theme[theme] = {}
    end

    if t_type == nil then
        t_type = "random"
    end

    --' Выбор следующего айдишника
    local play_id = -1

    local table_size = #ph_snd_themes[theme]

    if (table_size == 0) then
        return
    end

    --printf("tablesize = %s theme=%s",table_size,theme)
    if sound_object_by_theme[theme].last_id == nil then
        if t_type == "random" then
            if table_size >= 2 then
                play_id = math.random(1, table_size)
            else
                play_id = 1
            end
        else
            play_id = 1
        end
    else
        if t_type == "random" then
            if table_size >= 2 then
                play_id = math.random(1, table_size - 1)
                if play_id >= sound_object_by_theme[theme].last_id then play_id = play_id + 1 end
            else
                play_id = 1
            end
        else
            if sound_object_by_theme[theme].last_id < table_size then
                play_id = sound_object_by_theme[theme].last_id + 1
            else
                if type == "looped" then
                    play_id = 1
                end
            end
        end
    end

    --printf("SOUND_OBJECT: selected id [%s] for theme [%s], type [%s], size [%s]", tostring(play_id), tostring(theme), tostring(type), table_size)

    if play_id == -1 then
        return
    end


    --' Проверяем создан ли у нас соответствующий саунд обжект или его надо создать
    if sound_object_by_theme[theme][play_id] == nil then
        if type(ph_snd_themes[theme][play_id]) == "table" then
            sound_object_by_theme[theme][play_id.."_r"] = get_safe_sound_object(ph_snd_themes[theme][play_id][1].."_r")
            sound_object_by_theme[theme][play_id.."_l"] = get_safe_sound_object(ph_snd_themes[theme][play_id][1].."_l")
        else
            sound_object_by_theme[theme][play_id] = get_safe_sound_object(ph_snd_themes[theme][play_id])
        end
    end

    sound_object_by_theme[theme].last_id = play_id

    --' Возвращаем саунд обжект
    if type(ph_snd_themes[theme][play_id]) == "table" then
        return sound_object_by_theme[theme][play_id.."_r"], sound_object_by_theme[theme][play_id.."_l"]
    else
        return sound_object_by_theme[theme][play_id]
    end
end

local sound_object_by_path = {}
--' Обертка вокруг функции, возвращающий звуковой объект.
function get_safe_sound_object(path)
    if sound_object_by_path[path] == nil then
        sound_object_by_path[path] = sound_object(path)
    end
    return sound_object_by_path[path]
end

function stop_all_sound_object()
    for k,v in pairs(sound_object_by_path) do
        if v:playing() then
            v:stop()
        end
    end
end
function clear_all_sound_object()
    sound_object_by_theme = {}
end

и теперь всё работает, звук взрыва есть. Что это, и для чего, и как повлияет на игру, не знаю. Но пока всё работает)))

Ссылка на комментарий

Подскажите насчёт отображения глушителей на оружии в инвентаре. Настроил все абсолютно точно, а отображаются у пистолетов выше ствола, а у автоматов ниже ствола. Как это исправить? Или никак не исправить, а настраивать у каждого ствола на глаз?

 

Ссылка на комментарий

@alex5773, не надо на глаз. Для расчета положения иконок есть Addon Calculator в STALKER Icon Editor.

Ссылка на комментарий

Так я им и настраиваю точно всё в тютельку. В инвентаре то всё точно, а вот в слотах у пистолета выше ствола отображается, а у автомата ниже ствола.

Слоты бракованные в ЗП что-ли. Вот как починить бы эти слоты.

Ссылка на комментарий

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

Ну не могу найти в инете ничего именно на эту тему. Скачивал мод где некоторые апгрейды вырезаны, смотрел, и ни фига не понял, потому как там даже фалов тех нет, в которых их предположительно и надо вырезать.

Сам пробовал вырезать, но нормально не получается, апгрейд убирается который и не убирал, а который убрал, встаёт на место который убрался сам. Короче сдвигаются, просто меняясь местами. А самые нижние апрейды убираются нормально, вроде бы, а может и тоже сдвигаются ниже.

Ссылка на комментарий

@alex5773, Обрати внимание на расположение стволов по вертикали - расстояние от средней линии до дула. Это расстояние для всех стволов должно быть одинаковым. Это раз.

У пысов глушитель расположен ниже центра ячейки. Это два.

1eef8a76971b44f67e0e4632b791c4c7b0339032

Трошки ковырнул StCOP :)

89df55b776488331787e5e09e4c5d67fb03390328e42a60cf76500eca613b803b49a5f65b0339032

 

 

  • Полезно 2

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

Ссылка на комментарий
18 часов назад, alex5773 сказал:

Слоты бракованные в ЗП что-ли. Вот как починить бы эти слоты.

Угу. Желательно всё выводить на середину.

А ещё на НЕширокоформатных мониторах (1024х768 и 1280х1024) такого сдвига между инвентарём и слотом нет. 

  • Согласен 1
Ссылка на комментарий

@nasar75, ну да ладно, фиг с ним, в инвентаре то нормально всё. Не будешь же все иконки из-за этих слотов переделывать. А как слоты переделать под широкоформатный, фиг его знает.

Кстати, а с оптикой и подствольниками то всё вроде нормально, вот что интересно, почему именно с глушителями так.

@Serge_888, ага, на квадратном у меня такого не было. А сейчас то широкоформатный.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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