Módulo:Achiev
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:Achiev/doc
local p = {}
local itemData = require("Módulo:ItemData")
local function formatNumber(num)
num = tonumber(num) or 0
if num >= 1e9 then
return string.format("%.0f", num / 1e6) .. "KKK"
elseif num >= 1e6 then
return string.format("%.0f", num / 1e6) .. "KK"
elseif num >= 1e4 then
return string.format("%.0f", num / 1e3) .. "K"
else
local s = tostring(num)
return s:reverse():gsub("(%d%d%d)", "%1,"):reverse():gsub("^,", "")
end
end
local function buscarChaveCorreta(nome)
local base = mw.text.trim(nome):lower():gsub("_", " "):gsub("%.png$", ""):gsub("%.gif$", ""):gsub("%.jpg$", ""):gsub("%.webp$", "")
for chave, dados in pairs(itemData) do
local kbase = chave:lower():gsub("_", " "):gsub("%.png$", ""):gsub("%.gif$", ""):gsub("%.jpg$", ""):gsub("%.webp$", "")
if kbase == base then
return chave
end
local nomeTraduzido = (dados.nome or ""):lower():gsub("_", " "):gsub("%.png$", ""):gsub("%.gif$", ""):gsub("%.jpg$", ""):gsub("%.webp$", "")
if nomeTraduzido == base then
return chave
end
end
return nil
end
function p.render(frame)
local args = frame:getParent().args or {}
local imagem = args.imagem or "Blank"
local titulo = args.titulo or "Título da Conquista"
local descricao = args.descricao or "Descrição da conquista."
local itensStr = args.itens or ""
local html = mw.html.create("div"):addClass("conquista-wrapper")
html:tag("div"):addClass("conquista-header"):wikitext("CONQUISTA COMPLETADA!")
local box = html:tag("div"):addClass("conquista-box")
box:tag("div"):addClass("conquista-icon"):wikitext(string.format("[[Arquivo:%s.png|link=]]", imagem))
local conteudo = box:tag("div"):addClass("conquista-conteudo")
conteudo:tag("div"):addClass("conquista-titulo"):wikitext(titulo)
conteudo:tag("div"):addClass("conquista-descricao"):wikitext(descricao)
local rec = conteudo:tag("div"):addClass("conquista-recompensas")
local itensOrdenados = {}
local berriesItem = nil
for entry in mw.text.gsplit(itensStr, ",", true) do
local e = mw.text.trim(entry)
if e ~= "" then
local name, qty = e:match("^%s*(.-)%s*:%s*(%d+)%s*$")
if name and qty then
local chave = buscarChaveCorreta(name) or (name .. ".png")
local data = itemData[chave] or {}
local qtdFormatada = formatNumber(tonumber(qty) or 0)
local nomeCompleto = data.nome or name
local desc = data.desc
local tooltip = nomeCompleto
if desc and desc ~= "" then
tooltip = tooltip .. "\n—\n" .. desc
end
local bloco = {
arquivo = chave,
qtd = qtdFormatada,
tooltip = tooltip
}
if chave:lower() == "berries.gif" then
berriesItem = bloco
else
table.insert(itensOrdenados, bloco)
end
end
end
end
local function addBloco(b)
local wrap = rec:tag("span"):addClass("item-wrapper"):attr("data-tooltip", b.tooltip)
wrap:tag("span"):wikitext(string.format("[[Arquivo:%s|link=]]", b.arquivo))
local quantidade = b.arquivo:lower() == "berries.gif" and b.qtd or "x" .. b.qtd
wrap:tag("span"):addClass("item-count"):wikitext(quantidade)
end
if berriesItem then
addBloco(berriesItem)
end
for _, b in ipairs(itensOrdenados) do
addBloco(b)
end
return tostring(html)
end
return p