Módulo:Achievement
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:Achievement/doc
local p = {}
local Item = require("Módulo:Item")
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 parseItemEntry(entry)
entry = mw.text.trim(entry)
if entry == "" then return nil, nil end
local ident, qtdStr
if entry:find(";") then
ident, qtdStr = entry:match("^(.-)%s*;%s*(%d+)$")
else
ident, qtdStr = entry:match("^(.-)%s*:%s*(%d+)$")
end
if not ident or not qtdStr then return nil, nil end
return mw.text.trim(ident), tonumber(qtdStr)
end
local function normalizeImageName(name)
local clean = mw.text.trim(name or "")
if clean == "" then return "Blank.png" end
if clean:match("%.%w+$") then return clean end
return clean .. ".png"
end
function p.render(frame)
local args = frame.args or {}
if not next(args) and frame:getParent() then
args = frame:getParent().args or {}
end
local imagem = normalizeImageName(args.imagem)
local titulo = args.titulo or "Título da Conquista"
local descricao = args.descricao or "Descrição da conquista."
local itensStr = args.itens or ""
local lang = args.lang or "pt"
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|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 = {}
for entry in mw.text.gsplit(itensStr, ",", true) do
local ident, qtdNum = parseItemEntry(entry)
if ident and qtdNum then
local item = Item.resolve(ident)
if not item then
item = {
id = 0,
image = ident:match("%.%w+$") and ident or (ident .. ".png"),
names = { pt = ident, en = ident },
category = "unknown"
}
end
local bloco = {
item = item,
qtd = formatNumber(qtdNum)
}
local image = Item.getImage(item) or ""
local isBerries = item.category == "currency" and image:lower():find("berries")
if isBerries then
table.insert(berriesItem, bloco)
else
table.insert(itensOrdenados, bloco)
end
end
end
local function addBloco(b)
rec:wikitext(Item.renderOne(b.item, b.qtd, lang, {
showTooltip = true,
showCount = true
}))
end
for _, b in ipairs(itensOrdenados) do
addBloco(b)
end
for _, b in ipairs(berriesItem) do
addBloco(b)
end
return tostring(html)
end
return p