Project

Profile

Help

Triggers » History » Sprint/Milestone 1

Vincent Le Goff, 01/13/2017 10:37 PM
Reprendre ProofRead #1 à Les canaux CocoMUD dans les triggers

1 1 Vincent Le Goff
h1. Les triggers dans CocoMUD
2 1 Vincent Le Goff
3 1 Vincent Le Goff
Il est possible que les triggers soient la fonctionnalité la plus puissante de tout client MUD. CocoMUD propose un système simple et flexible de triggers, qui sera présenté ici avec de nombreux exemples.
4 1 Vincent Le Goff
5 1 Vincent Le Goff
{{toc}}
6 1 Vincent Le Goff
7 1 Vincent Le Goff
h2. Qu'est-ce qu'un trigger ?
8 1 Vincent Le Goff
9 1 Vincent Le Goff
Normalement, si vous entrez une commande dans le client, le serveur devrait vous "répondre" en envoyant une ou plusieurs lignes. Cette réponse est constituée en grande partie (sinon en totalité, à l'exception des couleurs) de texte, tout comme votre commande.
10 1 Vincent Le Goff
11 1 Vincent Le Goff
Les triggers peuvent intercepter une ligne particulière et réagir en fonction, en faisant quelque chose. C'est l'expression la plus simple d'un trigger : je surveille le texte envoyé par le serveur, je réagis si je rencontre une certaine ligne et je fais quelque chose en retour.
12 1 Vincent Le Goff
13 1 Vincent Le Goff
Les triggers étant potentiellement puissants, leur configuration a été répartie dans différentes couches de complexité : vous n'avez pas besoin de comprendre (ni même de connaître l'existence) des types de triggers les plus avancés pour utiliser cette fonctionnalité. Cette documentation va décrire dans l'ordre la mise en place, pas à pas, des triggers les plus simples jusqu'aux triggers les plus complexes.
14 1 Vincent Le Goff
15 1 Vincent Le Goff
h2. Créer un trigger
16 1 Vincent Le Goff
17 1 Vincent Le Goff
Commençons par quelque chose de simple : un trigger qui joue un son quand quelqu'un (n'importe qui) parle sur un canal du jeu.
18 1 Vincent Le Goff
19 1 Vincent Le Goff
Cet exemple sera différent sur n'importe quel MUD, bien entendu, n'hésitez donc pas à l'adapter en fonction de vos besoins. Pour notre exemple, admettons que nous pouvons utiliser la commande "hrp" pour envoyer un message sur le canal "hrp", comme ceci :
20 1 Vincent Le Goff
21 1 Vincent Le Goff
<pre>
22 1 Vincent Le Goff
hrp bonjour à vous !
23 1 Vincent Le Goff
</pre>
24 1 Vincent Le Goff
25 1 Vincent Le Goff
Et si tout va bien, le MUD devrait répondre avec :
26 1 Vincent Le Goff
27 1 Vincent Le Goff
<pre>
28 1 Vincent Le Goff
[hrp] Vous dites : bonjour à vous !
29 1 Vincent Le Goff
</pre>
30 1 Vincent Le Goff
31 1 Vincent Le Goff
Ou bien, si quelqu'un d'autre parle sur le canal "hrp", vous pourriez voir un message comme ceci :
32 1 Vincent Le Goff
33 1 Vincent Le Goff
<pre>
34 1 Vincent Le Goff
[hrp] Aaron dit : coucou
35 1 Vincent Le Goff
</pre>
36 1 Vincent Le Goff
37 1 Vincent Le Goff
En bref, si nous voulons créer un trigger qui intercepte ces lignes, il nous faut un trigger qui intercepte les lignes qui commencent par "[hrp]" ("hrp" entouré de crochets).
38 1 Vincent Le Goff
39 1 Vincent Le Goff
bq. Pourquoi intercepter ces messages ?
40 1 Vincent Le Goff
41 1 Vincent Le Goff
Si vous êtes nouveau dans l'utilisation des triggers, vous pourriez vous demander à quoi ils servent. La réponse dans ce cas précis pourrait être que, quand on reçoit un message sur le canal "hrp", le client joue un son. C'est sur cela que nous allons travailler.
42 1 Vincent Le Goff
43 1 Vincent Le Goff
Nous allons donc voir comment créer un trigger qui :
44 1 Vincent Le Goff
45 1 Vincent Le Goff
* Réagit quand le client reçoit une ligne commençant par "[hrp]" ;
46 1 Vincent Le Goff
* Joue un son à ce moment.
47 1 Vincent Le Goff
48 1 Vincent Le Goff
Comme la plupart des fonctionnalités sur CocoMUD, on peut créer des triggers en passant par l'interface ou par une instruction SharpScript. La première étant la plus facile pour commencer, nous allons la voir d'abord.
49 1 Vincent Le Goff
50 1 Vincent Le Goff
h3. Depuis l'interface
51 1 Vincent Le Goff
52 1 Vincent Le Goff
Pour ajouter, éditer ou suppriemr un trigger depuis l'interface de CocoMUD, ouvrez la barre de menu, *Jeu* -> *Triggers*.
53 1 Vincent Le Goff
54 1 Vincent Le Goff
Vous devriez vous trouver dans une boîte de dialogue listant les triggers actuellement configurés sur cet univers. Il est très possible que cette liste soit vide la première fois que vous ouvrez cette boîte de dialogue. Pour créer un trigger, cliquez sur le bouton *Ajouter*.
55 1 Vincent Le Goff
56 1 Vincent Le Goff
Une nouvelle boîte de dialogue s'ouvre alors. Le curseur devrait se trouver dans une zone d'édition, où l'on vous demande d'entrer le trigger (c'est-à-dire, son déclencheur, la partie qui va indiquer à CocoMUD quoi surveiller).
57 1 Vincent Le Goff
58 1 Vincent Le Goff
Pour notre exemple, nous avons déterminé que notre trigger devrait s'exécuter quand le client reçoit une ligne commençant par @[hrp]@. Vous pouvez écrire @[hrp]@ dans cette zone de texte, mais ne la quittez pas encore : si vous créez un trigger déclenché par @[hrp]@, le trigger ne sera exécuté que si le client envoie une ligne ne contenant *que* @[hrp]@. Ce n'est pas ce que l'on veut faire ici : nous voulons que le trigger réagisse à une ligne commençant par @[hrp]@ . La solution est de mettre un signe astérisque (@*@) après @{hrp}@, pour dire au client que @[hrp]@ peut être suivi de n'importe quoi.
59 1 Vincent Le Goff
60 1 Vincent Le Goff
Peut-être reconnaissez-vous cette syntaxe : c'est la même que pour créer des [[Alias|alias]] avec variables, et ce n'est pas une coïncidence, nous verrons plus tard pourquoi.
61 1 Vincent Le Goff
62 1 Vincent Le Goff
Pour l'instant, vous pouvez écrire dans ce champ de texte :
63 1 Vincent Le Goff
64 1 Vincent Le Goff
<pre>
65 1 Vincent Le Goff
[hrp]*
66 1 Vincent Le Goff
</pre>
67 1 Vincent Le Goff
68 1 Vincent Le Goff
Si vous appuyez sur Tab, vous devriez vous trouver dans une liste d'actions que l'on peut associer à ce trigger. Dans notre exemple, nous voudrions jouer un son quand ce trigger se déclenche : parcourez la liste jusqu'à trouver l'action :
69 1 Vincent Le Goff
70 1 Vincent Le Goff
<pre>
71 1 Vincent Le Goff
Joue un son
72 1 Vincent Le Goff
</pre>
73 1 Vincent Le Goff
74 1 Vincent Le Goff
Et cliquez sur le bouton suivant : *Ajouter l'action*.
75 1 Vincent Le Goff
76 1 Vincent Le Goff
On vous demande maintenant de configurer cette action (dans notre cas, choisir le fichier sonore à jouer quand ce trigger se déclenche). Vous avez un bouton "Parcourir" qui vous permet de trouver le fichier sonore sur votre disque dur. Le bouton "Test" permet de vérifier que CocoMUD parvient bien à lire et jouer ce fichier. Si tout se passe bien, cliquez sur *OK*. L'action sera ajoutée au trigger. vous vous trouverez dans la liste des actions liées à ce trigger :
77 1 Vincent Le Goff
78 1 Vincent Le Goff
<pre>
79 1 Vincent Le Goff
#play mon_fichier.wav
80 1 Vincent Le Goff
</pre>
81 1 Vincent Le Goff
82 1 Vincent Le Goff
Bien sûr, "mon_fichier.wav" sera remplacé par le chemin et le nom du fichier que vous avez sélectionné. La représentation de l'action est en version courte (version SharpScript), cela explique pourquoi vous voyez @#play mon_fichier.wav@. Ne vous en inquiétez pas trop, c'est surtout un point de repère pour vérifier que l'action a bien été ajoutée, ainsi qu'un moyen de l'éditer, si vous voulez par exemple jouer un autre fichier sonore à la place.
83 1 Vincent Le Goff
84 1 Vincent Le Goff
Ces deux listes et les quelques boutons qui l'entourent forment l'éditeur SharpScript, permettant de configurer des actions assez complexes sans toucher au SharpScript de près ou de loin. Cette fenêtre peut s'avérer un peu intimidante au premier abord, voici donc un résumé de ce qu'elle contient. Notez que vous trouverez la même hiérarchie pour configurer [[Alias|les alias]] ou [[Macros|les macros]] et d'autres fonctionnalités de CocoMUD dépendantes du SharpScript :
85 1 Vincent Le Goff
86 1 Vincent Le Goff
* La première chose à renseigner pour les triggers est le déclencheur, comme nous l'avons fait plus haut. C'est une zone de texte toute simple ;
87 1 Vincent Le Goff
* Au-dessous se trouve une liste d'actions connectés à ce trigger. C'est une liste, vous pouvez naviguer avec les flèches pour la parcourir ou sélectionner une action précise ;
88 1 Vincent Le Goff
* À droite se trouve le bouton pour éditer la ligne d'action sélectionnée (dans notre cas, nous pourrions vouloir changer le fichier sonore joué par le trigger) ;
89 1 Vincent Le Goff
* Toujours à droite se trouve le bouton pour supprimer la ligne d'action. Notez que ces trois champs (liste d'actions, bouton éditer et bouton supprimer) n'apparaissent pas si aucune action n'est associée à ce trigger ;
90 1 Vincent Le Goff
* Au-dessous se trouve une liste d'actions que l'on pourrait vouloir lier à ce trigger. C'est dans cette liste que nous avons sélectionné "joue un son" dans l'exemple ci-dessus. Elle apparaît dans tous les cas, car un trigger peut être connecté à aucune, une, deux ou de nombreuses actions, il n'y a pas vraiment de limite.
91 1 Vincent Le Goff
* À droite se trouve le bouton pour ajouter l'action sélectionnée.
92 1 Vincent Le Goff
* Le reste de la fenêtre contient d'autres cases à cocher et options qui seront détaillées dans la suite de cette documentation.
93 1 Vincent Le Goff
94 1 Vincent Le Goff
Nous avons créé notre trigger @[hrp]*@ connecté à une action pour jouer un son : vous pouvez donc cliquer sur *OK*. Vous devriez vous retrouver dans la liste des triggers actuels, sur le trigger que vous venez d'ajouter. Appuyez de nouveau sur *OK* pour fermer la boîte de dialogue en sauvegardant. Si vous quittez la boîte de dialogue autrement, le trigger ne sera pas ajouté.
95 1 Vincent Le Goff
96 1 Vincent Le Goff
Pour vérifier que notre nouveau trigger marche correctement, essayons d'envoyer un message sur le canal "hrp" :
97 1 Vincent Le Goff
98 1 Vincent Le Goff
<pre>
99 1 Vincent Le Goff
hrp Est-ce que ça marche ?
100 1 Vincent Le Goff
</pre>
101 1 Vincent Le Goff
102 1 Vincent Le Goff
Si tout va bien (et partant du principe que le serveur répond comme on l'attend), on devrait recevoir la ligne :
103 1 Vincent Le Goff
104 1 Vincent Le Goff
<pre>
105 1 Vincent Le Goff
[hrp] Vous dites : est-ce que ça marche ?
106 1 Vincent Le Goff
</pre>
107 1 Vincent Le Goff
108 1 Vincent Le Goff
Et vous devriez entendre le son que vous avez sélectionné à l'étape précédente. Voilà ! Ce n'était pas si difficile, si ?
109 1 Vincent Le Goff
110 1 Vincent Le Goff
h3. Depuis le SharpScript
111 1 Vincent Le Goff
112 1 Vincent Le Goff
Comme toujours, l'interface permet de manipuler des options potentiellement complexes, mais elles sont toutes converties en SharpScript à la fin, même si vous n'avez pas vraiment besoin de vous en occuper. Créer le trigger de notre exemple en SharpScript est assez facile : vous pouvez entrer cette ligne directement dans votre client, ou bien dans le fichier "config.set".
113 1 Vincent Le Goff
114 1 Vincent Le Goff
<pre>
115 1 Vincent Le Goff
#trigger [hrp]* {#play mon_fichier.wav}
116 1 Vincent Le Goff
</pre>
117 1 Vincent Le Goff
118 1 Vincent Le Goff
C'est une instruction SharpScript. De gauche à droite, nous avons :
119 1 Vincent Le Goff
120 1 Vincent Le Goff
* @#trigger@ est le nom de l'action SharpScript. Ici, @#trigger@ crée simplement un nouveau trigger ;
121 1 Vincent Le Goff
* @[hrp]*@ est notre déclencheur, ce que le trigger doit surveiller quand on reçoit des messages du serveur. Tout comme audessus, on a précisé @[hrp]*@ , qui veut dire "toute ligne commençant par @[hrp]@" ;
122 1 Vincent Le Goff
* Ensuite, on doit préciser la ou les actions à exécuter quand ce trigger se déclenche. Ici, @#play mon_fichier.wav@. @#play@ est une autre action SharpScript, qui permet simplement de jouer le fichier passé en argument. Puisque notre argument contient un espace entre le nom de l'action @#play@ et l'argument de la fonction @mon_fichier.wav@, on doit entourer l'argument d'accolades.
123 1 Vincent Le Goff
124 1 Vincent Le Goff
Ajouter un trigger en SharpScript est peut-être bien plus rapide, mais le système ne vous pardonnera pas facilement si vous faites des erreurs de syntaxe. L'interface nécessite d'avantage d'étapes, mais elle est généralement plus sûre.
125 1 Vincent Le Goff
126 1 Vincent Le Goff
h2. Editer un trigger
127 1 Vincent Le Goff
128 1 Vincent Le Goff
Dans la boîte de dialogue des triggers (menu *Jeu* -> *Triggers*), vous pouvez éditer un trigger. Vous aurez besoin d'éditer un trigger dans deux cas : si vous voulez changer son déclencheur (la partie qui indique au trigger quel morceau de texte surveiller) on ses actions (la partie qui décrit quoi faire quand ce trigger se déclenche).
129 1 Vincent Le Goff
130 1 Vincent Le Goff
h2. Supprimer un trigger
131 1 Vincent Le Goff
132 1 Vincent Le Goff
Supprimer un trigger peut se faire depuis l'interface également. Cliquez simplement sur le bouton *Supprimer* après avoir sélectionné un trigger existant. Confirmez que vous voulez supprimer ce trigger. N'oubliez pas de fermer la boîte de dialogue en cliquant sur *OK*, sans quoi votre trigger ne sera pas effacé.
133 1 Vincent Le Goff
134 1 Vincent Le Goff
h2. Utiliser des variables dans les triggers
135 1 Vincent Le Goff
136 1 Vincent Le Goff
Il est tant de regarder plus attentivement le signe astérisque (@*@) que nous avons utilisé plus haut. Ce n'est pas un hasard si vous reconnaissez cette syntaxe depuis la documentation des [[Alias|alias]], puisqu'il s'agit de la même chose : l'astérisque veut dire "tout et n'importe quoi".
137 1 Vincent Le Goff
138 1 Vincent Le Goff
Voici une liste des syntaxes possibles, pour vous donner une idée :
139 1 Vincent Le Goff
140 1 Vincent Le Goff
| Syntaxe | Signifie |
141 1 Vincent Le Goff
| @Bienvenue*@ | N'importe quelle ligne commençant par @Bienvenue@ . |
142 1 Vincent Le Goff
| @*classe@ | N'importe quelle ligne finissant par @classe@ . |
143 1 Vincent Le Goff
| @*passage*@ | N'importe quel ligne contenant (au début, à la fin ou au milieu) @passage@. Notez que ce trigger sera aussi déclenché si la ligne contient @passager@, par extension. |
144 1 Vincent Le Goff
| @* passage *@ | N'importe quelle ligne contenant le mot @passage@ entouré d'espaces. Le mot @passager@ ne déclenchera plus ce trigger cette fois. |
145 1 Vincent Le Goff
| @Vous gagnez * crédits en *.@ | Des lignes comme @Vous gagnez 80 crédits en combat.@ ou @Vous gagnez 10 crédits en management.@ déclencheront ce trigger. La ligne @Vous gagnez un certain nombre de crédits en quelque chose.@ déclenchera le trigger également. |
146 1 Vincent Le Goff
147 1 Vincent Le Goff
En bref, un signe astérisque veut dire n'importe quoi : une lettre, un chiffre, un mot, un nombre, un espace, un signe de ponctuation, un message assez long... voire rien du tout.
148 1 Vincent Le Goff
149 1 Vincent Le Goff
Un mot de mise en garde : la syntaxe de vos déclencheurs est très importante, et vous devriez vérifier avec soin les lignes que vous souhaitez intercepter.
150 1 Vincent Le Goff
151 1 Vincent Le Goff
<pre>
152 1 Vincent Le Goff
*table*
153 1 Vincent Le Goff
</pre>
154 1 Vincent Le Goff
155 1 Vincent Le Goff
Ce trigger se déclenchera quand le mot @table@ se trouve dans une ligne, au début, au milieu ou à la fin. Ce trigger se déclencherait donc avec les lignes suivantes :
156 1 Vincent Le Goff
157 1 Vincent Le Goff
<pre>
158 1 Vincent Le Goff
~ un tableau noir (commande board) se trouve ici
159 1 Vincent Le Goff
Dans l'angle nord-est de la cour se trouve un long bâtiment de bois peint en rouge, probablement une étable.
160 1 Vincent Le Goff
</pre>
161 1 Vincent Le Goff
162 1 Vincent Le Goff
Souvenez-vous qu'un trigger est autant facile à restrindre que facile à déclencher. Il vous faut trouver le bon équilibre entre les deux.
163 1 Vincent Le Goff
164 1 Vincent Le Goff
Retournons aux variables. Le signe astérisque (@*@) fait deux choses :
165 1 Vincent Le Goff
166 1 Vincent Le Goff
* Il aide à décrire quand le trigger doit se déclencher (il veut dire "n'importe quoi") ;
167 1 Vincent Le Goff
* Il écrit dans une ou plusieurs variables.
168 1 Vincent Le Goff
169 1 Vincent Le Goff
Utilisons le même exemple, avec notre trigger @[hrp[*@. Qu'arrive-t-il lorsque vous recevez une ligne comme celle-ci :
170 1 Vincent Le Goff
171 1 Vincent Le Goff
<pre>
172 1 Vincent Le Goff
[hrp] Edgar dit : je n'y comprend rien, quelqu'un pourrait-il m'aider ?
173 1 Vincent Le Goff
</pre>
174 1 Vincent Le Goff
175 1 Vincent Le Goff
D'abord, le trigger @[hrp]*@ est déclenché, puis la partie après @[hrp]@ (celle décrite par le signe astérisque) est capturée dans une variable. Les variables permettent de conserver des informations, et c'est justement ce qu'elles font ici. Les variables sont numérotées en partant de @$1@, @$2@, @$3@ et ainsi de suite. Donc dans notre exemple, si on reçoit la ligne suivante, le trigger va créer une variable @$1@ contenant la partie après @[hrp]@ :
176 1 Vincent Le Goff
177 1 Vincent Le Goff
<pre>
178 1 Vincent Le Goff
 Edgar dit : je n'y comprend rien, quelqu'un pourrait-il m'aider ?
179 1 Vincent Le Goff
</pre>
180 1 Vincent Le Goff
181 1 Vincent Le Goff
Que peut-on faire avec cette variable ? Beaucoup de choses. Chaque paramètre de nos actions liées au trigger peuvent utiliser les variables du trigger. Nous verrons des exemples concrets un peu plus bas, mais pour l'heure, nous pouvons commencer par l'afficher. Vous pouvez entrer l'instruction suivante dans votre client :
182 1 Vincent Le Goff
183 1 Vincent Le Goff
<pre>
184 1 Vincent Le Goff
#say $1
185 1 Vincent Le Goff
</pre>
186 1 Vincent Le Goff
187 1 Vincent Le Goff
Qui devrait vous afficher :
188 1 Vincent Le Goff
189 1 Vincent Le Goff
<pre>
190 1 Vincent Le Goff
 Edgar dit : je n'y comprend rien, quelqu'un pourrait-il m'aider ?
191 1 Vincent Le Goff
</pre>
192 1 Vincent Le Goff
193 1 Vincent Le Goff
bq. Pourquoi la ligne commence par un espace ?
194 1 Vincent Le Goff
195 1 Vincent Le Goff
Si vous vous posez cette question, essayez d'écrire le déclencheur du trigger et la ligne reçue l'un à côté de l'autre, cela devrait vous aider à comprendre :
196 1 Vincent Le Goff
197 1 Vincent Le Goff
* Déclencheur : @[hrp]*@ ;
198 1 Vincent Le Goff
* Ligne reçue : @[hrp] Edgar dit : je n'y comprend rien, quelqu'un pourrait-il m'aider ?@ .
199 1 Vincent Le Goff
200 1 Vincent Le Goff
Vous avez trouvé ? La ligne reçue par le client commence par "hrp" entre crochets, un espace puis le nom de la personne qui parle... alors que notre déclencheur capture tout ce qu'il y a après le crochet fermant de "[hrp]", ce qui inclue notre signe espace dans ce cas.
201 1 Vincent Le Goff
202 1 Vincent Le Goff
La solution : modifier quelque peu notre déclencheur.
203 1 Vincent Le Goff
204 1 Vincent Le Goff
<pre>
205 1 Vincent Le Goff
[hrp] *
206 1 Vincent Le Goff
</pre>
207 1 Vincent Le Goff
208 1 Vincent Le Goff
Cette fois, on met un espace entre le crochet fermant et le signe astérisque. Si l'on reçoit la ligne :
209 1 Vincent Le Goff
210 1 Vincent Le Goff
<pre>
211 1 Vincent Le Goff
[hrp] Edgar dit : je n'y comprend rien, quelqu'un pourrait-il m'aider ?[public] Edgar says: I don't get it at all, could someone help me?
212 1 Vincent Le Goff
</pre>
213 1 Vincent Le Goff
214 1 Vincent Le Goff
Et qu'on affiche @$1@, on devrait voir :
215 1 Vincent Le Goff
216 1 Vincent Le Goff
<pre>
217 1 Vincent Le Goff
Edgar dit : je n'y comprend rien, quelqu'un pourrait-il m'aider ?
218 1 Vincent Le Goff
</pre>
219 1 Vincent Le Goff
220 1 Vincent Le Goff
Les espaces dans les déclencheurs pourraient bien être l'une des erreurs principales quand on crée ses propres triggers la première fois. Le meilleur conseil que je puisse vous donner est de regarder avec attention les lignes que vous voulez surveiller à l'aide de triggers, et de n'utiliser le signe astérisque (@*@) que quand vous n'avez pas de moyen de savoir ce qui s'y trouve.
221 1 Vincent Le Goff
222 1 Vincent Le Goff
h2. Les canaux CocoMUD dans les triggers
223 1 Vincent Le Goff
224 1 Vincent Le Goff
CocoMUD offre un système assez puissant de canaux. Cette fonctionnalité est à différencier des canaux en jeu, qui sont dépendants du jeu où vous vous connectez. Les canaux CocoMUD sont des listes d'`'evènements dans lesquels vous mettez ce que vous voulez. Ce n'est pas obligatoire de mettre des canaux en jeu dans des canaux CocoMUD, c'est juste plus comfortable. Nous allons voir cela (pourquoi l'utiliser et comment faire).
225 1 Vincent Le Goff
226 1 Vincent Le Goff
Nous ne verrons pas ici comment créer des canaux CocoMUD. Ce sera expliqué dans une documentation séparée. Nous allons partir du principe que le canal "hrp" existe sur CocoMUD, et nous allons voir comment y mettre des messages à l'aide de triggers.
227 1 Vincent Le Goff
228 1 Vincent Le Goff
Premier réflexe quand il s'agit de créer un trigger, regardons les lignes qui devraient le déclencher. Il y en a deux dans notre cas :
229 1 Vincent Le Goff
230 1 Vincent Le Goff
Quand on envoie un message sur le canal "hrp", on pourrait voir quelque chose comme :
231 1 Vincent Le Goff
232 1 Vincent Le Goff
<pre>
233 1 Vincent Le Goff
[hrp] Vous dites : mon message
234 1 Vincent Le Goff
</pre>
235 1 Vincent Le Goff
236 1 Vincent Le Goff
Si c'est quelqu'un d'autre qui parle sur ce canal, vous pourriez voir :
237 1 Vincent Le Goff
238 1 Vincent Le Goff
<pre>
239 1 Vincent Le Goff
[hrp] Quelqu'un dit : mon message
240 1 Vincent Le Goff
</pre>
241 1 Vincent Le Goff
242 1 Vincent Le Goff
Voyons ce qui reste identique et ce qui diffère entre ces deux lignes :
243 1 Vincent Le Goff
244 1 Vincent Le Goff
* Et bien, d'abord, on a "[hrp]"(c'est-à-dire "hrp"entouré de crochets) suivi d'un espace ;
245 1 Vincent Le Goff
* Ensuite il y a le nom de l'auteur du message, soit "Vous" soit "Quelqu'un" ;
246 1 Vincent Le Goff
* Il y a ensuite le mot "dit" après un nouvel espace... ha bien non, si on écrit, le mot est "dites", si c'est un autre, c'est "dit". Que faire ?
247 1 Vincent Le Goff
* Un nouvel espace, un signe deux points (@:@), un espace et le message.
248 1 Vincent Le Goff
249 1 Vincent Le Goff
Pour résoudre notre problème entre dit/dites, on a deux solutions :
250 1 Vincent Le Goff
251 1 Vincent Le Goff
* On peutécrire un seul trigger qui se déclenche dans les deux cas, en incluant dans le déclencheur "dit*". Cela voudra dire "dit" suivi de n'importe quoi ;
252 1 Vincent Le Goff
* On peut aussi créer deux triggers distincts, l'un pour la première ligne et l'un pour la seconde.
253 1 Vincent Le Goff
254 1 Vincent Le Goff
J'ai tendance à préférer la seconde solution, mais je sais que certains préféreront la première, Nous verrons donc les deux ici :
255 1 Vincent Le Goff
256 1 Vincent Le Goff
h3. Un seul trigger
257 1 Vincent Le Goff
258 1 Vincent Le Goff
Voyons notre déclencheur pour un seul trigger. Vous êtes prêt ?
259 1 Vincent Le Goff
260 1 Vincent Le Goff
<pre>
261 1 Vincent Le Goff
[hrp] * dit*: *
262 1 Vincent Le Goff
</pre>
263 1 Vincent Le Goff
264 1 Vincent Le Goff
Trois astérisques ! Le premier capturera le nom de l'auteur du message. Le second capturera rien ou "es" (en fonction de si c'est vous ou un autre qui parle). Nous ne l'utiliseront pas. Le troisième capturera le message.
265 1 Vincent Le Goff
266 1 Vincent Le Goff
Pour créer ce trigger en passant par l'interface :
267 1 Vincent Le Goff
268 1 Vincent Le Goff
* Ouvrez la barre de menu, *Jeu* -> *Triggers* ;
269 1 Vincent Le Goff
* Cliquez sur *Ajouter* pour créer un trigger ;
270 1 Vincent Le Goff
* Entrez le déclencheur @[hrp] * dit*: *@ avant d'appuyer sur Tab ;
271 1 Vincent Le Goff
* Sélectionnez "Envoie un message dans un canal" ;
272 1 Vincent Le Goff
* Cliquez sur le bouton *Ajouter l'action* ;
273 1 Vincent Le Goff
* Dans le nom du canal dans lequel envoyer le message, écrivez @hrp@ ;
274 1 Vincent Le Goff
* Dans le message à envoyer au canal, entrez :
275 1 Vincent Le Goff
<pre>
276 1 Vincent Le Goff
$1: $3
277 1 Vincent Le Goff
</pre>
278 1 Vincent Le Goff
* Cliquez sur *OK* plusieurs fois pour fermer la boîte de dialogue en sauvegardant.
279 1 Vincent Le Goff
280 1 Vincent Le Goff
bq. Qu'est-ce que c'est que @$1 $3@?
281 1 Vincent Le Goff
282 1 Vincent Le Goff
@$1@ contient l'auteur du message (vous ou quelqu'un).  @$3@ contient le message envoyé. Quand on reçoit la ligne :
283 1 Vincent Le Goff
284 1 Vincent Le Goff
<pre>
285 1 Vincent Le Goff
[hrp] Jamie dit : bien joué !
286 1 Vincent Le Goff
</pre>
287 1 Vincent Le Goff
288 1 Vincent Le Goff
Notre canal CocoMUD devrait recevoir le message :
289 1 Vincent Le Goff
290 1 Vincent Le Goff
<pre>
291 1 Vincent Le Goff
Jamie: bien joué !
292 1 Vincent Le Goff
</pre>
293 1 Vincent Le Goff
294 1 Vincent Le Goff
Vous pouvez entrer @#channel hrp@ pour voir la liste des messages sur ce canal. Il est possible de relier cette action à un macro, pour afficher le canal quand on presse une touche de raccourci.
295 1 Vincent Le Goff
296 1 Vincent Le Goff
Vous pourriez avoir fait la même chose en utilisant une seule ligne de SharpScript:
297 1 Vincent Le Goff
298 1 Vincent Le Goff
<pre>
299 1 Vincent Le Goff
#trigger {[hrp] * dit*: *} {#feed hrp {$1: $3}}
300 1 Vincent Le Goff
</pre>
301 1 Vincent Le Goff
302 1 Vincent Le Goff
C'est peut-être un peu plus dur à comprendre en SharpScript, mais si vous êtes habitué à la syntaxe, c'est définitivement plus rapide.
303 1 Vincent Le Goff
304 1 Vincent Le Goff
Un dernier mot concernant ce trigger : vous aurez peut-être remarqué qu'on ne joue pas de son si ce trigger se déclenche. Rien ne vous empêche de le faire au travers de l'interface (d'avoir deux actions liés à un trigger). La même chose peut se faire en SharpScript :
305 1 Vincent Le Goff
306 1 Vincent Le Goff
<pre>
307 1 Vincent Le Goff
#trigger {[hrp] * dit*: *} {
308 1 Vincent Le Goff
    #feed hrp {$1: $3}
309 1 Vincent Le Goff
    #play sounds/public.wav
310 1 Vincent Le Goff
}
311 1 Vincent Le Goff
</pre>
312 1 Vincent Le Goff
313 1 Vincent Le Goff
h3. Deux triggers distincts
314 1 Vincent Le Goff
315 1 Vincent Le Goff
Comme dit plus haut, il y a deux façons de régler le problème posé par dit/dites. L'une de ces solutions est de créer deux triggers, l'un pour quand on est l'auteur, l'autre pour les autres.  Cela demandera un peu plus de configuration, mais cela reste plus lisible, je trouve. Parfois il sera impossible de faire autrement, cela dépend de la langue dans laquelle le MUD se trouve.
316 1 Vincent Le Goff
317 1 Vincent Le Goff
Nos deux déclencheurs seraient donc :
318 1 Vincent Le Goff
319 1 Vincent Le Goff
<pre>
320 1 Vincent Le Goff
[hrp] Vous dites : *
321 1 Vincent Le Goff
[hrp] * dit : *
322 1 Vincent Le Goff
</pre>
323 1 Vincent Le Goff
324 1 Vincent Le Goff
Je ne peux pas dire pour vous, mais ça me semble personnellement bien plus clair. Le premier trigger ne se déclenche que quand on est l'auteur du message (peut-être qu'on ne jouera pas de son à ce moment), le second se déclenche quand c'est quelqu'un d'autre qui parle sur le canal. Voici les instructions SharpScript pour créer ces triggers, mais comme d'habitude, vous pouvez le faire via l'interface :
325 1 Vincent Le Goff
326 1 Vincent Le Goff
<pre>
327 1 Vincent Le Goff
#trigger {[hrp] Vous dites : *} {#feed hrp {Vous : $1}}
328 1 Vincent Le Goff
#trigger {[hrp] * dit : *} {
329 1 Vincent Le Goff
    #feed hrp {$1 : $2}
