Project

Profile

Help

StarWarsProg » History » Sprint/Milestone 6

Vincent Le Goff, 01/26/2017 05:54 AM

1 1 Vincent Le Goff
h1. Programmes et scripts de Star Wars MUD FR
2
3
Scripter dans un MUD permet aux bâtisseurs de rajouter des fonctionnalités personnalisées à l'univers. Ces scripts, ou programmes (le terme est utilisé indifféremment dans ce document) sont reliés à des évènements précis, souvent déclenchés par les actions des joueurs.
4
5
Par exemple, on peut scripter un mobile de l'univers pour qu'il réagisse si un joueur dit quelque chose de précis dans la salle où il se trouve. Des quêtes relativement complexes, des zones un peu particulières, d'autres moyens de déplacement, tout ceci peut être scripté avec plus ou moins de temps. Ce document est fait pour servir de tutoriel au scripting sur Star Wars MUD FR, ainsi que d'index pour retrouver rapidement une fonctionnalité ou une syntaxe.
6
7
h2. Index des commandes de scripting
8
9
Un programme peut ne contenir que des commandes. Ces commandes sont sous la forme que les joueurs connaissent, comme @say@ ou @emote@, mais il y a des commandes particulières que seuls les mobiles, objes ou salles peuvent faire dans leur script.
10
11
Le tableau ci-dessous décrit la liste des commandes spécifiques au scripting. La première colonne contient le nom de la commande, la seconde sa syntaxe, la troisième une description très courte de son utilisation. Le nom de la commande est un lien, vous pouvez cliquer dessus pour avoir une explication plus détaillée, ainsi qu'un exemple de sa syntaxe.
12
13
| Commande | Syntaxe | Utilité |
14
| [[#mpadvance|mpadvance]] | @mpadvance <nom du joueur> <niveau>@ | Change le niveau d'un joueur. |
15
| [[#mpapply|mpapply]] | @mpapply <nom du joueur>@ | Passe un joueur en statut "non autorisé, en attente d'autorisation". |
16
| [[#mpapplyb|mpapplyb]] | @mpapplyb <nom du joueur>@ | Passe un joueur en statut "autorisé à jouer dans l'univers réel". |
17 2 Vincent Le Goff
| [[#mpasound|mpasound]] | @mpasound <phrase>@ | Envoie un message dans les salles alentour. |
18
| [[#mpat|mpat]] | @mpat <vnum de la salle> <commande>@ | Exécute la commande dans la salle indiquée. |
19 5 Vincent Le Goff
| [[#mpclosepassage|mpclosepassage]] | @mpclosepassage <vnum de la salle> <numéro de la sortie>@ | Détruit la sortie dans la salle. |
20 2 Vincent Le Goff
| [[#mpdamage|mpdamage]] | @mpdamage <victime> <montant>@ | Inflige des dégâts à la victime. |
21
| [[#mpdeposit|mpdeposit]] | @mpdeposit <montant>@ | Dépose de l'argent dans la zone du script |
22
| [[#mpdream|mpdream]] | @mpdream <victime> <phrase>@ | Envoie un message à un joueur qui dort. |
23 1 Vincent Le Goff
| [[#mpecho|mpecho]] | @mpecho <phrase>@ | Affiche une phrase à la salle dans laquelle se trouve le mobile, objet. |
24 2 Vincent Le Goff
| [[#mpechoaround|mpecharound]] | @mpechoaround <nom> <phrase>@ | Envoie un message à la salle, SAUF au joueur précisé. |
25
| [[#mpechoat|mpechoat]] | @mpechoat <nom> <phrase>@ | Envoie un message uniquement à un joueur. |
26 3 Vincent Le Goff
| [[#mpforce|mpforce]] | @mpforce <victime/all> <commande>@ | Force la victime (ou tous ceux présents dans la salle) à faire une commande. |
27
| [[#mpgain|mpgain]] | @mpgain <victime> <niveau> <nombre>@ | Donne de l'XP à la victime dans le niveau indiqué (le niveau est un nombre). |
28
| [[#mpgoto|mpgoto]] | @mpgoto <vnum de salle>@ | Téléporte le mobile du script dans une salle quelconque. |
29
| [[#mpinvis|mpinvis]] | @mpinvis (niveau)@ | Rend le mobile du script invisible. |
30 4 Vincent Le Goff
| [[#mpjunk|mpjunk]] | @mpjunk <objets>@ | Détruit un ou plusieurs objets. |
31
| [[#mpkill|mpkill]] | @mpkill <victime> | Tue un joueur sans utiliser murder. |
32
| [[#mpmload|mpmload]] | @mpmload <vnum du mobile>@ | Charge un mobile. |
33
| [[#mpnothing|mpnothing]] | @mpnothing@ | Cette commande ne fait strictement rien (utile pour les conditions vides). |
34
| [[#mpoload|mpoload]] | @mpoload <vnum de l'objet>@ | Fait apparaître un objet. |
35 5 Vincent Le Goff
| [[#mpopenpassage|mpopenpassage]] | @mpopenpassage <vnum de la salle d'origine> <vnum de la salle de destination> <numéro de la sortie>@ | Crée une sortie temporaire reliant origine à destination. |
36
| [[#mppkset|mppkset]] | @mppkset <victime> yes/no@ | Change le flag PK de la victime. |
37
| [[#mppractice|mppractice]] | @mppractice <victime> <talent/pouvoir/langue> <montant>@ | Change la connaissance de la victime. |
38 6 Vincent Le Goff
| [[#mppurge|mppurge]] | @mppurge (objet/mobile)@ | Purge la salle courante, ou un objet/mobile indiqué. |
39
| [[#mprestore|mprestore]] | @mprestore <victime> <montant>@ | Restaure la victime précisée. |
40
| [[#mpslay|mpslay]] | @mpslay <victime>@ | Tue la victime directement. |
41
| [[#mptransfer|mptransfer]] | @mptransfer <victime/all>@ | Transfert une ou toutes les personnes dans la salle du script. |
42 1 Vincent Le Goff
43
h2. Aide détaillée des commandes
44
45
h3. mpadvance
46
47
Syntaxe : @mpadvance <nom du joueur> <numéro du niveau>@
48
49
Cette commande fait passer le joueur précisé à un niveau indiqué. Cette commande ne marchera pas si le programme est dans un mobile prototype.
50
51
Exemple d'utilisation :
52
53
<pre>
54
mpadvance $n 3
55
</pre>
56
57
h3. mpapply
58
59
Syntaxe : @mpapply <nom du joueur>@
60
61
Cette commande passe un joueur en statut "non autorisé". Il devra être autorisé pour rentrer dans l'univers réel, ce qui peut se faire par script (voir [[#mpapplyb|mpapplyb]]) ou par la commande *authorize*.
62
63
Exemple d'utilisation :
64
65
<pre>
66
mpapply $n
67
</pre>
68
69
h3. mpapplyb
70
71
Syntaxe : @mpapplyb <nom du joueur>@
72
73
Cette commande autorise un joueur, lui permettant d'entrer dans l'univers réel, au-delà de la zone de départ.
74
75
<pre>
76
mpapplyb $n
77
</pre>
78
79 2 Vincent Le Goff
h2. mpasound
80
81
Syntaxe : @mpasound <phrase>@
82
83
Envoie la phrase passée en paramètre aux salles autour de la salle du programme (la salle dans laquelle se trouve le mobile ou objet, par exemple).
84
85
Exemple d'utilisation :
86
87
<pre>
88
mpasound Il commence à faire froid...
89
</pre>
90
91
h3. mpat
92
93
Syntaxe : @mpat <vnum de la salle> <commande>@
94
95
Cette commande permet d'exécuter une autre commande dans une salle différente. C'est l'équivalent de la commande *at* que les immortels peuvent utiliser : elle peut permettre à un mobile d'exécuter une commande dans une salle distante sans avoir à se déplacer.
96
97
Exemple d'utilisation :
98
99
<pre>
100
mpat 2200 drop all
101
</pre>
102
103
(Cette commande, si exécuté dans un programme de mobile, demandra au dit mobile de poser tous eses objets dans la salle de vnum 2200, et ceci sans quitter la salle où il se trouve.
104
105
*note importante*: on utilise souvent @mpat@ pour "cacher" certaines actions au joueur. Par exemple, on demande au mobile d'aller dans une salle fermée au joueur pour exécuter des commandes sans que le joueur ne le voit. Il existe cependant la commande [[#silence|silence]] qui reste plus lisible.
106
107 5 Vincent Le Goff
h3. mpclosepassage
108
109
Syntaxe : @mpclosepassage <vnum de la salle d'origine> <numéro de la sortie>@
110
111
Cette commande permet de supprimer une sortie créée avec [[#mpopenpassage|mpopenpassage]], c'est-à-dire une sortie temporaire, non-enregistrée par le système. En combinaison avec [[#mpopenpassage|mpopenpassage]], elle permet de créer des systèmes d'ascenseurs, navettes ou autre transports.
112
113
La sortie doit être précisée sous la forme d'un nombre.
114
115
Exemple d'utilisation :
116
117
<pre>
118
mpclosepassage 5000 2
119
</pre>
120
121
Voir aussi :
122
123
* [[#mpopenpassage|mpopenpassage]].
124
125 2 Vincent Le Goff
h3. mpdamage
126
127
Syntaxe : @mpdamage <victime> <montant>@
128
129
Cette commande permet d'infliger des dégâts à la victime précisée en premier argument. L'aide iindique que ces dégâts seront influencés par le sanctuaire, mais pas la protection, saving throws ou résistances.
130
131
Exemple d'utilisation :
132
133
<pre>
134
mpdamage $n 200
135
</pre>
136
137
Il semble que, si le programme inflige des dég6ats au mobile acteur du programme, et si le nombre de dégâts est suffisamment important pour le tuer, le programme fera planter le MUD.
138
139
h3. mpdeposit
140
141
Syntaxe : @mpdeposit <montant>@
142
143
Cette commande permet de déposer de l'argent dans la zone où se trouve le script (la zone de la salle, du mobile ou de l'objet). Elle prend en unique paramètre le montant à déposer dans la zone. Chaque zone a sa propre économie, et les programmes peuvent être utilisés pour influer sur l'économie de zone (par exemple, donner moins d'argent si la zone a moins dans son trésor).
144
145
Exemple d'utilisation :
146
147
<pre>
148
mpdeposit 5000
149
</pre>
150
151
Parmi la plupart des commandes utilisées avec [[#mpat|mpat]], ce..e-ci est peut-être l'une des plus fréquentes. On peut déposer ou retirer de l'argent facilement dans une autre zone :
152
153
<pre>
154
mpat 3311 mpdeposit 5000
155
</pre>
156
157
Voir aussi :
158
159
* [[mpwithdraw|mpdwithdraw]] pour retirer de l'argent de la zone actuelle.
160
161
h3. mpdream
162
163
Syntaxe : @mpdream <victime> <phrase>@
164
165
Cette commande envoie un message à un joueur ou mob qui dort. Par défaut, si on utilise [[#mpecho|mpecho]] o]] par exemple, un joueur qui dort ne voit pas le message. @mpdream@ permet d'envoyer spécifiquement un message à un joueur qui dort.
166
167 1 Vincent Le Goff
h3. mpecho
168
169
Syntaxe : @mpecho <phrase>@
170
171
Cette commande prend en argument une phrase, et affiche cette phrase dans la salle dans laquelle se trouve le programme (la salle du mobile, la salle de l'objet ou la salle-même, pour les programmes de salle). Le message est envoyé sans aucun préfixe, et le joueur n'a pas le moyen de savoir d'où vient le message.
172
173
Exemples d'utilisation :
174
175
<pre>
176
mpecho La vitrine explose dans un vacarme infernal !
177
mpecho $n arrive de nullepart.
178
</pre>
179
180
Voir aussi :
181
182 2 Vincent Le Goff
* [[#mpechoat|mpechoat]] pour afficher un message uniquement à un joueur ;
183 1 Vincent Le Goff
* [[#mpechoaround|mpechoaround]] pour afficher un message pour la salle, à l'exception d'un joueur ;
184
* N'oubliez pas, vous pouvez utiliser les commandes @say@ et @emote@ pour faire dire à un mobile quelque chose, ou le faire agir. Ce sera plus clair qu'utiliser @mpecho@ si c'est tout ce que vous voulez faire ;
185 2 Vincent Le Goff
* Cette commande est identique à la commande d'immortel *recho* que vous ne pouvez pas utiliser dans vos programmes.
186
187
h3. mpechoaround
188
189
Syntaxe : @mpechoaround <nom> <phrase>@
190
191
Cette commande permet d'envoyer un message à la salle du programme, comme [[#mpecho|mpecho]], mais elle permet de ne pas envoyer le message à un joueur précisé en premier paramètre. En combinant [[#mpechoat|mpechoat]] et [[#mpechoaround|mpechoaround]], on peut faire des messages d'ambiance assez personnalisés.
192
193
Exemple d'utilisation :
194
195
<pre>
196
mpdamage $n 30
197
mpechoat $n Vous recevez une fléchette dans la peau, sans doute empoisonnée !
198
mpechoaround $n $n reçoit une fléchette dans la peau, sans doute empoisonnée !
199
</pre>
200
201
Explications :
202
203
# La première ligne inflige 30 de dégâts à @$n@, c'est-à-dire l'acteur du script appelé ;
204
# La ligne 2 envoie le message seulement à @$n@ ;
205
# La ligne 3 envoie un message à toute la salle, sauf à @$n@.
206
207
h3. mpechoat
208
209
Syntaxe : @mpechoat <nom> <phrase>@
210
211
Envoie un message uniquement à la cible passée en premier paramètre. Cette commande peut être utile avec [[#mpechoaround|mpechoaround]] (voir [[#mpechoaround|mpechoaround]] pour un exemple).
212
213
Exemple d'utilisation :
214
215
<pre>
216
mpechoat $n Le jour se lève.
217
</pre>
218 3 Vincent Le Goff
219
h3. mpforce
220
221
Syntaxe : @mpforce <victime/all> <commande>@
222
223
Force une victime à faire une commande. Si le premier paramètre est @all@, force tous ceux présents dans la salle du script à faire la commande.
224
225
Exemples d'utilisation :
226
227
<pre>
228
mpforce $n remove blaster
229
mpforce all drop 5000 credit
230
</pre>
231
232
On peut aussi le faire silencieusement, comme toute commande de programme :
233
234
<pre>
235
silent mpforce $n remove all
236
</pre>
237
238
h3. mpgain
239
240
Syntaxe : @mpgain <victime> <niveau> <nombre>@
241
242
Donne de l'XP à une victime dans le niveau indiqué. Le niveau est à préciser sous la forme d'un nombre entre 0 et 7 (voir le tableau ci-dessous).
243
244
| Nombre | Niveau |
245
| 0 | Combat |
246
| 1 | Pilotage |
247
| 2 | Ingénierie |
248
| 3 | Chasseur de primes |
249
| 4 | Contrebande |
250
| 5 | Diplomatie |
251
| 6 | Commandement |
252
| 7 | Force |
253
254
Exemple d'utilisation :
255
256
<pre>
257
pmgain $n 1 50000
258
</pre>
259
260
Cet exemple donne 50.000 XP à $n dans le niveau pilotage.
261
262
h3. mpgoto
263
264
Syntaxe : @mpgoto <vnum de la salle<@
265
266
Cette commande permet de téléporter le mobile du script dans la salle dont le vnum est passé en paramètre. Cette commande ne marchera pas si la salle dans laquelle on souhaite se déplacer est privée.
267
268
h3. mpinvis
269
270
Syntaxe : @mpinvis (niveau)@
271
272
Cette commande demande au mobile du programme de devenir invisible. On peut passer en paramètre optionnel le niveau qu'il faut avoir pour voir ce mobile. Les mobiles ou joueurs d'un niveau inférieur à celui précisé ne verront pas ce mobile. Si le mobile invisible fait une action visible aux joueurs, ils verront simplement "someone"(quelqu'un) faisant l'action.
273
274
La documentation indique qu'une attaque de zone n'inclut pas les mobiles invisibles.
275
276
Exemple d'utilisation :
277
278
<pre>
279
mpinvis
280
mpinvis 3
281
</pre>
282
283
*Note* : utilisez cette commande une nouvelle fois pour lever le flag d'invisibilité du mobile.
284 4 Vincent Le Goff
285
h3. mpjunk
286
287
Syntaxe : @mpjunk <objets>@
288
289
Détruit un ou plusieurs objets dans l'inventaire ou portés par le mobile. Cette commande attend en argument le nom de l'objet. Dans ce cas, détruit un objet. On peut aussi utiliser la syntaxe @all.@ devant le nom de l'objet, pour détruire tous les objets de ce nom dans l'inventaire/l'équipement du mobile.
290
291
<pre>
292
mpjunk clef
293
mpjunk all.credits
294
</pre>
295
296
h3. mpkill
297
298
Syntaxe : @mpkill <victime>@
299
300
Cette commande permet de demander au mobile d'attaquer la victime indiquée.
301
302
Exemple d'utilisation :
303
304
<pre>
305
mpkill $n
306
</pre>
307
308
h3. mpmload
309
310
Syntaxe : @mpmload <vnum du mobile>@
311
312
Cette commande charge un mobile. Elle permet donc de faire apparaître un mobile dans la salle où vous vous trouvez. Il peut être utile de l'utiliser avec [[#mpat|mpat]] pour faire apparaître un mobile dans une salle distante:
313
314
Exemple d'utilisation :
315
316
<pre>
317
mpmload 500
318
mpat 230 mpmload 512
319
</pre>
320
321
h3. mpnothing
322
323
Syntaxe : @mpnothing@
324
325
Cette commande ne fait rien du tout. Elle semble assez inutile au premier abord. En vérité, sa seule utilité est pour les conditions vides : une condition (définie par @if@ ou @else@) ne peut être vide, c'est une limite de la syntaxe. Le @mpnothing@ permet de faire des conditions contraires. L'exemple ci-dessous affiche un message si $n n'est pas un wookiee.
326
327
Exemple d'utilisation :
328
329
<pre>
330
if race($n) == wookiee:
331
mpnothing
332
else
333
say Tu n'est pas un Wookiee, tant mieux !
334
endif
335
</pre>
336
337
Notez cependant que, dans le cas ci-dessus, on a surchargé la syntaxe inutilement. On aurait pu faire comme ceci (et ça aurait été bien plus lisible) :
338
339
if race($n) != wookiee:
340
say Tu n'est pas un Wookiee, tant mieux !
341
endif
342
</pre>
343
344
Il est possible que @mpnothing@ ait été inventé avant cette liberté dans la syntaxe des conditions contraires. Mais @mpnothing@ peut encore être utile pour les conditions vides imbriquées.
345
346
h3. mpoload
347
348
Syntaxe : @mpoload <vnum de l'objet>@
349
350
Cette commande permet de faire apparaître un objet de vnum indiqué dans l'inventaire du mobile faisant la commande.
351
352
Exemple d'utilisation :
353
354
<pre>
355
mpoload 20000
356
</pre>
357 5 Vincent Le Goff
358
h3. mpopenpassage
359
360
Syntaxe : @mpopenpassage <vnum de la salle d'origine> <vnum de la salle de destination> <numéro de la sortie>@
361
362
Cette commande crée une sortie temporaire (non sauvegardée) reliant la salle d'origine à la salle de destination, via la sortie dont le numéro est indiquée.
363
364
Exemple d'utilisation :
365
366
<pre>
367
mpopenpassage 5000 12088 0
368
</pre>
369
370
h3. mppkset
371
372
Syntaxe : @mppkset <victime> yes/no@
373
374
Change le flag PK de la victime. Le premier paramètre est la victime, le second soit yes (activer le flag) soit no (désactiver le flag).
375
376
Exemple d'utilisation :
377
378
<pre>
379
mppkset $n yes
380
</pre>
381
382
h3. mppractice
383
384
Syntaxe : @mppractice <victime> <talent/pouvoir/langue> <montant>@
385
386
Cette commande change le niveau du talent, pouvoir ou langue de la victime indiquée.
387 6 Vincent Le Goff
388
h3. mppurge
389
390
Syntaxe : @mppurge (objet/mobile)@
391
392
Nettoie la salle courante en enlevant tout, ou bien juste le mobile/objet précisé.
393
394
Exemple d'utilisation :
395
396
<pre>
397
mppurge
398
</pre>
399
400
h3. mprestore
401
402
Syntaxe : @mprestore <victime> <montant>@
403
404
Cette commande restaure la victime du nombre de points de vie indiqués.
405
406
Exemple d'utilisation :
407
408
<pre>
409
mprestore $n 200
410
</pre>
411
412
h3. mpslay
413
414
Syntaxe : @mpslay <victime>@
415
416
Cette commande tue la victime. Sans compromis. Le combat ne s'engage pas. La victime est morte tout de suite.
417
418
Exemple d'utilisation :
419
420
<pre>
421
mpslay $n
422
</pre>
423
424
h3. mptransfer
425
426
Syntaxe : @mptransfer <victime/all>@
427
428
Cette commande téléporte le personnage indiqué dans la salle du script.
429
430
Exemple d'utilisation :
431
432
<pre>
433
mptransfer $n
434
</pre>
435
436
Peut être aussi utilisé en conjonction avec [[#mpat|mpat]] :
437
438
<pre>
439
mpat 2000 mptransfer $n
440
</pre>
441
442
h2. Conditions
443
444
Les conditions permettent de personnaliser le script, en n'exécutant certaines instructions que dans certains cas. Sous SMAUG, les conditions dans les programmes sont appelés des ifchecks.
445
446
h3. Syntaxe de base du ifcheck
447
448
Les ifchecks ont une syntaxe simple de base :
449
450
<pre>
451
if condition
452
... entrez vos commandes dans le cas ou condition est vrai
453
else
454
... entrez vos commandes si la condition est fausse
455
endif
456
</pre>
457
458
Une condition peut être simplifiée sans bloc @else@ :
459
460
<pre>
461
if condition
462
... entrez vos commandes dans le cas ou condition est vrai
463
endif
464
</pre>
465
466
Le plus délicat est d'apprendre à faire des conditions. En général, une condition compare quelque chose. Par exemple : est-ce que la race du joueur est humaine ? Ou wookiee ? Est-ce que le mobile est dans la salle indiquée ?
467
468
On a donc une syntaxe en trois parties :
469
470
# La question : est-ce que la salle ? Est-ce que le mobile ? Est-ce que la race du joueur ?
471
# Le comparateur : égal, différent de, inférieur,, supérieur ?
472
# La valeur comparée : salle actuelle ? Race wookiee ? Genre masculin ?
473
474
Ne vous inquiétez pas trop de la syntaxe. Vous trouverez plusieurs exemples de syntaxe ici. Comme pour les commandes, le tableau suivant a trois colonnes : la première est le nom de la condition, la seconde sa syntaxe, la troisième une description courte. Cliquez sur le nom de la condition pour avoir plus d'informations, ainsi qu'un exemple de son utilisation. Apprenez par l'exemple et la syntaxe devrait vous sembler plus claire.
475
476
h3. Liste des conditions
477
478
| Condition | Syntaxe | Utilité |
479
| [[#race|race]] | @race(victime)@ | Renvoie la race de la victime. |
480
481
h3. race
482
483
Syntaxe : @race(victime)@
484
485
Cette condition renvoie la race de la victime. On peut comparer cette valeur.
486
487
Pour savoir si le personnage @$n@ est de race wookiee :
488
489
<pre>
490
if race($n) == wookiee
491
say Un wookiee !
492
else
493
say Quelque chose d'autre...
494
endif
495
</pre>
496
497
# @if@ : toute condition commence par @if@ ;
498
# @race($n)@ : on appelle la fonction @race@ en lui passant en paramètre @$n@. La fonciton retourne la race de @$n@ ;
499
# @==@ : l'opérateur de comparaison signifiant égal à ;
500
# @wookiee@ : le nom de la race à laquelle comparer.
501
502
Traduit en français, le code ci-dessus voudrait dire :
503
504
<pre>
505
si la race de $n est wookiee
506
say Un wookiee !
507
sinon
508
say Quelque chose d'autre...
509
fin de la condition
510
</pre>