Aller au contenu

Légendes Pokémon : Z-A approche !

Nous vous rappelons que seules les informations publiées officiellement seront acceptées sur le wiki jusqu'à la sortie du jeu, le 16 octobre.
Tout ajout issu de leak ou jeu obtenu avant l'heure sera supprimé. Merci de votre compréhension, et bonne navigation sur Poképédia !

Module:Ressources/infosPokemon

De Poképédia
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.

Cette fonction permet de mettre en forme les informations d'un Pokémon à partir de son nom. Il comporte un seul paramètre : le nom du Pokémon et des précisions sur celui-ci au besoin. Cinq précisions peuvent être données pour le nom d'un Pokémon (forme, sexe, nom, lien, jeu) suivis de la valeur entre parenthèses.

Attention à ne pas le modifier sans savoir précisément ce que l'on fait : il est utilisé sur des milliers de pages (toutes les pages de Pokémon, de capacités et de routes !) et toute modification impacte donc fortement le wiki.

Exemples (mode classique)

  • Avec un Pokémon basique :

ressources.infosPokemon("Mélofée") retourne :
0035 Mélofée

  • Avec un Pokémon dont la forme est précisée :

ressources.infosPokemon("Deoxys forme(Vitesse)") retourne :
0386 Deoxys
Forme Vitesse

  • Avec une Forme d'Alola :

ressources.infosPokemon("Tadmorv forme(Alola)") retourne :
0088 Tadmorv
Forme d'Alola

  • Avec un sexe :

ressources.infosPokemon("Mistigrix sexe(f)") retourne :
0678 Mistigrix
Femelle

  • Avec un jeu :

ressources.infosPokemon("Jirachi sup(E)") retourne :
0385 JirachiE

  • Avec une forme et un jeu :

ressources.infosPokemon("Hoopa forme(Déchaîné) sup(ROSA)") retourne :
0720 HoopaROSA
Forme Déchaîné

  • Avec un Pokémon inexistant :

ressources.infosPokemon("Machinbidule") retourne :
???? Machinbidule

Exemples (mode miniature)

  • Avec un Pokémon basique :

ressources.infosPokemon("Mélofée", "miniature") retourne : Mélofée

  • Avec un Pokémon dont la forme est précisée :

ressources.infosPokemon("Deoxys forme(Vitesse)", "miniature") retourne : Deoxys (Forme Vitesse)

  • Avec une Forme d'Alola :

