Module:AbilityTable/ComplexRenderers: Difference between revisions

Vergir (talk | contribs)
Add RenderExtraDebuffResist for the extradebuffresist list (with help from vergir-bot LLM)
Sum all matching fields per layer in RenderExtraDebuffResist (with help from vergir-bot LLM)
Line 47: Line 47:
end
end


-- Returns the first non-zero value among `fields` within a single record layer
-- Sums the non-zero values of `fields` within a single record layer (the base
-- (the base ability record, or one upgrade tier). Returns nil when none apply.
-- ability record, or one upgrade tier). Returns nil when none are present.
local function layer_value(layer, fields)
local function sum_fields(layer, fields)
    local total = nil
     for _, field in ipairs(fields) do
     for _, field in ipairs(fields) do
         local v = unwrap_value(layer[field])
         local v = unwrap_value(layer[field])
         if v and v ~= 0 then return math.abs(v) end
         if v and v ~= 0 then total = (total or 0) + math.abs(v) end
     end
     end
     return nil
     return total
end
end


Line 416: Line 417:
     local segments = {}
     local segments = {}


     local running = layer_value(ability, fields)
     local running = sum_fields(ability, fields)
     if running then
     if running then
         table.insert(segments, running .. "%")
         table.insert(segments, running .. "%")
Line 425: Line 426:
         for i, tier in ipairs(upgrades) do
         for i, tier in ipairs(upgrades) do
             if type(tier) == "table" then
             if type(tier) == "table" then
                 local delta = layer_value(tier, fields)
                 local delta = sum_fields(tier, fields)
                 if delta then
                 if delta then
                     running = (running or 0) + delta
                     running = (running or 0) + delta