[LUA]Créer un add-ons Wow

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Superman

V
Ancien staff
Dec 2, 2009
2,489
0
596
Addons : guide théorique & pratique

( tuto pris sur Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! )​

ADDONS : OUTILS THÉORIQUES ET PRATIQUES

Bonjour à tous !
Vous ayant amené à ouvrir ce sujet, je suis dans l'obligation de vous le présenter.
Ce que vous avez sous les yeux est un guide, un tutoriel, qui traite des Addons de World of Warcraft.
Il est destiné à tous, mais les lecteurs qui programment déjà des addons n'y apprendront sans doute presque rien ; il est avant tout conçu pour les personnes s'intéressant à ce sujet mais débutantes et ne traitera pas de programmation très avancée.
Il n'a absolument pas la prétention de faire de tous des codeurs et codeuses de génie, mais de présenter ce système de personnalisation de l'interface que sont les addons
et d'y initier les curieux.
De plus ne comptez pas y trouver toutes les fonctionnalités Lua et XML : des sites ont été faits pour ça et je vous les indiquerai, mais recopier les centaines de fonctions, merci pas encore
%29028129.PNG


Ce guide vous donnera les outils théoriques et pratiques pour créer un addon simple et apprendre ailleurs en suivant des tutoriaux plus avancés ;
Il vous donnera les bases. A la fin de sa lecture, en considérant que vous partez de zéro, vous saurez ce qu'est un addon, de quoi il est constitué, et en réaliser un rapidement - et vous saurez aussi chercher si il vous manque quelque chose.

NOTE : J'ai choisi d'organiser le guide suivant un schéma qui place la théorie avant la pratique. Cependant, les dernières notions abordées dans la théorie sont d'un niveau de difficulté bien supérieur aux premiers travaux pratiques. Gardez à l'esprit que n'importe quand durant la partie pratique rien ne vous empêche de vous référer à la partie théorique : elle est là pour ça. Vous pouvez aussi évidemment vous référer au Manuel officiel du Lua 5.1, ici : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!. C'est un peu austère et en anglais, je vous préviens
%29028129.PNG


Sommaire

.................................................. CHAPITRE I : LA THÉORIE

PREMIÈRE PARTIE : COMMENÇONS AU COMMENCEMENT
.......... 1) Un Addon, c'est quoi ?
.......... 2) Comment est constitué un Addon ?
.......... 3) Ce que peut et ne peut pas faire un Addon
.................... 3.1) Ce qu'il peut faire
.................... 3.2) Ce qu'il ne peut pas faire
.................... 3.3) Un exemple : Gatherer

SECONDE PARTIE : OU L'ON ABORDE LE SCRIPT LUA
.......... 1) Qu'est ce que Lua? Créer le fichier .lua
.......... 2) Les variables
.................... 2.1) Types de variables
.................... 2.2) Opérations simples
.......... 3) Les fonctions
.................... 3.1) Définition par l'exemple
.................... 3.2) Créer ses propres fonctions
.................... 3.3) TP : HelloWorld version 1.0
.......... 4) Les conditions et les boucles
.................... 4.1) Structure "If ... Then ... Else ... End"
.................... 4.2) Notion du boucle ; la boucle "While"
.................... 4.3) La boucle "For"
.......... 5) L'API de WoW

TROISIÈME PARTIE : OU L'ON VOIT POURQUOI XML EST INDISPENSABLE

.......... 1) Mais à quoi sert ce XML ?
.......... 2) Créer le fichier XML
.......... 3) Notion de langage à balises
.................... 3.1) Balises
.................... 3.2) Attributs
.................... 3.3) Conteneur, contenu
.................... 3.4) Les templates
.......... 4) Structure minimale d'une page XML pour WoW
.......... 5) Quelques balises fréquemment utilisées
.................... 5.1) Frame
.................... 5.2) Size
.................... 5.3) AbsDimension
.................... 5.4) Backdrop
.................... 5.5) Anchors
.......... 6) Pour faire quelque-chose d'intéressant : la balise <Scripts>
.................... 6.1) OnLoad, OnEvent, OnClick ...

QUATRIÈME PARTIE : CONCLUSION

.................................................. CHAPITRE II : OUTILS PRATIQUES

PREMIERE PARTIE : WOW UI DESIGNER ou UNE OPTION SYMPATHIQUE
.......... 1) Présentation
.......... 2) Avantages, inconvénients
.......... 3) Utilisation
.................... 3.1) Créer un projet
.................... 3.2) Réalisation d'une fenêtre basique
.................... 3.3) Récupérer le code

SECONDE PARTIE : ANNEXES
.......... 1) Code de réaction d'évènement
.......... 2) pour aller plus loin - liens intéressants

CHAPITRE I : LA THÉORIE

PREMIÈRE PARTIE : COMMENÇONS AU COMMENCEMENT