ressources.infosPokemon("Tadmorv forme(Alola)", "miniature") retourne : Tadmorv (Forme d'Alola)

  • Avec un sexe :

ressources.infosPokemon("Mistigrix sexe(f)", "miniature") retourne : Mistigrix (Femelle)

  • Avec un jeu :

ressources.infosPokemon("Jirachi sup(E)", "miniature") retourne : JirachiE

  • Avec une forme et un jeu :

ressources.infosPokemon("Hoopa forme(Déchaîné) sup(ROSA)", "miniature") retourne : Hoopa (Hoopa Déchaîné)ROSA

  • Avec un Pokémon inexistant :

ressources.infosPokemon("Machinbidule", "miniature") retourne : Machinbidule


local numeros = mw.loadData("Module:Data/NumérosPokémon")

-- Dictionnaires pour largement simplifier la gestion des formes spéciales
local common_forms = {
    ["Alola"] = { "Forme d'Alola", " d'Alola" },
    ["Galar"] = { "Forme de Galar", " de Galar" },
    ["Hisui"] = { "Forme de Hisui", " de Hisui" },
    ["Paldea"] = { "Forme de Paldea", " de Paldea" },
    ["Gigamax"] = { "Gigamax", " Gigamax" }
}

-- Lorsque le nom d'affichage = nom des formes, pas de page dédiée
local poke_short_forms = { ["Évoli"] = true, ["Zarbi"] = true, ["Arceus"] = true,
    ["Magearna"] = true, ["Charmilly"] = true, ["Bekaglaçon"] = true, ["Zacian"] = true,
    ["Zamazenta"] = true, ["Ursaking"] = true }

-- Lorsque le nom d'affichage = préfix autre que "Forme " + nom des formes, pas de page dédiée
local poke_prefix_forms = {
    ["Cheniti"] = "Cape ",
    ["Cheniselle"] = "Cape ",
    ["Ceriflor"] = "Temps ",
    ["Sancoki"] = "Mer ",
    ["Tritosor"] = "Mer ",
    ["Bargantua"] = "Motif ",
    ["Keldeo"] = "Aspect ",
    ["Genesect"] = "Module ",
    ["Prismillon"] = "Motif ",
    ["Flabébé"] = "Fleur ",
    ["Floette"] = "Fleur ",
    ["Florges"] = "Fleur ",
    ["Pitrouille"] = "Taille ",
    ["Banshitrouye"] = "Taille ",
    ["Xerneas"] = "Mode ",
    ["Plumeline"] = "Style ",
    ["Silvallié"] = "Type : ",
    ["Morpeko"] = "Mode ",
    ["Famignol"] = "Famille de ",
    ["Tapatoès"] = "Plumage ",
}

-- Pokémon avec beaucoup de formes et un pattern utilisable
local other_patterns = {
    ["Pikachu"] = function(forme)
        if (forme == "Partenaire") then return { forme, "Pikachu Partenaire" }
        elseif (string.match(forme, "^Casquette ")) then return { forme, "Pikachu" }
        elseif (string.match(forme, "^Halloween")) then return { "Chapeau d'Halloween", "Pikachu" }
        elseif (string.match(forme, "^Fêtes")) then return { "Chapeau rouge", "Pikachu" }
        else return { "Pikachu " .. forme, "Pikachu " .. forme } -- Les Cosplayeurs
        end
    end,
    ["Couafarel"] = function(forme)
        if (forme == "Sauvage") then return { "Forme Sauvage", "Couafarel" }
        else return { "Coupe " .. forme, "Couafarel" }
        end
    end,
    ["Météno"] = function(forme)
        if (forme == "Météore") then return { "Forme Météore", "Météno" }
        else return { "Noyau " .. forme, "Météno" }
        end
    end
}


-- Toutes les autres formes où le nom d'affichage n'est pas juste "Forme <forme>" ou celles ayant une page dédiée
local other_forms = {
    ["Tauros"] = {
        ["Paldea Combative"] = { "Forme de Paldea<br>Race Combative", "Tauros de Paldea" },
        ["Paldea Flamboyante"] = { "Forme de Paldea<br>Race Flamboyante", "Tauros de Paldea" },
        ["Paldea Aquatique"] = { "Forme de Paldea<br>Race Aquatique", "Tauros de Paldea" }
    },
    ["Dialga"] = {
        ["Primal"] = { "Dialga Primal", "Dialga" }
    },
    ["Darumacho"] = {
        ["Transe"] = { "Mode Transe", "Darumacho" },
        ["Galar Transe"] = { "Forme de Galar<br>Mode Transe", "Darumacho de Galar" }
    },
    ["Kyurem"] = {
        ["Blanc"] = { "Kyurem Blanc", "Kyurem Blanc" },
        ["Noir"] = { "Kyurem Noir", "Kyurem Noir" }
    },
    ["Necrozma"] = {
        ["Crinière du Couchant"] = { "Crinière du Couchant", "Necrozma Crinière du Couchant" },
        ["Ailes de l'Aurore"] = { "Ailes de l'Aurore", "Necrozma Ailes de l'Aurore" },
        ["Ultra"] = { "Ultra-Necrozma", "Ultra-Necrozma" }
    },
    ["Éthernatos"] = {
        ["Infinimax"] = { "Infinimax", "Éthernatos Infinimax" }
    },
    ["Shifours"] = {
        ["Poing Final"] = { "Style Poing Final", "Shifours" },
        ["Mille Poings"] = { "Style Mille Poings", "Shifours" },
        ["Gigamax Poing Final"] = { "Gigamax<br>Style Poing Final", "Shifours Gigamax" },
        ["Gigamax Mille Poings"] = { "Gigamax<br>Style Mille Poings", "Shifours Gigamax" }
    },
    ["Sylveroy"] = {
        ["Cavalier d'Effroi"] = { "Cavalier d'Effroi", "Sylveroy, le Cavalier d'Effroi" },
        ["Cavalier du Froid"] = { "Cavalier du Froid", "Sylveroy, le Cavalier du Froid" }
    },
    ["Koraidon"] = {
        ["Finale"] = { "Forme Finale", "Koraidon" },
        ["Course"] = { "Forme de Course", "Koraidon" },
        ["Nage"] = { "Forme de Nage", "Koraidon" },
        ["Vol"] = { "Forme de Vol", "Koraidon" }
    },
    ["Miraidon"] = {
        ["Ultime"] = { "Mode Ultime", "Miraidon" },
        ["Terrestre"] = { "Mode Terrestre", "Miraidon" },
        ["Aquatique"] = { "Mode Aquatique", "Miraidon" },
        ["Aérien"] = { "Mode Aérien", "Miraidon" }
    },
    ["Ogerpon"] = {
        ["Turquoise"] = { "Masque Turquoise", "Ogerpon" },
        ["Puits"] = { "Masque du Puits", "Ogerpon" },
        ["Fourneau"] = { "Masque du Fourneau", "Ogerpon" },
        ["Pierre"] = { "Masque de la Pierre", "Ogerpon" }
    }
}

-- Dictionnaire indiquant les jeux pour lesquels il faut rediriger vers une sous-page du Pokémon
local games_with_pages = {
    ["PDMRB"] = "Pokémon Donjon Mystère",
    ["PDMTOC"] = "Pokémon Donjon Mystère",
    ["PDMPI"] = "Pokémon Donjon Mystère",
    ["PMDM"] = "Pokémon Donjon Mystère",
    ["PDMDX"] = "Pokémon Donjon Mystère"
}

return function ( poke, mode )
    local forme, sexe, nom, lien, jeu, sup
    
    -- Fonction qui récupère les détails indiqués d'un Pokémon entre parenthèses
    -- '\' fait office de caractère d'échappement en cas de parenthèse fermante
    local function get_modifier(modifier)
        local regex = modifier .. "%([^)]*[^\\]%)"
        if (string.match(poke, regex)) then
            local ret = string.sub(string.match(poke, regex), string.len(modifier)+2, -2)
            ret = string.gsub(ret, "\\", "")
            poke = string.gsub(poke, regex, "")
            return ret
        else return "" end
    end
    
    -- Récupération des données additionnelles
    forme = get_modifier("forme")
    jeu = get_modifier("jeu")
    sexe = get_modifier("sexe")
    if (sexe == "f") then sexe = "♀" 
    elseif (sexe == "m") then sexe = "♂" end
    sup = get_modifier("sup")
    if (sup ~= "") then sup = mw.getCurrentFrame():expandTemplate{ title = 'Sup', args = { sup } } end
    -- Pour pouvoir overwrite par la suite si nécessaire
    local temp_nom = get_modifier("nom")
    local temp_lien = get_modifier("lien")
    
    -- Nettoyage du nom et valeurs par défaut
    poke = mw.text.trim(poke)
    lien = poke
    nom = ""
    local num = numeros[poke] or "???"
        
    if (forme ~= "")
    then
        if common_forms[forme] then
            nom = common_forms[forme][1]
            lien = poke .. common_forms[forme][2]
            
        elseif (forme == "Méga") then
            nom = "Méga-".. poke
            lien = "Méga-" .. poke
            
        elseif (forme == "Primo") then
            nom = "Primo-" .. poke
            lien = "Primo-" .. poke
            
        
        elseif (forme == "Méga X") then
            nom = "Méga-".. poke .. " X"
            lien = "Méga-" .. poke .. " X"
            
        elseif (forme == "Méga Y") then
            nom = "Méga-".. poke .. " Y"
            lien = "Méga-" .. poke .. " Y"
            
        elseif poke_short_forms[poke] then
            nom = mw.text.trim(forme)
            
        elseif poke_prefix_forms[poke] then
            nom = poke_prefix_forms[poke] .. forme
            
        elseif (poke == "Motisma" or poke == "Hoopa") then
            nom = poke .. " " .. forme
            
        elseif other_patterns[poke] then
            local r = other_patterns[poke](forme)
            nom = r[1]
            lien = r[2]
            
        elseif (other_forms[poke] and other_forms[poke][forme]) then
            local r = other_forms[poke][forme]
            nom = r[1]
            lien = r[2]
            
        else -- Toutes les formes où le nom d'affichage est juste "Forme <forme>" sans redirection
            nom = "Forme " .. forme
            lien = poke
        end
    end
    
    -- Gestion des sous pages pour jeux spécifiques
    if (games_with_pages[jeu]) then
        lien = poke .. "/" .. games_with_pages[jeu]
    end
    
    -- Gestion des formes séxuées
    if (sexe == "♀") then nom = "Femelle" end
    if (sexe == "♂") then nom = "Mâle" end
    
    -- Si "nom" ou "lien" ont été indiqués, on overwrite les valeurs
    if (temp_nom ~= "") then nom = temp_nom end
    if (temp_lien ~= "") then lien = temp_lien end
    
    -- Ajouts d'espaces pour la valeur de retour
    if (forme ~= "") then forme = " " .. forme end
    if (sexe ~= "") then sexe = " " .. sexe end
    if (jeu ~= "") then jeu = " " .. jeu end
    
    -- Retour
    if (mode == "miniature") then
        if (nom ~= "") then nom = " (" .. nom .. ")" end
        return "[[Fichier:Miniature " .. num .. forme .. sexe .. jeu .. ".png|link=" .. lien .. "|alt=" .. poke .. nom .. "|" .. poke .. nom .. "|class=miniature" .. jeu .. "]]" .. sup
    else
        if (nom ~= "") then nom = "<br><span style='font-style: italic; font-size: 90%;'>" .. nom .. "</span>" end
        return "<span style='white-space: nowrap;' class='miniat-poke'>" .. num .. " [[Fichier:Miniature " .. num .. forme .. sexe .. jeu .. ".png|link=" .. lien .. "|alt=|class=miniature" .. jeu .. "]] [[" .. lien .. "|" .. poke .. "]]" .. sup .. "</span>" .. nom
    end
end