Mudanças entre as edições de "Módulo:Achiev"
Ir para navegação
Ir para pesquisar
| (19 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 1: | Linha 1: | ||
local p = {} | 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) | 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-box") | 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 | local rec = conteudo:tag("div"):addClass("conquista-recompensas") | ||
local | local itensOrdenados = {} | ||
local berriesItem = nil | |||
for entry in mw.text.gsplit(itensStr, ",", true) do | for entry in mw.text.gsplit(itensStr, ",", true) do | ||
| Linha 36: | Linha 57: | ||
local name, qty = e:match("^%s*(.-)%s*:%s*(%d+)%s*$") | local name, qty = e:match("^%s*(.-)%s*:%s*(%d+)%s*$") | ||
if name and qty then | if name and qty then | ||
local | 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 | 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 | end | ||
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