.......... 1) Un Addon, c'est quoi ?

Un Addon (ou 'Mod') est une amélioration, un module que l'on ajoute à WoW.
Il peut par exemple simplifier une tâche, ou bien afficher une texture - dans le cas des addons d'amélioration visuelle de l'interface, ou encore jouer un son ... les possibilités sont très nombreuses.

Un Addon s'installe en plaçant le répertoire qui contient ses fichiers dans le dossier "Interface\Addons" de votre répertoire World of Warcraft.

.......... 2) Comment est constitué un Addon ?


Un addon est toujours, sans exception, constitué d'au moins trois fichiers : un fichier portant l'extension .toc, un fichier .lua et un fichier .xml
Cependant il peut contenir d'autres choses : premièrement bien souvent il s'y trouve plusieurs fichiers .lua et .xml, mais il peut également y avoir des images (textures ...), des sons (que l'addon pourra jouer éventuellement), des fichiers texte ...

Retenez cependant que la structure MINIMALE et INDISPENSABLE de n'importe quel addon - supposons qu'il s'appelle 'MonAddon' - est :
*MonAddon.lua
*MonAddon.xml
*MonAddon.toc

Nous traiterons des fichiers lua et xml plus bas, mais je vais vous présenter ici le fichier .toc. Il sert à définir votre addon, à l'identifier pour qu'il soit reconnu par le jeu.
Vous pouvez l'ouvrir avec un éditeur de texte (Notepad, Textedit sur Mac ...). Pour en créer un, ouvrer l'éditeur de texte et enregistrez sous avec l'extension .toc (pas .txt !)
Voila comment il est constitué (exemple du fichier .toc de l'addon BigWigs) :
Q u o t e:
## Interface: 20400

## Title: Big Wigs |cff7fff7f -Ace2-|r
## Title-zhCN: |cff7fff7f-Ace2-|r Big Wigs
## Notes: Modular, lightweight, non-intrusive approach to boss encounter warnings.
## Notes-frFR: Approche modulaire, légère et non-intrusive des avertissements pour les rencontres avec les boss.
## Notes-esES: Avisos y barras para encuentros *** jefes. Modular, ligero y no intrusivo.
## Author: Ammo, Rabbit, Funkydude
## X-Credits: Pettigrow (frFR), Gamefaq (deDE), Kyopaxa (esES), Daemona, wolftankk@cwdg (zhCN), Tekkub Stoutwrithe (BigWigs 1) & More
## Version: 2.0
## X-Website: Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
## X-Category: Raid
## X-RelSite-WoWI: 5086
## X-RelSite-Curse: 3299
## X-AceForum: 1762
## X-License: See license.txt
## OptionalDeps: Ace2, CandyBar, FuBar, SharedMedia, SharedMedia-2.0, LibSharedMedia-3.0, LibBabble-Zone-3.0, LibBabble-Boss-3.0, LibSink-2.0
## X-Embeds: Ace2, FuBarPlugin-2.0, CandyBar, DewdropLib, PaintChipsLib, LibSharedMedia-3.0, Waterfall-1.0, LibSink-2.0, LibBabble-Zone-3.0, LibBabble-Boss-3.0
## SavedVariables: BigWigsDB, BigWigsFubarDB
## SavedVariablesPerCharacter: BigWigsDBPerChar

embeds.xml
LoadOnDemand.lua
Core.lua
Prototype.lua
Options.lua
modules.xml​
Aie ! Ca a l'air compliqué dites-donc. Rassurez-vous, celui ci est particulièrement gros et complexe ; c'est un Addon Ace2 (plus d'infos ici : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!) qui doit indiquer plein de choses au jeu pour son fonctionnement, et il est en lui-même important. Voici un exemple de fichier toc plus simple - fictif celui-ci :
Q u o t e:
## Interface: 20400

## Title: MonAddon
## Notes-frFR: fichier toc fictif pour le tutoriel !
## Author: Tahmahal
## Version: 1.0

MonAddon.lua
MonAddon.xml
Voyons-le ligne par ligne : la première indique la version du jeu. Pour la version 2.4 c'est 20400; pour la 2.3 c'était 20300 etc.
Les quatre suivantes sont explicites : elles spécifient le nom de l'addon, son auteur, sa version, et des notes qui peuvent etre multilingues.
Les deux dernières indiquent les fichiers à charger au ... chargement du jeu, oui oui. Plus simple non ?

Voyons maintenant la sous-partie suivante, il n'y a rien de plus a dire ici
%29028129.PNG


.......... 3) Ce que peut et ne peut pas faire un Addon
.................... 3.1) Ce qu'il peut faire

Un Addon peut utiliser l'API du jeu pour créer ses propres fonctions.
Un Addon peut afficher n'importe quel élément d'interface, le rentre interactif.
Un Addon peut intégrer des fichiers extérieurs DE CERTAINS TYPES seulement dans le jeu : exemple, afficher une texture ou jouer un son.
Un Addon peut écrire dans le fichier SavedVariables.

.................... 3.2) Ce qu'il ne peut pas faire

