Guide du mod WOW UI – Chapitre 2 Commandes Slash

Achetez WoW Gold Pas cher

  • Achetez WoW Classic Gold Safe chez PVPBank en utilisant le coupon SEAN. Paiements: Paypal, Crédit.
  • Achetez WoW Gold Paypal chez Mulefactory. Coupon WoW Classique: wowcgold & Coupon WoW Gold: wowrgold. Prix incroyables, livraison instantanée. Paiements: Paypal, Skrill, Bitcoin.
  • Guide de Mod d’Interface Utilisateur – Chapitre 1
  • Guide de Mod d’Interface Utilisateur – Chapitre 2
  • Guide de Mod d’Interface Utilisateur – Chapitre 3
  • Guide de Mod d’Interface Utilisateur – Chapitre 4
  • Guide de Mod d’Interface Utilisateur – Chapitre 5
  • Guide de Mod d’Interface Utilisateur – Chapitre 6
  • Guide de Mod d’Interface utilisateur – Chapitre 7

Index de la partie 2

  • Qu’est-ce que les commandes slash et pourquoi m’en préoccupent-elles
  • Comment fonctionnent les commandes slash
  • Fichiers LUA
  • Mettre tout cela ensemble
  • Que fait-il
  • Mots finaux

Bienvenue dans la deuxième partie de notre guide pour créer WoW AddOns ! Dans cet épisode, nous nous baserons sur le simple AddOn que nous avons créé dans la Première partie. Même si vous êtes déjà familier avec la création d’AddOns, vous voudrez peut-être écumer rapidement la Première partie.

Dans la deuxième partie, je suppose que vous êtes familier avec les bases des fichiers Lua, XML et toc. Cependant, je ne suppose pas que vous avez une vaste expérience en programmation. Nous nous concentrerons sur la gestion des commandes ¡°slash¡±. En cours de route, nous examinerons également de plus près le codage Lua. Lorsque nous aurons terminé, nous aurons élargi l’addon ¡° battle cry¡± plutôt boiteux de la Première partie pour être personnalisable par les utilisateurs finaux sans les obliger à modifier le code Lua. Si vous n’avez pas déjà l’AddOn de la Première partie, vous pouvez obtenir les fichiers < ici >.

QU’EST-CE QUE LES COMMANDES SLASH, ET POURQUOI M’EN PRÉOCCUPENT-ELLES

Si vous avez joué à WoW pendant plus de cinq minutes environ, vous êtes familier avec les commandes slash. Ils¡re les choses comme ¡ ° / disent ¡± et ¡ ° / qui ¡± que vous tapez en jouant à WoW. Les commandes Slash sont un moyen très pratique d’effectuer une action sans utiliser la souris. Pour les rédacteurs d’AddOn, les commandes slash sont beaucoup plus simples à implémenter qu’une interface utilisateur graphique avec des fenêtres et des boutons. Si vos besoins sont simples, les commandes slash peuvent suffire à votre AddOn.

Comme vous le savez, WoW fournit environ un millier de commandes de ce type. Ce que vous ne savez peut-être pas, c’est que les AddOns peuvent ajouter leurs propres commandes slash. Jetons donc un coup d’œil à ce qu’il faut pour augmenter le nombre de commandes slash à un millier de milliards et un.

COMMENT FONCTIONNENT LES COMMANDES SLASH

Chaque commande slash créée par un AddOn a une fonction Lua qui lui est associée. Lorsque l’utilisateur tape la commande slash, WoW appelle la fonction Lua. En interne, WoW gère un ¡°SlashCmdList¡±, qui est une table mappant toutes les différentes commandes de barre oblique aux fonctions qu’elles doivent appeler. Vous pouvez penser à cela comme un annuaire téléphonique. (Rappelez-vous avant les salles de chat et la messagerie instantanée, lorsque les gens utilisaient le téléphone J) Les commandes slash sont comme les noms et les fonctions sont comme les numéros de téléphone. Lorsque l’utilisateur tape une commande slash, WoW parcourt les commandes slash (noms) jusqu’à ce qu’il trouve la bonne. Ensuite, il appelle la fonction (numéro de téléphone) pour cette entrée. Ici¡s la Lua pour créer une commande de barre oblique :

SlashCmdList=TthAog2SetMyBattleCry;

