Module:InfoboxHero: Difference between revisions

Jump to navigation Jump to search
Vergir (talk | contribs)
Restore mangled comment text (with help from vergir-bot LLM)
Vergir (talk | contribs)
Use shared HeroData helpers for stat, scaling, hero key and tag lookups instead of local copies (with help from vergir-bot LLM)
Line 30: Line 30:
local sb_module  = require('Module:StreetBrawlAbilities')
local sb_module  = require('Module:StreetBrawlAbilities')


local get_stat, has_stat, has_override_or_stat, stat_number
-- Shared hero-data lookups, see [[Module:HeroData]].
local get_stat     = hero_module.get_stat
local get_scalings = hero_module.get_scalings
local has_stat    = hero_module.has_stat
 
local has_override_or_stat, stat_number


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Line 442: Line 447:
-- Data access
-- Data access
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Stats live at the top level for vitality, and under .Weapon for weapon stats.
get_stat = function(hero, stat)
if hero == nil or stat == nil then return nil end
local value = hero[stat]
if value == nil and hero.Weapon then
value = hero.Weapon[stat]
if value == nil and hero.Weapon.AltFire then
value = hero.Weapon.AltFire[stat]
end
end
return value
end
-- The raw Boon (Level) and Spirit scaling values for a stat, if any.
local function get_scaling(hero, stat)
local out = {}
for _, scaling_type in ipairs({ 'Level', 'Spirit' }) do
local scaling = hero[scaling_type .. 'Scaling']
local value = scaling and stat and scaling[stat]
if value ~= nil and value ~= 0 then
out[#out + 1] = { type = scaling_type, value = value }
end
end
return out
end
-- True when the hero has a non-zero base value, or any scaling, for a stat.
has_stat = function(hero, stat)
local value = get_stat(hero, stat)
if value ~= nil and value ~= 0 then return true end
return #get_scaling(hero, stat) > 0
end


has_override_or_stat = function(ctx, param, stat)
has_override_or_stat = function(ctx, param, stat)
Line 547: Line 519:
if row.stat and row.scaling ~= false then
if row.stat and row.scaling ~= false then
local parts = {}
local parts = {}
for _, scaling in ipairs(get_scaling(ctx.hero, row.stat)) do
for _, scaling in ipairs(get_scalings(ctx.hero, row.stat)) do
parts[#parts + 1] = hero_module.write_scalar_str(scaling.value, scaling.type)
parts[#parts + 1] = hero_module.write_scalar_str(scaling.value, scaling.type)
end
end
Line 684: Line 656:
local tags = {}
local tags = {}
for i = 1, 3 do
for i = 1, 3 do
local tag = hero_module.get_hero_tag({ args = { ctx.hero_en, tostring(i) } })
local tag = hero_module.hero_tag(ctx.hero_en, i)
if tag and tag ~= '' and not tag:find('Error:', 1, true) then
if tag ~= '' then
tags[#tags + 1] = tag
tags[#tags + 1] = tag
end
end
Line 720: Line 692:
-- Entry point
-- Entry point
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- |key= accepts a hero_* key or the hero's English name; unknown values fall back
-- to the target dummy, the default character in Sandbox mode.
local function resolve_hero_key(provided)
if provided == nil or provided == '' then return DEFAULT_HERO_KEY end
if hero_data_all[provided] ~= nil then return provided end
local wanted = mw.ustring.lower(provided)
for key, hero in pairs(hero_data_all) do
if hero.Name and mw.ustring.lower(hero.Name) == wanted then return key end
end
return DEFAULT_HERO_KEY
end


function p.render(frame)
function p.render(frame)
Line 745: Line 705:
end })
end })


local hero_key = resolve_hero_key(args.key)
-- |key= accepts a hero_* key or the hero's English name; unknown values fall
-- back to the target dummy, the default character in Sandbox mode.
local hero_key = hero_module.find_hero_key(args.key) or DEFAULT_HERO_KEY
local hero = hero_data_all[hero_key]
local hero = hero_data_all[hero_key]