Guide: l'éditeur de carte de Warcraft III
- Par RaptorTeak - Edition du : 12 May 2006 - Créé le : 10 May 2006

Chapitre:


Page:


Comparaison de textes

Qui dit comparaison dit condition :p . Il est en effet possible de comparer des chaînes de texte (enfin du texte quoi), pour voir si elles sont égales ou non.

Nous allons donc voir un exemple qui vérifie si ce qu'a entré un joueur dans le chat correspond à "je veux gagner" ou non. Et si jamais c'est ce qu'il a écrit, on lui fait gagner la partie :) .
Déja, commençons par l'évènement, il s'agit de : Joueur - Chat Message.
Paramètres :
  • Le joueur qui est censé écrire
  • Ce qu'il est censé écrire
  • Et enfin, le dernier paramètre, si l'on met "Resultat Equivalent", le joueur devra entrer EXACTEMENT ce que vous avez marqué dans la paramètre précédent, sans un espace de plus ou de moins, tandis que si vous mettez "une sous-chaine", il suffit que le texte que vous avez écrit dans le paramètre précédent soit dans ce que le joueur a écrit pour que ça marche. Exemple : Vous mettez "salut" en paramètre. Avec Résultat Equivalent, "salut" marchera, mais "salut toi !" ne marchera pas. Tandis qu'avec une sous-chaine, "salut toi !" marchera tout de même.


Bon, là, vous allez peut-être me crier dessus, mais c'est juste pour vous faire manipuler les conditions. Pour l'instant, vous avez dû vous dire "Fastoche, je mets je veux gagner dans le second paramètre, puis une action qui fait gagner le joueur, et hop !". Oui mais non ^^ . C'est sûr, c'est la méthode la plus simple, et par conséquent celle que même moi aurait utilisé. Toutefois, vu que je veux vous faire apprendre les conditions de comparaison de texte, nous allons faire comme ceci :
  • Dès que le joueur rouge marque quelque chose
  • On vérifie si ce quelque chose est égal à "je veux gagner"
  • S'il l'est, on le fait gagner, sinon on lui dit "ce que vous avez entré n'est pas un cheat code !"


T'es bien gentil, mais je te rappelle que dans le deuxième paramètre de l'évènement, on est obligé de mettre du texte, donc on peut pas faire Dès qu'un joueur marque quelque chose.


Sisi :p . Il suffit pour cela de cliquer sur le deuxième paramètre, et de valider tout de suite après, sans rien écrire dans la case Valeur :D . Votre paramètre se transformera alors en Chaîne Vide. Et donc maintenant, dès que le joueur rouge marquera n'importe quoi, hop le déclencheur sera lancé :) :



Ensuite, on a dit que si ce qu'il entrait était égal à "je veux gagner" on le faisait gagner, mais que sinon on lui disait "ce que vous avez entré n'est pas un cheat code !"
Qui dit sinon dit condition dans les actions :D .

On fait donc une nouvelle action : If/Then/Else, Multiple Functions.
Dans la condition, nous devrons utiliser une comparaison de chaîne de texte. Toutefois, vu que c'est anglais, chaîne de texte se dit "string" en anglais. Il faudra donc utiliser String comparaison pour comparer des Strings chaînes de textes (pour éviter les jeux de mots douteux :-° ) :



On valide. Là, il faut croire que l'éditeur lit dans nos pensées : la première chaîne de texte à comparer est : (Entered Chat String, signifiant : La chaîne de texte entrée. Autrement dit ce qu'a marqué le joueur.
Nous, puisque nous voulons comparer ça à "je veux gagner", il faut donc mettre, tout simplement, dans le deuxième paramètre : "je veux gagner". De cette manière, si ce que l'on a entré correspond à "je veux gagner", les actions dans Alors - Actions seront effectuées, sinon les actions dans Sinon - Actions seront effectuées :



Maintenant, l'action permettant de faire gagner un joueur est : Partie - Victory. Mettez le joueur 1 puisque de toute façon le déclencheur ne s'active que lorsque le joueur 1 marque un message.

Et ensuite, on met dans la partie sinon une action qui affiche à tout le monde le texte "ce que vous avez entré n'est pas un cheat code !".