Un Addon ne peut PAS utiliser un fichier exécutable (application) dans le jeu.
Un Addon ne peut PAS lancer un sort, faire se déplacer le personnage, activer une macro.
Un Addon ne peut PAS écrire dans un autre fichier interne au jeu que SavedVariables.
Un Addon ne peut PAS être hors-charte. Par contre des logiciels malveillants peuvent se prétendre Addons sans l'être.
Un Addon ne peut PAS être un logiciel.

En général, Un Addon ne peut PAS être utilisé a des fins de triche. Quoi qu'en disent leurs détracteurs les Addons font partie intégrante du jeu.

.................... 3.3) Exemple : Gatherer

En bref, Gatherer est un addon qui indique sur la carte les endroits ou on a récolté une ressource (minerai, plante, coffre ...). Si je cueille une Gangrelette à un point X, ensuite sur ma carte au point X il est noté que j'y ai cueilli une Gangrelette.

Cela n'est par hors-charte, car :
- enregistrer une action de ramassage et un butin, c'est POSSIBLE avec les fonctions de base du jeu.
- enregistrer une position du jouer, aussi, ainsi que la date.

Cela serait hors-charte si, par exemple, cela m'indiquait ou trouver une Gangrelette alors que je ne l'ai jamais vue.

SECONDE PARTIE : OU L'ON ABORDE LE SCRIPT LUA
.......... 1) Qu'est ce que Lua ? Créer le fichier .lua

Le Lua est un langage de programmation ; c'est ce qu'on appelle un langage de haut niveau, car il a une forme qui peut relativement simplement être lue par un humain, mais qui est plus lente à être analysée par le processeur. C'est la langage utilisé pour les scripts des addons. Un script, c'est un fichier qui indique quoi faire, et dans quelles circonstances, au jeu.

Le Lua ne peut être utilisé seul, en général ; par exemple, on fait parfois appel a des scripts lua quand on programme en C / C . Mais nous pouvons nous contenter du lua : en effet il fonctionnera en couple avec WoW (qui est codé avec bien autre chose et qui contient les définitions des fonctions lua que nous utiliserons - mais je m'égare, je m'avance).

Pour créer votre fichier .lua, ouvrez n'importe quel éditeur de texte (exemple : Bloc-Notes) ; enregistrez sous en prenant soin de ne pas indiquer l'extension '.txt' mais '.lua'. Voila ! c'est fait.

NOTE : Je vous présente rapidement ici le logiciel (Windows) Notepad . C'est un éditeur de texte qui peut être paramétré pour colorer le code en fonction du langage de programmation, ce qui aide pas mal, je trouve. Regardez : avec bloc-notes, voici un fichier lua, toujours de bigwigs :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Et avec Notepad :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Lien de téléchargement si vous êtes intéressé(e) :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! (prenez la version avec l'installer, le .exe ; pas le .zip).

Abordons maintenant le langage en lui-même !

.......... 2) Les variables
.................... 2.1) Types de variables

Les variables, ce sont des choses enregistrées en mémoire par l'application qui llit le script. Voila comment je peux, en Lua, indiquer une variable : MaVariable = 5; N'oubliez pas de clore la ligne d'instructions par un point-virgule, quelle que soit l'instruction !
Ici donc, MaVariable vaut 5.

Une variable peut aussi contenir une chaine de caractères ; on l'indique en plaçant des guillemets autour du texte.
MonTexte = "Ceci est une varible contenant du texte";

Une variable peut également être un booléen. Cela signifie qu'elle prend soit la valeur "true" (vrai) soit "false" (faux).
Exemple : Le_ciel_est_vert = false; Le_feu_ca_brule = true;

Un nom de variable ne peut pas contenir d'accents, de tirets, d'espaces ...; l'underscore (_) est accepté.

.................... 2.2) Opérations simples

Faisons calculer notre ordinateur
%29028129.PNG
C'est tout a fait possible.
SI je rentre le code suivant :
[pre]MaVariable = 5;
MaVariable_Deux = 2 2;
MaVariable_Trois = MaVariable 6;
MaVariableQuatre = MaVariable 3 * (MaVariable_Deux MaVariable_Trois);
[pre]
La, MaVariable vaut 5, MaVariable_Deux vaut 4, MaVariable_Trois vaut 11, et MaVariable_Quatre vaut 50.

Les opérateurs sont :
Addition :
Soustraction : -
Division : /
Multiplication : *

