Module:Infobox item: Difference between revisionsGive feedback
added ITEM_NAME_OVERRIDES |
append_label: prefer per-stat StatLinks target over generic attribute-type link (fixes e.g. Debuff Resist → Ability Duration) (with help from vergir-bot LLM) |
||
| (5 intermediate revisions by 3 users not shown) | |||
| Line 15: | Line 15: | ||
local tostring = tostring | local tostring = tostring | ||
local type = type | local type = type | ||
-- Status Effect Icon Map | |||
local STATUS_EFFECT_ICON_MAP = { | |||
StatusEffectDisarmed = {img='Status_Disarm.png', link='Disarm', color='Red'}, | |||
StatusEffectEMP = {img='Status_Silence.png', link='Silence', color='Purple'}, | |||
StatusEffectInvisible= {img='Invisible.png', link='Invisible',color='Green'}, | |||
StatusEffectStun = {img='Status_Stun.png', link='Stun', color='NoColor'}, | |||
StatusEffectSlow = {img='Status_Movement_Slow.png', link='Slow', color='Purple'}, | |||
} | |||
-- Pre-computed constants | -- Pre-computed constants | ||
| Line 32: | Line 41: | ||
-- Item name override mapping (old name -> new name) | -- Item name override mapping (old name -> new name) | ||
local ITEM_NAME_OVERRIDES = { | local ITEM_NAME_OVERRIDES = { | ||
[" | ["debuff remover"] = "Dispel Magic", | ||
["backstabber"] = "Stalker", | |||
} | } | ||
| Line 65: | Line 75: | ||
local function resolve_item_name(name) | local function resolve_item_name(name) | ||
-- Check if there's an override for this name | -- Check if there's an override for this name (case-insensitive) | ||
return | local lowercase_name = name:lower() | ||
local override = ITEM_NAME_OVERRIDES[lowercase_name] | |||
if override then | |||
return override | |||
end | |||
-- If no override, try to find the item in data and return its proper Name | |||
-- First try direct key lookup | |||
if data[name] and not data[name].IsDisabled then | |||
return data[name].Name or name | |||
end | |||
-- Then try case-insensitive search by Name field | |||
local lowercase_search = name:lower() | |||
for _, v in pairs(data) do | |||
if v.Name and v.Name:lower() == lowercase_search and not v.IsDisabled then | |||
return v.Name | |||
end | |||
end | |||
-- Fallback to original name | |||
return name | |||
end | end | ||
| Line 205: | Line 236: | ||
if label == "" then return val_str end | if label == "" then return val_str end | ||
-- Resolve link priority: Override > Attribute Map | -- Resolve link priority: Override > JSON Stat Link > Attribute Map Link | ||
local link_target = link_override | local link_target = link_override | ||
if not link_target or link_target == "" then | if not link_target or link_target == "" then | ||
link_target = | link_target = stat_links[prop_key] | ||
end | end | ||
if not link_target or link_target == "" then | if not link_target or link_target == "" then | ||
link_target = | link_target = attr_link | ||
end | end | ||
| Line 275: | Line 306: | ||
icon_str = format("{{Icon/%s|[[File:%s|%spx|link=%s]]}}", color, img, 18, link or "") | icon_str = format("{{Icon/%s|[[File:%s|%spx|link=%s]]}}", color, img, 18, link or "") | ||
end | end | ||
return { | |||
icon = icon_str, | |||
link = link | |||
} | |||
end | |||
-------------------------------------------------------------------------------- | |||
-- Status Effect Icon helper | |||
-------------------------------------------------------------------------------- | |||
local function resolve_status_effect_icon(prop_key) | |||
local effect_config = STATUS_EFFECT_ICON_MAP[prop_key] | |||
if not effect_config then return nil end | |||
local color = effect_config.color or "NoColor" | |||
local img = effect_config.img or "GenericProperty.png" | |||
local link = effect_config.link | |||
-- Construct icon using the defined color template | |||
local icon_str = format( | |||
"{{Icon/%s|[[File:%s|18px|link=%s]]}}", | |||
color, img, link or "" | |||
) | |||
return { | return { | ||
| Line 400: | Line 455: | ||
return append_conditional(val_str, allow_conditional, usage_flags) | return append_conditional(val_str, allow_conditional, usage_flags) | ||
end | |||
-------------------------------------------------------------------------------- | |||
-- Status Effect formatting helper | |||
-------------------------------------------------------------------------------- | |||
local function format_status_effect(prop_key) | |||
local lang_str = format("[[{{#invoke:Lang|get_string|Citadel_%s}}]]", prop_key) | |||
.. " [[{{#invoke:Lang|get_string|Citadel_StatusEffect}}]]" | |||
-- Get icon for this status effect | |||
local icon_style = resolve_status_effect_icon(prop_key) | |||
if icon_style and icon_style.icon then | |||
return icon_style.icon .. " " .. lang_str | |||
end | |||
return lang_str | |||
end | end | ||
| Line 466: | Line 538: | ||
if item.StreetBrawl == true then | if item.StreetBrawl == true then | ||
insert(lines, "| street_brawl = true") | insert(lines, "| street_brawl = true") | ||
end | |||
-- Pass through nocat arg to the Infobox item template if provided | |||
local nocat = frame.args.nocat | |||
if nocat and nocat ~= "" then | |||
insert(lines, "| nocat = " .. nocat) | |||
end | end | ||
| Line 531: | Line 609: | ||
main_formatter = function(obj) | main_formatter = function(obj) | ||
if obj.Key:match("^StatusEffect") then | if obj.Key:match("^StatusEffect") then | ||
return | return format_status_effect(obj.Key) | ||
end | end | ||
return format_value_enhanced( | return format_value_enhanced( | ||
| Line 539: | Line 617: | ||
end | end | ||
alt_formatter = function(obj) | alt_formatter = function(obj) | ||
if obj.Key:match("^StatusEffect") then | |||
return format_status_effect(obj.Key) | |||
end | |||
return format_value_enhanced( | return format_value_enhanced( | ||
resolved_name, obj.Key, obj.Value, obj.Type, | resolved_name, obj.Key, obj.Value, obj.Type, | ||
| Line 548: | Line 629: | ||
main_formatter = function(obj) | main_formatter = function(obj) | ||
if obj.Key:match("^StatusEffect") then | if obj.Key:match("^StatusEffect") then | ||
return | return format_status_effect(obj.Key) | ||
end | end | ||
return format_value( | return format_value( | ||
| Line 556: | Line 637: | ||
end | end | ||
alt_formatter = function(obj) | alt_formatter = function(obj) | ||
if obj.Key:match("^StatusEffect") then | |||
return format_status_effect(obj.Key) | |||
end | |||
return format_value( | return format_value( | ||
obj.Key, obj.Value, obj.Type, obj.LocTokenOverride, | obj.Key, obj.Value, obj.Type, obj.LocTokenOverride, | ||