Module général pour générer les tableaux de stats dans les pages. Il gère les appels de fonction nécessaires, puis délègue la création des tableaux aux sous-modules appropriés :

Kingdom Hearts: χ [chi] et Kingdom Hearts: Melody of Memory ne possèdent actuellement pas de sous-module.

En outre, il possède un sous-module reprenant des fonctions de style communes à tous les tableaux :

Fonctionnement (fonctions privées)

Le tableau trigger possède, pour chaque caller possible (à savoir les fonctions publiques), une liste qui reprent, pour chaque jeu :

  • Les arguments de modèle qui détermine si le jeu est présent
  • La fonction à appeler pour créer le modèle de stats correspondant
  • L'identifiant correspondant pour gérer les catégories.

Le tableau categoryFunctions reprend ensuite, pour chaque jeu et caller, la fonction qui détermine quelles catégories ajouter automatiquement à la page.

La fonction StatGenerator reçoit les arguments du modèle (nettoyés par Stats/Template.CleanArgs) ainsi que le caller, et détermine :

  • La liste des fonctions qui doivent être appelées pour construire le modèle
  • La liste des fonctions qui doivent être appelées pour ajouter les catégories
  • Si un tabber doit être créé (c.à.d. si plusieurs jeux vont générer un tableau)

Les fonctions sont ensuite appelées successivement.

Stats.StatsEnnemi

Fonction qui génère le tableau pour un ennemi.