Il y a d'autres possibilités de calculs, mais nous n'en aurons pas vraiment besoin ; par exemple, math.cos(60) vous renverra le cosinus de 60 radians (pas degrés !). Mais, si vous voulez rester sur la trigonométrie livre à vous, moi, je passe au chapitre sur les fonctions.

.......... 3) Les fonctions
....................3.1) Définition par l'exemple

Qu'est ce qu'une fonction? c'est un ensemble d'instructions lua regroupées ensemble travaillant sur des variables, pouvant ou non etre dotées d'arguments. Prenons un exemple, c'est plus simple :
MaVariable = 2;

MaVariable_Carre = MaVariable * MaVariable;

MaVariable_Deux = 16;

MaVariable_Deux_Carre = MaVariable_Deux * MaVariabl_Deux;


Etc. La ça va encore, mais si vous avez 100 variables à traiter?
Solution :

function Carre(nbr)

return nbr * nbr;

end



MaVariable_Carre = Carre(MaVariable);



Voyons comment est fait ce code.
function Carre(nbr) : c'est le nom de la fonction. On déclare que c'est une fonction avec "function". Puis on donne son nom "Carre()" et ses arguments "nbr". Les arguments sont les paramètres de la fonction ; ainsi, la fonction Carre ci dessus ne travaillera que si on lui fournit un paramètre.

return nbr * nbr; : ce sont les instructions ; ici, la fonction doit renvoyer la paramètre nbr au carré.

end : indique la fin de la définition de la fonction.

Ensuite, on APPELLE la fonction : Carre(MaVariable) indique qu'on souhaite voir la fonction Carre() travailler avec pour paramètre MaVariable - donc renvoyer MaVariable au carré !

Voici la base du système de fonctions : définition, appel.

.................... 3.2) Créer ses propres fonctions

Il y a deux types de fonctions : celles qui sont incluses dans l'API de WoW, et qui n'ont pas besoin d'êtres définies avant d'être appelées;
et celles que vous créez vous-même, que vous devez définir.

La fonction Carre() faite plus haut fait partie du deuxième type; un exemple de fonction du premier type peut être
AddMessage(message) qui ajoute un message dans la fenêtre de chat spécifiée, ou encore Show() et Hide() qui affichent ou chachent un frame de l'interface (nous les verrons plus bas).

.................... 3.3) TP : HelloWorld version 1.0

Votre premier TP ! Il est très simple et consite à afficher une boite de message à votre connexion, qui vous dit "Hello World !" (habitude d'informatique : le premier programme dit toujours Hello World ^^).

Vous aurez beson d'un fichier HelloWorld.lua, HelloWorld.toc et HelloWorld.xml - pour ce dernier je vous fournirai le code, vous n'aurez pas à le retoucher.

Commençons : le fichier .toc (si vous ne le reconnaissez pas, retournez à la sous-partie 2) de la première partie.
Q u o t e:
## Interface: 20400

## Title: HelloWorld
## Notes-frFR: premier addon
%29028129.PNG

## Author: tutoriel
## Version: 1.0

HelloWorld.lua
HelloWorld.xml
Le fichier XML est le suivant (entrez le code dans l'éditeur, enregistrer sous, HelloWorld.xml en enlevant bien l'extension .txt si nécéssaire !)

<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Script file="HelloWorld.lua" />

<Frame name="HelloWorld_MainFrame">

<Scripts>

<OnLoad>

HelloWorld_OnLoad()

</OnLoad>

</Scripts>

</Frame>

</Ui>



Et le fichier lua ; dans le fichier XML j'ai indiqué que la fonction HelloWorld_OnLoad() devait être appelée au chargement, je dois vous le dire.
Donc ? Sachant que la fonction pour la boite de message est message(message) ? A vous de jouer
%29028129.PNG


Correction ^^

function HelloWorld_OnLoad()

message("Hello, World!");

end



Tout simple, non ?

.......... 4) Les conditions et les boucles
.................... 4.1) Structure "If .. Then ... Else ... End"

Dans n'importe quel programme ou script, il faut pouvoir utiliser les conditions.
C'est quoi ? c'est une manière de dire au programme SI [condition] ALORS [instruction].
Exemple fictif : supposons que je veuille dire à mon script " SI Age est plus grand que 18 ALORS Majeur = true; SINON Majeur = false ".
(note : en anglais, "si" se dit "if", "alors" se dit "then" et "sinon" se dit "else")
Je dois écrire le code lua suivant :
if (Age > 18) Then

Majeur = true;

else

Majeur = false;

end

En effet une structure commençant par IF doit se clore par "end".
La / les conditions (ici : Age > 18) se notent entre parenthèses.

A propos : les opérateurs logiques qui s'tilisent dans les conditions sont :

== Strictement égal à
>= Supérieur ou égal à
=< Inférieur ou égal à
> Strictement supérieur à
< Strictement inférieur à
!= Différent de

