Mudanças entre as edições de "Módulo:Teste"
Ir para navegação
Ir para pesquisar
(Limpou toda a página) Etiquetas: Reversão manual anulando |
Etiqueta: Revertido |
||
| Linha 1: | Linha 1: | ||
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 | |||
Edição das 01h07min de 9 de junho de 2025
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