Module:Sandbox/Vergir: Difference between revisionsGive feedback
Test copy of Module:AbilityTable with proposed per-prop Spirit scaling renderer inlined (with help from vergir-bot LLM) |
Fix: iterate Upgrades with ipairs (loadJsonData tables have no length) (with help from vergir-bot LLM) |
||
| Line 86: | Line 86: | ||
local base = spirit_scalings(ability, labels) | local base = spirit_scalings(ability, labels) | ||
local tiers = {} | local tiers = {} -- { tier = i, list = ... } in tier order | ||
local upgrades = ability["Upgrades"] | local upgrades = ability["Upgrades"] | ||
if type(upgrades) == "table" then | if type(upgrades) == "table" then | ||
-- ipairs rather than #: mw.loadJsonData tables have no length. | |||
for i, tier in ipairs(upgrades) do | for i, tier in ipairs(upgrades) do | ||
if type(tier) == "table" then tiers | if type(tier) == "table" then | ||
table.insert(tiers, { tier = i, list = spirit_scalings(tier, labels) }) | |||
end | |||
end | end | ||
end | end | ||
| Line 107: | Line 110: | ||
end | end | ||
note_keys(base) | note_keys(base) | ||
for _, | for _, t in ipairs(tiers) do note_keys(t.list) end | ||
local function label_of(key) | local function label_of(key) | ||
| Line 131: | Line 134: | ||
local notes = {} | local notes = {} | ||
for | for _, t in ipairs(tiers) do | ||
local list = | local i, list = t.tier, t.list | ||
local groups, group_order = {}, {} -- Multiply upgrades, grouped by multiplier | |||
for _, up in ipairs(list) do | |||
local label = label_of(up.key) | |||
local current = running[up.key] | |||
if up.multiply then | |||
local group = groups[up.value] | |||
if not group then | |||
group = { labels = {}, totals = {} } | |||
groups[up.value] = group | |||
table.insert(group_order, up.value) | |||
end | |||
table.insert(group.labels, label) | |||
if current then | |||
running[up.key] = current * up.value | |||
table.insert(group.totals, "×" .. format_spirit(running[up.key])) | |||
else | else | ||
table.insert(group.totals, "?") | |||
table.insert( | |||
end | end | ||
elseif current then | |||
running[up.key] = current + up.value | |||
table.insert(notes, "T" .. i .. " upgrade adds +×" .. format_spirit(up.value) | |||
.. " " .. label .. " scaling (total ×" .. format_spirit(running[up.key]) .. ")") | |||
else | |||
running[up.key] = up.value | |||
table.insert(notes, "T" .. i .. " upgrade grants ×" .. format_spirit(up.value) | |||
.. " " .. label .. " scaling") | |||
end | end | ||
end | |||
for _, m in ipairs(group_order) do | |||
local group = groups[m] | |||
table.insert(notes, "T" .. i .. " upgrade multiplies " .. join_names(group.labels) | |||
.. " scaling by " .. format_spirit(m) | |||
.. " (total " .. table.concat(group.totals, ", ") .. ")") | |||
end | end | ||
end | end | ||