{{#invoke:Stats|StatsEnnemi|theme=<theme>}}

Les autres arguments ne doivent pas être renseignés lors de l'invocation, mais sont récupérés automatiquement depuis l'appel du modèle invoquant le module à la place.


local Stats = {}

--Chargement des sous-modules
local Template=require("Module:Stats/Template") 

local StatsKH1 = require("Module:Stats/KH1")
local StatsCOM = require("Module:Stats/COM")
local StatsKH2 = require("Module:Stats/KH2")
local Stats358 = require("Module:Stats/358")
local StatsBBS = require("Module:Stats/BBS")
local StatsKHR = require("Module:Stats/KHR")
local StatsDDD = require("Module:Stats/DDD")
local Stats02 = require("Module:Stats/0.2")
local StatsKHUX = require("Module:Stats/KHUX")
local StatsKH3 = require("Module:Stats/KH3")
local StatsREM = require("Module:Stats/REM")
local StatsKDR = require("Module:Stats/KHDR")

------------------------------------
--Fonctions de catégorie--
------------------------------------
--<includeonly>
function StatsCHICategorieEnnemi(args) 
    if args["boss"] or args["CHIboss"] then return "[[Catégorie:Boss Kingdom Hearts: χ]]" 
    else return "[[Catégorie:Ennemis Kingdom Hearts: χ]]" 
    end 
end

function StatsCHICategorieAR(args) 
    if args["boss"] or args["CHIboss"] then return "[[Catégorie:Avale-Rêves Cauchemars]][[Catégorie:Boss Kingdom Hearts: χ]]" 
    else return "[[Catégorie:Avale-Rêves Cauchemars]][[Catégorie:Ennemis Kingdom Hearts: χ]]" 
    end 
end

function StatsMOMCategorieEnnemi(args) 
    if args["boss"] or args["MOMboss"] then return "[[Catégorie:Boss Kingdom Hearts: Melody of Memory]]"
    else return "[[Catégorie:Ennemis Kingdom Hearts: Melody of Memory]]"
    end 
end

local categoryFunctions={
    ["KH1"] = {["ennemis"]= StatsKH1.CategorieEnnemi,},
    ["COM"] = {["ennemis"]= StatsCOM.CategorieEnnemi,},
    ["KH2"] = {["ennemis"]= StatsKH2.CategorieEnnemi,},
    ["358"] = {["ennemis"]= Stats358.CategorieEnnemi,},
    ["BBS"] = {["ennemis"]= StatsBBS.CategorieEnnemi,},
    ["KHR"] = {["ennemis"]= StatsKHR.CategorieEnnemi,},
    ["DDD"] = {["ennemis"]= StatsDDD.CategorieEnnemi,},
    ["Esprit"] = {["AR"] = StatsDDD.CategorieEspritAR,},
    ["Cauchemar"] = {["AR"] = StatsDDD.CategorieCauchemarAR,},
    ["CHI"] = {["ennemis"]= StatsCHICategorieEnnemi,["AR"]= StatsCHICategorieAR,},
    ["KHUX"] = {["ennemis"]= StatsKHUX.CategorieEnnemi,["AR"]= StatsKHUX.CategorieAR,},
    ["0.2"] = {["ennemis"]= Stats02.CategorieEnnemi,},
    ["KH3"] = {["ennemis"]= StatsKH3.CategorieEnnemi,},
    ["REM"]= {["ennemis"]= StatsREM.CategorieEnnemi,},
    ["KDR"]= {["ennemis"]= StatsKDR.CategorieEnnemi,},
    ["MOM"]= {["ennemis"]= StatsMOMCategorieEnnemi, },
}
--</includeonly>
-------------------------------
--     Fin des catégories    --
-------------------------------

-- Liste des jeux, la fonction à lancer si ce jeu est employé, et l'argument qui déclenche l'appel de cette fonction s'il est présent.
local triggers = {
    ["ennemis"] = {
        {["function"] = StatsKH1.Ennemi, ["triggers"] = {"KHarme", "KHarmeAvant", "KHarmeAprès"}, ["counter"] = 1, ["cat"]="KH1"}, -- KH1
        {["function"] = StatsCOM.Ennemi, ["triggers"] = {"COMmondes"}, ["counter"] = 1, ["cat"]="COM"}, -- COM -- Ajouter : prevents? afin de mettre 1.5 à un autre endroit
        {["function"] = StatsKH2.Ennemi, ["triggers"] = {"KH2arme"}, ["counter"] = 1, ["cat"]="KH2"}, -- KH2
        {["function"] = Stats358.Ennemi, ["triggers"] = {"358brasier"}, ["counter"] = 1, ["cat"]="358"}, -- Days
        {["function"] = StatsBBS.Ennemi, ["triggers"] = {"BBSarme"}, ["counter"] = 1, ["cat"]="BBS"}, -- BBS
        {["function"] = StatsKHR.Ennemi, ["triggers"] = {"KHRbrasier"}, ["counter"] = 1, ["cat"]="KHR"}, -- Re:coded
        {["function"] = StatsDDD.Ennemi, ["triggers"] = {"DDDbrasier", "DDDlocfixes"}, ["counter"] = 1, ["cat"]="DDD"}, --DDD
        {["function"] = tableauVide, ["triggers"] = {"CHI", "CHIMondes", "CHIAP"}, ["counter"] = 0, ["cat"]="CHI"}, -- CHI
        {["function"] = StatsKHUX.Ennemi, ["triggers"] = {"KHUXattribut"}, ["counter"] = 1, ["cat"]="KHUX"}, -- KHUX
        {["function"] = Stats02.Ennemi, ["triggers"] = {"0.2loc1"}, ["counter"] = 1, ["cat"]="0.2"}, -- 0.2
        {["function"] = StatsKH3.Ennemi, ["triggers"] = {"KH3loc1"}, ["counter"] = 1, ["cat"]="KH3"}, -- KH3
        {["function"] = StatsREM.Ennemi, ["triggers"] = {"REMloc1"}, ["counter"] = 1, ["cat"]="REM"}, -- KH3 Re Mind
        {["function"] = StatsKDR.Ennemi, ["triggers"] = {"KDRAtt", "KDRnum"}, ["counter"] = 1, ["cat"]="KDR"}, -- Dark Road
        {["function"] = tableauVide, ["triggers"] = {"MOM"}, ["counter"] = 0, ["cat"]="MOM"}, -- Melody of Memory
    }
}

--Récupère la liste des fonctions à exécuter et détermine s'il y en a plusieurs afin de générer un tabber
function getFunctions(args, caller)
    local count = 0
    local functions = {}
    local cats= {}
    local trigger = triggers[caller]
    for _, game in ipairs(trigger) do
        for _, arg in ipairs(game["triggers"]) do
            if args[arg]~= nil then
                count = count + game["counter"] -- Permet d'empêcher de créer des onglets pour CHI
                table.insert(functions, game["function"])
                table.insert(cats, game["cat"])
                break
            end
        end
    end
    return count > 1, functions, cats
end

--Fonction générale : lance les appels de fonctions et gère l'extérieur du modèle.
function StatGenerator(args, caller)
    local stringBuilder = ""
    local multiples, functions, cats = getFunctions(args, caller)
    if multiples then
        stringBuilder = stringBuilder .. Template.OpenTabber((args["theme"] or ""))
    end
    for _, func in ipairs(functions) do
        stringBuilder = stringBuilder .. func(args, multiples)
    end
    if multiples then
        stringBuilder = stringBuilder .. Template.CloseTabber()
    end
    for _, cat in ipairs(cats) do
        stringBuilder = stringBuilder .. categoryFunctions[cat][caller](args)
    end
    return stringBuilder .. "\n"
end

--Fonction appelée par les ennemis
function Stats.StatsEnnemi(frame)
    return frame:preprocess(StatGenerator(Template.CleanArgs(frame), "ennemis"))
end

--function Stats.StatsArme(frame)
--function Stats.StatsAccessoire(frame)
--function Stats.StatsMatériau(frame)

return Stats
Sauf mention contraire, le contenu de la communauté est disponible sous licence CC-BY-SA.