Module:Ressources/donneesCapacite

De Poképédia
Aller à la navigation Aller à la recherche

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