Module:Apprentissage

De Poképédia
Aller à la navigation Aller à la recherche
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.

Le module Apprentissage rassemble différentes fonctions permettant de créer des tableaux d'apprentissage destinés aux pages des Pokémon. Il utilise lui-même des modules auxiliaires, en particulier le module de ressources « donneesCapacite » pour récupérer les données (puissance, précision etc) des capacités apparaissant.

Fonction « niveau »

Paramètres

  • type : le type du Pokémon. Utilisé uniquement pour la coloration du tableau.
  • génération en chiffre arabe (1, 2, 3…).
  • masquer (facultatif) : 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, c.f. le paragraphe suivant). Sur une même ligne, les infos sont séparées par des slashs (/). Pour les noms de capacité, il est obligatoire d'écrire dans le code le nom de la capacité lors de la génération et rien d'autre : ne pas essayer en particulier de modifier le lien vers lequel pointe la capacité au risque de perturber la récupération des informations sur celle-ci. On notera que les homonymies sont gérées automatiquement. Indiquer un numéro rajoute automatiquement un « N. » devant. On peut indiquer plusieurs niveaux sur une même case en les séparant d'une virgule et d'un espace. Indiquer un simple tiret (-) le transforme automatiquement en tiret long (—). Précéder un niveau de la lettre M ajoute une icône de maîtrise de la capacité.

Voici les colonnes par défaut par génération :

  • première génération, deux colonnes : RBJ et J ;
  • deuxième génération, deux colonnes : OA et C ;
  • troisième génération, trois colonnes : RS, E et RFVF ;
  • quatrième génération, trois colonnes : DP, Pt et HGSS ;
  • cinquième génération, deux colonnes : NB et NB2 ;
  • sixième génération, deux colonnes : XY et ROSA ;
  • septième génération, trois colonnes : SL, USUL et LGPE ;
  • huitième génération, deux colonnes : EB et DEPS ensemble, puis LPA ;
  • neuvième génération, une colonne : EV.

On notera que la fonction niveau retire automatiquement les colonnes pour lesquelles aucune information n'est indiquée. C'est en particulier intéressant pour Pokémon : Let's Go, Pikachu et Let's Go, Évoli et Légendes Pokémon : Arceus, où peu des Pokémon existants à l'époque étaient présents dans le jeu. Prenons l'exemple suivant : on veut remplir le tableau génération 7 d'un Pokémon de la troisième génération. Le module s'attend à trois colonnes : SL, USUL et LGPE ; mais un Pokémon de la troisième génération n'est pas présent dans LGPE. Dans ce cas, il n'y a pas à indiquer au module cette information, il suffit de ne jamais mettre de niveau dans la troisième colonne et elle disparaîtra d'elle-même.

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/-/12
Bélier/-/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écisionPPType ConcoursCharmeBlocageXYROSA
ChargeNormalPhysique50100 %35Robustesse♥♥♥♥DépartDépart
RugissementNormalStatut100 %40Grâce♥♥N.3N.3
Fouet LianesPlantePhysique45100 %15Sang-froid♥♥♥♥N.7N.5
Fouet LianesPlantePhysique45100 %15Sang-froid♥♥♥♥N.9N.7
Poudre ToxikPoisonStatut75 %35Intelligence♥♥♥N.13N.9
Poudre DodoPlanteStatut75 %15Intelligence♥♥♥N.12
BélierNormalPhysique9085 %20Robustesse♥♥♥♥♥♥N.15
Tranch'HerbePlantePhysique5595 %25Sang-froid♥♥♥♥N.19N.18
Doux ParfumNormalStatut100 %20Grâce♥♥N.21N.21
CroissanceNormalStatut40BeautéN.25N.24
DamoclèsNormalPhysique120100 %15Robustesse♥♥♥♥♥♥N.27N.27
SoucigrainePlanteStatut100 %10Intelligence♥♥N.31N.30
SynthèsePlanteStatut5IntelligenceN.33N.33
Canon GrainePlantePhysique80100 %15Robustesse♥♥♥♥N.37Évolution




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

donne :

