Mudanças entre as edições de "Módulo:Lari1"

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 13: Linha 13:
end
end


local function parseItemEntry(entry)
local function parseEntry(entry)
     entry = mw.text.trim(entry)
     entry = mw.text.trim(entry)
     if entry == "" then return nil, nil end
     if entry == "" then return nil, nil end
     local ident, qtdStr
     local ident, qtd
     if entry:find(";") then
     if entry:find(";") then
         ident, qtdStr = entry:match("^(.-)%s*;%s*(%d+)$")
         ident, qtd = entry:match("^(.-)%s*;%s*(%d+)$")
     else
     else
         ident, qtdStr = entry:match("^(.-)%s*:%s*(%d+)$")
         ident, qtd = entry:match("^(.-)%s*:%s*(%d+)$")
     end
     end
     if not ident or not qtdStr then return nil, nil end
     if not ident or not qtd then return nil, nil end
     return mw.text.trim(ident), tonumber(qtdStr)
     return mw.text.trim(ident), tonumber(qtd)
end
end


function p.reward(frame)
function p.reward(frame)
     local args     = frame:getParent().args
     local args = frame:getParent().args
     local itensRaw = mw.text.trim(args["itens"] or "")
     local raw  = mw.text.trim(args["itens"] or "")
     local lang     = mw.text.trim(args["lang"] or "pt")
     local lang = mw.text.trim(args["lang"] or "pt")
 
     if raw == "" then return "" end
     if itensRaw == "" then return "" end


     local wrap = mw.html.create("div"):addClass("lk-reward-wrap")
     local wrap = mw.html.create("div"):addClass("lk-reward-wrap")
     local lbl  = wrap:tag("div"):addClass("lk-reward-lbl"):wikitext("Recompensa Final")
     wrap:tag("div"):addClass("lk-reward-lbl"):wikitext("Recompensa Final")
 
     local line = wrap:tag("div"):addClass("reward-items")
     local line = wrap:tag("div"):addClass("reward-items")


     for entry in mw.text.gsplit(itensRaw, ",", true) do
     for entry in mw.text.gsplit(raw, ",", true) do
         local ident, qtdNum = parseItemEntry(entry)
         local ident, qty = parseEntry(entry)
         if ident and qtdNum then
         if ident and qty then
             local item = Item.resolve(ident)
             local item = Item.resolve(ident)
             if not item then
             if not item then
                 item = {
                 item = {
                     id       = 0,
                     id = 0,
                     image   = ident:match("%.%w+$") and ident or (ident .. ".png"),
                     image = ident:match("%.%w+$") and ident or (ident .. ".png"),
                     names   = { pt = ident, en = ident },
                     names = { pt = ident, en = ident },
                     category = "misc"
                     category = "misc"
                 }
                 }
             end
             end
             line:wikitext(Item.renderOne(item, formatNumber(qtdNum), lang, {
             line:wikitext(Item.renderOne(item, formatNumber(qty), lang, {
                 showTooltip = true,
                 showTooltip = true,
                 showCount   = true
                 showCount = true
             }))
             }))
         end
         end

Edição das 12h52min de 17 de março de 2026

A documentação para este módulo pode ser criada em Módulo:Lari1/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 parseEntry(entry)
    entry = mw.text.trim(entry)
    if entry == "" then return nil, nil end
    local ident, qtd
    if entry:find(";") then
        ident, qtd = entry:match("^(.-)%s*;%s*(%d+)$")
    else
        ident, qtd = entry:match("^(.-)%s*:%s*(%d+)$")
    end
    if not ident or not qtd then return nil, nil end
    return mw.text.trim(ident), tonumber(qtd)
end

function p.reward(frame)
    local args = frame:getParent().args
    local raw  = mw.text.trim(args["itens"] or "")
    local lang = mw.text.trim(args["lang"] or "pt")
    if raw == "" then return "" end

    local wrap = mw.html.create("div"):addClass("lk-reward-wrap")
    wrap:tag("div"):addClass("lk-reward-lbl"):wikitext("Recompensa Final")
    local line = wrap:tag("div"):addClass("reward-items")

    for entry in mw.text.gsplit(raw, ",", true) do
        local ident, qty = parseEntry(entry)
        if ident and qty 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 = "misc"
                }
            end
            line:wikitext(Item.renderOne(item, formatNumber(qty), lang, {
                showTooltip = true,
                showCount = true
            }))
        end
    end

    return tostring(wrap)
end

return p