Módulo:Teste
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:Teste/doc
local p = {}
-- Parser dos itens no formato "nome:quantidade"
local function parseItens(raw)
local resultado = {}
for item in mw.text.gsplit(raw or "", ",", true) do
local nome, qtd = item:match("^%s*(.-)%s*:%s*(%d+)%s*$")
if nome and qtd then
-- Remove espaços extras e força nome de arquivo com extensão
nome = mw.text.trim(nome)
if not nome:match("%.png$") and not nome:match("%.gif$") and not nome:match("%.jpg$") and not nome:match("%.webp$") then
nome = nome .. ".png"
end
qtd = tonumber(qtd) or 0
resultado[nome] = (resultado[nome] or 0) + qtd
end
end
return resultado
end
-- Junta múltiplas listas de recompensa
local function mergeRecompensas(rewardsList)
local total = {}
for _, raw in ipairs(rewardsList) do
local dados = parseItens(raw)
for nome, qtd in pairs(dados) do
total[nome] = (total[nome] or 0) + qtd
end
end
return total
end
-- Função pública
function p.total(frame)
local content = mw.title.getCurrentTitle():getContent()
local rewardCalls = {}
-- Procura chamadas de {{Reward|...|itens=...}}
for bloco in content:gmatch("{{%s*[Rr]eward.-}}") do
local itens = bloco:match("itens%s*=%s*([^|}]+)")
if itens then
table.insert(rewardCalls, itens)
end
end
local totais = mergeRecompensas(rewardCalls)
local html = mw.html.create("div")
html:addClass("missao-recompensa-final")
for nome, qtd in pairs(totais) do
html:tag("span")
:addClass("item-wrapper")
:wikitext(string.format("[[Arquivo:%s|20px|link=]] x%d", nome, qtd))
end
return tostring(html)
end
return p