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

De Wiki Gla
Ir para navegação Ir para pesquisar
Linha 1: Linha 1:
local p = {}
local p = {}
local Item = require("Módulo:Item")


function p.card(frame)
local function formatNumber(num)
     local args = frame:getParent().args
     num = tonumber(num) or 0
     local id = args.id or 'b1'
     if num >= 1e9 then return string.format("%.0f", num / 1e6) .. "KKK"
     local boss = args.boss or 'Boss'
     elseif num >= 1e6 then return string.format("%.0f", num / 1e6) .. "KK"
     local ilha = args.ilha or ''
     elseif num >= 1e4 then return string.format("%.0f", num / 1e3) .. "K"
     local img = args.img or ''
     else
        local s = tostring(num)
        return s:reverse():gsub("(%d%d%d)", "%1."):reverse():gsub("^%.", "")
    end
end


    -- Coletar skills dos parâmetros
local function parseItemEntry(entry)
     local skills = {}
     entry = mw.text.trim(entry)
     for i = 1, 5 do
     if entry == "" then return nil, nil end
        local nome = args['s' .. i]
    local ident, qtdStr
        if nome and nome ~= '' then
    if entry:find(";") then
            table.insert(skills, {
        ident, qtdStr = entry:match("^(.-)%s*;%s*(%d+)$")
                tab  = args['s' .. i .. '_tab'] or nome,
    else
                nome = nome,
        ident, qtdStr = entry:match("^(.-)%s*:%s*(%d+)$")
                video = args['s' .. i .. '_video'] or '',
                desc  = args['s' .. i .. '_desc'] or ''
            })
        end
     end
     end
    if not ident or not qtdStr then return nil, nil end
    return mw.text.trim(ident), tonumber(qtdStr)
end


     if #skills == 0 then return '' end
function p.reward(frame)
 
    local args     = frame:getParent().args
     local h = {}
    local itensRaw = mw.text.trim(args["itens"] or "")
     local lang    = mw.text.trim(args["lang"] or "pt")


     -- Card header
     if itensRaw == "" then return "" end
    table.insert(h, '<div class="lk-card">')
    table.insert(h, '<div class="lk-card-header">')
    if img ~= '' then
        table.insert(h, '<img src="' .. img .. '" alt="' .. boss .. '">')
    end
    table.insert(h, '<div><div class="lk-boss-name">' .. boss .. '</div>')
    table.insert(h, '<div class="lk-boss-island">' .. ilha .. '</div></div></div>')


     -- Tabs container
     local wrap = mw.html.create("div"):addClass("lk-reward-wrap")
     table.insert(h, '<div class="lk-tabs">')
     local lbl  = wrap:tag("div"):addClass("lk-reward-lbl"):wikitext("Recompensa Final")


     -- Radio inputs
     local line = wrap:tag("div"):addClass("reward-items")
    for i, _ in ipairs(skills) do
        local chk = (i == 1) and ' checked' or ''
        table.insert(h, '<input type="radio" name="' .. id .. '" id="' .. id .. 's' .. i .. '" class="lk-radio"' .. chk .. '>')
    end
 
    -- Nav labels
    table.insert(h, '<div class="lk-nav">')
    for i, s in ipairs(skills) do
        table.insert(h, '<label for="' .. id .. 's' .. i .. '">' .. s.tab .. '</label>')
    end
    table.insert(h, '</div>')


    -- Panels
     for entry in mw.text.gsplit(itensRaw, ",", true) do
     for i, s in ipairs(skills) do
         local ident, qtdNum = parseItemEntry(entry)
         table.insert(h, '<div class="lk-panel p-' .. id .. 's' .. i .. '">')
        if ident and qtdNum then
        if s.video ~= '' then
            local item = Item.resolve(ident)
             table.insert(h, '<div class="lk-video"><iframe src="' .. s.video .. '" allowfullscreen></iframe></div>')
            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(qtdNum), lang, {
                showTooltip = true,
                showCount  = true
            }))
         end
         end
        table.insert(h, '<span class="lk-skill-name">' .. s.nome .. '</span>')
        table.insert(h, '<p class="lk-skill-desc">' .. s.desc .. '</p>')
        table.insert(h, '</div>')
     end
     end


    table.insert(h, '</div></div>')
     return tostring(wrap)
     return table.concat(h, '\n')
end
end


return p
return p

Edição das 12h38min 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 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.reward(frame)
    local args     = frame:getParent().args
    local itensRaw = mw.text.trim(args["itens"] or "")
    local lang     = mw.text.trim(args["lang"] or "pt")

    if itensRaw == "" then return "" end

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

    local line = wrap:tag("div"):addClass("reward-items")

    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 = "misc"
                }
            end
            line:wikitext(Item.renderOne(item, formatNumber(qtdNum), lang, {
                showTooltip = true,
                showCount   = true
            }))
        end
    end

    return tostring(wrap)
end

return p