Cette ligne définit la fonction de la commande de barre oblique ¡± TTHAOG2_SET_MY_BATTLE_CRY sur ¡°TthAog2SetMyBattleCry¡±. Si la commande ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± slash n’existe pas déjà dans la table ¡°SlashCmdList¡±, elle est automatiquement créée. (Pratique, n’est-ce pas) Pour que cela fonctionne réellement, nous devons définir la fonction ¡°TthAog2SetMyBattleCry ¡ ± quelque part dans notre code Lua. La fonction peut ressembler à ceci :

function TthAog2SetMyBattleCry(msg)
set définit le cri de bataille, pour une utilisation ultérieure
TthAog2MyBattleCry=msg;
end

(Un mot sur la convention: notez que nous avons utilisé des majuscules pour le nom de la commande slash. Autrement dit, nous avons écrit TTHAOG2_SET_MY_BATTLE_CRY ¡± au lieu de ¡°TthAog2SetMyBattleCry ¡±. Dans ce guide, nous utiliserons toutes les majuscules pour les valeurs de constantes C qui ne devraient jamais changer même si le monde s’effrite en poussière interstellaire ou en nerfs de Blizzard Prêtres ou quelque chose d’tout aussi horrible. Chaque fois que vous me voyez utiliser un nom en majuscules, vous saurez que je vous montre une constante.)

Quiz pop: qu’est-ce qu’un utilisateur tape pour exécuter la nouvelle commande slash Ok, je l’avoue. C’est une question piège. Bien que la ligne de Lua ci-dessus crée une commande slash et y associe une fonction Lua, nous n’avons toujours aucun moyen de l’exécuter. WoW utilise un système d’alias astucieux pour associer ce que l’utilisateur tape aux commandes de barre oblique réelles. Voici le code Lua pour le faire:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = »/setmybattlecry2″;

Maintenant si l’utilisateur tape ¡°/setmybattlecry2 Pas dans l’aine!¡±, la commande slash ¡°TTH_AOG2_SET_MY_BATTLE_CRY ¡± sera exécutée, provoquant l’appel de la fonction ¡°TthAog2SetMyBattleCry ¡± avec le paramètre ¡° Pas dans l’aine!¡±. (Nous mettons un ¡°2¡± à la fin de ¡ ° / setmybattlecry2 ¡± parce que nous révisons notre AddOn dans les parties ultérieures de ce guide et que nous ne voulons pas que les noms entrent en conflit.)

Pourquoi l’étape supplémentaire Pourquoi la création de la commande slash ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± permet automatiquement à l’utilisateur de taper ¡° / tth_aog2_setmybattlecry¡± pour l’exécuter Il y a deux raisons. Vous pouvez déjà voir le premier: bien que nos noms internes puissent avoir beaucoup de sens dans notre code, ils sont souvent terriblement laids à montrer aux utilisateurs. La deuxième raison est plus importante: cette étape supplémentaire permet à plusieurs mots clés d’exécuter la même commande de barre oblique. Taper ¡ ° / setmybattlecry2 ¡± est une sorte de douleur. Donnons aux gens un moyen plus court:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2= »/smbc2″;

Maintenant, les utilisateurs de notre AddOn peuvent taper ¡°/setmybattlecry2¡± ou ¡°/smbc2¡± pour définir le cri de bataille. Notez que dans la partie constante (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2), nous avons ajouté un ¡°2¡± au lieu d’un ¡°1¡± cette fois. Nous pourrions ajouter un troisième mot-clé, en ajoutant un ¡°3¡± à la place, et ainsi de suite.

Bien que les commandes slash ne soient pas aussi fantaisistes ou aussi attrayantes visuellement que les fenêtres et les boutons, elles sont souvent pratiques pour les utilisateurs. Et ils sont beaucoup plus faciles à créer pour vous. (Si vous voulez toujours une interface graphique pour votre AddOn, et vous le faites probablement, soyez patient. Nous couvrirons cela dans la septième partie de ce guide.)

VARIABLES LUA

Vous avez peut-être remarqué quelque chose de nouveau dans la fonction ci-dessus. Le voici à nouveau, au cas où vous l’auriez manqué :

fonction TthAog2SetMyBattleCry(msg)
set définit le cri de bataille, pour une utilisation ultérieure
TthAog2MyBattleCry=msg;
fin

Le ¡°TthAog2MyBattleCry= msg ; ¡± est la nouvelle partie. ¡°TthAog2MyBattleCry ¡± est une variable Lua. Les variables ne sont que des emplacements pour contenir n’importe quelle valeur de votre choix. Comme de nombreux langages de script, Lua est très flexible dans le traitement des variables. Si vous avez utilisé un langage de programmation ¡° fortement typé ¡± tel que C ++, vous pourriez vous poser des questions sur la variable ¡s ¡° type ¡±. Don¡t. Vous pouvez considérer les variables Lua comme de grandes boîtes vides qui peuvent contenir à peu près tout ce que vous voulez y stocker. Dans cet AddOn, nous stockons le cri de bataille préféré de l’utilisateur dans la variable.

