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

De Wiki Gla
Ir para navegação Ir para pesquisar
m
m (bannerzin)
 
(44 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 1: Linha 1:
-- Módulo:Blueno — dados do personagem
local p = {}
local M = {
    tier = "Ouro",
    tags = {"DPS", "Lutador", "Fruta do Diabo"},


    order = {"Punch", "Shigan", "Tekkai Punch", "Air Door", "Tekkai Rin", "Juji Rankyaku", "Tekkai Sai", "Air Door"},
-- Parseia bau no formato "2 comum, 8 ouro" ou "8 ouro, 2 comum". Retorna comum, ouro (números) ou nil,nil se for só tipo (comum/ouro).
local function parseBau(s)
    if not s or s == '' then return nil, nil end
    s          = mw.text.trim(s)
    local comum = tonumber(s:match('(%d+)%s*[Cc]omum')) or 0
    local ouro  = tonumber(s:match('(%d+)%s*[Oo]uro')) or 0
    if comum > 0 or ouro > 0 then
        return comum, ouro
    end
    return nil, nil
end


    skills = {
function p.main(frame)
        ["Punch"] = {
    local args = frame:getParent().args
            desc = {
    local cards = {}
                pt = "Blueno desfere um soco no inimigo.",
                en = "Blueno throws a punch at an enemy.",
                es = "Blueno le da un puñetazo a su enemigo.",
                pl = "Blueno wyprowadza cios w przeciwnika."
            }
        },


        ["Shigan"] = {
    local i = 1
            desc = {
    while true do
                pt = "Blueno avança em direção ao seu adversário, desferindo um poderoso Shigan. Se o golpe for usado à distância apropriada, a habilidade pode ser reutilizada para Blueno entrar por uma de suas portas e surgir atrás do inimigo, desferindo um chute adicional.",
        local nome = args['nome' .. i]
                en = "Blueno moves toward his adversary, delivering a powerful Shigan. If the hit is used at the proper distance, the ability can be reused for Blueno to enter one of his doors and emerge behind the enemy to deliver an additional kick.",
        if not nome or mw.text.trim(nome) == '' then break end
                es = "Blueno se desplaza hacia su adversario, asestando un poderoso Shigan. Cuando se realiza a la distancia ideal, permite a Blueno reutilizar la habilidad entrando por una de sus puertas y apareciendo detrás del enemigo para asestar una patada poderosa.",
                pl = "Blueno rusza w kierunku swojego przeciwnika, uderzając go potężnym Shiganem. Jeżeli cios zostanie użyty na odpowiedniej odległości, umiejętność pozwoli Blueno użyć techniki ponownie, otwierając jedno z jego drzwi za przeciwnikiem, by dodatkowo go kopnąć."
            }
        },


         ["Tekkai Punch"] = {
         local link        = mw.text.trim(args['link' .. i] or '')
            desc = {
        local img        = mw.text.trim(args['img' .. i] or '')
                pt = "Blueno levanta o braço e ativa o Tekkai, endurecendo-o. Em seguida, ele golpeia o chão, quebrando o piso à sua frente e reduzindo a velocidade de movimento dos inimigos em {{debuff:60}} por {{sec:3 segundos}}.",
        local qtd        = mw.text.trim(args['qtd' .. i] or '0')
                en = "Blueno raises his arm and activates Tekkai, hardening it. He then strikes the ground, shattering the floor in front of him and reducing enemies' movement speed by {{debuff:60}} for {{sec:3 seconds}}.",
        local bauParam    = mw.text.trim(args['bau' .. i] or 'comum')
                es = "Blueno alza su brazo y activa el Tekkai, endureciéndolo. Luego golpea el suelo, destrozando el terreno delante de él y reduciendo la velocidad de movimiento de los enemigos en {{debuff:60}} durante {{sec:3 segundos}}.",
                pl = "Blueno podnosi rękę i aktywuje Tekkai, utwardzając ją. Następnie uderza w ziemię, niszcząc teren przed sobą i zmniejszając szybkość ruchu przeciwników o {{debuff:60}} na {{sec:3 sekundy}}."
            }
        },


         ["Air Door"] = {
         local comum, ouro = parseBau(bauParam)
    desc = {
         if comum == nil and ouro == nil then
         pt = "Blueno usa o poder de sua Akuma no Mi para criar uma porta no ar que leva à sua própria Dimensão de Portas. Dentro dela, Blueno se torna invulnerável a danos e sua velocidade de movimento aumenta em {{ms:200}} por {{sec:3 segundos}}.",
             -- Modo antigo: bau = comum ou ouro, qtd = quantidade
        en = "Blueno uses his Akuma no Mi power to create a door in the air that leads to his own Door Dimension. Inside it, Blueno becomes invulnerable to damage and his movement speed is increased by {{ms:200}} for {{sec:3 seconds}}.",
             local n = tonumber(qtd) or 0
        es = "Blueno usa el poder de su Fruta del Diablo para crear una puerta en el aire que lleva a la Dimensión Puerta. En ella, Blueno se vuelve invulnerable y aumenta su velocidad de movimiento en {{ms:200}} durante {{sec:3 segundos}}.",
             if bauParam:lower() == 'ouro' then
        pl = "Blueno używa mocy Akuma no Mi, aby stworzyć drzwi w powietrzu prowadzące do jego Wymiaru Drzwi. W jego wnętrzu Blueno staje się niewrażliwy na obrażenia, a jego szybkość ruchu zwiększa się o {{ms:200}} na {{sec:3 sekundy}}."
                 comum, ouro = 0, n
    },
             else
    suborder = { "Trap Door", "Kaiten Door", "Tekkai Sai Door" },
                 comum, ouro = n, 0
    subskills = {
             end
        ["Trap Door"] = {
         end
             desc = {
                pt = "Blueno cria uma porta no chão por {{sec:2.5 segundos}}, imobilizando inimigos por {{sec:0.6 segundos}}.",
                en = "Blueno creates a door in the ground for {{sec:2.5 seconds}}, immobilizing enemies for {{sec:0.6 seconds}}.",
                es = "Blueno crea una puerta en el suelo por {{sec:2.5 segundos}}, inmovilizando a los enemigos por {{sec:0.6 segundos}}.",
                pl = "Blueno tworzy drzwi w ziemi na {{sec:2.5 sekundy}}, unieruchamiając wrogów na {{sec:0.6 sekundy}}."
             }
        },
        ["Kaiten Door"] = {
             desc = {
                pt = "Blueno emerge e chuta à frente, causando dano e confusão por {{sec:5 segundos}}.",
                en = "Blueno emerges and kicks forward, causing damage and confusion for {{sec:5 seconds}}.",
                es = "Blueno emerge y patea hacia delante, causando daño y confusión durante {{sec:5 segundos}}.",
                pl = "Blueno wynurza się i kopie do przodu, zadając obrażenia i dezorientację przez {{sec:5 sekund}}."
            },
            -- <<< NÍVEL 1: ordem dos filhos do 'Kaiten Door'
            suborder = { "Kaiten Door — Cyclone", "Kaiten Door — Maelstrom" },
            subskills = {
                 ["Kaiten Door — Cyclone"] = {
                    desc = {
                        pt = "Versão Cyclone: mais alcance e dano moderado.",
                        en = "Cyclone variant: longer reach and moderate damage.",
                        es = "Variante Cyclone: mayor alcance y daño moderado.",
                        pl = "Wariant Cyclone: większy zasięg i umiarkowane obrażenia."
                    }
                },
                ["Kaiten Door — Maelstrom"] = {
                    desc = {
                        pt = "Versão Maelstrom: dano em área mais alto e recarga maior.",
                        en = "Maelstrom variant: higher AoE damage with longer cooldown.",
                        es = "Variante Maelstrom: mayor daño en área y tiempo de recarga mayor.",
                        pl = "Wariant Maelstrom: większe obrażenia obszarowe i dłuższy czas odnowienia."
                    }
                }
            }
        },
        ["Tekkai Sai Door"] = {
             desc = {
                pt = "Blueno cria uma porta elevada e cai com um soco usando Tekkai, reduzindo MS em {{debuff:80}} por {{sec:4 segundos}}.",
                 en = "Blueno opens a higher door and drops with a Tekkai punch, reducing MS by {{debuff:80}} for {{sec:4 seconds}}.",
                es = "Blueno abre una puerta elevada y cae con un puñetazo Tekkai, reduciendo MS en {{debuff:80}} durante {{sec:4 segundos}}.",
                pl = "Blueno otwiera wyższe drzwi i spada z uderzeniem Tekkai, zmniejszając MS o {{debuff:80}} przez {{sec:4 sekundy}}."
             }
         }
    }
},


        local href      = tostring(mw.uri.localUrl(link))
        local comumHtml = frame:preprocess('[[File:Chest_normal.png|link=]]')
        local ouroHtml  = frame:preprocess('[[File:Chest_gold.png|link=]]')


         ["Tekkai Rin"] = {
         -- Banner 380x80: fundo = img da ilha, baus canto superior esquerdo, título canto inferior esquerdo
            desc = {
        local banner    = mw.html.create('span')
                pt = "Blueno utiliza o Tekkai para aumentar o peso e a resistência do próprio corpo e então começa a girar, chutando o chão com força e devastando tudo em seu caminho. Ele finaliza o movimento com um golpe poderoso, reduzindo a velocidade de movimento dos inimigos em {{debuff:80}} por {{sec:4 segundos}}. Inimigos que não são jogadores ficam atordoados por {{sec:2 segundos}}, enquanto inimigos jogadores são empurrados.",
        banner:attr('class', 'island-banner')
                en = "Blueno uses Tekkai to increase his body's weight and resilience, then begins to spin, forcefully kicking the ground and devastating everything in his path. He finishes the move with a powerful strike, reducing enemies' movement speed by {{debuff:80}} for {{sec:4 seconds}}. Non-player enemies are stunned for {{sec:2 seconds}}, while player enemies are pushed back.",
            :attr('data-href', href)
                es = "Blueno utiliza Tekkai para aumentar su peso y la resistencia de su cuerpo, luego comienza a girar, pateando con fuerza el suelo y destruyendo todo a su paso. Termina el ataque con un golpe poderoso que reduce la velocidad de movimiento de los enemigos en {{debuff:80}} durante {{sec:4 segundos}}. Los enemigos no jugadores quedan aturdidos durante {{sec:2 segundos}}, mientras que los jugadores son empujados hacia atrás.",
            :attr('data-bgimg', img)
                pl = "Blueno używa Tekkai, aby zwiększyć wagę i odporność ciała, następnie zaczyna się obracać, kopiąc w ziemię i dewastując wszystko na swojej drodze. Kończy ruch potężnym ciosem, zmniejszając szybkość ruchu przeciwników o {{debuff:80}} na {{sec:4 sekundy}}. Przeciwnicy niebędący graczami są ogłuszeni na {{sec:2 sekundy}}, podczas gdy gracze zostają odrzuceni."
            :attr('role', 'link')
             }
             :attr('tabindex', '0')
        },


         ["Juji Rankyaku"] = {
         local chests = banner:tag('span'):attr('class', 'island-chests')
             desc = {
        if comum > 0 then
                 pt = "Blueno levanta uma perna, liberando um Rankyaku vertical à frente. Inimigos atingidos ficam atordoados por {{sec:2 segundos}}. Em seguida, ele gira e executa outro Rankyaku em uma grande área frontal.",
             chests:tag('span'):attr('class', 'island-chest-group')
                 en = "Blueno raises one leg, unleashing a vertical Rankyaku forward. Hit enemies are stunned for {{sec:2 seconds}}. He then spins and executes another Rankyaku across a wide frontal area.",
                 :node(mw.html.create(''):wikitext(comumHtml))
                 es = "Blueno levanta una pierna y lanza un Rankyaku vertical hacia delante. Al impactar, deja aturdidos a los enemigos golpeados durante {{sec:2 segundos}}. Aprovechando este impulso, gira y ejecuta otro Rankyaku, propulsándolo horizontalmente a través de una amplia zona.",
                 :tag('span'):attr('class', 'island-chest-count'):wikitext(tostring(comum))
                 pl = "Blueno podnosi nogę, wykonując pionowy cięcie Rankyaku do przodu. Trafieni przeciwnicy zostają ogłuszeni na {{sec:2 sekundy}}. Wykorzystując siłę działającą na niego, Blueno obraca się, by wykonać kolejny Rankyaku, tym razem poziomo, aby trafić większy obszar."
        end
            }
        if ouro > 0 then
         },
            chests:tag('span'):attr('class', 'island-chest-group')
                 :node(mw.html.create(''):wikitext(ouroHtml))
                 :tag('span'):attr('class', 'island-chest-count'):wikitext(tostring(ouro))
         end


         ["Tekkai Sai"] = {
         banner:tag('span'):attr('class', 'island-title'):wikitext(nome)
            desc = {
                pt = "Blueno combina habilmente suas técnicas Geppou e Soru, iniciando uma série de movimentos rápidos enquanto se desloca de um lado para o outro. Aproveitando sua velocidade, Blueno mergulha para baixo e desfere um poderoso soco, utilizando o Tekkai para aumentar sua resistência e massa. Isso causa grande dano em uma ampla área e reduz a velocidade de movimento dos inimigos em {{debuff:100}} por {{sec:6 segundos}}.",
                en = "Blueno skillfully combines his Geppou and Soru techniques, initiating a series of swift movements as he darts from side to side. Taking advantage of his speed, Blueno dives downward and delivers a powerful punch while using Tekkai to bolster his resilience and weight. This deals extensive damage over a wide area and reduces enemies' movement speed by {{debuff:100}} for {{sec:6 seconds}}.",
                es = "Blueno combina hábilmente sus técnicas Geppou y Soru, iniciando una serie de movimientos rápidos mientras se desplaza de un lado a otro. Aprovechando su velocidad acelerada, Blueno se lanza hacia abajo y asesta un puñetazo mientras utiliza Tekkai para reforzar su resistencia y peso. Esto causa un daño considerable en una amplia zona y reduce la velocidad de movimiento de los enemigos en {{debuff:100}} durante {{sec:6 segundos}}.",
                pl = "Blueno zręcznie łączy techniki Geppou i Soru, inicjując serię szybkich ruchów, przemieszczając się z boku na bok. Wykorzystując nabraną prędkość, Blueno nurkuje w dół i zadaje potężny cios, używając przy tym Tekkai, aby wzmocnić swoją wytrzymałość i masę. Zadaje to znaczne obrażenia na dużym obszarze i zmniejsza szybkość ruchu przeciwników o {{debuff:100}} na {{sec:6 sekund}}."
            }
        }
    }
}


return M
        cards[#cards + 1] = banner
        i = i + 1
    end
 
    local grid = mw.html.create('div')
    grid:attr('class', 'island-grid')
    for _, card in ipairs(cards) do
        grid:node(card)
    end
 
    return tostring(grid)
end
 
return p

Edição atual tal como às 23h47min de 12 de março de 2026

A documentação para este módulo pode ser criada em Módulo:Teste/doc

local p = {}

-- Parseia bau no formato "2 comum, 8 ouro" ou "8 ouro, 2 comum". Retorna comum, ouro (números) ou nil,nil se for só tipo (comum/ouro).
local function parseBau(s)
    if not s or s == '' then return nil, nil end
    s           = mw.text.trim(s)
    local comum = tonumber(s:match('(%d+)%s*[Cc]omum')) or 0
    local ouro  = tonumber(s:match('(%d+)%s*[Oo]uro')) or 0
    if comum > 0 or ouro > 0 then
        return comum, ouro
    end
    return nil, nil
end

function p.main(frame)
    local args = frame:getParent().args
    local cards = {}

    local i = 1
    while true do
        local nome = args['nome' .. i]
        if not nome or mw.text.trim(nome) == '' then break end

        local link        = mw.text.trim(args['link' .. i] or '')
        local img         = mw.text.trim(args['img' .. i] or '')
        local qtd         = mw.text.trim(args['qtd' .. i] or '0')
        local bauParam    = mw.text.trim(args['bau' .. i] or 'comum')

        local comum, ouro = parseBau(bauParam)
        if comum == nil and ouro == nil then
            -- Modo antigo: bau = comum ou ouro, qtd = quantidade
            local n = tonumber(qtd) or 0
            if bauParam:lower() == 'ouro' then
                comum, ouro = 0, n
            else
                comum, ouro = n, 0
            end
        end

        local href      = tostring(mw.uri.localUrl(link))
        local comumHtml = frame:preprocess('[[File:Chest_normal.png|link=]]')
        local ouroHtml  = frame:preprocess('[[File:Chest_gold.png|link=]]')

        -- Banner 380x80: fundo = img da ilha, baus canto superior esquerdo, título canto inferior esquerdo
        local banner    = mw.html.create('span')
        banner:attr('class', 'island-banner')
            :attr('data-href', href)
            :attr('data-bgimg', img)
            :attr('role', 'link')
            :attr('tabindex', '0')

        local chests = banner:tag('span'):attr('class', 'island-chests')
        if comum > 0 then
            chests:tag('span'):attr('class', 'island-chest-group')
                :node(mw.html.create(''):wikitext(comumHtml))
                :tag('span'):attr('class', 'island-chest-count'):wikitext(tostring(comum))
        end
        if ouro > 0 then
            chests:tag('span'):attr('class', 'island-chest-group')
                :node(mw.html.create(''):wikitext(ouroHtml))
                :tag('span'):attr('class', 'island-chest-count'):wikitext(tostring(ouro))
        end

        banner:tag('span'):attr('class', 'island-title'):wikitext(nome)

        cards[#cards + 1] = banner
        i = i + 1
    end

    local grid = mw.html.create('div')
    grid:attr('class', 'island-grid')
    for _, card in ipairs(cards) do
        grid:node(card)
    end

    return tostring(grid)
end

return p