Vous pouvez avoir plusieurs conditions. Dans ce cas on les note dans des parenthèses séparées, et on les relie par un des mots clés suivants:
or (ou)
and (et)

Exemple (non je n'ai rien contre les jeunes ni les vieux, c'est un exemple ^^):
if (Age < 16) or (Age > 65) then

message("Vous n'êtes pas en age de travailler !")

end

NOTE : Elseif
Dans l'exemple précédent, la condition est soluble par 2 solutions : soit on est majeur, soit on ne l'est pas.
Si on voulait savoir si la personne est "mineure" (moins de 18 ans), "adulte active" (entre 18 et 65 par exemple), ou "adulte retraitée" (plus de 65), il faut utiliser le code suivant :
if (age < 18) then Personne = "Mineure"

elseif (age >= 18) and (age < 65) then Personne = "Adulte active"

else Personne = "Adulte retraitée"

end

.................... 4.2) Notion de boucle ; la boucle "While"

Une boucle, en programmation, est une instruction qui se répète tant qu'une condition est valable pour cela. Par exemple, si votre script lua est puni car il a bavardé en classe et qu'il doit recopier 100 fois "je ne dois pas bavarder", il aura à faire ceci :
"TANT QUE le nombre de lignes est inférieur à 100 FAIRE: copier 'je ne dois pas bavarder' " (on suppose qu'il y a une fonction "copier(message)" de définie plus haut dans le code).

En code, ça donne ceci:
While (nombre_lignes < 100) do

Copier("Je ne dois pas bavarder")

end

Ca ressemble un peu à la structure "If" : While (condition) do instructions end

.................... 4.3) La boucle "For"

La boucle "for" est légèrement différente de la boucle "while". voici sa syntaxe :
for (variable, limite, pas) do instructions end

"variable", comme son nom l'indique est une variable à sa valeur de départ; "limite " est sa valeur d'arrivée et "pas" est la valeur qu'on ajoute a variable a chaque fois que la boucle tourne.

Le code d'exemple pour while, réalisé avec For, donnerait:
For (nombre_lignes = 0, nombre_lignes = 100, 1) do

Copier("Je ne dois pas bavarder")

end

.......... 5) L'API de WoW

J'en ai déja parlé, mais qu'est ce que ça peut être? API signifie 'Application Programming Interface', soit Interface de Programmation de l'Application.
C'est l'ensemble des fonctions Lua que WoW intègre. message(message; ou Show(; / Hide(); en font partie, mais elles sont très nombreuses.
L'ensemble (ou presque) de l'API peut être trouvé ici : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!.
Le seul défaut que je connaisse à ce site, c'est d'être entièrement en anglais. Je dis défaut car je voulais faire un tutoriel entièrement français, mais les bases suffisent pour
comprendre les fonctions. Comment l'utiliser? Voici une exemple : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
On y voit : l'utilisation de la fonction, ses paramètres éventuels et ce qu'elle retourne. ici, elle retourne le numero de la page d'action utilisée.

Voila pour la partie LUA. Maintenant, on s'ataque au XML, et je vous le dis, accrochez-vous, c'est parti
%29028129.PNG


TROISIÈME PARTIE : OU L'ON VOIT POURQUOI XML EST INDISPENSABLE
.......... 1) Mais à quoi sert ce XML ?

Le XML (eXtensible Markup Language ou Langage Extensible à Balises) est un langage qui sert à structurer et présenter l'information.
C'est lui qui gère l'affichage, la partie graphique de votre addon. C'est lu iqui gèrera les fenêtres, boutons, zones de saisies de texte ... et tous les éléments graphiques.

Parenthèse : le xHTML utilisé dans la création de page web est un dérivé de XML ! Si vous le connaissez vus aurez sans doute peu de difficultés à comprendre les fichiers XML de WoW.

.......... 2) Créer le fichier XML

Tout comme pour le fichier .lua et le fichier .toc, vous connaissez maintenant : ouvrez l'éditeur de texte, enregistrez sus, mettez l'extension.xml et non .txt et c'est dans la boite. Eventuellement réglez votre ordinateur pour que le programme par défaut qui ouvre les fichiers XML soit l'éditeur que vous utilisez pour le lua ; par défaut c'est votre naigateur web par défaut qui les ouvrira et vous devrez choisir "ouvrir avec ..." pour le modifier.

.......... 3) Notion de langage à balises


Le XMl est ce u'on appelle un langage à balises. Cela signifie que des informations sont affichées suivant des critères définies par la/les balises l'entourant cela peut se résumer ainsi :
<balise>Information</balise>

.................... 3.1) Les balises

On voit qu'une balise s'ouvre entre chevrons et se clôt en ajoutant un slash devant son nom.
Je tire un exemple du langage xHTML des pages web car il est très clair :
<p>Texte</p> Affiche "Texte" ; <p> signifie paragrahe et c'est la balise d'affichage du texte.
<p><strong>Texte en gras</strong> texte pas en gras </p> Affiche "Texte en gras texte pas en gras", <strong> étant la balise qui met le texte en gras.

