Module:Apprentissage

De Poképédia
Aller à : navigation, rechercher

Le module Apprentissage rassemble différentes fonctions permettant de créer des tableaux d'apprentissage destinés aux pages des Pokémon.

Légende des icônes
Certains paramètres sont accompagnés d'une ou plusieurs icône indiquant leur(s) caractéristique(s) :
Facultatif.png : Ce paramètre est facultatif, et n'a donc pas besoin d'être systématiquement défini.
Icône catégorie.png : Ce paramètre classe automatiquement l'article dans une catégorie.
Données sémantiques.png : Ce paramètre influe sur les données sémantiques présentes en pied de page.

Fonction « niveau »

Paramètres

  • type : le type du Pokémon.
  • génération en chiffre arabes (1, 2, 3…).
  • masquer : indiquer oui pour que le tableau soit masqué par défaut.
  • Les capacités apprises et les niveaux. Chaque capacité est disposée sur une nouvelle ligne et on trouve ensuite les niveaux d'apprentissage (leur nombre varie selon la génération : 3 dans les générations 3 et 4, 1 dans la 7e et 2 dans les autres). Sur une même ligne, les infos sont séparées par des slashs (/). Le module gère les homonymies, donc il ne faut pas les préciser.

Exemples

{{#invoke:Apprentissage|niveau|type=plante|génération=6|
Charge/Départ/Départ
Rugissement/3/3
Fouet Lianes/7/5
Fouet Lianes/9/7
Poudre Toxik/13/9
Poudre Dodo/13/12
Bélier/15/15
Tranch'Herbe/19/18
Doux Parfum/21/21
Croissance/25/24
Damoclès/27/27
Soucigraine/31/30
Synthèse/33/33
Canon Graine/37/Évolution
}}

donne :

CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPX et YRubis Oméga et Saphir Alpha
ChargeNormalPhysique40100 %35DépartDépart
RugissementNormalStatut100 %40N.3N.3
Fouet LianesPlantePhysique45100 %25N.7N.5
Fouet LianesPlantePhysique45100 %25N.9N.7
Poudre ToxikPoisonStatut75 %35N.13N.9
Poudre DodoPlanteStatut75 %15N.13N.12
BélierNormalPhysique9085 %20N.15N.15
Tranch'HerbePlantePhysique5595 %25N.19N.18
Doux ParfumNormalStatut100 %20N.21N.21
CroissanceNormalStatut20N.25N.24
DamoclèsNormalPhysique120100 %15N.27N.27
SoucigrainePlanteStatut100 %10N.31N.30
SynthèsePlanteStatut5N.33N.33
Canon GrainePlantePhysique80100 %15N.37Évolution




