Mudanças entre as edições de "Módulo:Achiev"
Ir para navegação
Ir para pesquisar
| (4 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 3: | Linha 3: | ||
local function formatNumber(num) | local function formatNumber(num) | ||
local s = tostring(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 | end | ||
local function buscarChaveCorreta(nome) | local function buscarChaveCorreta(nome) | ||
local base = mw.text.trim(nome):lower():gsub("_", " "):gsub("%.png$", ""):gsub("%.gif$", ""):gsub("%.jpg$", ""):gsub("%.webp$", "") | local base = mw.text.trim(nome):lower():gsub("_", " "):gsub("%.png$", ""):gsub("%.gif$", ""):gsub("%.jpg$", ""):gsub("%.webp$", "") | ||
for chave, | for chave, dados in pairs(itemData) do | ||
local kbase = chave:lower():gsub("_", " "):gsub("%.png$", ""):gsub("%.gif$", ""):gsub("%.jpg$", ""):gsub("%.webp$", "") | local kbase = chave:lower():gsub("_", " "):gsub("%.png$", ""):gsub("%.gif$", ""):gsub("%.jpg$", ""):gsub("%.webp$", "") | ||
if kbase == base then | 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 | return chave | ||
end | end | ||
| Linha 20: | Linha 32: | ||
function p.render(frame) | function p.render(frame) | ||
local args | local args = frame:getParent().args or {} | ||
local imagem | local imagem = args.imagem or "Blank" | ||
local titulo | local titulo = args.titulo or "Título da Conquista" | ||
local descricao = args.descricao or "Descrição da conquista." | local descricao = args.descricao or "Descrição da conquista." | ||
local itensStr | local itensStr = args.itens or "" | ||
local html = mw.html.create("div"):addClass("conquista-wrapper") | local html = mw.html.create("div"):addClass("conquista-wrapper") | ||
| Linha 58: | Linha 70: | ||
local bloco = { | local bloco = { | ||
arquivo = chave, | arquivo = chave, | ||
qtd = | qtd = qtdFormatada, | ||
tooltip = tooltip | tooltip = tooltip | ||
} | } | ||
| Linha 74: | Linha 86: | ||
local wrap = rec:tag("span"):addClass("item-wrapper"):attr("data-tooltip", b.tooltip) | local wrap = rec:tag("span"):addClass("item-wrapper"):attr("data-tooltip", b.tooltip) | ||
wrap:tag("span"):wikitext(string.format("[[Arquivo:%s|link=]]", b.arquivo)) | wrap:tag("span"):wikitext(string.format("[[Arquivo:%s|link=]]", b.arquivo)) | ||
wrap:tag("span"):addClass("item-count"):wikitext( | |||
local quantidade = b.arquivo:lower() == "berries.gif" and b.qtd or "x" .. b.qtd | |||
wrap:tag("span"):addClass("item-count"):wikitext(quantidade) | |||
end | end | ||
if berriesItem then addBloco(berriesItem) end | if berriesItem then | ||
for _, b in ipairs(itensOrdenados) do addBloco(b) end | addBloco(berriesItem) | ||
end | |||
for _, b in ipairs(itensOrdenados) do | |||
addBloco(b) | |||
end | |||
return tostring(html) | return tostring(html) | ||
Edição atual tal como às 23h44min de 15 de junho de 2025
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