|
|
| 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 |
|
| |
|