Un aspect important des variables est ¡°scope¡±. La portée signifie essentiellement ¡° quel code peut voir cette variable ¡± Par défaut, les variables ont ¡° une portée globale ¡±, beaucoup de vos fonctions peuvent voir la variable. L’autre type de portée est ¡° portée locale¡±. Ce que cela signifie pour nous, c’est que seul le code dans le même bloc ¡°¡± peut voir la variable. Un bloc ¡°¡± signifie essentiellement ¡° jusqu’à la fin suivante ¡±. (La définition technique du champ d’application dans Lua est plus compliquée, mais nous ne devons pas nous inquiéter de ces détails ici.)

Dans notre exemple ci-dessus, ¡°TthAog2MyBattleCry ¡± est une ¡°variable globale ¡±, une variable à portée globale. La ligne ¡°TthAog2MyBattleCry = msg ; ¡± dans la fonction ¡°TthAog2SetMyBattleCry ¡± l’a créée. Pour ceux d’entre vous qui viennent de langages comme C++, cela peut sembler contre-intuitif. Mais en Lua, si une variable n’est pas explicitement identifiée comme ayant une portée locale, elle est automatiquement globale. Même s’il a déclaré dans une fonction. Donc, ce qui suit fonctionnerait:

fonction TthAog2SetMyBattleCry(msg)
set définir le cri de bataille, pour une utilisation ultérieure
TthAgo2MyBattleCry = msg;
fin

fonction TTHAog2Event()
send envoyer un message au chat
SendChatMessage( TthAog2MyBattleCry, « SAY »);
end

Notez que TthAog2MyBattleCry est utilisé dans les deux fonctions. Aux deux endroits, il fait référence à la même variable. En utilisant l’analogie de la boîte, si TthAog2SetMyBattleCry met une valeur dans la boîte, TthAog2Event peut regarder dans la boîte et voir cette valeur.

Cependant, déclarer des variables globales de cette manière est une mauvaise pratique. Il est préférable de les déclarer en haut de votre fichier Lua. Cela présente deux avantages:

1) la liste complète des variables globales est là, où vous pouvez facilement les voir toutes en un coup d’œil

2) vous pouvez être sûr que la variable est correctement initialisée.

Il est donc préférable de le faire:

— cette variable contient notre cri de guerre
TthAog2MyBattleCry= »Pas en face! »;

fonction TthAog2SetMyBattleCry(msg)
set définit le cri de bataille, pour une utilisation ultérieure
TthAog2MyBattleCry=msg;
end

function TthAog2Event()
send envoyer un message au chat
SendChatMessage(TthAog2MyBattleCry, « SAY »);
end

Maintenant, il est beaucoup plus facile de voir ce qui se passe.

Les variables locales sont souvent utiles lorsque nous n’avons besoin que brièvement d’une valeur. En utilisant un local, il est très clair quel code modifie la variable. Parce que le local n’existe pas très longtemps, vous pouvez généralement voir tout le code qui pourrait le modifier en un coup d’œil. Ce serait une bonne idée de faire écho au nouveau cri de guerre à l’utilisateur lorsqu’il le définit. Modifions TthAog2SetMyBattleCry pour ce faire:

fonction TthAog2SetMyBattleCry(msg)
Set Définit le cri de bataille, pour une utilisation ultérieure.
TthAog2MyBattleCry= msg;

Echo Fait écho au nouveau cri de guerre pour confirmation.
écho local = TTH_AOG2_BATTLE_CRY_SET_TO.. msg;
TthAog2OutputToChat(echo);
end

Nous avons introduit plusieurs nouvelles choses en plus de la variable locale, alors regardons-les brièvement un par un:

local echo=TTH_AOG2_BATTLE_CRY_SET_TO.. msg;

Cette ligne crée une variable locale nommée ¡°echo¡± pour stocker la valeur que nous ¡ll echo à l’utilisateur. La partie après le signe égal crée une chaîne de texte qui commence par le contenu de la variable TTH_AOG2_BATTLE_CRY_SET_TO et se termine par le contenu de msg, puis attribue cette chaîne de texte à la variable locale.

