Module:Ressources/donneesCapacite
Fonctionnement[modifier]
Le module de ressources « donneesCapacite » est un ingrédient essentiel des modules Apprentissage, Capsule et Disque, qui centralise la façon dont les données d'une capacité (puissance, précision etc) sont récupérées et les renvoie sont forme de tableau avec un formatage adapté pour chaque donnée.
Le module a la particulièrement d'avoir un double fonctionnement pour récupérer les données :
- par requête sémantique, comme utilisé depuis le début des années 2010 dans les différents modèles qui ont eu son rôle par le passé ;
- ou, depuis l'automne 2023, par chargement des tableaux de données Module:Data/Données Capacités Génération X.
Le principe dernière ce double fonctionnement est de permettre à la fois une mise à jour automatique des données pour une génération qui viendrait de sortir, et dont les informations ne seraient pas encore entièrement renseignées sur le site, sans avoir à effectuer une deuxième modification sur un tableau de données après modification d'une page de capacité, et en même temps d'éviter la lourdeur de requêtes sémantiques en masse, notamment pour accélérer le chargement des pages des Pokémon. À l'heure actuelle, le module n'utilise que les tableaux de données, mais il est programmé pour utiliser les requêtes sémantiques pour la dixième génération quand celle-ci sortira.
La fonction retournée par le module possède trois paramètres : la génération, le nom de la capacité, et un tableau des jeux pour lesquels on veut les informations. Le troisième paramètre n'a à vrai dire d'importance que dans deux cas : pour gérer Pokémon : Let's Go, Pikachu et Let's Go, Évoli et Légendes Pokémon : Arceus. En effet, ce sont les seuls cas où les données de certaines capacités varient entre des jeux d'une même génération. Ce paramètre est alors utilisé pour choisir dans lequel des trois cas suivant on se trouve :
- les informations de LGPE/LPA ne nous intéressent pas, on affiche seulement les données des autres jeux sans plus de précisions (lorsque LGPE ou LPA n'apparaît pas dans le tableau passé en paramètre) ;
- seules les informations de LGPE/LPA nous intéressent, on les affiche sans plus de précisions (lorsque le tableau passé en paramètre se résumé à LGPE ou LPA) ;
- toutes les informations nous intéressent, dans ce cas les différentes informations seront présentées sur deux lignes, où sera précisé en exposant à quels jeux se rapportent quelles données (lorsque LGPE ou LPA apparaît, mais pas tout seul).
La tableau renvoyé est rangé de la façon suivante, les informations entre parenthèses étant des précisions :
table#1 { nom de la capacité, icône du type, icône de la catégorie d'attaque, puissance, précision, PP, type concours, (générations 3, 4 et 6 seulement) charme concours, (générations 3, 4 et 6 seulement) blocage concours, (générations 3 et 6 seulement) ["type"] = nom du type, (parfois utilisé pour colorer les tableaux) }
On notera que le module ajoute automatiquement la catégorie Page avec un nom de capacité incorrect lorsqu'il ne trouve pas les données relatives à une capacité.
Exemples[modifier]
Un exemple basique[modifier]
ressources.donneesCapacite(5, "Tonnerre", {"NB"})
donne :
table#1 { "[[Tonnerre]]", "[[Fichier:Miniature Type Électrik.png|class=type|link=Électrik (type)|alt=Électrik]]", "[[Fichier:Miniature Catégorie Spéciale HOME.png|class=catégorie|link=Catégorie de capacité|alt=Spécial]]", 95, "100 %", 15, ["type"] = "électrik", }
Avec des données de concours[modifier]
ressources.donneesCapacite(3, "Charge", {"RS", "E", "RFVF"})
donne :
table#1 { "[[Charge]]", "[[Fichier:Miniature Type Normal.png|class=type|link=Normal (type)|alt=Normal]]", "[[Fichier:Miniature Catégorie Physique HOME.png|class=catégorie|link=Catégorie de capacité|alt=Physique]]", 35, "95 %", 35, "[[Fichier:Miniature Type Robustesse.png|link=Robustesse|alt=Robustesse]]", "<span style=\"color: \ #FFAAAA\">♥♥♥♥</span>", "—", ["type"] = "normal", }
Avec des variations de certaines données suivant les jeux[modifier]
ressources.donneesCapacite(8, "Ball'Glace", {{"EB", "DEPS"}, "LPA"})
donne :
table#1 { "[[Ball'Glace]]", "[[Fichier:Miniature Type Glace.png|class=type|link=Glace (type)|alt=Glace]]", "[[Fichier:Miniature Catégorie Physique HOME.png|class=catégorie|link=Catégorie de capacité|alt=Physique]]", "30<sup>[[Pokémon Épée et Bouclier|<span style=\"color:#3162A2\">E</span><span style=\"color:#E61A66\">B</span>]]</sup><sup>, </sup><sup>[[Pokémon Diamant Étincelant et Perle Scintillante|<span style=\"color:#2F9DD4\">DE</span><span style=\"color:#764485\">PS</span>]]</sup><br /><span class=\"explain\" title=\"Style Rapide\">30</span>, 40, <span class=\"explain\" title=\"Style Puissant\">50</span><sup>[[Légendes Pokémon : Arceus|<span style=\"color:#85C697\">LPA</span>]]</sup>", "90 %<sup>[[Pokémon Épée et Bouclier|<span style=\"color:#3162A2\">E</span><span style=\"color:#E61A66\">B</span>]]</sup><sup>, </sup><sup>[[Pokémon Diamant Étincelant et Perle Scintillante|<span style=\"color:#2F9DD4\">DE</span><span style=\"color:#764485\">PS</span>]]</sup><br /><span class=\"explain\" title=\"Normal et Style Rapide\">90</span> %, <span class=\"explain\" title=\"Style Puissant\">100</span> %<sup>[[Légendes Pokémon : Arceus|<span style=\"color:#85C697\">LPA</span>]]</sup>", 20, ["type"] = "glace", }
Avec un capacité non reconnue[modifier]
ressources.donneesCapacite(6, "Tacle Foudre", {"XY", "ROSA"})
donne :
table#1 { "[[Tacle Foudre]][[Catégorie:Page avec un nom de capacité incorrect]]", "[[Fichier:Miniature Type Inconnu.png|class=type|link=Type inconnu|alt=Type inconnu]]", "[[Fichier:Miniature Type Inconnu.png|class=type|link=Catégorie de capacité|alt=Catégorie inconnue]]", "??", "??", "??", "[[Fichier:Miniature Type Inconnu.png|class=type|link=Condition|alt=??]]", "??", "??", ["type"] = "inconnu", }
local ressources = {
indexTableau = require("Module:Ressources/indexTableau")
}
-- Applique le modèle Sup à tous les jeux de "jeux", excepté "exception", et les concatène avec des virgules
-- Prendre garde que le tableau "jeux" peut contenir des sous-tableaux
local function autres_sup(jeux, exception)
local frame = mw.getCurrentFrame()
local sups = {}
for _,valeur in ipairs(jeux) do
if type(valeur) == "table" then
for _2,jeu in ipairs(valeur) do
if jeu ~= exception then
table.insert(sups, frame:expandTemplate{ title = "Sup", args = { jeu } })
end
end
else
if valeur ~= exception then
table.insert(sups, frame:expandTemplate{ title = "Sup", args = { valeur } })
end
end
end
return table.concat(sups, "<sup>, </sup>")
end
return function( generation, capacite, jeux )
local frame = mw.getCurrentFrame()
local donnees = {}
-- Partie 0 : détection des homonymies
local homonymies = mw.loadData('Module:Data/Homonymies Capacités')
local page = capacite
local lien = '[[' .. capacite .. ']]'
if ressources.indexTableau(homonymies, capacite) then
page = capacite .. ' (capacité)'
lien = '[[' .. capacite .. ' (capacité)|' .. capacite .. ']]'
end
-- Partie 1 : récupération des données
local data = {}
if generation <= 9 then
-- Sous-partie 1 : pour les anciennes générations, voire l'actuelle si elle est sortie il y a déjà un moment, on regarde dans les sous-pages de données Module:Data/Données Capacités Génération X
data = mw.loadData('Module:Data/Données Capacités Génération ' .. generation)
if data[capacite] == nil then donnees = { lien .. '[[Catégorie:Page avec un nom de capacité incorrect]]' }
else donnees = { lien, data[capacite][1], data[capacite][2], data[capacite][3], data[capacite][4], data[capacite][5], data[capacite][6], data[capacite][7], data[capacite][8] }
end
else
-- Sous-partie 2 : pour une génération tout juste sortie, on utilise les données sémantiques
local query = {'[[' .. page .. ']]', '?Type', '?Catégorie de capacité', '?Puissance', '?Précision', '?PP'}
local resultat = mw.smw.ask( query )
if resultat == nil then donnees = { lien .. '[[Catégorie:Page avec un nom de capacité incorrect]]' }
else donnees = { lien, resultat[1]["Type"], resultat[1]["Catégorie de capacité"], resultat[1]["Puissance"], resultat[1]["Précision"], resultat[1]["PP"] }
end
end
-- Partie 2 : formatage des données et gestion des cas LGPE et LPA
if generation == 7 and ressources.indexTableau(jeux, "LGPE") then jeu_particulier = "LGPE"
elseif generation == 8 and ressources.indexTableau(jeux, "LPA") then jeu_particulier = "LPA"
else jeu_particulier = nil
end
if donnees[2] == nil then
donnees["type"] = "inconnu"
donnees[2] = "[[Fichier:Miniature Type Inconnu.png|class=type|link=Type inconnu|alt=Type inconnu]]"
else
donnees["type"] = string.lower( string.gsub( donnees[2], "É", "é" ) )
donnees[2] = "[[Fichier:Miniature Type " .. donnees[2] .. ".png|class=type|link=" .. donnees[2] .. " (type)|alt=" .. donnees[2] .. "]]"
end
if donnees[3] == nil then
donnees[3] = "[[Fichier:Miniature Type Inconnu.png|class=type|link=Catégorie de capacité|alt=Catégorie inconnue]]"
else
donnees[3] = "[[Fichier:Miniature Catégorie " .. string.gsub(donnees[3], 'Spécial', 'Spéciale') .. " HOME.png|class=catégorie|link=Catégorie de capacité|alt=" .. donnees[3] .. "]]"
end
if donnees[4] == nil then donnees[4] = "??"
elseif donnees[4] == 0 then donnees[4] = "—"
end
if jeu_particulier ~= nil and data[capacite] ~= nil and data[capacite]["puissance_" .. jeu_particulier] ~= nil then
local puissance2 = data[capacite]["puissance_" .. jeu_particulier]
if puissance2 == 0 then puissance2 = "—"
elseif type(puissance2) == "table" then puissance2 = frame:expandTemplate{ title = "Infobulle", args = { puissance2[1], "Style Rapide" } } .. ", " .. puissance2[2] .. ", " .. frame:expandTemplate{ title = "Infobulle", args = { puissance2[3], "Style Puissant" } }
end
if #jeux == 1 then donnees[4] = puissance2
else donnees[4] = donnees[4] .. autres_sup(jeux, jeu_particulier) .. '<br />' .. puissance2 .. frame:expandTemplate{ title = "Sup", args = { jeu_particulier } }
end
end
if donnees[5] == nil then donnees[5] = "??"
elseif donnees[5] == 0 then donnees[5] = "—"
else donnees[5] = donnees[5] .. " %"
end
if jeu_particulier ~= nil and data[capacite] ~= nil and data[capacite]["précision_" .. jeu_particulier] ~= nil then
local precision2 = data[capacite]["précision_" .. jeu_particulier]
if precision2 == 0 then precision2 = "—"
elseif type(precision2) == "table" then precision2 = frame:expandTemplate{ title = "Infobulle", args = { precision2[1], "Normal et Style Rapide" } } .. " %, " .. frame:expandTemplate{ title = "Infobulle", args = { precision2[2], "Style Puissant" } } .. " %"
else precision2 = precision2 .. " %"
end
if #jeux == 1 then donnees[5] = precision2
else donnees[5] = donnees[5] .. autres_sup(jeux, jeu_particulier) .. '<br />' .. precision2 .. frame:expandTemplate{ title = "Sup", args = { jeu_particulier } }
end
end
if donnees[6] == nil then donnees[6] = "??" end
if jeu_particulier ~= nil and data[capacite] ~= nil and data[capacite]["PP_" .. jeu_particulier] ~= nil then
local PP2 = data[capacite]["PP_" .. jeu_particulier]
if PP2 == 0 then PP2 = "—" end
if #jeux == 1 then donnees[6] = PP2
else donnees[6] = donnees[6] .. autres_sup(jeux, jeu_particulier) .. '<br />' .. PP2 .. frame:expandTemplate{ title = "Sup", args = { jeu_particulier } }
end
end
if generation == 3 or generation == 4 or generation == 6 then
ressources["repetition"] = require("Module:Ressources/repetition")
if donnees[7] == nil then donnees[7] = "[[Fichier:Miniature Type Inconnu.png|class=type|link=Condition|alt=??]]"
else donnees[7] = "[[Fichier:Miniature Type " .. donnees[7] .. ".png|link=" .. donnees[7] .. "|alt=" .. donnees[7] .. "]]" end
if donnees[8] == nil then donnees[8] = "??" else donnees[8] = ressources.repetition( "♥", donnees[8], "#FFAAAA", "—" ) end
if generation == 3 or generation == 6 then
if donnees[9] == nil then donnees[9] = "??" else donnees[9] = ressources.repetition( "♥", donnees[9], nil, "—" ) end
end
end
return donnees
end