Il y a trois règles ABSOLUMENT FONDAMENTALES à respecter :
-> Une balise doit toujours être refermée.
-> Deux balises ne peuvent pas se chevaucher comme cela : <balise1><balise2></balise1></balise2>.
La syntaxe correcte est : <balise1><balise2></balise2></balise1>.
-> Il ne doit pas y avoir d'information non encadrée par des balises.

Quand il n'y a rien entre la balise ouvrante et la balise fermante, comme ici : <balise></balise>, on peut abréger le code ainsi : <balise />
Cela est exactement la même chose.

.................... 3.2) Les attributs

Un attribut se rajoute dans une balise pour qualifier, et définir plus précisément l'nformation entourée par cette balise.
Syntaxe : <balise attribut="valeur"> ... </balise>
On ne réécrit pas le(s) attribut(s) à la fermeture de la balise.

Exemple, la balise <Script> indique qu'un script est attaché au document XML.
On l'écrira toujours avec l'attribut file pour indiquer quel fichier lua doit etre pris comme le script :
<Script file="HelloWorld.lua" /> : voila, le fichier xml sait que le fichier.lua associé est Helloworld.lua.

NOTE : pour cet attribut, on indique un chemin d'accès relatif a partir du fichier xml ; si le fichier HelloWorld.lua était dans un répertoire différent le chemin d'accès changerait.
Il n'y a pas de limite au nombre d'attributs possibles; ce nombre est défini séparément pour chaque balise.

.................... 3.3) Conteneur, contenu

Il est important de comprendre qu'une balise peut en contenir d'autres; dans ce cas on obtient quelque chose de comparable à ceci :
<balise parent>

<balise enfant1></balise enfant1>

<balise enfant2></balise enfant2>

<balise enfant3></balise enfant3>

</balise parent> (Les noms des balises sont totalement fictifs !)

.................... 3.4) Les templates

En XML, ce qu'on appelle un template et un élément qu'on définit une fois puis qu'on appelle. Tout comme pour les fonctions lua, certains sont définis par WoW, d'autres seront créés par vos bons soins
%29028129.PNG


Pour créer un template, par exemple pour définir une fenêtre (balise <Frame>), on lui donne l'attribut virtual="true" ;
Exemple :
<Frame name="MyFrame" virtual="True">

[... définitions des paramètres du frame etc. ...]

</Frame>

Ensuite, si on veut créer un autre frame ayant les mêmes caractéristiques, voici ce qu'on doit indiquer pour ne pas avoir à tout redéfinir :
<Frame name"MyOtherFrame" inherits="MyFrame">

[...]

</Frame>

MyOtherFrame aura les mêmes caractéristques que MyFrame : par exemple, taille, boutons ...

.......... 4) Structure minimale d'une page XML pour WoW

Pour que les balises, attributs, etc. que vous écrivez dans votre page XML soient reconnus comme devant être décodés par le décodeur de WoW (qui, quand il lira <frame>, comprendra 'fenêtre' etc.), il faut l'indiquer dans votre page. Rassurez-vous, c'est très simple, et un coup de copié-collé suffit ; il n'y a rien à comprendre
%29028129.PNG

<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Voila, ceci est la première ligne de votre page. Vous remarquez que c'est une balise ; elle se fermera a la dernière ligne de la page : </Ui>.

Mais pour que votre page serve à quelque chose il faut lui associer un ou plusieurs fichiers de script Lua : cela se réalise, comme vu plus haut, avec la balise <Script file="" /> où file prend la valeur du chemin d'accès relatif de votre fichier lua. Vous pouvez placer plusieurs fois cette balise à la suite si vous avez plusieurs fichiers Lua.

Il vous faut enfin au moins un frame. C'est indispensable pour que le code lua sache sur quoi travailler.

Le code minimal d'une page XML pour WoW est donc :
<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Script file="votre_fichier_lua.lua" />



<Frame name"nom_du_frame" hidden="true">

[... code de vore frame ...]

</Frame>

[... éventuellemnt, autres frames ...]

</Ui>
Ce qui est entre crochets en moins bien sûr ^^ c'est pour vous ça.

.......... 5) Quelques balises couramment utilisées

Ici nous survolerons rapidement quelques balises souvent utilisées, mais cette liste est TOUT SAUF exhaustive.

.................... 5.1) <Frame>
Ouvre une fenêtre ; pour qu'au chargement elle soit cachée, indiquez l'attribut hidden="true" ; indiquez aussi son nom via l'attribut name.

.................... 5.2) <Size>
Définit la taille d'un élément.
Doit contenir <AbsDimension /> et ses attributs.

