Mudanças entre as edições de "Módulo:Reward"
Ir para navegação
Ir para pesquisar
m |
|||
| (13 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
| Linha 1: | Linha 1: | ||
local p = {} | local p = {} | ||
local | local Item = require("Módulo:Item") | ||
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 | 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 | end | ||
return nil | |||
if not ident or not qtdStr then return nil, nil end | |||
return mw.text.trim(ident), tonumber(qtdStr) | |||
end | end | ||
function p.exibir(frame) | function p.exibir(frame) | ||
local args = frame:getParent().args or {} | local args = frame:getParent().args or {} | ||
local itens = args. | local itensRaw = args.itens or "" | ||
local ilhaParam = args.ilha or "" | |||
local lang = args.lang or "pt" | |||
local rawTitle = args[1] or "" | local rawTitle = args[1] or "" | ||
local titulo = "" | local titulo = "" | ||
if rawTitle == "t" then | if rawTitle == "t" then | ||
titulo = "Recompensas:" | titulo = "Recompensas:" | ||
| Linha 32: | Linha 47: | ||
local container = mw.html.create("div") | local container = mw.html.create("div") | ||
:addClass("reward-wrapper") | |||
if titulo ~= "" then | if titulo ~= "" then | ||
| Linha 40: | Linha 55: | ||
end | end | ||
local | local itensNormais = {} | ||
local berriesEntry = nil | |||
local | for entry in mw.text.gsplit(itensRaw, ",", 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 qtdFormatada = formatNumber(qtdNum) | |||
local qtdFormatada = formatNumber( | |||
local | local tooltipOverride = nil | ||
if item.image and item.image:lower() == "pose.png" and ilhaParam ~= "" then | |||
tooltipOverride = "Eternal Pose - " .. ilhaParam | |||
end | |||
local | local isBerries = item.category == "currency" | ||
and item.image and item.image:lower():find("berries") | |||
local bloco = { | local bloco = { | ||
item = item, | |||
qty = qtdFormatada, | |||
tooltipOverride = tooltipOverride, | |||
isBerries = | isBerries = isBerries | ||
} | } | ||
if | if isBerries then | ||
berriesEntry = bloco | |||
else | else | ||
table.insert( | table.insert(itensNormais, bloco) | ||
end | end | ||
end | end | ||
end | end | ||
if | local line = container:tag("div"):addClass("reward-items") | ||
for _, bloco in ipairs(itensNormais) do | |||
local opts = { showTooltip = true, showCount = true } | |||
:tag("span") | if bloco.tooltipOverride then | ||
:wikitext(string.format("[[Arquivo:%s|link=]]", | local wrapper = mw.html.create("span") | ||
:addClass("item-wrapper") | |||
:tag("span") | :attr("data-tooltip", bloco.tooltipOverride) | ||
local w, h = Item.getSpriteSize(bloco.item) | |||
wrapper:css("width", w .. "px"):css("height", h .. "px") | |||
wrapper:tag("span") | |||
:wikitext(string.format("[[Arquivo:%s|%dx%dpx|link=]]", bloco.item.image, w, h)) | |||
local countSpan = wrapper:tag("span"):addClass("item-count") | |||
countSpan:tag("span"):addClass("item-count-x"):wikitext("x") | |||
countSpan:wikitext(bloco.qty) | |||
line:wikitext(tostring(wrapper)) | |||
else | |||
line:wikitext(Item.renderOne(bloco.item, bloco.qty, lang, opts)) | |||
end | |||
end | end | ||
if berriesEntry then | |||
line:wikitext(Item.renderOne(berriesEntry.item, berriesEntry.qty, lang, { | |||
showTooltip = true, | |||
showCount = true | |||
})) | |||
end | end | ||
Edição atual tal como às 22h20min de 16 de março de 2026
A documentação para este módulo pode ser criada em Módulo:Reward/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
function p.exibir(frame)
local args = frame:getParent().args or {}
local itensRaw = args.itens or ""
local ilhaParam = args.ilha or ""
local lang = args.lang or "pt"
local rawTitle = args[1] or ""
local titulo = ""
if rawTitle == "t" then
titulo = "Recompensas:"
elseif rawTitle ~= "" then
titulo = rawTitle
end
local container = mw.html.create("div")
:addClass("reward-wrapper")
if titulo ~= "" then
container:tag("div")
:addClass("reward-title")
:wikitext(titulo)
end
local itensNormais = {}
local berriesEntry = nil
for entry in mw.text.gsplit(itensRaw, ",", 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 qtdFormatada = formatNumber(qtdNum)
local tooltipOverride = nil
if item.image and item.image:lower() == "pose.png" and ilhaParam ~= "" then
tooltipOverride = "Eternal Pose - " .. ilhaParam
end
local isBerries = item.category == "currency"
and item.image and item.image:lower():find("berries")
local bloco = {
item = item,
qty = qtdFormatada,
tooltipOverride = tooltipOverride,
isBerries = isBerries
}
if isBerries then
berriesEntry = bloco
else
table.insert(itensNormais, bloco)
end
end
end
local line = container:tag("div"):addClass("reward-items")
for _, bloco in ipairs(itensNormais) do
local opts = { showTooltip = true, showCount = true }
if bloco.tooltipOverride then
local wrapper = mw.html.create("span")
:addClass("item-wrapper")
:attr("data-tooltip", bloco.tooltipOverride)
local w, h = Item.getSpriteSize(bloco.item)
wrapper:css("width", w .. "px"):css("height", h .. "px")
wrapper:tag("span")
:wikitext(string.format("[[Arquivo:%s|%dx%dpx|link=]]", bloco.item.image, w, h))
local countSpan = wrapper:tag("span"):addClass("item-count")
countSpan:tag("span"):addClass("item-count-x"):wikitext("x")
countSpan:wikitext(bloco.qty)
line:wikitext(tostring(wrapper))
else
line:wikitext(Item.renderOne(bloco.item, bloco.qty, lang, opts))
end
end
if berriesEntry then
line:wikitext(Item.renderOne(berriesEntry.item, berriesEntry.qty, lang, {
showTooltip = true,
showCount = true
}))
end
return tostring(container)
end
return p