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

De Wiki Gla
Ir para navegação Ir para pesquisar
m
m (bannerzin)
 
(17 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
-- Módulo:Tony_Tony_Chopper_ts — dados do personagem
local p = {}
local M = {
    tier = "Diamante",
    tags = { "Suporte", "Lutador", "Chapeu de Palha", "Fruta do Diabo" },


    -- Skills fixas (sempre aparecem, independente da forma)
-- 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).
     -- Ordem: [Skill básica da forma], Change Form, [Skill 3 da forma], Guard Point, [Skill 5 da forma], Kaku Hou Elf, Monster Point, Walk Point
local function parseBau(s)
     order = { "Change Form", "Guard Point", "Kaku Hou Elf", "Monster Point", "Walk Point" },
    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 específicas de cada forma (serão inseridas dinamicamente no order baseado na forma atual)
function p.main(frame)
     forms = {
     local args = frame:getParent().args
        ["Brain Point"] = {
    local cards = {}
            order = { "Torino Flask", "Hiluluk Sakura Medicine", "Doctorine Medicine" },
            skills = {
                ["Torino Flask"] = {
                    icon = "",
                    level = "",
                    cooldown = 2,
                    powerpve = 9,
                    powerpvp = 8,
                    video = "",
                    desc = {
                        pt = "Chopper joga uma substância nociva no corpo do oponente.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Hiluluk Sakura Medicine"] = {
                    icon = "",
                    level = "",
                    cooldown = 22,
                    powerpve = 30,
                    video = "",
                    desc = {
                        pt =
                        "Chopper realiza um procedimento medicinal, curando instantaneamente todos os aliados ao seu redor.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Doctorine Medicine"] = {
                    icon = "",
                    level = "",
                    cooldown = 45,
                    powerpve = 2.3,
                    video = "",
                    desc = {
                        pt =
                        "Chopper usa seu remédio especial, curando todos os aliados em volta dele 28 vezes durante [sec:15 segundos]. Esta técnica também concede bônus de [atk:25%] de ataque para o Chopper e seus aliados por [sec:15 segundos].",
                        en = "",
                        es = "",
                        pl = ""
                    }
                }
            }
        },
        ["Kung Fu Point"] = {
            order = { "Kung Fu Crane Kick", "Kung Fu Spin Kick", "Kung Fu Acrobacy" },
            skills = {
                ["Kung Fu Crane Kick"] = {
                    icon = "",
                    level = "",
                    cooldown = 2,
                    powerpve = 15,
                    powerpvp = 10,
                    video = "",
                    desc = {
                        pt = "Chopper dá um chute poderoso no oponente.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Kung Fu Spin Kick"] = {
                    icon = "",
                    level = "",
                    cooldown = 12,
                    powerpve = 32,
                    powerpvp = 20,
                    video = "",
                    desc = {
                        pt =
                        "Chopper dá um pequeno salto para frente e, enquanto está no ar, gira as pernas, chutando o oponente e empurrando inimigos jogadores.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Kung Fu Acrobacy"] = {
                    icon = "",
                    level = "",
                    cooldown = 20,
                    video = "",
                    desc = {
                        pt =
                        "Com um movimento versátil, Chopper pula para frente para evitar ataques ou perseguir seu oponente.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                }
            }
        },
        ["Heavy Point"] = {
            order = { "Heavy Punch", "Heavy Gong", "Mega Gong" },
            skills = {
                ["Heavy Punch"] = {
                    icon = "",
                    level = "",
                    cooldown = 3,
                    powerpve = 22.5,
                    powerpvp = 12.5,
                    video = "",
                    desc = {
                        pt = "Chopper dá um soco básico no rosto do oponente.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Heavy Gong"] = {
                    icon = "",
                    level = "",
                    cooldown = 12,
                    powerpve = 35,
                    powerpvp = 24,
                    video = "",
                    desc = {
                        pt = "Chopper dá um poderoso soco em área frontal.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Mega Gong"] = {
                    icon = "",
                    level = "",
                    cooldown = 25,
                    powerpve = 50,
                    powerpvp = 26,
                    video = "",
                    desc = {
                        pt =
                        "Chopper junta as mãos e esmaga o chão, causando dano em uma área frontal e reduzindo a velocidade dos inimigos em [ms:100] por [sec:4 segundos].",
                        en = "",
                        es = "",
                        pl = ""
                    }
                }
            }
        }
    },


     skills = {
     local i = 1
        ["Change Form"] = {
    while true do
            icon = "Changeform-icon.png",
        local nome = args['nome' .. i]
            level = "",
        if not nome or mw.text.trim(nome) == '' then break end
            cooldown = 1,
            form_switch = true, -- Indica que esta skill alterna entre formas (não usa back)
            -- Vídeos específicos para cada transição de forma (teste com vídeos do Niji)
            form_videos = {
                ["Brain Point"] = "Niji-ElectricPunch.mp4", -- Brain → Kung Fu (teste)
                ["Kung Fu Point"] = "Niji-LightBolt.mp4",  -- Kung Fu → Heavy (teste)
                ["Heavy Point"] = "Niji-HumanLight.mp4"    -- Heavy → Brain (teste)
            },
            desc = {
                pt =
                "Chopper aprimorou completamente todas as suas transformações, tornando-se capaz de se transformar livremente nas formas Kung Fu Point, Heavy Point e Brain Point. Ao utilizar o Kung Fu Point, Chopper torna-se proficiente em Kung Fu, sendo capaz de realizar movimentos versáteis e utilizar novas habilidades, além de ganhar 40 de velocidade de movimento bônus. Ao utilizar o Heavy Point, Chopper perde praticamente todas as características de uma rena. Essa forma também lhe confere 20 de velocidade de movimento bônus e 84% de defesa bônus, atributos muito úteis em uma batalha.",
                en = "",
                es = "",
                pl = ""
            }
        },


         ["Guard Point"] = {
         local link        = mw.text.trim(args['link' .. i] or '')
            icon = "Guardpoint-icon.png",
        local img        = mw.text.trim(args['img' .. i] or '')
            level = "",
        local qtd        = mw.text.trim(args['qtd' .. i] or '0')
            cooldown = 30,
        local bauParam    = mw.text.trim(args['bau' .. i] or 'comum')
            desc = {
                pt =
                "Os pelos do Chopper crescem e cobrem seu corpo inteiro, deixando apenas a cabeça e as pernas visíveis. Com isso, Chopper é capaz de resistir a ataques externos como se possuísse um escudo impenetrável e ainda protege os aliados, deixando-os invulneráveis por [sec:3 segundos].",
                en = "",
                es = "",
                pl = ""
            }
        },


         ["Kaku Hou Elf"] = {
         local comum, ouro = parseBau(bauParam)
            icon = "Kakuhouelf-icon.png",
        if comum == nil and ouro == nil then
            level = "",
             -- Modo antigo: bau = comum ou ouro, qtd = quantidade
             cooldown = 40,
             local n = tonumber(qtd) or 0
            powerpve = 70,
             if bauParam:lower() == 'ouro' then
             powerpvp = 20,
                 comum, ouro = 0, n
             desc = {
            else
                pt =
                 comum, ouro = n, 0
                 "Chopper se lança para fora do chão (após cavar abaixo da superfície) e voa com os chifres em direção à área selecionada, causando dano, reduzindo a velocidade dos inimigos em [ms:80] por [sec:4 segundos] e também reduzindo seu ataque em [debuff:15%] por [sec:8 segundos]. Essa técnica deixa túneis no chão por [sec:12 segundos], que podem ser usados por Chopper e seus aliados. Os túneis podem ser desativados ao pressionar a habilidade novamente.",
             end
                 en = "",
         end
                es = "",
                pl = ""
             }
         },


         ["Monster Point"] = {
         local href      = tostring(mw.uri.localUrl(link))
            icon = "Monsterpoint-icon.png",
        local comumHtml = frame:preprocess('[[File:Chest_normal.png|link=]]')
            level = "",
        local ouroHtml  = frame:preprocess('[[File:Chest_gold.png|link=]]')
            cooldown = 200,
            desc = {
                pt =
                "Monster Point agora é a única forma que Chopper precisa de uma Rumble Ball para ativar e, ao consumir uma, ele pode permanecer transformado por [sec:25 segundos]. Essa transformação concede a Chopper um grande aumento em seus atributos físicos. Seu corpo se torna incrivelmente denso e resistente, recebendo [def:40%] de redução de dano e também um bônus de [ms:40] de velocidade. Após voltar ao normal, Chopper fica exausto e incapaz de se mover, e quando está próximo de um boss, recebe [def:95%] de redução de dano. A duração da exaustão é de [sec:4 segundos] em instâncias PvE e [sec:10 segundos] em instâncias PvP.",
                en = "",
                es = "",
                pl = ""
            },
            -- Monster Point tem subskills normais (com back no final)
            suborder = { "Koku tei Palm", "Koku tei Stomp", "Koku tei Rampage", "Monster Point" },
            subskills = {
                ["Koku tei Palm"] = {
                    icon = "Kokuteipalm-icon.png",
                    level = "",
                    cooldown = 5,
                    powerpve = 32,
                    video = "",
                    desc = {
                        pt = "Monster Chopper bate com força em seus adversários com a mão estendida.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Koku tei Stomp"] = {
                    icon = "Kokuteistomp-icon.png",
                    level = "",
                    cooldown = 12,
                    powerpve = 40,
                    video = "",
                    desc = {
                        pt =
                        "Monster Chopper pisa com força no chão, causando dano e reduzindo a velocidade dos inimigos ao seu redor em [ms:60] por [sec:8 segundos]. Em instâncias PvE, inimigos atingidos pelo impacto também têm sua defesa reduzida em [debuff:40%] por [sec:8 segundos].",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Koku tei Rampage"] = {
                    icon = "Kokuteirampage-icon.png",
                    level = "",
                    cooldown = 35,
                    powerpve = 15,
                    powerpvp = 9,
                    video = "",
                    desc = {
                        pt =
                        "Monster Chopper bate no chão com muita força por 7 vezes, causando dano em uma grande área ao redor dele. Inimigos atingidos ficam com a velocidade de movimento reduzida em [ms:90] e sofrem redução de ataque de [debuff:20%] por [sec:8 segundos].",
                        en = "",
                        es = "",
                        pl = ""
                    }
                },
                ["Monster Point"] = {
                    icon = "Monsterpoint-back-icon.png",
                    level = "",
                    cooldown = 1,
                    back = true, -- Volta à forma anterior
                    desc = {
                        pt = "Chopper volta à forma anterior.",
                        en = "",
                        es = "",
                        pl = ""
                    }
                }
            }
        },


         ["Walk Point"] = {
         -- Banner 380x80: fundo = img da ilha, baus canto superior esquerdo, título canto inferior esquerdo
            icon = "Walkpoint-icon.png",
        local banner    = mw.html.create('span')
             level = "",
        banner:attr('class', 'island-banner')
             cooldown = 5,
             :attr('data-href', href)
             desc = {
             :attr('data-bgimg', img)
                pt =
             :attr('role', 'link')
                "Esta é uma forma em que o Chopper se transforma em uma rena comum, útil para fazer viagens a pé. Nesta forma, ele ganha 140 de velocidade de movimento bônus. Esta forma não pode ser utilizada em batalha.",
             :attr('tabindex', '0')
                en = "",
                es = "",
                pl = ""
             }
        }
    },


    -- Skills específicas de Brain Point (serão movidas para forms["Brain Point"].skills)
        local chests = banner:tag('span'):attr('class', 'island-chests')
    -- Estas serão adicionadas quando você enviar as informações completas
        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


return M
        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

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