h1. Programmes et scripts de Star Wars MUD FR 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. 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. h2. Index des commandes de scripting 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. 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. | Commande | Syntaxe | Utilité | | [[#mpadvance|mpadvance]] | @mpadvance @ | Change le niveau d'un joueur. | | [[#mpapply|mpapply]] | @mpapply @ | Passe un joueur en statut "non autorisé, en attente d'autorisation". | | [[#mpapplyb|mpapplyb]] | @mpapplyb @ | Passe un joueur en statut "autorisé à jouer dans l'univers réel". | | [[#mpasound|mpasound]] | @mpasound @ | Envoie un message dans les salles alentour. | | [[#mpat|mpat]] | @mpat @ | Exécute la commande dans la salle indiquée. | | [[#mpclosepassage|mpclosepassage]] | @mpclosepassage @ | Détruit la sortie dans la salle. | | [[#mpdamage|mpdamage]] | @mpdamage @ | Inflige des dégâts à la victime. | | [[#mpdeposit|mpdeposit]] | @mpdeposit @ | Dépose de l'argent dans la zone du script | | [[#mpdream|mpdream]] | @mpdream @ | Envoie un message à un joueur qui dort. | | [[#mpecho|mpecho]] | @mpecho @ | Affiche une phrase à la salle dans laquelle se trouve le mobile, objet. | | [[#mpechoaround|mpecharound]] | @mpechoaround @ | Envoie un message à la salle, SAUF au joueur précisé. | | [[#mpechoat|mpechoat]] | @mpechoat @ | Envoie un message uniquement à un joueur. | | [[#mpforce|mpforce]] | @mpforce @ | Force la victime (ou tous ceux présents dans la salle) à faire une commande. | | [[#mpgain|mpgain]] | @mpgain @ | Donne de l'XP à la victime dans le niveau indiqué (le niveau est un nombre). | | [[#mpgoto|mpgoto]] | @mpgoto @ | Téléporte le mobile du script dans une salle quelconque. | | [[#mpinvis|mpinvis]] | @mpinvis (niveau)@ | Rend le mobile du script invisible. | | [[#mpjunk|mpjunk]] | @mpjunk @ | Détruit un ou plusieurs objets. | | [[#mpkill|mpkill]] | @mpkill | Tue un joueur sans utiliser murder. | | [[#mpmload|mpmload]] | @mpmload @ | Charge un mobile. | | [[#mpnothing|mpnothing]] | @mpnothing@ | Cette commande ne fait strictement rien (utile pour les conditions vides). | | [[#mpoload|mpoload]] | @mpoload @ | Fait apparaître un objet. | | [[#mpopenpassage|mpopenpassage]] | @mpopenpassage @ | Crée une sortie temporaire reliant origine à destination. | | [[#mppkset|mppkset]] | @mppkset yes/no@ | Change le flag PK de la victime. | | [[#mppractice|mppractice]] | @mppractice @ | Change la connaissance de la victime. | | [[#mppurge|mppurge]] | @mppurge (objet/mobile)@ | Purge la salle courante, ou un objet/mobile indiqué. | | [[#mprestore|mprestore]] | @mprestore @ | Restaure la victime précisée. | | [[#mpslay|mpslay]] | @mpslay @ | Tue la victime directement. | | [[#mptransfer|mptransfer]] | @mptransfer @ | Transfert une ou toutes les personnes dans la salle du script. | h2. Aide détaillée des commandes h3. mpadvance Syntaxe : @mpadvance @ Cette commande fait passer le joueur précisé à un niveau indiqué. Cette commande ne marchera pas si le programme est dans un mobile prototype. Exemple d'utilisation :
mpadvance $n 3
h3. mpapply Syntaxe : @mpapply @ 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*. Exemple d'utilisation :
mpapply $n
h3. mpapplyb Syntaxe : @mpapplyb @ Cette commande autorise un joueur, lui permettant d'entrer dans l'univers réel, au-delà de la zone de départ.
mpapplyb $n
h2. mpasound Syntaxe : @mpasound @ 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). Exemple d'utilisation :
mpasound Il commence à faire froid...
h3. mpat Syntaxe : @mpat @ 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. Exemple d'utilisation :
mpat 2200 drop all
(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. *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. h3. mpclosepassage Syntaxe : @mpclosepassage @ 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. La sortie doit être précisée sous la forme d'un nombre. Exemple d'utilisation :
mpclosepassage 5000 2
Voir aussi : * [[#mpopenpassage|mpopenpassage]]. h3. mpdamage Syntaxe : @mpdamage @ 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. Exemple d'utilisation :
mpdamage $n 200
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. h3. mpdeposit Syntaxe : @mpdeposit @ 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). Exemple d'utilisation :
mpdeposit 5000
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 :
mpat 3311 mpdeposit 5000
Voir aussi : * [[mpwithdraw|mpdwithdraw]] pour retirer de l'argent de la zone actuelle. h3. mpdream Syntaxe : @mpdream @ 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. h3. mpecho Syntaxe : @mpecho @ 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. Exemples d'utilisation :
mpecho La vitrine explose dans un vacarme infernal !
mpecho $n arrive de nullepart.
Voir aussi : * [[#mpechoat|mpechoat]] pour afficher un message uniquement à un joueur ; * [[#mpechoaround|mpechoaround]] pour afficher un message pour la salle, à l'exception d'un joueur ; * 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 ; * Cette commande est identique à la commande d'immortel *recho* que vous ne pouvez pas utiliser dans vos programmes. h3. mpechoaround Syntaxe : @mpechoaround @ 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. Exemple d'utilisation :
mpdamage $n 30
mpechoat $n Vous recevez une fléchette dans la peau, sans doute empoisonnée !
mpechoaround $n $n reçoit une fléchette dans la peau, sans doute empoisonnée !
Explications : # La première ligne inflige 30 de dégâts à @$n@, c'est-à-dire l'acteur du script appelé ; # La ligne 2 envoie le message seulement à @$n@ ; # La ligne 3 envoie un message à toute la salle, sauf à @$n@. h3. mpechoat Syntaxe : @mpechoat @ 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). Exemple d'utilisation :
mpechoat $n Le jour se lève.
h3. mpforce Syntaxe : @mpforce @ 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. Exemples d'utilisation :
mpforce $n remove blaster
mpforce all drop 5000 credit
On peut aussi le faire silencieusement, comme toute commande de programme :
silent mpforce $n remove all
h3. mpgain Syntaxe : @mpgain @ 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). | Nombre | Niveau | | 0 | Combat | | 1 | Pilotage | | 2 | Ingénierie | | 3 | Chasseur de primes | | 4 | Contrebande | | 5 | Diplomatie | | 6 | Commandement | | 7 | Force | Exemple d'utilisation :
pmgain $n 1 50000
Cet exemple donne 50.000 XP à $n dans le niveau pilotage. h3. mpgoto Syntaxe : @mpgoto mpinvis mpinvis 3 *Note* : utilisez cette commande une nouvelle fois pour lever le flag d'invisibilité du mobile. h3. mpjunk Syntaxe : @mpjunk @ 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.
mpjunk clef
mpjunk all.credits
h3. mpkill Syntaxe : @mpkill @ Cette commande permet de demander au mobile d'attaquer la victime indiquée. Exemple d'utilisation :
mpkill $n
h3. mpmload Syntaxe : @mpmload @ 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: Exemple d'utilisation :
mpmload 500
mpat 230 mpmload 512
h3. mpnothing Syntaxe : @mpnothing@ 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. Exemple d'utilisation :
if race($n) == wookiee:
mpnothing
else
say Tu n'est pas un Wookiee, tant mieux !
endif
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) : if race($n) != wookiee: say Tu n'est pas un Wookiee, tant mieux ! endif 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. h3. mpoload Syntaxe : @mpoload @ Cette commande permet de faire apparaître un objet de vnum indiqué dans l'inventaire du mobile faisant la commande. Exemple d'utilisation :
mpoload 20000
h3. mpopenpassage Syntaxe : @mpopenpassage @ 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. Exemple d'utilisation :
mpopenpassage 5000 12088 0
h3. mppkset Syntaxe : @mppkset yes/no@ 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). Exemple d'utilisation :
mppkset $n yes
h3. mppractice Syntaxe : @mppractice @ Cette commande change le niveau du talent, pouvoir ou langue de la victime indiquée. h3. mppurge Syntaxe : @mppurge (objet/mobile)@ Nettoie la salle courante en enlevant tout, ou bien juste le mobile/objet précisé. Exemple d'utilisation :
mppurge
h3. mprestore Syntaxe : @mprestore @ Cette commande restaure la victime du nombre de points de vie indiqués. Exemple d'utilisation :
mprestore $n 200
h3. mpslay Syntaxe : @mpslay @ Cette commande tue la victime. Sans compromis. Le combat ne s'engage pas. La victime est morte tout de suite. Exemple d'utilisation :
mpslay $n
h3. mptransfer Syntaxe : @mptransfer @ Cette commande téléporte le personnage indiqué dans la salle du script. Exemple d'utilisation :
mptransfer $n
Peut être aussi utilisé en conjonction avec [[#mpat|mpat]] :
mpat 2000 mptransfer $n
h2. Conditions 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. h3. Syntaxe de base du ifcheck Les ifchecks ont une syntaxe simple de base :
if condition
... entrez vos commandes dans le cas ou condition est vrai
else
... entrez vos commandes si la condition est fausse
endif
Une condition peut être simplifiée sans bloc @else@ :
if condition
... entrez vos commandes dans le cas ou condition est vrai
endif
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 ? On a donc une syntaxe en trois parties : # La question : est-ce que la salle ? Est-ce que le mobile ? Est-ce que la race du joueur ? # Le comparateur : égal, différent de, inférieur,, supérieur ? # La valeur comparée : salle actuelle ? Race wookiee ? Genre masculin ? 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. h3. Liste des conditions | Condition | Syntaxe | Utilité | | [[#isnpc|isnpc]] | @isnpc(victime)@ | Est-ce que la victime est un NPC (mobile)? | | [[#race|race]] | @race(victime)@ | Renvoie la race de la victime. | h3. isnpc Syntaxe : @isnpc(victime)@ La condition est vérifiée si la victime est un NPC (c'est-à-dire un mobile). On n'a pas besoin d'indiquer la comparaison ni la valeur attendue dans ce cas, ce qui rend la condition très simple :
if isnpc($n)
say C'est un mobile.
else
say C'est un joueur.
endif
# @if@ : toute condition commence par @if@ ; # @isnpc($n)@ : on appelle la fonction @isnpc@ en lui passant en paramètre @$n@. Elle retourne vraie si @$n@ est un mobile, faux sinon. Voir aussi : * [[#ispc|ispc()]] : teste si la victime est un joueur. h3. ispc Syntaxe : @ispc(victime)@ La condition est vérifiée si la victime est un PC (c'est-à-dire un joueur). On n'a pas besoin d'indiquer la comparaison ni la valeur attendue dans ce cas, ce qui rend la condition très simple :
if ispc($n)
say C'est un joueur.
else
say C'est un mobile.
endif
# @if@ : toute condition commence par @if@ ; # @ispc($n)@ : on appelle la fonction @ispc@ en lui passant en paramètre @$n@. Elle retourne vraie si @$n@ est un joueur, faux sinon. Voir aussi : * [[#isnpc|isnpc()]] : teste si la victime est un mobile. h3. race Syntaxe : @race(victime)@ Cette condition renvoie la race de la victime. On peut comparer cette valeur. Pour savoir si le personnage @$n@ est de race wookiee :
if race($n) == wookiee
say Un wookiee !
else
say Quelque chose d'autre...
endif
# @if@ : toute condition commence par @if@ ; # @race($n)@ : on appelle la fonction @race@ en lui passant en paramètre @$n@. La fonciton retourne la race de @$n@ ; # @==@ : l'opérateur de comparaison signifiant égal à ; # @wookiee@ : le nom de la race à laquelle comparer. Traduit en français, le code ci-dessus voudrait dire :
si la race de $n est wookiee
say Un wookiee !
sinon
say Quelque chose d'autre...
fin de la condition
On pourrait aussi avoir le test contraire, pour tester si le personnage n'est pas de la race @mon mon calamari :
if race($n) != mon calamari
say Ce personnage n'est pas de race mon calamari.
else
say Ce personnage est de race mon calamari.
endif
# @if@ : toute condition commence par @if@ ; # @race($n)@ : on appelle la fonction @race@ en lui passant en paramètre @$n@. La fonciton retourne la race de @$n@ ; # @!=@ : l'opérateur de comparaison négatif signifiant différent de ; # @mon calamari@ : le nom de la race à laquelle comparer.