{{#invoke:Apprentissage|niveau|type=plante|génération=7|Aucune}}

donne :

CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPSoleil et LuneUltra-Soleil et Ultra-Lune
Ce Pokémon n'apprend aucune capacité par montée en niveau lors de cette génération.

Fonction « capsule »

Paramètres

  • type : le type du Pokémon.
  • génération en chiffres arabes (1, 2, 3…).
  • masquer : indiquer oui pour que le tableau soit masqué par défaut.
  • Le numéro de la CT/CS et la capacité qu'elle contient. Chaque capsule est disposée sur une nouvelle ligne et on trouve ensuite le nom de la capacité puis l'abréviation du jeu comme paramètre facultatif. Sur une même ligne, les infos sont séparées par des slashs (/). Le module gère les homonymies, donc il ne faut pas les préciser.

Exemples

{{#invoke:Apprentissage|capsule|type=Sol|génération=6|
90/Clonage
91/Luminocanon
94/Éclate-Roc/XY
94/Force Cachée/ROSA
98/Poing Boost
100/Confidence
02/Vol
04/Force
06/Éclate-Roc/ROSA
}}

donne :

NuméroCapacitéTypeCatégoriePuissancePrécisionPP
CT90ClonageNormalStatut10
CT91LuminocanonAcierSpécial80100 %10
CT94Éclate-RocXYCombatPhysique40100 %15
CT94Force CachéeROSANormalPhysique70100 %20
CT98Poing BoostCombatPhysique40100 %20
CT100ConfidenceNormalStatut20
CS02VolVolPhysique9095 %15
CS04ForceNormalPhysique80100 %15
CS06Éclate-RocROSACombatPhysique40100 %15




{{#invoke:Apprentissage|capsule|type=Sol|génération=7|Aucune}}

donne :

NuméroCapacitéTypeCatégoriePuissancePrécisionPP
Ce Pokémon n'apprend aucune capacité par capsule lors de cette génération.

Fonction « reproduction »

Paramètres

  • type : le type du Pokémon.
  • génération en chiffres arabes (1, 2, 3…).
  • masquer : indiquer oui pour que le tableau soit masqué par défaut.
  • méthodes : les différentes méthodes d'apprentissage possibles des parents, séparées par des slashs (/). Les valeurs doivent compléter la phrase « Parents possibles l'apprenant par ». Par défaut, les valeurs sont « niveau » et « reproduction ».
  • queulorior : indiquer oui si Queulorior est un parent possible.
  • Les capacités apprises et les parents possibles. Chaque capacité est disposée sur une nouvelle ligne et on trouve ensuite les parents apprenant naturellement la capacité puis ceux l'apprenant par reproduction. Sur une même ligne, les infos sont séparées par des slashs (/). Quand on liste les parents possibles, les Pokémon sont séparés par des virgules. Il est possible, comme dans l'exemple ci-dessous, de laisser une ligne vide entre chaque capacité pour une meilleure visibilité, mais cela reste tout à fait facultatif. Le module gère les homonymies, donc il ne faut pas les préciser.
    • À côté du nom d'une capacité, il est possible d'indiquer jeu(XXX) en remplaçant XXX par une abréviation de jeu pour préciser si une capacité est présente uniquement dans un jeu. La liste des abréviations possibles est celle du modèle Abréviation.

Exemples

{{#invoke:Apprentissage|reproduction|génération=6|type=Dragon|
Hâte/Roucool, Roucoups, Roucarnage, Piafabec, Rapasdepic, Canarticho, Doduo, Dodrio, Hypotrempe, Hypocéan, Ptéra, Minidraco, Draco, Dracolosse, Airmure, Hyporoi, Arcko, Massko, Jungko, Nirondelle, Hélédelle, Étourmi, Étourvol, Étouraptor, Arkéapti, Aéroptéryx, Passerouge, Braisillon, Flambusard, Sonistrelle, Bruyverne/Tylton, Altaria, Roucool, Roucoups, Roucarnage, Piafabec, Rapasdepic, Canarticho, Doduo, Dodrio, Hypotrempe, Hypocéan, Ptéra, Minidraco, Draco, Dracolosse, Hoothoot, Noarfang, Airmure, Hyporoi, Arcko, Massko, Jungko, Nirondelle, Hélédelle, Goélise, Bekipan, Étourmi, Étourvol, Étouraptor, Pijako, Arkéapti, Aéroptéryx, Passerouge, Braisillon, Flambusard, Galvaran, Iguolta, Sonistrelle, Bruyverne

Permuforce jeu(ROSA)/Natu, Xatu/Tylton, Altaria, Natu, Xatu

Frénésie/Doduo, Dodrio, Draby, Drackhaus, Drattak/Tylton, Altaria, Doduo, Dodrio, Nirondelle, Hélédelle, Draby, Drackhaus, Drattak
}}

donne :

CapacitéTypeCat.Puis.Préc.PPParents l'apprenant par niveauParents l'apprenant par reproduction
HâtePsyStatut30RoucoolRoucoupsRoucarnagePiafabecRapasdepicCanartichoDoduoDodrioHypotrempeHypocéanPtéraMinidracoDracoDracolosseAirmureHyporoiArckoMasskoJungkoNirondelleHélédelleÉtourmiÉtourvolÉtouraptorArkéaptiAéroptéryxPasserougeBraisillonFlambusardSonistrelleBruyverneTyltonAltariaRoucoolRoucoupsRoucarnagePiafabecRapasdepicCanartichoDoduoDodrioHypotrempeHypocéanPtéraMinidracoDracoDracolosseHoothootNoarfangAirmureHyporoiArckoMasskoJungkoNirondelleHélédelleGoéliseBekipanÉtourmiÉtourvolÉtouraptorPijakoArkéaptiAéroptéryxPasserougeBraisillonFlambusardGalvaranIguoltaSonistrelleBruyverne
PermuforceROSAPsyStatut10NatuXatuTyltonAltariaNatuXatu
FrénésieNormalPhysique20100 %20DoduoDodrioDrabyDrackhausDrattakTyltonAltariaDoduoDodrioNirondelleHélédelleDrabyDrackhausDrattak




{{#invoke:Apprentissage|reproduction|type=Acier|génération=6
|méthodes=[[niveau]] / [[CT]] / [[donneur de capacités]] dans [[ROSA]] / [[reproduction]]|
Larcin / / Simularbre, Tutafeh, Tutankafer, Miamiasme, Miasmax / / Trousselin
Mur de Fer / Tarinorme, Nodulithe, Géolithe, Gigalithe, Grindur, Noacier, Monorpale, Dimoclès, Exagide / / Racaillou, Gravalanch, Grolem, Tarinor, Tarinorme, Nodulithe, Géolithe, Gigalithe, Crabicoque, Crabaraque, Tutafeh, Tutankafer, Sorbébé, Sorboul, Sorbouboul, Grindur, Noacier, Monorpale, Dimoclès, Exagide, Trousselin / Crabicoque, Crabaraque, Sorbébé, Sorboul, Sorbouboul, Trousselin
Passe-Passe / / / / Stalgamin, Oniglali, Momartik, Trousselin
Verrouillage / Tarinor, Tarinorme / / / Nodulithe, Géolithe, Gigalithe, Trousselin
}}

donne :

CapacitéTypeCat.Puis.Préc.PPParents l'apprenant par niveau Parents l'apprenant par CT Parents l'apprenant par donneur de capacités dans ROSA Parents l'apprenant par reproduction
LarcinTénèbresPhysique60100 %25SimularbreTutafehTutankaferMiamiasmeMiasmaxTrousselin
Mur de FerAcierStatut15TarinormeNodulitheGéolitheGigalitheGrindurNoacierMonorpaleDimoclèsExagideRacaillouGravalanchGrolemTarinorTarinormeNodulitheGéolitheGigalitheCrabicoqueCrabaraqueTutafehTutankaferSorbébéSorboulSorbouboulGrindurNoacierMonorpaleDimoclèsExagideTrousselinCrabicoqueCrabaraqueSorbébéSorboulSorbouboulTrousselin
Passe-PasseTénèbresStatut100 %10StalgaminOniglaliMomartikTrousselin
VerrouillageNormalStatut10TarinorTarinormeNodulitheGéolitheGigalitheTrousselin




{{#invoke:Apprentissage|reproduction|type=Dragon|génération=7|Aucune}}

donne :

CapacitéTypeCat.Puis.Préc.PPParents l'apprenant par niveauParents l'apprenant par reproduction
Ce Pokémon n'apprend aucune capacité par reproduction lors de cette génération.

Fonction « donneur »

Paramètres

  • type : le type du Pokémon.
  • génération en chiffres arabes (1, 2, 3…).
  • masquer : indiquer oui pour que le tableau soit masqué par défaut.
  • prix-unité Facultatif.png : l'unité utilisée pour la colonne « Prix ». Par défaut, ce sera « PCo ».
  • Les capacités apprises et les infos sur le donneur de capacités. Chaque capacité est disposée sur une nouvelle ligne et on trouve ensuite le lieu où se trouve le donneur, le prix et l'unité. Sur une même ligne, les infos sont séparées par des slashs (/). L'unité définie sur une ligne est prioritaire par rapport au paramètre prix-unité. Le module gère les homonymies, donc il ne faut pas les préciser.

Exemples

{{#invoke:Apprentissage|donneur|type=sol|génération=6|
Barrage/[[Atoll de Combat]], Cabane 3/8
Telluriforce/[[Atoll de Combat]], Cabane 2/12
Poing-Éclair/[[Atoll de Combat]], Cabane 1/8
Psykoud'Boul/[[Atoll de Combat]], Cabane 2/8
Vent Glace/[[Atoll de Combat]], Cabane 4/12
}}

donne :

CapacitéTypeCatégoriePuissancePrécisionPPLieuCoût
BarrageNormalStatut5Atoll de Combat, Cabane 38 PCo
TelluriforceSolSpécial90100 %10Atoll de Combat, Cabane 212 PCo
Poing-ÉclairÉlectrikPhysique75100 %15Atoll de Combat, Cabane 18 PCo
Psykoud'BoulPsyPhysique8090 %15Atoll de Combat, Cabane 28 PCo
Vent GlaceGlaceSpécial5595 %15Atoll de Combat, Cabane 412 PCo




{{#invoke:Apprentissage|donneur|type=sol|génération=7|Aucune}}

donne :

CapacitéTypeCatégoriePuissancePrécisionPPLieuCoût
Ce Pokémon n'apprend aucune capacité par donneur lors de cette génération.

Fonction « preevolution »

Paramètres

  • type : le type du Pokémon.
  • génération en chiffres arabes (1, 2, 3…).
  • masquer : indiquer oui pour que le tableau soit masqué par défaut.
  • Les capacités apprises et la pré-évolution qui l'apprend. Chaque capacité est disposée sur une nouvelle ligne et on trouve ensuite le nom de la pré-évolution. Sur une même ligne, les infos sont séparées par des slashs (/). Le module gère les homonymies, donc il ne faut pas les préciser.

Exemples

{{#invoke:Apprentissage|preevolution|type=Insecte|génération=7|
Dard-Venin/Aspicot
Sécrétion/Aspicot
Piqûre/Aspicot
Armure/Coconfort
}}

donne :

CapacitéTypeCatégoriePuissancePrécisionPPPré-évolution
Dard-VeninPoisonPhysique15100 %35013 Aspicot
SécrétionInsecteStatut95 %40013 Aspicot
PiqûreInsectePhysique60100 %20013 Aspicot
ArmureNormalStatut30014 Coconfort




{{#invoke:Apprentissage|preevolution|type=Insecte|génération=7|Aucune}}

donne :

CapacitéTypeCatégoriePuissancePrécisionPPPré-évolution
Ce Pokémon n'apprend aucune capacité par pré-évolution lors de cette génération.

Fonction « evenement »

Paramètres

  • type : le type du Pokémon.
  • génération en chiffre arabes (1, 2, 3…).
  • masquer : indiquer oui pour que le tableau soit masqué par défaut.
  • Les capacités apprises et l'événement. Chaque capacité est disposée sur une nouvelle ligne et on trouve ensuite le nom de l'événement. Sur une même ligne, les infos sont séparées par des slashs (/). Le module gère les homonymies, donc il ne faut pas les préciser.

Exemples

{{#invoke:Apprentissage|evenement|type=Psy|génération=7|
Coup-Victoire/Centre Pokémon de Tohoku (Japon, juin-septembre 2017)
Célébration/Centre Pokémon de Tohoku (Japon, juin-septembre 2017)
}}

donne :

CapacitéTypeCatégoriePuissancePrécisionPPÉvénement
Coup VictoireFeuPhysique18095 %5Centre Pokémon de Tohoku (Japon, juin-septembre 2017)
CélébrationNormalStatut40Centre Pokémon de Tohoku (Japon, juin-septembre 2017)




{{#invoke:Apprentissage|evenement|type=Psy|génération=7|Aucune}}

donne :

CapacitéTypeCatégoriePuissancePrécisionPPÉvénement
Ce Pokémon n'apprend aucune capacité par événement lors de cette génération.

local p = {}
local ressources = {
	["donneesCapacite"] = require("Module:Ressources/donneesCapacite")
}

function p.niveau( frame )
	local infos = frame.args[1]
	if infos == nil then return "Aucune information donnée" else infos = mw.text.trim( frame.args[1] ) end
	local generation = frame.args['génération']
	if generation == nil then generation = 7 else generation = tonumber( frame.args['génération'] ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( frame.args['type'], "É", "é" ) ) ) end

	local colspans = {}
	if generation == 3 then colspans = {9,3,12}
	elseif generation == 4 then colspans = {8,3,11}
	else colspans = {6,2,8}
	end

	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard ' .. type .. ' sortable centre"><thead><tr><th colspan="' .. colspans[1] .. '">[[Capacité]]</th><th colspan="' .. colspans[2] .. '">[[Niveau]]</th></tr><tr><th>[[Capacité|Nom]]</th><th>[[Type]]</th><th>[[Catégorie de Capacité|Catégorie]]</th><th>[[Puissance (statistique)|Puissance]]</th><th>[[Précision]]</th><th>[[PP]]</th>')
	if generation == 1 then table.insert(resultat, '<th>[[Pokémon Rouge et Bleu|Rouge et Bleu]]</th><th>[[Pokémon Jaune|Jaune]]</th>')
	elseif generation == 2 then table.insert(resultat, '<th>[[Pokémon Or et Argent|Or et Argent]]</th><th>[[Pokémon Cristal|Cristal]]</th>')
	elseif generation == 3 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th><th>[[Blocage]]</th><th>[[Pokémon Rubis et Saphir|Rubis et Saphir]]</th><th>[[Pokémon Émeraude|Émeraude]]</th><th>[[Pokémon Rouge Feu et Vert Feuille|Rouge Feu et Vert Feuille]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th><th>[[Pokémon Diamant et Perle|Diamant et Perle]]</th><th>[[Pokémon Platine|Platine]]</th><th>[[Pokémon Or HeartGold et Argent SoulSilver|Or HeartGold et Argent SoulSilver]]</th>')
	elseif generation == 5 then table.insert(resultat, '<th>[[Pokémon Noir et Blanc|Noir et Blanc]]</th><th>[[Pokémon Noir 2 et Blanc 2|Noir 2 et Blanc 2]]</th>')
	elseif generation == 6 then table.insert(resultat, '<th style="width:150px;">[[Pokémon X et Y|X et Y]]</th><th style="width:150px;">[[Pokémon Rubis Oméga et Saphir Alpha|Rubis Oméga et Saphir Alpha]]</th>')
	elseif generation == 7 then table.insert(resultat, '<th>[[Pokémon Soleil et Lune|Soleil et Lune]]</th><th>[[Pokémon Ultra-Soleil et Ultra-Lune|Ultra-Soleil et Ultra-Lune]]</th>')
	end
	table.insert(resultat, '</tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td colspan="' .. colspans[3] .. '">Ce Pokémon n\'apprend aucune capacité par montée en niveau lors de cette génération.</td></tr>')
    else
		local bouton
		if frame.args['masquer'] == "oui" or frame.args['masquer'] == "1" then bouton = {"afficher", "[-] Masquer", "[+] Afficher"}
		else bouton = {"masquer", "[+] Afficher", "[-] Masquer"}
		end
    	table.insert(resultat, '<tr><td colspan="' .. colspans[3] .. '"><button type="button" name="ListeCapacites' .. generation .. '" value="' .. bouton[1] .. '" style="font-size:80%" title="' .. bouton[2] .. '">' .. bouton[3] .. '</button></td></tr></thead><tbody class="ListeCapacites' .. generation .. '">')
    	
		infos = mw.text.split(infos, "\n")
		local i = 1
		local infos_capacite = {}
		local donnees = {}
		local valeur
		while infos[i] do
			infos_capacite = mw.text.split(infos[i], "/")
			if infos_capacite[1] ~= nil and infos_capacite[1] ~= "" then 
				donnees = ressources.donneesCapacite( generation, infos_capacite[1] )
	
				table.insert(resultat, '<tr><td>[[' .. donnees[1] .. ']]</td><td>' .. donnees[2] .. '</td><td>' .. donnees[3] .. '</td><td>' .. donnees[4] .. '</td><td>' .. donnees[5] .. '</td><td>' .. donnees[6] .. '</td>')
				if generation == 3 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td><td>' .. donnees[9] .. '</td>')
				elseif generation == 4 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td>')
				end
				if infos_capacite[2] ~= nil then
					infos_capacite[2] = mw.text.trim( infos_capacite[2] )
					infos_capacite[2] = string.gsub( infos_capacite[2], ",", "<br />" )
					if infos_capacite[2] == "—" then valeur = 101
					elseif string.find( infos_capacite[2], "Départ" ) then valeur = 0
					elseif tonumber(infos_capacite[2]) ~= nil then
						valeur = infos_capacite[2]
						infos_capacite[2] = "N." .. infos_capacite[2]
					else valeur = 102
					end
					table.insert(resultat, '<td data-sort-value="' .. valeur .. '">' .. infos_capacite[2] )
				else table.insert(resultat, '<td>')
				end
				table.insert(resultat, '</td>')
				if infos_capacite[3] ~= nil then
					infos_capacite[3] = mw.text.trim( infos_capacite[3] )
					infos_capacite[3] = string.gsub( infos_capacite[3], ",", "<br />" )
					if infos_capacite[3] == "—" then valeur = 101
					elseif string.find( infos_capacite[3], "Départ" ) then valeur = 0
					elseif tonumber(infos_capacite[3]) ~= nil then
						valeur = infos_capacite[3]
						infos_capacite[3] = "N." .. infos_capacite[3]
					else valeur = 102
					end
					table.insert(resultat, '<td data-sort-value="' .. valeur .. '">' .. infos_capacite[3] )
				else table.insert(resultat, '<td>')
				end 
				table.insert(resultat, '</td>')
				if generation == 3 or generation == 4 then
					if infos_capacite[4] ~= nil then
						infos_capacite[4] = mw.text.trim( infos_capacite[4] )
						infos_capacite[4] = string.gsub( infos_capacite[4], ",", "<br />" )
						if infos_capacite[4] == "—" then valeur = 101
						elseif string.find( infos_capacite[4], "Départ" ) then valeur = 0
						elseif tonumber(infos_capacite[4]) ~= nil then
							valeur = infos_capacite[4]
							infos_capacite[4] = "N." .. infos_capacite[4]
						else valeur = 102
						end
						table.insert(resultat, '<td data-sort-value="' .. valeur .. '">' .. infos_capacite[4] )
					else table.insert(resultat, '<td>')
					end
					table.insert(resultat, '</td>')
				end
				table.insert(resultat, '</tr>')
			end
			i = i + 1
		end
	end

	table.insert(resultat, '</tbody></table>')
	return table.concat(resultat, "")
end

function p.capsule( frame )
	local infos = frame.args[1]
	if infos == nil then return "Aucune information donnée" else infos = mw.text.trim( frame.args[1] ) end
	local generation = frame.args['génération']
	if generation == nil then generation = 7 else generation = tonumber( frame.args['génération'] ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( frame.args['type'], "É", "é" ) ) ) end
	local colspan = 7
	if generation == 3 then colspan = 10
	elseif generation == 4 then colspan = 9
	end
	
	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard ' .. type .. ' centre sortable"><thead><tr><th>Numéro</th><th>Capacité</th><th>Type</th><th>Catégorie</th><th>Puissance</th><th>Précision</th><th>PP</th>')
	if generation == 3 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th><th>[[Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th>')
	end
	table.insert(resultat, '</tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td colspan="' .. colspan .. '">Ce Pokémon n\'apprend aucune capacité par capsule lors de cette génération.</td></tr>')
    else
		local bouton
		if frame.args['masquer'] == "oui" or frame.args['masquer'] == "1" then bouton = {"afficher", "[-] Masquer", "[+] Afficher"}
		else bouton = {"masquer", "[+] Afficher", "[-] Masquer"}
		end
    	table.insert(resultat, '<tr><td colspan="' .. colspan .. '"><button type="button" name="ListeCapsules' .. generation .. '" value="' .. bouton[1] .. '" style="font-size:80%" title="' .. bouton[2] .. '">' .. bouton[3] .. '</button></td></tr></thead><tbody class="ListeCapsules' .. generation .. '">')
    	
		infos = mw.text.split(infos, "\n")
		local i = 1
		local infos_capacite = {}
		local donnees = {}
		local capsule
		local cs = {
			["Coupe"] = {true, true, true, true, true, true},
			["Vol"] = {true, true, true, true, true, true},
			["Surf"] = {true, true, true, true, true, true},
			["Force"] = {true, true, true, true, true, true},
			["Flash"] = {true, true, true, false, false, false},
			["Siphon"] = {false, true, false, "depend", false, false},
			["Cascade"] = {false, true, true, true, true, true},
			["Éclate-Roc"] = {false, false, true, true, false, "depend"},
			["Plongée"] = {false, false, "depend", false, true, "depend"},
			["Anti-Brume"] = {false, false, false, "depend", false, false},
			["Escalade"] = {false, false, false, true, false, false}
		}
		cs["Plongée"]["rse"] = true
		cs["Plongée"]["rfvf"] = false
		cs["Siphon"]["dpp"] = false
		cs["Siphon"]["hgss"] = true
		cs["Anti-Brume"]["dpp"] = true
		cs["Anti-Brume"]["hgss"] = false
		cs["Éclate-Roc"]["xy"] = false
		cs["Éclate-Roc"]["rosa"] = true
		cs["Plongée"]["xy"] = false
		cs["Plongée"]["rosa"] = true
		while infos[i] do
			infos_capacite = mw.text.split(infos[i], "/")
			if infos_capacite[1] ~= nil and infos_capacite[1] ~= "" and infos_capacite[2] ~= nil and infos_capacite[2] ~= "" then 
				capsule = 'CT'
				if cs[mw.text.trim( infos_capacite[2] )] then
					if cs[mw.text.trim( infos_capacite[2] )][generation] == true then
						capsule = 'CS'
					elseif cs[mw.text.trim( infos_capacite[2] )][generation] == "depend" then
						if infos_capacite[3] then
							if cs[mw.text.trim( infos_capacite[2] )][mw.text.trim( string.lower( infos_capacite[3] ) )] == true then
								capsule = 'CS'
							end
						end
					end
				end
				donnees = ressources.donneesCapacite( generation, infos_capacite[2] )
				
				table.insert(resultat, '<tr><td>[[' .. capsule .. mw.text.trim( infos_capacite[1] ) .. ']]</td><td>[[' .. donnees[1].. ']]')
				if infos_capacite[3] then table.insert(resultat, '<sup>' .. frame:expandTemplate{ title = 'Abréviation', args = { infos_capacite[3] } } .. '</sup>' ) end
				table.insert(resultat, '</td><td>' .. donnees[2] .. '</td><td>' .. donnees[3] .. '</td><td>' .. donnees[4] .. '</td><td>' .. donnees[5] .. '</td><td>' .. donnees[6] .. '</td>')
				if generation == 3 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td><td>' .. donnees[9] .. '</td>')
				elseif generation == 4 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td>')
				end
				table.insert(resultat, '</tr>')
			end
			i = i + 1
		end
	end
	
	table.insert(resultat, '</tbody></table>')
	return table.concat(resultat, "")
end

function p.reproduction( frame )
	ressources["infosPokemon"] = require("Module:Ressources/infosPokemon")
	
	local infos = frame.args[1]
	if infos == nil then return "Aucune information donnée" else infos = mw.text.trim( frame.args[1] ) end
	local generation = frame.args['génération']
	if generation == nil then generation = 7 else generation = tonumber( frame.args['génération'] ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( frame.args['type'], "É", "é" ) ) ) end
	
	local methodes = frame.args['méthodes']
	if methodes == nil then methodes = {"[[niveau]]", "[[reproduction]]"}
	else methodes = mw.text.split(methodes, "/")
	end
	
	local colspan = 6 + #methodes
	if generation == 3 then colspan = 9 + #methodes
	elseif generation == 4 then colspan = 8 + #methodes
	end
	
	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard centre ' .. type .. ' sortable" style="max-width: 100%;"><thead><tr><th>[[Capacité]]</th><th>[[Type]]</th><th>[[Catégorie de Capacité|Cat.]]</th><th>[[Puissance (statistique)|Puis.]]</th><th>[[Précision|Préc.]]</th><th>[[PP]]</th>')
	if generation == 3 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th><th>[[Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th>')
	end
	
	local z = 1
	while methodes[z] do
		table.insert(resultat, '<th>Parents l\'apprenant par ' .. methodes[z] .. '</th>')
		z = z + 1
	end
	table.insert(resultat, '</tr>')
	
    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td colspan="' .. colspan .. '">Ce Pokémon n\'apprend aucune capacité par reproduction lors de cette génération.</td></tr>')
    else
		local bouton
		if frame.args['masquer'] == "oui" or frame.args['masquer'] == "1" then bouton = {"afficher", "[-] Masquer", "[+] Afficher"}
		else bouton = {"masquer", "[+] Afficher", "[-] Masquer"}
		end
    	table.insert(resultat, '<tr><td colspan="' .. colspan .. '"><button type="button" name="ListeReproduction' .. generation .. '" value="' .. bouton[1] .. '" style="font-size:80%" title="' .. bouton[2] .. '">' .. bouton[3] .. '</button></td></tr></thead><tbody class="ListeReproduction' .. generation .. '">')
    	
		infos = mw.text.split(infos, "\n")
		local i = 1
		local j = 1
		local y = {}
		local infos_capacite = {}
		local poke_niveau = {}
		local poke_repro = {}
		local donnees = {}
		while infos[i] do
			infos_capacite = mw.text.split(infos[i], "/")
			if mw.text.trim( infos_capacite[1] ) ~= "" then
				if ( string.match(infos_capacite[1], "jeu%([^)]*%)") ) then
					jeu = mw.getCurrentFrame():expandTemplate{ title = 'Sup', args = { string.sub(string.match(infos_capacite[1], "jeu%([^)]*%)"), 5, -2) } }
					infos_capacite[1] = string.gsub( infos_capacite[1], "jeu%([^)]*%)", "" )
				else jeu = "" end
				infos_capacite[1] = mw.text.trim( infos_capacite[1] )
				
				donnees = ressources.donneesCapacite( generation, infos_capacite[1] )
			
				table.insert(resultat, '<tr><td>[[' .. donnees[1] .. ']]' .. jeu .. '</td><td>' .. donnees[2] .. '</td><td>' .. donnees[3] .. '</td><td>' .. donnees[4] .. '</td><td>' .. donnees[5] .. '</td><td>' .. donnees[6] .. '</td>')
				if generation == 3 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td><td>' .. donnees[9] .. '</td>')
				elseif generation == 4 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td>')
				end
				table.insert(resultat, '<td>')
			
				while methodes[j] do
					y[j] = 1
					if infos_capacite[j + 1] ~= nil then
						if mw.text.trim( infos_capacite[j + 1] ) ~= "" then
							poke_niveau = mw.text.split(infos_capacite[j + 1], ",")
							while poke_niveau[y[j]] do
								table.insert(resultat, ressources.infosPokemon( poke_niveau[y[j]], "miniature" ) )
								y[j] = y[j] + 1
							end
						else table.insert(resultat, "—")
						end
					end
					if j == #methodes then table.insert(resultat, '</td></tr>')
					else table.insert(resultat, '</td><td>')
					end
					j = j + 1
				end
			end
			i = i + 1
			j = 1
			y = {}
		end
	end

	if frame.args['queulorior'] == "oui" then
		table.insert(resultat, '<tr><td colspan="' .. colspan .. '>Grâce à sa capacité [[Gribouille]], [[Queulorior]] est capable d\'apprendre toutes ces capacités, qu\'il peut également transmettre par reproduction.</td></tr>')
	end
	
	table.insert(resultat, '</tbody></table>')
	return table.concat(resultat, "")
end

function p.donneur( frame )
	local infos = frame.args[1]
	if infos == nil then return "Aucune information donnée" else infos = mw.text.trim( frame.args[1] ) end
	local generation = frame.args['génération']
	if generation == nil then generation = 7 else generation = tonumber( frame.args['génération'] ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( frame.args['type'], "É", "é" ) ) ) end
	local colspan = 8
	if generation == 3 then colspan = 11
	elseif generation == 4 then colspan = 10
	end
	local prix_unite = frame.args['prix-unité']
	if prix_unite == nil then prix_unite = "[[Point de Combat|PCo]]" end
	
	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard centre ' .. type .. ' sortable" style="max-width: 100%;"><thead><tr><th>[[Capacité]]</th><th>[[Type]]</th><th>[[Catégorie de Capacité|Catégorie]]</th><th>[[Puissance (statistique)|Puissance]]</th><th>[[Précision|Précision]]</th><th>[[PP]]</th>')
	if generation == 3 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th><th>[[Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th>')
	end
	table.insert(resultat, '<th>Lieu</th><th>Coût</th></tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td colspan="' .. colspan .. '">Ce Pokémon n\'apprend aucune capacité par donneur lors de cette génération.</td></tr>')
    else
		local bouton
		if frame.args['masquer'] == "oui" or frame.args['masquer'] == "1" then bouton = {"afficher", "[-] Masquer", "[+] Afficher"}
		else bouton = {"masquer", "[+] Afficher", "[-] Masquer"}
		end
    	table.insert(resultat, '<tr><td colspan="' .. colspan .. '"><button type="button" name="ListeDonneur' .. generation .. '" value="' .. bouton[1] .. '" style="font-size:80%" title="' .. bouton[2] .. '">' .. bouton[3] .. '</button></td></tr></thead><tbody class="ListeDonneur' .. generation .. '">')
		
		infos = mw.text.split(infos, "\n")
		i = 1
		local donnees = {}
		while infos[i] do
			infos_capacite = mw.text.split(infos[i], "/")
			if infos_capacite[1] ~= nil and infos_capacite[1] ~= "" then
				donnees = ressources.donneesCapacite( generation, infos_capacite[1] )
				if infos_capacite[2] == nil then infos_capacite[2] = "" end
				if infos_capacite[3] == nil then
					infos_capacite[3] = "—"
					infos_capacite[4] = ""
				else
					if infos_capacite[4] == nil then infos_capacite[4] = prix_unite end
				end
			
				table.insert(resultat, '<tr><td>[[' .. donnees[1] .. ']]</td><td>' .. donnees[2] .. '</td><td>' .. donnees[3] .. '</td><td>' .. donnees[4] .. '</td><td>' .. donnees[5] .. '</td><td>' .. donnees[6] .. '</td>')
				if generation == 3 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td><td>' .. donnees[9] .. '</td>')
				elseif generation == 4 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td>')
				end
				table.insert(resultat, '<td>' .. infos_capacite[2] .. '</td><td>' .. infos_capacite[3] .. " " .. infos_capacite[4] .. '</td>')
			end
			i = i + 1
		end
	end
	
	table.insert(resultat, '</tbody></table>')
	return table.concat(resultat, "")
end

function p.preevolution( frame )
	ressources["infosPokemon"] = require("Module:Ressources/infosPokemon")
	
	local infos = frame.args[1]
	if infos == nil then return "Aucune information donnée" else infos = mw.text.trim( frame.args[1] ) end
	local generation = frame.args['génération']
	if generation == nil then generation = 7 else generation = tonumber( frame.args['génération'] ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( frame.args['type'], "É", "é" ) ) ) end
	local colspan = 7
	if generation == 3 then colspan = 10
	elseif generation == 4 then colspan = 9
	end	

	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard centre ' .. type .. ' sortable" style="max-width: 100%;"><thead><tr><th>[[Capacité]]</th><th>[[Type]]</th><th>[[Catégorie de Capacité|Catégorie]]</th><th>[[Puissance (statistique)|Puissance]]</th><th>[[Précision|Précision]]</th><th>[[PP]]</th>')
	if generation == 3 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th><th>[[Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th>')
	end
	table.insert(resultat, '<th>Pré-évolution</th></tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td colspan="' .. colspan .. '">Ce Pokémon n\'apprend aucune capacité par pré-évolution lors de cette génération.</td></tr>')
    else
		local bouton
		if frame.args['masquer'] == "oui" or frame.args['masquer'] == "1" then bouton = {"afficher", "[-] Masquer", "[+] Afficher"}
		else bouton = {"masquer", "[+] Afficher", "[-] Masquer"}
		end
    	table.insert(resultat, '<tr><td colspan="' .. colspan .. '"><button type="button" name="ListePreevolution' .. generation .. '" value="' .. bouton[1] .. '" style="font-size:80%" title="' .. bouton[2] .. '">' .. bouton[3] .. '</button></td></tr></thead><tbody class="ListePreevolution' .. generation .. '">')
		
		infos = mw.text.split(infos, "\n")
		i = 1
		local donnees = {}
		while infos[i] do
			infos_capacite = mw.text.split(infos[i], "/")
			if infos_capacite[1] ~= nil and infos_capacite[1] ~= "" then
				donnees = ressources.donneesCapacite( generation, infos_capacite[1] )
				if infos_capacite[2] == nil then infos_capacite[2] = "Inconnue" end
			
				table.insert(resultat, '<tr><td>[[' .. donnees[1] .. ']]</td><td>' .. donnees[2] .. '</td><td>' .. donnees[3] .. '</td><td>' .. donnees[4] .. '</td><td>' .. donnees[5] .. '</td><td>' .. donnees[6] .. '</td>')
				if generation == 3 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td><td>' .. donnees[9] .. '</td>')
				elseif generation == 4 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td>')
				end
				table.insert(resultat, '<td>' .. ressources.infosPokemon( infos_capacite[2] ) .. '</td>')
			end
			i = i + 1
		end
	end
	
	table.insert(resultat, '</tbody></table>')
	return table.concat(resultat, "")
end

function p.evenement( frame )
	local infos = frame.args[1]
	if infos == nil then return "Aucune information donnée" else infos = mw.text.trim( frame.args[1] ) end
	local generation = frame.args['génération']
	if generation == nil then generation = 7 else generation = tonumber( frame.args['génération'] ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( frame.args['type'], "É", "é" ) ) ) end
	local colspan = 7
	if generation == 3 then colspan = 10
	elseif generation == 4 then colspan = 9
	end
	
	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard centre ' .. type .. ' sortable" style="max-width: 100%;"><thead><tr><th>[[Capacité]]</th><th>[[Type]]</th><th>[[Catégorie de Capacité|Catégorie]]</th><th>[[Puissance (statistique)|Puissance]]</th><th>[[Précision|Précision]]</th><th>[[PP]]</th>')
	if generation == 3 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th><th>[[Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th>[[Concours Pokémon|Type Concours]]</th><th>[[Charme (concours)|Charme]]</th>')
	end
	table.insert(resultat, '<th>Événement</th></tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td colspan="' .. colspan .. '">Ce Pokémon n\'apprend aucune capacité par événement lors de cette génération.</td></tr>')
    else
		local bouton
		if frame.args['masquer'] == "oui" or frame.args['masquer'] == "1" then bouton = {"afficher", "[-] Masquer", "[+] Afficher"}
		else bouton = {"masquer", "[+] Afficher", "[-] Masquer"}
		end
    	table.insert(resultat, '<tr><td colspan="' .. colspan .. '"><button type="button" name="ListeEvenement' .. generation .. '" value="' .. bouton[1] .. '" style="font-size:80%" title="' .. bouton[2] .. '">' .. bouton[3] .. '</button></td></tr></thead><tbody class="ListeEvenement' .. generation .. '">')
		
		infos = mw.text.split(infos, "\n")
		i = 1
		local donnees = {}
		while infos[i] do
			infos_capacite = mw.text.split(infos[i], "/")
			if infos_capacite[1] ~= nil and infos_capacite[1] ~= "" then
				donnees = ressources.donneesCapacite( generation, infos_capacite[1] )
				if infos_capacite[2] == nil then infos_capacite[2] = "Inconnu" end
			
				table.insert(resultat, '<tr><td>[[' .. donnees[1] .. ']]</td><td>' .. donnees[2] .. '</td><td>' .. donnees[3] .. '</td><td>' .. donnees[4] .. '</td><td>' .. donnees[5] .. '</td><td>' .. donnees[6] .. '</td>')
				if generation == 3 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td><td>' .. donnees[9] .. '</td>')
				elseif generation == 4 then table.insert(resultat, '<td>' .. donnees[7] .. '</td><td>' .. donnees[8] .. '</td>')
				end
				table.insert(resultat, '<td>' .. infos_capacite[2] .. '</td>')
			end
			i = i + 1
		end
	end
	
	table.insert(resultat, '</tbody></table>')
	return table.concat(resultat, "")
end

return p