Capacité
NomTypeCatégoriePuissancePrécisionPP
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. Utilisé uniquement pour la coloration du tableau.
  • génération en chiffre arabe (1, 2, 3…).
  • jeux (facultatif) : ce paramètre n'est actuellement utile que pour les générations 7 et 8, où les données des capacités (puissance, précision etc) ont pu varier selon les jeux. Si un tableau ne concerne que certains jeux de la génération, alors les indiquer avec se paramètre permettra que seules les données utiles soient affichées et allégera donc le tableau. Il faut utiliser les abréviations des jeux en question, conformément au modèle Jeu, et séparer les différents jeux par des slashs (/). Par exemple : « jeux=LPA » ou « jeux=EB/DEPS ».
  • masquer (facultatif) : 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 (/). Pour les noms de capacité, il est obligatoire d'écrire dans le code le nom de la capacité lors de la génération et rien d'autre : ne pas essayer en particulier de modifier le lien vers lequel pointe la capacité au risque de perturber la récupération des informations sur celle-ci. On notera que les homonymies sont gérées automatiquement.

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écisionPPType ConcoursCharmeBlocage
CT90ClonageNormalStatut10Grâce♥♥
CT91LuminocanonAcierSpécial80100 %10Beauté♥♥♥♥
CT94Éclate-RocXYCombatPhysique40100 %15Robustesse♥♥♥♥
CT94Force CachéeROSANormalPhysique70100 %20Intelligence
CT98Poing BoostCombatPhysique40100 %20Robustesse
CT100ConfidenceNormalStatut20Grâce♥♥♥
CS02VolVolPhysique9095 %15Intelligence♥♥
CS04ForceNormalPhysique80100 %15Robustesse♥♥♥♥
CS06Éclate-RocROSACombatPhysique40100 %15Robustesse♥♥♥♥