.................... 5.3) <Absdimension>
Contient les attributs de largeur et de hauteur ; doit être placée dans Size.
Attributs : x="largeur" ; y="hauteur" ; dimensions en px.

.................... 5.4) <BackDrop>
Indique le chemin d'accès de la texture de fond de l'élément.
Exemple pour un frame :
<Backdrop bgFile="Interface\DialogFrame\UI-DialogBox-Background" edgeFile="Interface\DialogFrame\UI-DialogBox-Border" tile="true">

<BackgroundInsets>

<AbsInset left="11" right="12" top="12" bottom="11" />

</BackgroundInsets>

<TileSize>

<AbsValue val="32" />

</TileSize>

<EdgeSize>

<AbsValue val="32" />

</EdgeSize>

</Backdrop>

.................... 5.5) <Anchors>
Indique la position d'un élément.
Attributs : point="POINT d'ATTACHE" relativeTo="élément conteneur" (exemple : point="CENTER" relativeTo="UiParent" place le frame au centre de la enetre de jeu.
/!\Contient obliatoirement <Offset><Absdimension x="valeur" y="valeur" /></Offset>

.......... 6) La balise <Scripts>

A ne surtout pas confondre avec la balise <Script file="" />, elle se place avant les autres balises de définition d'un élément.
Elle indique les interactions du code Lua avec cet élément. Pour cela, il faut l'écrire ainsi :
<Scripts>

<OnQuelquechose>

Script lua ou appel de fonction

</OnQuelquechose>

</Scripts>
<OnQuelquechose> doit être remplacé par un déclencheur.
Ces déclencheurs sont nombreux ; la liste complète ici -> Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Ainsi OnLoad se déclenche au chargement, OnClick lors d'un clic sur l'élément, OnEnter quand on presse entrée

Un cas particulier est OnEvent. Celui-ci réagit à un évènement reconnu ar le jeu qu'il faut enregistrer dans le script lua.
La liste des évènements enregistrables est longue -> Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Exemple : supposons un fichier MonAddon.lua et un fichier MonAddon.xml (exemple complet dans les annexes)
Q u o t e:
MonAddon.luafunction MonAddon_OnLoad()

MonAddon:RegisterEvent('EVENEMENT DE LA LISTE')

endMonAddon.xml<OnEvent> script a faire lors de cet event </OnEvent>​
QUATRIÈME PARTIE : CONCLUSON

Voila pour la partie théorique ; cela peu sembler bien peu, mais le principe reste le même ; par la suite il n'y a plus qu'à trouver la fonction qui correspond à ce que vous recherchez. WoWIKI en propose énormément ; une recherche internet également.

Nous allons maintenant voir dans le chapitre suivant un logiciel très pratique et quelques petites choses encore.

.................................................. CHAPITRE II : OUTILS PRATIQUES

PREMIÈRE PARTIE : WOW UI DESIGNER ou UNE OPTION SYMPATHIQUE
.......... 1) Présentation

WoW UI Designer est un logiciel qui - en deux mots - génère un code XML automatiquement à partir d'éléments que vous créez 'visuellement'.
Exemple : vous sélectionnez 'Form', et il créé le code correspondant pendant qu'une fenêtre s'affiche dans votre écran de création.

Une fois votre fenêtre réalisée vous n'avez plus qu'à écrire le code lua. Cela permet de faire un trait sur la partie XML.

.......... 2) Avantages, Inconvénients

Ce logiciel à ses pour et ses contre. En effet, il vous offre une solution de facilité, vous évite le codage XML et tous les risques d'erreur dans le XML, mais cela vous empêche parfois de comprendre ce que vous faites ; Il est très fiable et très précis - vous créez un bouton, il créé le bouton, sa police de texte, son aspect quand cliqué, l'ombre en dessous de li, ses textures dans différents états etc. - mais un peu compliqué et en anglais.

.......... 3) Utilisation


Si vous êtes intéressé, voici le lien de téléchargement :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

.................... 3.1) Créer un projet
Une fois installé, lancez le logiciel ; vous avez quelque chose qui devrait ressembler à cela :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Pour créer un projet, File > New Project, entrez le nom de votre projet (celui de votre addon).
Vous tombez sur la page de création du ichier .toc, remplissez juste les champs que vous connaissez, le reste n'a pas d'importance, au pire vous le referez manuellement.

Enregistrez.

.................... 3.2) Créer une fenêtre
Une fois enregistré, Project > Add new Form, puis cliquez sur elle dans le menu a gauche
(il va charger les données, patientez une trentaine de secondes ^^).
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
En bas a doite, vous pouvez glisser les éléments de la liste sur la fenetre et les y déplacer. Tout y est : boutons, zones de texe ...
Une fois placé sur la fenetre, regardez le cadre en haut a gauche. Si vous avez placé un bouton par exemple, chercher 'OnCLick' et entrez le nom de la fonction de votre code lua qui correspond. Faites de même pour tous les éléments de votre fenêtre (voir de vos fenêtres^^).

