Module:AbilityTable/ComplexRenderers: Difference between revisions

Jump to navigation Jump to search
Vergir (talk | contribs)
simplify RenderDebuff to just find earliest upgrade tier, remove debuff_short_name table (with help from vergir-bot LLM)
Vergir (talk | contribs)
remove RenderDebuff and is_base_property helper, no longer needed (with help from vergir-bot LLM)
Line 45: Line 45:
     end
     end
     return nil, nil, nil
     return nil, nil, nil
end
-- Returns true if prop exists with a non-zero value at the top level of the
-- record, excluding the Upgrades key. Does not recurse into sub-tables to
-- avoid false positives from modifier metadata (e.g. prop names appearing as
-- string values inside AutoRegisterModifierValueFromAbilityPropertyName).
-- Value-objects like { Value = N } are unwrapped via the k == prop branch.
-- Name-based list entries (e.g. "Card Trick") match via the string branch
-- against the top-level Name field.
local function is_base_property(record, prop)
    for k, v in pairs(record) do
        if k == "Upgrades" then
            -- skip
        elseif k == prop then
            if type(v) == "table" then v = v["Value"] end
            if v ~= nil and v ~= 0 and v ~= "" and v ~= "0" and v ~= "0m" then
                return true
            end
        elseif type(v) == "string" then
            if v == prop then return true end
        end
    end
    return false
end
-- Finds the base-level melee scale value by scanning for Scale.Type == "melee".
local function find_base_melee_scale(ability)
    for _, v in pairs(ability) do
        if type(v) == "table" then
            local scale = v["Scale"]
            if type(scale) == "table"
                and scale["Type"] == "melee"
                and type(scale["Value"]) == "number"
                and scale["Value"] > 0
            then
                return scale["Value"]
            end
        end
    end
    return nil
end
end


Line 365: Line 325:
     end
     end
     return render_upgradable_stat(ability, "Heal Reduction", filtered, "%")
     return render_upgradable_stat(ability, "Heal Reduction", filtered, "%")
end
-- Shows a note if an ability only acquires a dispellable debuff via upgrades.
-- Shared by debuffresist and dispelmagic.
function p.RenderDebuff(ability, stat)
    local stat_props = Lists.lists[stat]
    local cells = {}
    -- If any prop exists in base, this is a base-level debuff — no note needed.
    for _, prop in ipairs(stat_props) do
        if is_base_property(ability, prop) then
            return cells
        end
    end
    -- Find the earliest upgrade tier with a matching prop.
    local upgrades = ability["Upgrades"]
    if type(upgrades) ~= "table" then return cells end
    for i, tier in ipairs(upgrades) do
        if type(tier) == "table" then
            for _, prop in ipairs(stat_props) do
                local v = tier[prop]
                if v ~= nil then
                    if type(v) == "table" then v = v["Value"] end
                    if v ~= nil and v ~= 0 and v ~= "" and v ~= "0" and v ~= "0m" then
                        cells["Notes"] = "After T" .. i
                        return cells
                    end
                end
            end
        end
    end
    return cells
end
end