{{#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 « disque »

Paramètres

  • type : le type du Pokémon. Utilisé uniquement pour la coloration du tableau.
  • génération en chiffre arabe (1, 2, 3…).
  • jeux (facultatif) : ce paramètre n'est actuellement utile que pour les générations 7 et 8, où les données des capacités (puissance, précision etc) ont pu varier selon les jeux. Si un tableau ne concerne que certains jeux de la génération, alors les indiquer avec se paramètre permettra que seules les données utiles soient affichées et allégera donc le tableau. Il faut utiliser les abréviations des jeux en question, conformément au modèle Jeu, et séparer les différents jeux par des slashs (/). Par exemple : « jeux=LPA » ou « jeux=EB/DEPS ».
  • masquer (facultatif) : indiquer oui pour que le tableau soit masqué par défaut.
  • Le numéro du DT et la capacité qu'il contient. Chaque disque est disposé 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 (/). Pour les noms de capacité, il est obligatoire d'écrire dans le code le nom de la capacité lors de la génération et rien d'autre : ne pas essayer en particulier de modifier le lien vers lequel pointe la capacité au risque de perturber la récupération des informations sur celle-ci. On notera que les homonymies sont gérées automatiquement.

Exemple

{{#invoke:Apprentissage|disque|type=Feu|génération=8|
00 / Danse Lames
01 / Plaquage
02 / Lance-Flammes
10 / Séisme
15 / Déflagration
20 / Clonage
24 / Colère
26 / Ténacité
}}

donne :

NuméroCapacitéTypeCatégoriePuissancePrécisionPP
DT00Danse LamesNormalStatut20
DT01PlaquageNormalPhysique85100 %15
DT02Lance-FlammesFeuSpécial90100 %15
DT10SéismeSolPhysique100100 %10
DT15DéflagrationFeuSpécial11085 %5
DT20ClonageNormalStatut10
DT24ColèreDragonPhysique120100 %10
DT26TénacitéNormalStatut10

Fonction « reproduction »

Paramètres

  • type : le type du Pokémon. Utilisé uniquement pour la coloration du tableau.
  • génération en chiffre arabe (1, 2, 3…).
  • jeux (facultatif) : ce paramètre n'est actuellement utile que pour les générations 7 et 8, où les données des capacités (puissance, précision etc) ont pu varier selon les jeux. Si un tableau ne concerne que certains jeux de la génération, alors les indiquer avec se paramètre permettra que seules les données utiles soient affichées et allégera donc le tableau. Il faut utiliser les abréviations des jeux en question, conformément au modèle Jeu, et séparer les différents jeux par des slashs (/). Par exemple : « jeux=LPA » ou « jeux=EB/DEPS ».
  • masquer (facultatif) : 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. Pour les noms de capacité, il est obligatoire d'écrire dans le code le nom de la capacité lors de la génération et rien d'autre : ne pas essayer en particulier de modifier le lien vers lequel pointe la capacité au risque de perturber la récupération des informations sur celle-ci. On notera que les homonymies sont gérées automatiquement.
    • À 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.PPType ConcoursCharmeBlocageParents l'apprenant par niveauParents l'apprenant par reproduction
HâtePsyStatut30Sang-froid♥♥♥RoucoolRoucoupsRoucarnagePiafabecRapasdepicCanartichoDoduoDodrioHypotrempeHypocéanPtéraMinidracoDracoDracolosseAirmureHyporoiArckoMasskoJungkoNirondelleHélédelleÉtourmiÉtourvolÉtouraptorArkéaptiAéroptéryxPasserougeBraisillonFlambusardSonistrelleBruyverneTyltonAltariaRoucoolRoucoupsRoucarnagePiafabecRapasdepicCanartichoDoduoDodrioHypotrempeHypocéanPtéraMinidracoDracoDracolosseHoothootNoarfangAirmureHyporoiArckoMasskoJungkoNirondelleHélédelleGoéliseBekipanÉtourmiÉtourvolÉtouraptorPijakoArkéaptiAéroptéryxPasserougeBraisillonFlambusardGalvaranIguoltaSonistrelleBruyverne
PermuforceROSAPsyStatut10IntelligenceNatuXatuTyltonAltariaNatuXatu
FrénésieNormalPhysique20100 %20Robustesse♥♥♥DoduoDodrioDrabyDrackhausDrattakTyltonAltariaDoduoDodrioNirondelleHé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.PPType ConcoursCharmeBlocageParents 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 %10RobustesseSimularbreTutafehTutankaferMiamiasmeMiasmaxTrousselin
Mur de FerAcierStatut15RobustesseTarinormeNodulitheGéolitheGigalitheGrindurNoacierMonorpaleDimoclèsExagideRacaillouGravalanchGrolemTarinorTarinormeNodulitheGéolitheGigalitheCrabicoqueCrabaraqueTutafehTutankaferSorbébéSorboulSorbouboulGrindurNoacierMonorpaleDimoclèsExagideTrousselinCrabicoqueCrabaraqueSorbébéSorboulSorbouboulTrousselin
Passe-PasseTénèbresStatut100 %10Intelligence♥♥StalgaminOniglaliMomartikTrousselin
VerrouillageNormalStatut10Intelligence♥♥♥TarinorTarinormeNodulitheGé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. Utilisé uniquement pour la coloration du tableau.
  • génération en chiffre arabe (1, 2, 3…).
  • jeux (facultatif) : ce paramètre n'est actuellement utile que pour les générations 7 et 8, où les données des capacités (puissance, précision etc) ont pu varier selon les jeux. Si un tableau ne concerne que certains jeux de la génération, alors les indiquer avec se paramètre permettra que seules les données utiles soient affichées et allégera donc le tableau. Il faut utiliser les abréviations des jeux en question, conformément au modèle Jeu, et séparer les différents jeux par des slashs (/). Par exemple : « jeux=LPA » ou « jeux=EB/DEPS ».
  • masquer (facultatif) : indiquer oui pour que le tableau soit masqué par défaut.
  • prix-unité (facultatif) : 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é. Pour les noms de capacité, il est obligatoire d'écrire dans le code le nom de la capacité lors de la génération et rien d'autre : ne pas essayer en particulier de modifier le lien vers lequel pointe la capacité au risque de perturber la récupération des informations sur celle-ci. On notera que les homonymies sont gérées automatiquement.

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écisionPPType ConcoursCharmeBlocageLieuCoût
BarrageNormalStatut5Grâce♥♥Atoll de Combat, Cabane 38 PCo
TelluriforceSolSpécial90100 %10Beauté♥♥♥♥Atoll de Combat, Cabane 212 PCo
Poing-ÉclairÉlectrikPhysique75100 %15Sang-froid♥♥♥♥Atoll de Combat, Cabane 18 PCo
Psykoud'BoulPsyPhysique8090 %15Intelligence♥♥♥♥Atoll de Combat, Cabane 28 PCo
Vent GlaceGlaceSpécial5595 %15Beauté♥♥♥♥Atoll 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. Utilisé uniquement pour la coloration du tableau.
  • génération en chiffre arabe (1, 2, 3…).
  • jeux (facultatif) : ce paramètre n'est actuellement utile que pour les générations 7 et 8, où les données des capacités (puissance, précision etc) ont pu varier selon les jeux. Si un tableau ne concerne que certains jeux de la génération, alors les indiquer avec se paramètre permettra que seules les données utiles soient affichées et allégera donc le tableau. Il faut utiliser les abréviations des jeux en question, conformément au modèle Jeu, et séparer les différents jeux par des slashs (/). Par exemple : « jeux=LPA » ou « jeux=EB/DEPS ».
  • masquer (facultatif) : 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 (/). Pour les noms de capacité, il est obligatoire d'écrire dans le code le nom de la capacité lors de la génération et rien d'autre : ne pas essayer en particulier de modifier le lien vers lequel pointe la capacité au risque de perturber la récupération des informations sur celle-ci. On notera que les homonymies sont gérées automatiquement.

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 %350013 Aspicot
SécrétionInsecteStatut95 %400013 Aspicot
PiqûreInsectePhysique60100 %200013 Aspicot
ArmureNormalStatut300014 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. Utilisé uniquement pour la coloration du tableau.
  • génération en chiffre arabe (1, 2, 3…).
  • jeux (facultatif) : ce paramètre n'est actuellement utile que pour les générations 7 et 8, où les données des capacités (puissance, précision etc) ont pu varier selon les jeux. Si un tableau ne concerne que certains jeux de la génération, alors les indiquer avec se paramètre permettra que seules les données utiles soient affichées et allégera donc le tableau. Il faut utiliser les abréviations des jeux en question, conformément au modèle Jeu, et séparer les différents jeux par des slashs (/). Par exemple : « jeux=LPA » ou « jeux=EB/DEPS ».
  • masquer (facultatif) : 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 (/). Pour les noms de capacité, il est obligatoire d'écrire dans le code le nom de la capacité lors de la génération et rien d'autre : ne pas essayer en particulier de modifier le lien vers lequel pointe la capacité au risque de perturber la récupération des informations sur celle-ci. On notera que les homonymies sont gérées automatiquement.

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")
}
local generation_actuelle = 9
local generation_to_jeux = {
	{"RB", "J"}, -- gen 1
	{"OA", "C"}, -- gen 2
	{"RS", "E", "RFVF"}, -- gen 3
	{"DP", "Pt", "HGSS"}, -- gen 4
	{"NB", "N2B2"}, -- gen 5
	{"XY", "ROSA"}, -- gen 6
	{"SL", "USUL", "LGPE"}, -- gen 7
	{{"EB", "DEPS"}, "LPA"}, -- gen 8, EB et DEPS sont mis dans la même colonne
	{"EV"} -- gen 9
}

local function non_vide( valeur )
	if valeur ~= nil and mw.text.trim( valeur ) ~= "" and mw.text.trim(valeur ) ~= "-" and mw.text.trim( valeur ) ~= "—" then return true
	else return false
	end
end

function p.niveau( frame )
	local infos = frame.args[1]
	if infos == nil then return "Aucune information donnée" else infos = mw.text.trim( infos ) end
	infos = mw.text.split(infos, "\n")
	local generation = frame.args['génération']
	if generation == nil then generation = generation_actuelle else generation = tonumber( generation ) end
	local poke_type = frame.args['type']
	if poke_type == nil then poke_type = "inconnu" else poke_type = mw.text.trim( string.lower( string.gsub( poke_type, "É", "é" ) ) ) end
	
	local generation_to_colspans = {
		{6, 2}, -- gen 1
		{6, 2}, -- gen 2
		{9, 3}, -- gen 3
		{8, 3}, -- gen 4
		{6, 2}, -- gen 5
		{9, 2}, -- gen 6
		{6, 3}, -- gen 7
		{6, 2}, -- gen 8
		{6, 1}  -- gen 9
	}
	local colspans = { generation_to_colspans[generation][1], generation_to_colspans[generation][2] }
	
	-- Détection automatique des colonnes pour lesquelles aucune donnée n'est renseignée. Ces colonnes n'apparaîtront pas.
	local presence = {}
	for j = 1, colspans[2] do
		presence[j] = false
	end
	local i = 1
	local infos_capacite = {}
	while infos[i] do
		infos_capacite = mw.text.split(infos[i], "/")
		for j = 1, colspans[2] do
			if non_vide( infos_capacite[j+1] ) then presence[j] = true end
		end
		i = i + 1
	end
	for j = 1, generation_to_colspans[generation][2] do
		if presence[j] == false then colspans[2] = colspans[2] - 1 end
	end
	colspans[3] = colspans[1] + colspans[2]
	
	local jeux = {}
	for j = 1, generation_to_colspans[generation][2] do
		if presence[j] then table.insert(jeux, generation_to_jeux[generation][j]) end
	end
	
	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard ' .. poke_type .. ' sortable centre tableau-apprentissage apprentissage-usuel apprentissage-usuel-génération' .. generation ..' apprentissage-niveau-' .. colspans[2] .. 'niveaux"><thead><tr><th class="cellule-entête" colspan="' .. colspans[1] .. '">[[Capacité]]</th>')
	if colspans[2] > 0 then table.insert(resultat, '<th class="cellule-entête" colspan="' .. colspans[2] .. '">[[Niveau]]</th>') end
	table.insert(resultat, '</tr><tr><th class="colonne-1">[[Capacité|Nom]]</th><th class="colonne-2">[[Type]]</th><th class="colonne-3">[[Catégorie de capacité|Catégorie]]</th><th class="colonne-4">[[Puissance (statistique)|Puissance]]</th><th class="colonne-5">[[Précision]]</th><th class="colonne-6">[[PP]]</th>')
	if generation == 3 or generation == 4 or generation == 6 then
		table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th>')
		if generation == 3 or generation == 6 then table.insert(resultat, '<th class="colonne-8">[[Blocage (concours)|Blocage]]</th>') end
	end
	for _, jeux_colonne in ipairs(jeux) do
		if type(jeux_colonne) == "string" then table.insert(resultat, '<th class="colonne-niveau">' .. frame:expandTemplate{title="Abréviation", args={jeux_colonne, ""}} .. '</th>')
		else
			local abreviations = {}
			for _, jeu_colonne in ipairs(jeux_colonne) do table.insert(abreviations, frame:expandTemplate{title="Abréviation", args={jeu_colonne, ""}}) end
			table.insert(resultat, '<th class="colonne-niveau">' .. table.concat(abreviations, ", ") .. '</th>')
		end
	end
	table.insert(resultat, '</tr>')

    if #infos == 1 and infos[1] == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td class="colonne-toutes" 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 class="colonne-toutes" 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 .. '">')
    	
		local i = 1
		local infos_capacite = {}
		local donnees = {}
		while infos[i] do
			infos_capacite = mw.text.split(infos[i], "/")
			if infos_capacite[1] ~= nil and infos_capacite[1] ~= "" then 
				local jeux_capacite = {}
				for j = 1, generation_to_colspans[generation][2] do
					if non_vide( infos_capacite[j+1] ) then table.insert(jeux_capacite, generation_to_jeux[generation][j]) end
				end
				
				donnees = ressources.donneesCapacite( generation, mw.text.trim( infos_capacite[1] ), jeux_capacite )
				for j = 1, colspans[1] do
					table.insert(resultat, '<td class="colonne-' .. j .. '">' .. donnees[j] .. '</td>')
				end

				for j = 2, generation_to_colspans[generation][2] + 1 do
					if presence[j-1] then
						if infos_capacite[j] ~= nil then
							infos_capacite[j] = mw.text.trim( infos_capacite[j] )
							infos_capacite_split = mw.text.split(infos_capacite[j], ", ")
							local k = 1
							local infos_capacite_tmp_string = ""
							local valeur = nil
							while infos_capacite_split[k] do
								local maitrise = false
								if mw.ustring.find(infos_capacite_split[k], "M") == 1
								then maitrise = true
									infos_capacite_split[k] = mw.ustring.sub(infos_capacite_split[k], 2)
								end
								if infos_capacite_split[k] == "—" or infos_capacite_split[k] == "-" or infos_capacite_split[k] == ""
								then infos_capacite_split[k] = "—"
									if valeur == nil then valeur = 101 end
								elseif string.find( infos_capacite_split[k], "Départ" ) then if valeur == nil then valeur = 0 end
								elseif tonumber(infos_capacite_split[k]) ~= nil then
									if valeur == nil then valeur = infos_capacite_split[k] end
									infos_capacite_split[k] = "N." .. infos_capacite_split[k]
								else if valeur == nil then valeur = 0 end
								end
								if k ~= 1 then infos_capacite_tmp_string = infos_capacite_tmp_string .. "<br/>" end
								if maitrise then infos_capacite_tmp_string = infos_capacite_tmp_string .. "[[Fichier:Icône Maîtrise LPA.png|x20px|Maîtrise|link=Maîtrise]]" end
								infos_capacite_tmp_string = infos_capacite_tmp_string .. infos_capacite_split[k]
								k = k + 1
							end
							table.insert(resultat, '<td class="colonne-niveau" data-sort-value="' .. valeur .. '"><span style="white-space:nowrap">' .. infos_capacite_tmp_string .. '</span>')
						else table.insert(resultat, '<td class="colonne-niveau" data-sort-value="101">—')
						end 
						table.insert(resultat, '</td>')
					end
				end
				
				table.insert(resultat, '</tr>')
			end
			i = i + 1
		end
	end

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

local function capsuleEtDisque( disque, frame )
	local infos = frame.args[1]
	if infos == nil then return "Aucune information donnée" else infos = mw.text.trim( infos ) end
	local generation = frame.args['génération']
	if generation == nil then generation = generation_actuelle else generation = tonumber( generation ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( type, "É", "é" ) ) ) end
	local jeux = frame.args['jeux']
	if jeux == nil then
		jeux = generation_to_jeux[generation]
		if generation == 8 then jeux[2] = nil end -- Pas de capsule dans LPA
	else
		jeux = mw.text.split(jeux, "/")
		for i,jeu in ipairs(jeux) do
			jeux[i] = mw.text.trim( jeu )
		end
	end
	local colspan = 7
	if generation == 3 or generation == 6 then colspan = 10
	elseif generation == 4 then colspan = 9
	end
	
	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard ' .. type .. ' centre sortable tableau-apprentissage apprentissage-capsule apprentissage-capsule-génération' .. generation ..'"><thead><tr><th class="colonne-1">Numéro</th><th class="colonne-2">Capacité</th><th class="colonne-3">Type</th><th class="colonne-4">Catégorie</th><th class="colonne-5">Puissance</th><th class="colonne-6">Précision</th><th class="colonne-7">PP</th>')
	if generation == 3 or generation == 6 then table.insert(resultat, '<th class="colonne-8">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th><th class="colonne-10">[[Blocage (concours)|Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th class="colonne-8">[[Concours Pokémon|Type Concours]]</th><th class="colonne-9">[[Charme (concours)|Charme]]</th>')
	end
	table.insert(resultat, '</tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td class="colonne-toutes" colspan="' .. colspan .. '">Ce Pokémon n\'apprend aucune capacité par ')
    	if disque then table.insert(resultat, 'disque') else table.insert(resultat, 'capsule') end
    	table.insert(resultat, ' 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 class="colonne-toutes" colspan="' .. colspan .. '"><button type="button" name="Liste')
    	if disque then table.insert(resultat, 'Disque') else table.insert(resultat, 'Capsule') end
    	table.insert(resultat, 's' .. generation .. '" value="' .. bouton[1] .. '" style="font-size:80%" title="' .. bouton[2] .. '">' .. bouton[3] .. '</button></td></tr></thead><tbody class="Liste')
    	if disque then table.insert(resultat, 'Disque') else table.insert(resultat, 'Capsule') end
    	table.insert(resultat, 's' .. 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 
				if disque then capsule = 'DT'
				else
					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
				end
				donnees = ressources.donneesCapacite( generation, mw.text.trim( infos_capacite[2] ), jeux )
				
				table.insert(resultat, '<tr><td class="colonne-1">[[' .. capsule .. mw.text.trim( infos_capacite[1] ) .. ']]</td><td class="colonne-2">' .. 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>')
				for j = 2, colspan - 1 do table.insert(resultat, '<td class="colonne-' .. j+1 .. '">' .. donnees[j] .. '</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 )
	return capsuleEtDisque( false, frame )
end

function p.disque( frame )
	return capsuleEtDisque( true, frame )
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( infos ) end
	local generation = frame.args['génération']
	if generation == nil then generation = generation_actuelle else generation = tonumber( generation ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( type, "É", "é" ) ) ) end
	local jeux = frame.args['jeux']
	if jeux == nil then 
		jeux = generation_to_jeux[generation]
		if generation == 8 then jeux[2] = nil end -- Pas de reproduction dans LPA
	else
		jeux = mw.text.split(jeux, "/")
		for i,jeu in ipairs(jeux) do
			jeux[i] = mw.text.trim( jeu )
		end
	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 or generation == 6 then colspan = 9 + #methodes
	elseif generation == 4 then colspan = 8 + #methodes
	end
	
	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard centre ' .. type .. ' sortable tableau-apprentissage apprentissage-usuel apprentissage-usuel-génération' .. generation ..'" style="max-width: 100%;"><thead><tr><th class="colonne-1">[[Capacité]]</th><th class="colonne-2">[[Type]]</th><th class="colonne-3">[[Catégorie de capacité|Cat.]]</th><th class="colonne-4">[[Puissance (statistique)|Puis.]]</th><th class="colonne-5">[[Précision|Préc.]]</th><th class="colonne-6">[[PP]]</th>')
	if generation == 3 or generation == 6 then table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th><th class="colonne-9">[[Blocage (concours)|Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th>')
	end
	
	local z = 1
	while methodes[z] do
		table.insert(resultat, '<th class="colonne-toutes">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 class="colonne-toutes" 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 class="colonne-toutes" 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
				if ( string.match(infos_capacite[1], "sup%([^)]*%)") ) then
					jeu = mw.getCurrentFrame():expandTemplate{ title = 'Sup', args = { string.sub(string.match(infos_capacite[1], "sup%([^)]*%)"), 5, -2) } }
					infos_capacite[1] = string.gsub( infos_capacite[1], "sup%([^)]*%)", "" )
				end
				infos_capacite[1] = mw.text.trim( infos_capacite[1] )
				
				donnees = ressources.donneesCapacite( generation, mw.text.trim( infos_capacite[1] ), jeux )
			
				table.insert(resultat, '<tr><td class="colonne-1">' .. donnees[1] .. jeu .. '</td>')
				for j = 2, colspan - #methodes do table.insert(resultat, '<td class="colonne-' .. j .. '">' .. donnees[j] .. '</td>') end
				table.insert(resultat, '<td class="colonne-toutes">')
			
				while methodes[j] do
					y[j] = 1
					if infos_capacite[j + 1] ~= nil and 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
					if j == #methodes then table.insert(resultat, '</td></tr>')
					else table.insert(resultat, '</td><td class="colonne-toutes">')
					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 class="colonne-toutes" 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( infos ) end
	local generation = frame.args['génération']
	if generation == nil then generation = generation_actuelle else generation = tonumber( generation ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( type, "É", "é" ) ) ) end
	local jeux = frame.args['jeux']
	if jeux == nil then jeux = generation_to_jeux[generation]
	else
		jeux = mw.text.split(jeux, "/")
		for i,jeu in ipairs(jeux) do
			jeux[i] = mw.text.trim( jeu )
		end
	end
	local colspan = 8
	if generation == 3 or generation == 6 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 tableau-apprentissage apprentissage-donneur apprentissage-usuel apprentissage-usuel-génération' .. generation ..'" style="max-width: 100%;"><thead><tr><th class="colonne-1">[[Capacité]]</th><th class="colonne-2">[[Type]]</th><th class="colonne-3">[[Catégorie de capacité|Catégorie]]</th><th class="colonne-4">[[Puissance (statistique)|Puissance]]</th><th class="colonne-5">[[Précision|Précision]]</th><th class="colonne-6">[[PP]]</th>')
	if generation == 3 or generation == 6 then table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th><th class="colonne-9">[[Blocage (concours)|Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th>')
	end
	table.insert(resultat, '<th class="colonne-lieu">Lieu</th><th class="colonne-coût">Coût</th></tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td class="colonne-toutes" 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 class="colonne-toutes" 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, mw.text.trim( infos_capacite[1] ), jeux )
				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>')
				for j = 1, colspan - 2 do table.insert(resultat, '<td class="colonne-' .. j .. '">' .. donnees[j] .. '</td>') end
				table.insert(resultat, '<td class="colonne-lieu">' .. infos_capacite[2] .. '</td><td class="colonne-coût">' .. infos_capacite[3] .. " " .. infos_capacite[4] .. '</td></tr>')
			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( infos ) end
	local generation = frame.args['génération']
	if generation == nil then generation = generation_actuelle else generation = tonumber( generation ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( type, "É", "é" ) ) ) end
	local jeux = frame.args['jeux']
	if jeux == nil then jeux = generation_to_jeux[generation]
	else
		jeux = mw.text.split(jeux, "/")
		for i,jeu in ipairs(jeux) do
			jeux[i] = mw.text.trim( jeu )
		end
	end
	local colspan = 7
	if generation == 3 or generation == 6 then colspan = 10
	elseif generation == 4 then colspan = 9
	end	

	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard centre ' .. type .. ' sortable tableau-apprentissage apprentissage-usuel apprentissage-usuel-génération' .. generation ..'" style="max-width: 100%;"><thead><tr><th class="colonne-1">[[Capacité]]</th><th class="colonne-2">[[Type]]</th><th class="colonne-3">[[Catégorie de capacité|Catégorie]]</th><th class="colonne-4">[[Puissance (statistique)|Puissance]]</th><th class="colonne-5">[[Précision|Précision]]</th><th class="colonne-6">[[PP]]</th>')
	if generation == 3 or generation == 6 then table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th><th class="colonne-9">[[Blocage (concours)|Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th>')
	end
	table.insert(resultat, '<th class="colonne-toutes">Pré-évolution</th></tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td class="colonne-toutes" 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 class="colonne-toutes" 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, mw.text.trim( infos_capacite[1] ), jeux )
				if infos_capacite[2] == nil then infos_capacite[2] = "Inconnue" end
			
				table.insert(resultat, '<tr>')
				for j = 1, colspan - 1 do table.insert(resultat, '<td class="colonne-' .. j .. '">' .. donnees[j] .. '</td>') end
				table.insert(resultat, '<td class="colonne-toutes" style="text-align:left">' .. ressources.infosPokemon( infos_capacite[2] ) .. '</td></tr>')
			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( infos ) end
	local generation = frame.args['génération']
	if generation == nil then generation = generation_actuelle else generation = tonumber( generation ) end
	local type = frame.args['type']
	if type == nil then type = "inconnu" else type = mw.text.trim( string.lower( string.gsub( type, "É", "é" ) ) ) end
	local jeux = frame.args['jeux']
	if jeux == nil then jeux = generation_to_jeux[generation]
	else
		jeux = mw.text.split(jeux, "/")
		for i,jeu in ipairs(jeux) do
			jeux[i] = mw.text.trim( jeu )
		end
	end
	local colspan = 7
	if generation == 3 or generation == 6 then colspan = 10
	elseif generation == 4 then colspan = 9
	end
	
	local resultat = {}
	table.insert(resultat, '<table class="tableaustandard centre ' .. type .. ' sortable tableau-apprentissage apprentissage-usuel apprentissage-usuel-génération' .. generation ..'" style="max-width: 100%;"><thead><tr><th class="colonne-1">[[Capacité]]</th><th class="colonne-2">[[Type]]</th><th class="colonne-3">[[Catégorie de capacité|Catégorie]]</th><th class="colonne-4">[[Puissance (statistique)|Puissance]]</th><th class="colonne-5">[[Précision|Précision]]</th><th class="colonne-6">[[PP]]</th>')
	if generation == 3 or generation == 6 then table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th><th class="colonne-9">[[Blocage (concours)|Blocage]]</th>')
	elseif generation == 4 then table.insert(resultat, '<th class="colonne-7">[[Concours Pokémon|Type Concours]]</th><th class="colonne-8">[[Charme (concours)|Charme]]</th>')
	end
	table.insert(resultat, '<th class="colonne-toutes">Événement</th></tr>')

    if infos == "Aucune" then
    	table.insert(resultat, '</thead><tbody><tr><td class="colonne-toutes" 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 class="colonne-toutes" 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, mw.text.trim( infos_capacite[1] ), jeux )
				if infos_capacite[2] == nil then infos_capacite[2] = "Inconnu" end
			
				table.insert(resultat, '<tr>')
				for j = 1, colspan - 1 do table.insert(resultat, '<td class="colonne-' .. j .. '">' .. donnees[j] .. '</td>') end
				table.insert(resultat, '<td class="colonne-toutes">' .. infos_capacite[2] .. '</td></tr>')
			end
			i = i + 1
		end
	end
	
	table.insert(resultat, '</tbody></table>')
	return table.concat(resultat, "")
end

return p