330 1 Vincent Le Goff
    #play sounds/public.wav
331 1 Vincent Le Goff
}
332 1 Vincent Le Goff
</pre>
333 1 Vincent Le Goff
334 1 Vincent Le Goff
Choisissez la méthode qui vous para^8it la plus simple, en fonction du contexte.
335 1 Vincent Le Goff
336 1 Vincent Le Goff
h2. Les triggers muets
337 1 Vincent Le Goff
338 1 Vincent Le Goff
Dans certains cas, quand on reçoit une certaine ligne, on ne veut pas l'afficher sur le client.
339 1 Vincent Le Goff
340 1 Vincent Le Goff
bq. Cela arrive vraiment ?
341 1 Vincent Le Goff
342 1 Vincent Le Goff
Parfois. Par exemple, certains MUD envoient des messages d'ambiance régulièrement (toutes les 3-5 secondes) quand vous vous trouvez dans une certaine situation. Ce peut être agréable pour mettre dans l'ambiance, mais pas toujours avec un lecteur d'écran.
343 1 Vincent Le Goff
344 1 Vincent Le Goff
<pre>
345 1 Vincent Le Goff
Un noeud dans le bois éclate en une pluie d'étincelles.
346 1 Vincent Le Goff
</pre>
347 1 Vincent Le Goff
348 1 Vincent Le Goff
Joli et, bien il faut le reconnaître, près d'un feu de camp il est normal qu'il pétille, lance des étincelles et craque de temps en temps en temps. Mais avec un lecteur d'écran, ce n'est pas le plus utile. Nous allons donc retirer cette ligne de l'affichage.
349 1 Vincent Le Goff
350 1 Vincent Le Goff
Pour ce faire, créez un nouveau trigger.  En passant par l'interface :
351 1 Vincent Le Goff
352 1 Vincent Le Goff
* Ouvrez le menu *Jeu* -> *Trigger* ;
353 1 Vincent Le Goff
* Ajoutez un trigger en cliquant sur *Ajouter* ;
354 1 Vincent Le Goff
* Collez la ligne dans le déclencheur : @Un noeud dans le bois éclate en une pluie d'étincelles.@ ;
355 1 Vincent Le Goff
* Pas besoin de sélectionner une action, sauf si vous voulez jouer un son approprié, cela dit.
356 1 Vincent Le Goff
* Tabulez jusqu'à trouver la case "Trigger muet". Cochez-la.
357 1 Vincent Le Goff
* Validez plusieurs fois sur *OK* pour sortir de la boîte de dialogue en sauvegardant.
358 1 Vincent Le Goff
359 1 Vincent Le Goff
Si le client reçoit cette ligne, il ne l'affichera plus.
360 1 Vincent Le Goff
361 1 Vincent Le Goff
Créer ce trigger en SharpScript est assez simple :
362 1 Vincent Le Goff
363 1 Vincent Le Goff
<pre>
364 1 Vincent Le Goff
#trigger {Un noeud dans le bois éclate en une pluie d'étincelles.} {} +mute
365 1 Vincent Le Goff
</pre>
366 1 Vincent Le Goff
367 1 Vincent Le Goff
Notez que le second paramètre (définissant la liste d'actions associées à ce trigger) est vide dans notre exemple.  Le troisième paramètre quant à lui est un flag, commençant par @+@ ou @-@ et suivi du nom du flag (ici @mute@ pour créer un trigger muet).
368 1 Vincent Le Goff
369 1 Vincent Le Goff
Vous pouvez très bien avoir un trigger muet qui exécute cependant des actions, cela n'est pas du tout incompatible.
370 1 Vincent Le Goff
371 1 Vincent Le Goff
h2. Les triggers marqués
372 1 Vincent Le Goff
373 1 Vincent Le Goff
Les triggers marqués peuvent être utiles pour l'accessibilité. Quand un trigger marqué se déclenche, il place le curseur directement sur la ligne ayant déclenché ce trigger. Vous pourriez avoir un trigger sur la ligne décrivant les sorties d'une salle, par exemple. Si ce trigger est marqué, quand vous explorerez plusieurs salles, le curseur sera toujours déplacé sur la listes des sorties, plutôt que ramené en bas de la fenêtre, où vous devrez appuyez plusieurs fois sur la flèche haut pour lire les sorties disponibles.
374 1 Vincent Le Goff
375 1 Vincent Le Goff
C'est le même principe pour créer ce trigger :
376 1 Vincent Le Goff
377 1 Vincent Le Goff
* Dans la barre de menu, sélectionnez *Jeue* -> *Triggers*.
378 1 Vincent Le Goff
* Cliquez sur le bouton *Ajouter* pour créer un nouveau trigger.
379 1 Vincent Le Goff
* Écrivez dans le déclencheur quelque chsoe comme : @Sorties :*@ .
380 1 Vincent Le Goff
* Tabulez plusieurs fois pour cocher la case "trigger marqué".
381 1 Vincent Le Goff
382 1 Vincent Le Goff
La prochaine fois que vous recevrez une ligne commençant par @Sorties : @, le curseur sera déplacé automatiquement dessus.
383 1 Vincent Le Goff
384 1 Vincent Le Goff
Créer ce trigger avec une instruction SharpScript donne :
385 1 Vincent Le Goff
386 1 Vincent Le Goff
<pre>
387 1 Vincent Le Goff
#trigger {Sorties : *} {} +mark
388 1 Vincent Le Goff
</pre>
389 1 Vincent Le Goff
390 1 Vincent Le Goff
h2. Les triggers avec substitution
391 1 Vincent Le Goff
392 1 Vincent Le Goff
Dans certains cas, quand un trigger s'exécute, on veut modifier la ligne qui a déclenché le trigger. L'un des exemples les plus fréquents est pour réduire une ligne un peu longue. Certains MUDs ont de longues lignes de texte et mettent l'information importante à la fin, ce qui n'est pas super pratique avec un lecteur d'écran. Par exemple :
393 1 Vincent Le Goff
394 1 Vincent Le Goff
<pre>
395 1 Vincent Le Goff
Quelqu'un parle publiquement sur le canal 'hrp' avec une petite voix inquiète : c'est sans danger ?
396 1 Vincent Le Goff
</pre>
397 1 Vincent Le Goff
398 1 Vincent Le Goff
Bien que cette ligne de texte en apprenne beaucoup, l'information vraiment importante (le message) se trouve tout à la fin. Ce pourrait être bien de raccourcir un petit peu cette ligne de texte, et peut-être changer l'ordre des informations.
399 1 Vincent Le Goff
400 1 Vincent Le Goff
<pre>
401 1 Vincent Le Goff
[ooc] Quelqu'un : c'est sans danger ? (une petite voix inquiète)
402 1 Vincent Le Goff
</pre>
403 1 Vincent Le Goff
404 1 Vincent Le Goff
Pour faire cela, il faut créer un trigger, et créer une ligne de substitution. Quand le trigger est appelé, la ligne de substitution s'affichera à la place de la ligne d'origine qui a déclenché le trigger.
405 1 Vincent Le Goff
406 1 Vincent Le Goff
* Dans la barre de menu *Jeu* -> *Triggers* ;
407 1 Vincent Le Goff
* Cliquez sur *Ajouter* pour créer un nouveau trigger ;
408 1 Vincent Le Goff
* Écrivez le déclencheur comme d'habitude :
409 1 Vincent Le Goff
<pre>
410 1 Vincent Le Goff
* parle publiquement sur le canal '*' avec * : *
411 1 Vincent Le Goff
</pre>
412 1 Vincent Le Goff
* Notez que @$1@ contient le nom de l'auteur du message, @$2@ contient le nom du canal, @$3@ contient la voix utilisée et @$4@ contient le message lui-même ;
413 1 Vincent Le Goff
* Tabulez jusqu'à trouver la zone de texte appelée "Message de remplacement de la ligne ayant déclenché le trigger".
414 1 Vincent Le Goff
* Dedans, écrivez :
415 1 Vincent Le Goff
<pre>
416 1 Vincent Le Goff
[$2] $1 : $4 ($3)
417 1 Vincent Le Goff
</pre>
418 1 Vincent Le Goff
C'est compréhensible ? Si ce n'est pas le cas, prenez le temps de relire à quoi correspond chaque variable.
419 1 Vincent Le Goff
420 1 Vincent Le Goff
Créer le même trigger en SharpScript serait :
421 1 Vincent Le Goff
422 1 Vincent Le Goff
<pre>
423 1 Vincent Le Goff
#trigger {* parle publiquement sur le canal '*' avec * : *} {} {[$2] $1 : $4 ($3)}
424 1 Vincent Le Goff
</pre>
425 1 Vincent Le Goff
426 1 Vincent Le Goff
Note importante : nous avons trois arguments ici, dans notre action @#trigger@. Le premier contient toujours le déclencheur du trigger, le second la liste d'actions (vide ici). Le troisième contient la chaîne de substitution. Si il n'y a pas de troisième paramètre, ou que le paramètre est vide, la ligne est affichée telle qu'elle (c'est le cas dans tous nos exemples précédents).
427 1 Vincent Le Goff
428 1 Vincent Le Goff
h2. Les triggers déclenchés par expressions régulières
429 1 Vincent Le Goff
430 1 Vincent Le Goff
Cette section et celles qui suivent sont un peu plus avancées.
431 1 Vincent Le Goff
432 1 Vincent Le Goff
Le symbole astérisque (@*@) est très pratique. Mais il n'est pas très précis. CocoMUD permet d'écrire des "expressions régulières":https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2 . Le but ici n'est pas de décrire la syntaxe de ces expressions, c'est un sujet à part entière, mais vous trouverez de nombreuses ressources (à commencer par le lien ci-dessus).
433 1 Vincent Le Goff
434 1 Vincent Le Goff
Pour utiliser des expressions régulières dans des déclencheurs de trigger, il suffit de commencer le trigger avec le signe @^@. CocoMUD comprend que ce déclencheur doit être une expression régulière. Par exemple :
435 1 Vincent Le Goff
436 1 Vincent Le Goff
<pre>
437 1 Vincent Le Goff
^Vous recevez \d+ XP.$
438 1 Vincent Le Goff
</pre>
439 1 Vincent Le Goff
440 1 Vincent Le Goff
Ce trigger sera déclenché si vous recevez la ligne "Vous recevez ... XP.", avec ... étant un ou plusieurs chiffres. Ce trigger ne sera pas déclenché par la ligne : "Vous recevez un peu d'XP."
441 1 Vincent Le Goff
442 1 Vincent Le Goff
Une chose importante à garder à l'esprit quand on utilise des triggers avec expressions régulières, cependant, est que si on veut capturer des informations, il faut utiliser des groupes de capture (des parenthèses).
443 1 Vincent Le Goff
444 1 Vincent Le Goff
<pre>
445 1 Vincent Le Goff
^Vous recevez (\d+) XP.$
446 1 Vincent Le Goff
</pre>
447 1 Vincent Le Goff
448 1 Vincent Le Goff
Ici, le nombre d'XP sera mis dans @$1@.  Vous pouvez aussi utiliser des groupes nommés et y faire référence avec @$nom_du_groupe@.
449 1 Vincent Le Goff
450 1 Vincent Le Goff
h2. Des triggers avancés en Python
451 1 Vincent Le Goff
452 1 Vincent Le Goff
Le moteur SharpScript est léger et puissant, mais ce reste un langage de script qui ne permet pas tout. Et qui ne permettra pas tout : il est censé resté léger et optimisé. Ce n'est pas un langage de programmation. Mais Python en est un, et CocoMUD est développé en Python. Le moteur SharpScript a une syntaxe particulière pour envoyer du code à Python directement, ce qui permet d'outre-passer les limites du moteur SharpScript de façon assez définitive. Depuis le code Python, on peut toujours utiliser les fonctions SharpScript, ce qui rend l'élaboration de triggers plus complexes assez simple, dès lors que l'on connaît Python.
453 1 Vincent Le Goff
454 1 Vincent Le Goff
Nous allons prendre un exemple, comme toujours, mais souvenez-vous qu'il n'y a pas de réelle limite à ce que vous pouvez faire, tant que Python le permet.
455 1 Vincent Le Goff
456 1 Vincent Le Goff
Admettons que le jeu envoie une ligne quand on reçoit de l'XP mais précise aussi le nombre d'XP nécessaire pour passer au niveau suivant.
457 1 Vincent Le Goff
458 1 Vincent Le Goff
Par exemple :
459 1 Vincent Le Goff
460 1 Vincent Le Goff
<pre>
461 1 Vincent Le Goff
Vous recevez 37 XP et avez besoin de 500 pour passer au niveau suivant.
462 1 Vincent Le Goff
</pre>
463 1 Vincent Le Goff
464 1 Vincent Le Goff
On va vouloir extraire ces deux nombres et afficher un pourcentage à la place : @xp / total * 100@.  Ce n'est pas possible en utilisant simplement du SharpScript.
465 1 Vincent Le Goff
466 1 Vincent Le Goff
Pour l'instant, ce n'est pas possible d'utiliser l'interface pour manipuler du code Python. Vous devrez faire les essais en éditant directement le fichier "config.set".
467 1 Vincent Le Goff
468 1 Vincent Le Goff
<pre>
469 1 Vincent Le Goff
#trigger {Vous recevez * XP et avez besoin de * pour passer au niveau suivant.} {+
470 1 Vincent Le Goff
    # $1 contient le nombre d'XP gagné
471 1 Vincent Le Goff
    # $2 contient le total pour passer au niveau suivant
472 1 Vincent Le Goff
    xp = args["1"]
473 1 Vincent Le Goff
    total = args["2"]
474 1 Vincent Le Goff
475 1 Vincent Le Goff
    # On convertit ces deux nombres
476 1 Vincent Le Goff
    try:
477 1 Vincent Le Goff
        xp = int(xp)
478 1 Vincent Le Goff
        total = int(total)
479 1 Vincent Le Goff
    except ValueError:
480 1 Vincent Le Goff
        # La conversion n'a pas marché, mais on ne fait rien
481 1 Vincent Le Goff
        pass
482 1 Vincent Le Goff
    else:
483 1 Vincent Le Goff
        pourcent = xp * 100.0 / total
484 1 Vincent Le Goff
        say("Vous recevez {}/{} XP ({}%).".format(xp, total, int(pourcent)))
485 1 Vincent Le Goff
}
486 1 Vincent Le Goff
</pre>
487 1 Vincent Le Goff
488 1 Vincent Le Goff
Voilà du trigger plutôt avancé ! Quelques explications :
489 1 Vincent Le Goff
490 1 Vincent Le Goff
* Le déclencheur du trigger ne devrait pas être une grosse surprise pour vous à ce stade ;
491 1 Vincent Le Goff
* Le second paramètre commence par @{+@ (accolade gauche suivi du signe @+@).  C'est la syntaxe pour dire à CocoMUD que ce qui se trouve entre les accolades est du code Python.
492 1 Vincent Le Goff
* Notez que tout le code est indenté. Il ne s'agit plus d'un comfort de lecture ici, mais d'une nécessité. Python a besoin de l'indentation pour fonctionner. J'ai utilisé 4 espaces, mais vous pouvez en utiliser un (ou un signe de tabulation si vous voulez) ;
493 1 Vincent Le Goff
* Quelques commentaires. Cela peut toujours être utile.
494 1 Vincent Le Goff
* On extrait les deux nombres @xp@ et @total@. Pour accéder aux variables du trigger, on utilise @args@ qui est un dictionnaire les contenant. La première variable étant @$1@, on y accède en Python grâce à @args["1"]@.
495 1 Vincent Le Goff
* On a besoin de convertir ces variables. Pourquoi ? Ce sont toujours des chaînes de caractère à ce stade, il faut les convertir en nombre. CocoMUD ne vérifie pas que ce sont des nombres, on doit donc le faire manuellement. C'est pourquoi on convertit dans un bloc try/except/else. Notez qu'on ne fait rien si la conversion échoue pour X raison.
496 1 Vincent Le Goff
* On crée ensuite le pourcentage. Puisqu'il s'agit de Python2, il faut lui indiquer de faire attention aux virgules.
497 1 Vincent Le Goff
* On affiche notre message ensuite, en utilisant la fonction @say|()@. C'est exactement comme appeler la fonction @#say@ en SharpScript, c'est la même fonction qui est appelée. De même façon, on peut utiliser les fonctions @send()@, @play()@, @feed()@ et autre. La syntaxe diffère car on est en Python, mais ce sont les mêmes fonctions et mêmes arguments.
498 1 Vincent Le Goff
499 1 Vincent Le Goff
Bien... je ne suis pas vraiment satisfait par le trigger que je viens de créer... on pourrait le raccourcir un petit peu, et le rendre plus lisible. Il ne faut pas toujours chercher la concision, mais ça aide. Si on était sûr que nos variables contiennent des nombres, on aurait moins de code à faire :
500 1 Vincent Le Goff
501 1 Vincent Le Goff
<pre>
502 1 Vincent Le Goff
#trigger {^Vous recevez (\d+) XP et avez besoin de (\d+) pour passer au niveau suivant.$} {+
503 1 Vincent Le Goff
    # $1 contient le nombre d'XP gagné
504 1 Vincent Le Goff
    # $2 contient le total pour passer au niveau suivant
505 1 Vincent Le Goff
    xp = int(args["1"])
506 1 Vincent Le Goff
    total = int(args["2"])
507 1 Vincent Le Goff
    pourcent = xp * 100.0 / total
508 1 Vincent Le Goff
    say("Vous recevez {}/{} XP ({}%).".format(xp, total, int(pourcent)))
509 1 Vincent Le Goff
}
510 1 Vincent Le Goff
</pre>
511 1 Vincent Le Goff
512 1 Vincent Le Goff
Utiliser les expressions régulières ici ajoute un peu de complexité au déclencheur, mais ça rend le code bien plus lisible je trouve.
513 1 Vincent Le Goff
514 1 Vincent Le Goff
Si vous voulez plus d'informations sur l'utilisation de code Python dans les instructions SharpScript, vous trouverez une section détaillée dans [[SharpScript|la documentation du SharpScript]].