Uh-oh, nous n’avons pas défini la variable TTH_AOG2_BATTLE_CRY_SET_TO. Nous le définirons avec cette ligne, placée en haut de notre fichier:

local TTH_AOG2_BATTLE_CRY_SET_TO = »Battle cry set to »;

Comme vous pouvez le voir, la variable TTH_AOG2_BATTLE_CRY_SET_TO contient simplement une chaîne. Parce que cette chaîne ne change jamais, on l’appelle une constante ¡°¡±. Placer votre constante en haut de votre fichier est toujours une bonne idée. De cette façon, si vous devez changer le libellé, la chaîne est très facile à trouver. (Comme nous le verrons dans la sixième partie, cela facilite également la localisation ou la prise en charge de plusieurs langues.) De plus, nous avons déclaré la variable TTH_AOG2_BATTLE_CRY_SET_TO comme locale, même si elle n’est pas dans une fonction. Cela signifie que la variable n’existe que dans ce fichier, et pas dans d’autres. Si vous n’utilisez qu’une variable dans un seul fichier, il est toujours bon de la rendre locale. De cette façon, vous êtes sûr qu’aucun code en dehors de votre fichier n’a pu le modifier. (Vous vous demandez peut-être pourquoi nous n’avons pas rendu TthAog2MyBattleCry local. C’est surtout parce que je voulais vous montrer à quoi ressemblait une variable globale. Mais il y a aussi une autre raison, que vous verrez dans la troisième partie.)

Passons maintenant à la ligne suivante de notre fonction:

TthAog2OutputToChat (echo);

Cette ligne appelle une fonction que nous devons écrire, pour envoyer un message à la zone de discussion. L’écho variable est transmis à la fonction. Voici à quoi ressemble cette fonction:

