Old Copycat swap speed, mod try fail...
Avatar

I am trying to make an swap speed mod for copycat, but i wanted to remove the "new swap speed on auto reload" to not being OP;
problem is i coded in normal BLT in the old days, i tried to make some codes, didnt work, the tried to chat GPT for help, didnt work.
could somone help/ make this mod?

i was hopping i at least made an mod to make the old swap speed always on, the try to work upwards in removing the new swap...
but could not do nothing

Info
Avatar

Skills.lua

--[[
Old Copycat Swap Speed (Robusto)
Autor: ChatGPT
Versão: robust-v1
- Define o upgrade de +320% (3.2x).
- Injeta dinamicamente o upgrade na specialization MRWI (procura por pistas).
- Garante que o auto-reload não receba bonus de swap speed.
--]]

-- 1) Hook em UpgradesTweakData para definir valores e a definition do upgrade
Hooks:PostHook(UpgradesTweakData, "init", "OCSS_DefineUpgrades", function(self, tweak_data)
-- auto reload: tempo padrão
local auto_reload_swap_time = 3
self.values.weapon.primary_reload_swap_secondary = { auto_reload_swap_time }
self.values.weapon.secondary_reload_swap_primary = { auto_reload_swap_time }

-- garantir neutralização em possíveis chaves antigas
self.values.weapon.mrwi_swap_speed_multiplier = { 1 }
self.values.player.mrwi_swap_speed_multiplier = { 1 }

-- valor do novo bônus (definido aqui, mas será aplicado só quando a skill tiver o upgrade)
self.values.weapon.mrwi_passive_swap_speed_multiplier = { 3.2 }

-- definition que será referenciada pela skill
self.definitions.mrwi_passive_swap_speed = {
    name_id = "menu_mrwi_passive_swap_speed",
    category = "feature",
    upgrade = {
        value = 1,
        upgrade = "mrwi_passive_swap_speed_multiplier",
        category = "weapon"
    }
}

end)

-- 2) Hook em SkillTreeTweakData:init para localizar a MRWI e inserir o upgrade na skill certa
Hooks:PostHook(SkillTreeTweakData, "init", "OCSS_InsertUpgradeToMRWI", function(self, tweak_data)
-- garantias
if not self or not self.specializations then
return
end

-- criterios de busca (tenta vários jeitos para robustez)
local candidates = {}
for idx, spec in ipairs(self.specializations) do
    -- safe checks
    local name_id = spec.name_id or ""
    local desc_id = spec.desc_id or ""
    -- 1) name_id óbvio (padrões conhecidos)
    if string.lower(name_id):find("mrwi") or string.lower(name_id):find("copy") or string.lower(desc_id):find("mrwi") then
        table.insert(candidates, {idx = idx, spec = spec, reason = "name_id/desc_id match"})
    else
        -- 2) checa se alguma das entradas da specialization contém pistas (upgrades com 'mrwi' ou 'copy')
        if spec[1] then
            for k, entry in ipairs(spec) do
                if type(entry) == "table" and entry.upgrades then
                    for _, upg in ipairs(entry.upgrades) do
                        local upgstr = tostring(upg)
                        if string.lower(upgstr):find("mrwi") or string.lower(upgstr):find("copy") then
                            table.insert(candidates, {idx = idx, spec = spec, reason = "upgrade name match"})
                            break
                        end
                    end
                end
                if #candidates > 0 then break end
            end
        end
    end
end

-- Se encontrou candidatos, injeta o upgrade na primeira correspondência plausível
if #candidates > 0 then
    local c = candidates[1]
    local spec = c.spec
    -- insere no lugar apropriado: se existir table spec.upgrades (skilltree_defs), adiciona lá
    if spec.upgrades and type(spec.upgrades) == "table" then
        -- evita duplicata
        local already = false
        for _, v in ipairs(spec.upgrades) do
            if v == "mrwi_passive_swap_speed" then already = true; break end
        end
        if not already then
            table.insert(spec.upgrades, "mrwi_passive_swap_speed")
        end
    else
        -- caso a formatação da specialization seja diferente, insere um novo bloco visível (cautelosamente)
        table.insert(spec, {
            cost = 0,
            icon_xy = {2,6},
            name_id = "menu_mrwi_passive_swap_speed",
            desc_id = "menu_mrwi_passive_swap_speed_desc",
            upgrades = { "mrwi_passive_swap_speed" }
        })
    end
    -- sucesso (opcional log)
    log("[OCSS] mrwi_passive_swap_speed injected into specialization index " .. tostring(c.idx) .. " (" .. tostring(c.reason) .. ")")
    return
end

-- fallback: se nada encontrado, tenta diretamente em skilltree_defs.mrwi (se existir)
if self.skilltree_defs and self.skilltree_defs.mrwi and type(self.skilltree_defs.mrwi.upgrades) == "table" then
    local already = false
    for _, v in ipairs(self.skilltree_defs.mrwi.upgrades) do
        if v == "mrwi_passive_swap_speed" then already = true; break end
    end
    if not already then
        table.insert(self.skilltree_defs.mrwi.upgrades, "mrwi_passive_swap_speed")
        log("[OCSS] mrwi_passive_swap_speed injected into skilltree_defs.mrwi.upgrades (fallback)")
        return
    end
end

-- se chegou aqui, não encontrou nada
23 317