Editing Module:NpcDataGive feedback
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
| Latest revision | Your text | ||
| Line 13: | Line 13: | ||
end | end | ||
-- Retrieves a specific stat value for a given NPC. | |||
-- Retrieves a specific stat value for a given NPC. Handles both simple and nested calls. | -- Retrieves a specific stat value for a given NPC. Handles both simple and nested calls. | ||
-- {{#invoke:NpcData|get_npc_var|NPC_KEY|STAT_KEY_1|STAT_KEY_2|...|SIG_FIGS}} | -- {{#invoke:NpcData|get_npc_var|NPC_KEY|STAT_KEY_1|STAT_KEY_2|...|SIG_FIGS}} | ||
| Line 95: | Line 96: | ||
return current_value | return current_value | ||
end | |||
-- Retrieves a nested value using dot notation (e.g., "Shield.BaseAbsorptionPerSecond") | |||
--{{#invoke:NpcData|get_nested_var|NPC_KEY|PATH|SIG_FIGS}}-- | |||
p.get_nested_var = function(frame) | |||
local args = frame.args | |||
local npc_name = args[1] and mw.text.trim(args[1]) or nil | |||
local path = args[2] and mw.text.trim(args[2]) or nil | |||
local sig_figs = args[3] and mw.text.trim(args[3]) or nil | |||
if not npc_name or npc_name == '' then | |||
return '<span class="error">Error: NPC name not provided.</span>' | |||
end | |||
if not path or path == '' then | |||
return '<span class="error">Error: Path not provided.</span>' | |||
end | |||
local npc = npcs_data[npc_name] | |||
if not npc then | |||
return '<span class="error">Error: NPC "' .. npc_name .. '" not found.</span>' | |||
end | |||
-- Traverse nested structure | |||
local value = npc | |||
for key in string.gmatch(path, '([^.]+)') do | |||
if type(value) ~= "table" then | |||
return '<span class="error">Error: Path "' .. path .. '" is invalid.</span>' | |||
end | |||
-- try first with the raw key, then with a number conversion | |||
local next = value[key] or value[tonumber(key)] or value[tostring(key)] | |||
if next == nil then | |||
return '<span class="error">Error: Key "' .. key .. '" not found in path.</span>' | |||
end | |||
value = next | |||
end | |||
-- Apply rounding if needed | |||
if sig_figs and tonumber(sig_figs) then | |||
value = util_module.round_to_sig_fig(value, sig_figs) | |||
if value == nil then | |||
return '<span class="error">Error: Rounding failed for value.</span>' | |||
end | |||
end | |||
return value | |||
end | end | ||
return p | return p | ||