fonction TthAog2OutputToChat(msg)
if(DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME: AddMessage(msg);
end
end

Cette fonction détermine si nous pouvons afficher du texte dans le cadre de discussion par défaut et, le cas échéant, affiche le texte en msg dans la zone de discussion. Ce texte n’est vu par aucun autre joueur C il s’agit d’un texte strictement informatif pour le joueur exécutant l’AddOn. Si vous n’êtes pas familier avec le fonctionnement du passage de variables à des fonctions, voici comment cela se passe: lorsque TthAog2SetMyBattleCry appelle TthAog2OutputToChat en passant la variable echo, Lua certaines choses en coulisses. Il crée une variable locale nommée msg dans TthAog2OutputToChat, puis copie la valeur dans echo dans msg. Cela nous donne une variable locale nommée msg dans la fonction TthAog2OutputToChat, que nous pouvons utiliser à notre guise.

Nous n’avons pas eu besoin de créer une fonction pour ce faire. Nous aurions pu mettre le code à sortir dans la zone de discussion directement dans la fonction TthAog2SetMyBattleCry. Mais l’utilisation d’une fonction facilite vraiment la sortie de texte dans la zone de discussion. Si nous devions le faire ailleurs, il nous suffit d’appeler la fonction, pas de copier tout un bloc de code. (Nous en profitons dans la troisième partie.) De plus, si nous décidons d’afficher le texte à l’utilisateur d’une manière différente, il nous suffit de modifier le code dans la fonction. Aucun autre code ne serait affecté, ce qui réduirait les risques de bogue. Enfin, il a simplifié la fonction TthAog2SetMyBattleCry. Le code facile à lire est un code facile à déboguer.

Nous n’avons pas complètement exploré la gestion des chaînes Lua ou la hiérarchie des trames WoW, mais le faire à ce stade serait une distraction par rapport à notre objectif principal de commandes slash. Espérons que ce qui précède est suffisant pour que vous compreniez ce qui se passe dans cette version de l’AddOn.

TOUT METTRE ENSEMBLE

Nous sommes maintenant prêts à réécrire l’AddOn battle cry pour permettre à l’utilisateur de spécifier un cri de bataille préféré via des commandes slash. Tout comme dans la Première partie, il y a trois dossiers impliqués:
– fichier toc
– fichier XML
– Fichier de code Lua

Le fichier toc est presque inchangé par rapport à la Première partie:

## Interface: 11000
## Title: TenTonHammer Guide Part 2
## Author: TenTonHammer.com
## Notes: Makes your character scream a customizable battle cry when combat begins
TthAog2.xml

Nous venons de changer ¡°1¡± en ¡° 2¡±, et avons changé les notes pour appeler le cri de bataille ¡°personnalisable ¡± au lieu de ¡° idiot ¡±. Enregistrez ce fichier toc en tant que TthAog2.toc dans un dossier nommé TthAog2 sous les AddOns de dossier.

Le fichier XML est identique à la Première partie, sauf pour changer ¡°1 en ¡°2¡±:

< Si vous avez besoin d’une interface utilisateur, vous pouvez l’utiliser comme suit := »http://www.blizzard.com/wow/ui/ »>
< Fichier de script = « TthAog2.lua »/>
< Nom du cadre = » TthAog2Core »>
<Scripts>
<OnLoad>TthAog2Load();</OnLoad>
<OnEvent>TthAog2Event();</OnEvent>
</Scripts>
</Frame>
</Ui>

Enregistrez ce fichier XML en tant que TthAog2.xml vers un dossier nommé TthAog2 sous les AddOns de dossier.

Enfin, nous avons le fichier Lua contenant le code lui-même. Vous avez déjà vu toutes ces pièces:

strings Chaînes constantes.
local TTH_AOG2_BATTLE_CRY_SET_TO = »Cri de bataille réglé sur »;
This Cette variable tient notre cri de guerre.
TthAog2MyBattleCry = »Pas dans le visage! »;

function Fonction utilitaire pour l’impression dans la zone de discussion
fonction TthAog2OutputToChat(msg)
if(DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME: AddMessage(msg);
end
end

Called Appelé lorsque l’AddOn se charge.
fonction TthAog2Load()
Register S’inscrire à un événement.
ceci: RegisterEvent(« PLAYER_REGEN_DISABLED »);

— Créez la commande slash.
SlashCmdList=TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1= »/setmybattlecry2″;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2= »/smbc2″;
end

Called Appelé lorsque la commande slash s’exécute.
fonction TthAog2SetMyBattleCry(msg)
Set Définit le cri de bataille, pour une utilisation ultérieure.
TthAog2MyBattleCry= msg;

Echo Fait écho au nouveau cri de guerre pour confirmation.
écho local = TTH_AOG2_BATTLE_CRY_SET_TO.. msg;
TthAog2OutputToChat(echo);
end

Called Appelé pour gérer l’événement pour lequel nous sommes enregistrés.
fonction TthAog2Event()
Send Envoyer un message au chat.
Envoyer un message (TthAog2MyBattleCry, « DIRE »);
end

Par rapport à la Première partie, nous avons ajouté la variable globale TthAog2MyBattleCry, ajouté le code pour créer la commande slash, ajouté la fonction TthAog2SetMyBattleCry et utilisé la variable globale TthAog2MyBattleCry dans TthAog2Event. Nous avons également ajouté d’autres commentaires.

Enregistrez ce fichier lua en tant que TthAog2.lua vers un dossier nommé TthAog2 sous les AddOns de dossier.

QUE FAIT-IL

Maintenant, démarrez WoW et combattez. Vous¡ll voir le cri de bataille idiot ¡° Pas dans le visage!¡±. Cela reflète la valeur par défaut de la variable TthAog2MyBattleCry. Tapez maintenant ce qui suit :

/smbc2 Au combat!

Vous verrez le nouveau cri de guerre résonner dans la zone de discussion. Maintenant, entrez dans un autre combat, et vous verrez ¡° Au combat!¡± au lieu de ¡° Pas dans le visage!¡±. Si vous préférez désactiver le cri de guerre, vous pouvez simplement taper:

/ smbc2

Notre écho n’est pas très bien formulé pour ce cas (il dira simplement ¡° Battle cry réglé sur ¡±). S’il s’agissait d’un véritable AddOn destiné au grand public, nous testons la valeur de msg et affichons un écho spécial si l’utilisateur efface le cri de guerre. Parce que ce n’est qu’un exemple, nous ne compliquerons pas le code.

MOTS FINAUX

Si vous essayez la nouvelle version de l’AddOn et que votre personnage crie deux cris de bataille, c’est probablement parce que vous avez toujours l’AddOn de la Première partie de ce guide installé et actif. Parce que nous avons fait attention à nommer, cela ne causera aucune erreur. Mais ce n’est probablement pas non plus ce que vous voulez. Il suffit de désactiver ou de supprimer la première version C la nouvelle est de toute façon meilleure.

Il y a cependant un problème: votre cri de guerre est perdu entre les sessions. Chaque fois que vous fermez et redémarrez WoW, vous serez de retour à ¡° Pas dans le visage!¡±. Lorsque vous serez prêt, passez à la troisième partie et nous verrons comment faire votre cri de bataille préféré ¡° coller ¡± entre les sessions.