.................... 3.3) Récupérer le code

Une fois ceci fait, enregistrez votre fenêtre. Vous obtenez un fichier XML que vous pouvez ouvrir si vous voulez modifier quelque chose 'manuellement'. Souvenez vous des noms que vous avez donné à vous éléments dans le cadre en bas à droite : souvent, les pages générées par WoW UI Designer sont très longues, vous aurez besoin de la fonction 'recherche'
%29028129.PNG


SECONDE PARTIE : ANNEXES

.......... 1) Code complet d'une gestion d'évènement

Comme promis plus haut voici de quoi réagir à l'envoi d'un sort par le joueur - c'est un exemple.
Lorsque vous voyez [#x] dans le code c'est pour indiquer que je commente ce point en xième position, après le code ; il ne fait pas partie du code.

Q u o t e:
MyAddon.xml


<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Script file="MyAddon.lua" />

<Frame name="MyAddon_MainFrame">

<Scripts>

<OnLoad>[#1]

MyAddon_OnLoad()

</OnLoad>

<OnEvent>[#2]

MyAddon_OnEvent()

</OnEvent>

</Scripts>

</Frame>

</Ui>



#1 : Au chargement, on appelle la fonction MyAddon_OnLoad().
#2 : Quand un évènement est détecté, on appelle la fonction MyAddon_OnEvent().

Q u o t e:
MyAddon.lua


function MyAddon_OnLoad()

this:RegisterEvent("UNIT_SPELLCAST_START");[#1]

end



function MyAddon_OnEvent()

DEFAULT_CHAT_FRAME:AddMessage("Vous avez lancé le sort " .. arg2 .. ", " .. UnitName("player") .. " !");[#2]

end



#1 : this: indique que c'est dans le frame qui à envoyé <OnLoad> que l'on travaille. Comme c'est le même qui à envoyé <OnEvent>, on enregistre l'évènement "UNIT_SPELLCAST_START" qui est défini sur cette page : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

#2:
a) DEFAULT_CHAT_FRAME:AddMessage() : ajoute un texte dans le journal général.
b) arg2 est un des arguments générés par l'évènement "UNIT_SPELLCAST_START" (comme montré sur la page web précédente). Pour cet évènement il correspond au nom du sort lancé.
c) UnitName("player") est le nom du joueur.
d) On appelle 'concaténation' le fait d'ajouter à une chaine de caractère une autre chaine de caractères. En lua cela s'exprime par " . . "

Ainsi cet addon, si je lance le sort Trait de l'ombre par exemple, affichera dans mon journal général :
"Vous avez lancé le sort Trait de l'Ombre, Tahmahal !", ce qui ne m'avance pas de beaucoup, mais qui est un grand pas pour ma programmation d'addon
%29028129.PNG


.......... 3) Pour aller plus loins - liens utiles

Je ne pourrai pas vous donner tous les liens intéressants traitant de ce vaste sujet. Je peux vous conseiller le forum Interface personnalisée américain - ils parlent pas mal de création d'addon. Je vous recommande chaudement ce post de Lenwë sur notre forum : docs et outils pour créer son interface perso. Dedans sont listés 5 ou 6 lins très intéressants.

Souvenez vous : Le meilleur moyen d'apprendre est souvent de regarder le code d'un autre addon, commencez par un simple, avec un guide sous la main. Personellement j'ai débuté avec le ccode source de SolarianAlarm
%29028129.PNG




CONCLUSION

Voila, j'espere que ce guide vous aura été utile, même juste un peu. Dans le cas contraire, tant pis
%29028129.PNG
Navré de vous avoir pris votre temps.
Bon jeu à tous et bonne chance pour vos addons si vous etes intéresé(e) !
 
May 1, 2010
524
0
581
c'est intéressant le lua je suis content qu'il y ai un tuto de lua sur le forum :)

Merci a toi ! je copie-colle dans un bloc note tout ce que tu as ecrit et je verais sa demain ;)

(le lua n'est pas reservé qu'a wow, beaucoups de jeu presente des codes en lua, exemple cs:s ou le lua est trés interessant car il permet de faire de nombreuses choses frauduleuses *_*, cheat et crash et d'autres choses ... On dit aussi qu'il sert a programmer pour les PSP et NintendoDS mais j'en sais rien)
 

parla

Nouveau membre
Dec 7, 2010
1
0
421
Merci beaucoup pour ce tuto en français, c'est quand même plus sympa et plus rapide à lire ! Allez je me lance dans mon addon de récupération de tous les talents du jeu :)
 

Yougay

Membre
Jul 28, 2011
39
0
311
J'adore votre tuto ceci explique clairement et bien les concepte du cheat

++1