J'ai volontairement décidé d'afficher le texte à tout le monde. En effet, Nous verrons juste après comment l'afficher au joueur en question.


Réponse évènement - Triggering Player



He oui, comme les réponses évènements ne s'appliquent pas qu'aux unités (et même, si vous regardez de plus près le paramètre par défaut (Entered Chat String), vous remarquerez que c'est aussi une réponse-évènement), elles s'appliquent aussi aux joueurs.

Dans l'exemple que nous venons de voir ci-dessus, nous avons décidé de faire gagner le joueur 1, ou bien d'afficher un message à tous les joueurs disant "ce que vous avez entré n'est pas un cheat code !" au joueur 1. Il y avait toutefois une autre solution pour parler du joueur 1 : réponse-évènement : Triggering Player.
Triggering Player agit comme Triggering Unit : il se réfère au premier joueur dont on parle dans l'évènement (Triggering Unit se réfère à la première unité dont on parle dans l'évènement).
Là, le premier joueur dont on parle dans l'évènement (il n'y en a qu'un de toute façon) est bel et bien le joueur 1.

Oui mais dans cet exemple, comme uniquement le joueur 1 peut marquer un message, autant utiliser joueur 1 directement !


Vous avez tout à fait raison. Toutefois... Imaginons que cette map fût une map 12 joueurs, et que chaque joueur puisse marquer "je veux gagner" pour gagner, ou bien sinon on affiche à ce joueur "ce que vous avez entré n'est pas un cheat code !", Là nous aurions été forcés d'utiliser Triggering Player, sinon, dès que quelqu'un aurait marqué "je veux gagner", cela aurait fait gagner le joueur rouge :p . Voici donc ce qu'il aurait fallu mettre s'il y avait 12 joueurs :



Je vous rappelle qu'il suffit que l'un des évènements listés s'active pour lancer tout le déclencheur !


Pour l'instant, votre déclencheur affiche à tous les joueurs le texte "Ce que vous avez entré n'est pas un cheat code !". Mais, ce serait plus esthétique d'envoyer ce message uniquement à la personne qui marque autre chose que "je veux gagner", non ?

On reprend donc notre action Partie - Text Message, et on clique sur le paramètre (All Players).
Pour l'envoyer au joueur en question, vous avez dû vous dire : "Bah je met Triggering Player en paramètre et c'est gagné !". Bah allez-y, faites dérouler les fonctions. Et là mystère, y'a pas Triggering Player o_O .

La solution, je vais vous la donner :
Dans ce paramètre, il ne faut pas renseigner un joueur, mais un groupe de joueurs.
Un groupe de joueurs, c'est comme un groupe d'unités, mais pour les joueurs ^^ (nonn, sans blagues :p ).
Triggering Player est lui un joueur, et non pas un groupe. C'est pourquoi il n'apparaît pas dans la liste. Il existe pourtant une solution pour remédier à ce problème : convertir un joueur en groupe de joueurs. En effet, on peut tout à fait créer un groupe de joueurs ne contenant qu'un joueur (et même zéro si ça nous amuse ^^ ).

Cette fameuse fonction permettant de convertir un joueur en groupe de joueurs est déja dans la liste, il s'agit de : Convert Player to Player Group :

Cette fonction ne prend qu'un paramètre : Il s'agit du joueur à convertir en groupe de joueur :) .
Mettez donc la réponse-évènement Triggering Player comme paramètre, pour vous retrouver avec ceci :



Validez, et votre action Partie - Text Message devrait maintenant se retrouver comme telle :



Et voila :D .

Il est tout à fait possible d'utiliser les groupes de joueurs en tant qu'actions, exactement comme les groupes d'unités, pour faire subir des actions aux joueurs groupés ensuite :) :




Sauf que, au lieu de prendre les joueurs contenus dans une région, ou les joueurs possédés par des joueurs (ça n'aurait pas de sens :D ), vous pouvez prendre tous les alliés de tel joueur, tous les joueurs qui jouent actuellement, tous les joueurs contrôlés par des ordinateurs, etc etc....

Ce chapitre n'a pas dû être trop dur je pense... Toutefois accrochez-vous pour le suivant :p .