Comme le titre l'indique, la 2eme leçon, profitez-en !!
Je ne fais que citer le boulot d'Helluin, rien n'est de moi :
Comment faire une macro - Cours 2.
Me revoilà ! J'espère que le premier cours vous a plu. En tous cas, écrire ce tutorial m'est très bénéfique !
Allez ! On arrete de blablater et on se retrousse les manches !
4) Informations sur un personnage
Vous êtes en goulet et vous voyez un ennemi qui va s'engoufrer dans votre tunnel...
Nous allons faire une macro qui va vous aider :
Nous allons faire afficher en un clic toutes les infos sur l'adversaire sur le canal de raid.
La fonction UnitName("target") permet d'obtenir le nom de la cible. La fonction UnitClass("target") permet de connaitre la classe. UnitRace("target") nous donne la race. Enfin, UnitLevel("target") permet de connaitre le niveau d'un autre personnage. Avec tout ça on peut se faire un super script pour décrire l'arrivée d'un ennemi !
Voilà l'idée générale :
- Dans c on met la classe de la cible.
- Dans n on met le nom de la cible.
- Dans l on met le niveau de la cible.
- Dans r on met la race de la cible.
- On écrit sur le canal de raid une synthèse de tout ça.
Attention pour mélanger des résultats de fonction avec du texte on utilise ce qu'on appel une concaténation. Le texte est mis entre guillemets, les variables sont appelées par leur noms. Pour les mettre ensemble on utilise un point suivi d'un autre point ( .. ).
En script cela donne :
/script c=UnitClass("target"); n=UnitName("target"); l=UnitLevel("target"); r=UnitRace("target"); SendChatMessage( n .. ", " .. r .. " " .. c .. " de cercle " .. l .. " arrive par le tunnel !", "RAID");
Donc vous êtes en defense. Votre stratégie, pour les goulets, c'est de vous poster à l'extérieur pour voir venir de loin (je vous approuve !). Là vous voyez un ennemi qui s'approche du tunnel. Vous lui cliquer dessus puis vous appuyer sur le bouton de votre macro. Vous obtenez ce message :
Mylka, Tauren chaman de cercle 48 arrive par le tunnel !
Personnellement, je trouve ça beaucoup mieux que les messages ultra stressant du type : "Les vla !".
Note : Vous pouvez aussi ne pas spécifier le canal. De cette façon, la macro s'affichera sur le canal où vous avez parlé en dernier.
5) Une macro qui s'adapte !
Comme vous avez pu le constater, nos macros ont un comportement unique. C'est à dire qu'on clique et qu'on obtient toujours la même chose. Vous aussi vous trouvez que c'est un peu limité ? On va voir maintenant un moyen d'adapter la macro suivant ce qu'on a en face de soit en ajoutant une condition.
En informatique les conditions s'écrivent ainsi :
SI condition est vraie ALORS action 1 SINON action 2 FIN
Pour nous ca va etre la meme chose.
La fonction UnitIsFriend("player","target") permet de savoir si la cible est un ami ou non. C'est à dire que cette fonction renvoie un code informatique qui correspond soit à "vrai" soit à "faux" suivant la cible.
Un des principes de WoW est "tape sur tes ennemis et aide tes amis" ! Appliquons cette adage plein de sagesse en faisant une macro qui envoie un bon gros sort aggressif sur les ennemis et qui lance une amélioration sur les amis :
/script if (UnitIsFriend("player","target")) then CastSpellByName('Mot de pouvoir : Robustesse'); else CastSpellByName('Châtiment'); end;
En faisant
if (UnitIsFriend("player","target"))
On teste si nous (player) et notre cible (target) nous sommes amis. Si c'est le cas on applique ce qui se trouve après le "then". Par contre si la condition est fausse on applique ce qui est après le "else".
Pour généraliser, le squelette des conditions est :
if( condition ) then action1; else action2; end;
Reprenons notre exemple pour le goulet (oui, j'adore ça ^_^ !). Les ennemis peuvent venir de plusieurs endroits. La plupart du temps c'est soit le tunnel, soit le balcon.
De plus, il existe une fonction qui permet de savoir si la touche Control (CTRL) est appuyée ou non : IsControlKeyDown().
Nous pouvons donc faire une macro qui annonce sur le canal raid "Tunnel !" si on clique sur la macro simplement ou alors qui annonce "Balcon" si on clique sur la macro avec la touche CTRL enfoncée.
Pour les plus courageux, je vous encourage à prendre une feuille de papier et à essayer de la faire par vous même avant de lire ma version...
Donc on démarre en précisant que c'est un script. Puis on commence notre condition. Si la touche CTRL est enfoncé on dit "Balcon !" sinon "Tunnel".
/script if( IsControlKeyDown() ) then SendChatMessage( "Balcon !"); else SendChatMessage( "Tunnel !"); end;
Et voilà ! C'est pas si sorcier hein ?!
On peut donc améliorer notre macro précédente en donnant toutes les infos sur un perso et l'endroit où il arrive !
/script if(IsControlKeyDown()) then m=" balcon."; else m=" tunnel."; end; c=UnitClass("target"); n=UnitName("target"); l=UnitLevel("target"); r=UnitRace("target"); SendChatMessage( n..", "..r.." "..c.." de cercle "..l.." arrive par le ".. m);
Oulà ! ca rentre de justesse ! 242 caractères ! C'est vrai qu'on est pas obligé de faire des phrases aussi construite ou de dire la race... A vous d'adapter. Le but c'est que vous appreniez à faire vos propre macros.
6) Tester une classe, une race, etc...
Attention on passe un cran au dessus ! Il existe une fonction qui permet de chercher des mots dans une phrase (en programmation, pour se la raconter, on dit une chaine de caractères). C'est la fonction strfind. Elle marche comme cela :
strfind( grande_phrase , petite_phrase );
Si "petite_phrase" est contenue dans "grande_phrase" alors la fonction renvoie vrai sinon elle renvoie faux. Donc on peut tester plein de choses ! Par exemple on peut voir si la cible est un voleur grace à :
if ( strfind( UnitClass("target") , "voleur" ) ) then sort_contre_un_voleur; else sort_normal; end;
Les chasseurs et les druides peuvent lancer leur marque ou leur luciole en priorité par exemple.
Je vais donner un peu plus d'explications :
UnitClass("target") me donne la class de ma cible. Imaginons qu'il s'agisse d'un mage, la fonction va me renvoyé la chaine de caractères "Mage".
Dans ma macro j'ai ça : strfind( UnitClass("target") , "voleur" ). Dans notre exemple du mage c'est comme si j'avais : strfind( "Mage" , "voleur" ). L'ordinateur va chercher si le mot "voleur" se trouve dans la phrase "Mage". La réponse est non. Donc la condition n'est pas remplie. C'est la partie du "else" qui va etre activer. Vous comprenez ? C'est bon ?
Voilà c'est la fin du deuxième cours !
Bon ! Nous avons vu plein de nouvelles choses ! Nous savons maintenant faire des conditions avec le if ; nous pouvons trouver la race, la classe, le nom et le niveau des autres joueurs. Nous avons vu aussi comment tester si la touche control était enfoncée. (Remarque : De la même façon la fonction IsShiftKeyDown() permet de tester la touche SHIFT.) Enfin, grâce à la fonction SendChatMessage nous pouvons parler...
Il est temps pour vous de mettre en pratique tout cela et pour moi d'aller me reposer !
Dans le prochain cours nous verrons comment parcourir tous les membres de son groupe, de son raid ou tout ses sacs grace aux boucles for et aux boucles while.