Les
variables dans l'éditeur de Slayers-Online
Avant toute chose, je tiens
à faire une mise en garde : les variables et les
booléens utilisés ici servent à titre
d'exemple. Si vous avez besoin d'un booléen, d'une variable
ou autre, la démarche à suivre est de demander
à frostfall un numéro de variable que vous
pourrez utiliser.
/!\NEW/!\ : En ce qui
concerne les variables 13 à 16, et les booléens 1
à 5 et 35 à 87, ces variables et
booléens sont publics, c'est-à-dire utilisables
ponctuellement, dans le cadre d'un mini-jeu ou autre, du moment que ces
variables et booléens sont remis à 0 à
la sortie de la carte.
-
- Booléens
- Variables
- Variables serveur
- Annexe
¤ Introduction
Pour permettre à tous de bien manier l'éditeur,
dans l'optique de faire des quêtes et uniquement pour
ça, j'ai été chargé de vous
expliquer le fonctionnement des variables, des booléens etc.
J'essaierai d'être le plus clair possible. Si vous avez des
questions, envoyez-moi un mail, j'ouvrirai une FAQ.
¤ Rapport avec le tutorial de Symbiose
Les tutoriaux de Symbiose seront plus que nécessaires pour
les exemples, la manipulation de l'editeur, et évidemment
pour la construction de quêtes.
Ce cours/tutorial sera donc un complément et une suite du
tuto de Symbiose, et non une pâle copie.
¤ Plan
Techniquement, je commencerai par les booléens, qui sont un
moyen facile d'expliquer les variables. Ensuite nous verrons les
variables tant attendues, puis les principes des quêtes.
Enfin, je mettrai une annexe pour expliquer chaque variable de
l'éditeur.
retour au
titre
¤ Définition
- Qu'est-ce que c'est ?
Un booléen est avant tout une variable,
c'est-à-dire une inconnue dont on peut changer la valeur
(voir la définition d'une variable).
Mais c'est une variable qui peut prendre seulement deux valeurs
différentes. Dans la vie courante, les deux valeurs d'un
booléen sont le "vrai" et le "faux", ou encore le "oui" et
le "non", mais sur l'éditeur, ce sont le "0" et le "1". Donc
un booléen vaut soit 0, soit 1, et c'est ce qui va nous
permettre de changer des états dans le jeu.
- A quoi sert-il ?
Etant donné qu'il n'a que deux valeurs
possibles, (0 ou 1), on pourra l'utiliser pour, par exemple :
- pour savoir si un joueur a ouvert un coffre
- pour savoir si le joueur a un ticket de bateau
- pour savoir si le joueur a appuyé sur un
bouton, pour débloquer une porte
- etc...
retour au
titre
¤ Utilisation
Le booléen va fonctionner comme une réponse
à une question fermée (question dont la
réponse est "oui" ou "non"). On va donc
interpréter ses valeurs comme étant "oui" et
"non" :
Evidemment, un booléen est à 0 par
défaut (effectivement, si on veut savoir si le joueur a
ouvert un coffre dès le début du jeu, alors la
réponse sera non, donc le booléen à 0).
Prenons un exemple : un joueur doit appuyer sur un bouton pour
permettre de débloquer une porte.
- Au début, le joueur n'a touché
à rien, et le booléen est à 0.
- Le joueur a deux choix, avec le booléen
à 0 :
- Si le joueur essaye d'ouvrir la porte, il ne peut
pas.
- Si le joueur appuie sur le bouton, le
booléen passe à 1.
- Lorsque le booléen est à 1, le
joueur a à nouveau deux choix :
- Si le joueur appuie sur le bouton, il ne peut pas, le
booléen est déjà à 1.
- Si le joueur essaye d'ouvrir la porte, la porte
s'ouvre.
Pour résumer, on peut définir
l'événement de la porte comme une question, dont
la réponse est le booléen :
"Le joueur a-t-il appuyé sur le bouton ?"
- "oui" (booléen = 1) -> ouverture
de la porte
- "non" (booléen = 0) -> rien
L'utilisation d'un booléen se fait grâce
à la variable Bool[XX], XX
étant un nombre (chaque booléen dans le jeu a son
propre numéro) à demander à frostfall.
Il y a une chose à savoir également, c'est sur la
modification de plusieurs booléens en une seule commande :
écrire :Bool[3..5]=0
équivaut à écrire Bool[3]=0,
Bool[4]=0 et Bool[5]=0,
et la première solution est beaucoup plus rapide pour le
serveur. Utilisez-les !
retour au
titre
¤ Exemples
Pour ceux qui veulent des exemples concrets, je vais donner deux
exemples d'événements qui utilisent les
booléens.
¤
Premier exemple
Le premier sera l'événement
"coffre", pour l'ouverture d'un coffre.
Note 1 : Des commentaires sont écrits
après //, ce sont des lignes qui peuvent être
intégrées aux pages
événements, mais ce ne sont que des commentaires
que je trouve utiles pour que vous compreniez bien de quoi on parle.
Pour plus d'infos sur les commentaires, voir ici.
Note 2 : le booléen
utilisé sera ici le booléen 44, ou Bool[44],
numéro déjà utilisé sur le
jeu donc en aucun cas à utiliser dans
votre projet.
/*événement coffre :*/
Page 1 :
Conditions :
Appuie sur bouton
Bool[44]=0
//Dans la première page, on va d'abord regarder que faire si
le booléen n'a pas été
activé. C'est donc la première fois que le joueur
appuie sur le coffre
Commandes :
AddObject('potion de vie')
//Bien sûr, on peut remplacer l'objet, ce n'est qu'un exemple
;-). Mais si vous voulez faire un événement de ce
type, demandez d'abord à frostfall si vous pouvez donner un
objet...
Bool[44]=1
//On met le booléen à 1, ce qui veut dire que le
joueur a déjà regardé dans le coffre.
|
Page 2 :
Conditions :
Appuie sur bouton
Bool[44]=1
//Dans la seconde page, on va ensuite donner les instructions si le
joueur a déjà pris l'objet (il ne faut pas qu'il
puisse le prendre plusieurs fois, d'où l'utilité
du booléen)
Commandes :
Message('Vous avez déjà pris le contenu du
coffre')
|
Voilà, c'est fini, vous venez de créer la liste
des conditions et des commandes qui permettent d'ouvrir un coffre. Mais
vous me direz, pourquoi utiliser un booléen ? Et bien tout
simplement pour "bloquer" le joueur, pour éviter qu'il
prenne plusieurs fois le contenu du coffre.
Si vous considérez l'événement coffre
comme suit, le contenu du coffre pourra être gagné
par le joueur autant de fois qu'il le voudra ... NE PAS FAIRE
CE QUI SUIT !
/*événement coffre :*/
Page 1 :
Conditions :
Appuie sur bouton
Commandes :
AddObject('potion de vie')
|
Vous l'aurez compris, cet exemple est à éviter !
Ne le faites pas, on vous accusera de tricherie !
retour au
titre
¤ Deuxième
exemple
Le deuxième exemple est en deux
événements : le joueur doit appuyer sur un bouton
pour ouvrir une porte. Je vais vous écrire
l'événement du bouton, vous pourrez vous exercer
en faisant l'événement de la porte.
/*événement bouton :*/
Page 1 :
Conditions :
Appuie sur bouton
Bool[44]=0
Commandes :
Message('Vous appuyez sur le bouton')
Bool[44]=1
|
Page 2 :
Conditions :
Appuie sur bouton
Bool[44]=1
Commandes :
Message('Vous avez déjà appuyé sur le
bouton')
|
Voilà pour l'événement "bouton",
à vous de voir comment on peut faire
l'événement "porte" ;-).
retour au
titre
¤ Exercices
Maintenant que vous avez compris le principe des
booléens, et en vous inspirant des exemples
donnés, je vais vous donner une petite liste
d'événements que vous pouvez gérer
avec un booléen, en ordre croissant de difficulté
:
- Tout d'abord, la suite du bouton et de la porte.
L'événement pour le bouton est
déjà fait, vous n'avez plus qu'à faire
l'événement pour la porte (en utilisant le
même booléen que
précédemment).
- Ensuite, il y a un événement
intéressant dans le jeu : le ticket de bateau. En premier
lieu vous pourrez faire l'événement de
"validation du ticket" : l'événement du PNJ qui
accepte ou non de vous amener sur l'île en bateau (si le
booléen est à 0, le joueur n'a pas de ticket,
mais si il est à 1, alors le joueur a un ticket et peut
prendre le bateau). Ne pas oublier le système des Query
(voir tuto de Symbiose).
- Une fois que vous avez fait
l'événement de validation du ticket, vous pouvez
vous mettre à l'événement d'achat du
ticket, le plus compliqué des deux. Le ticket
coûte 7,000 PO, donc il ne faut pas oublier de tester si le
joueur les a. Le booléen est le même que celui de
"validation du ticket".
retour au
titre
¤ Définition et utilisation
- Comme je le disais
précédemment, dans la définition d'un
booléen, une variable est une inconnue. Rappelez-vous de vos
cours de maths, les inconnues sont ces "x" que l'on retrouve dans des
équations de type "x-2=0" (dans cet
exemple, x vaut 2, évidemment). x n'est
donc pas définie, c'est une inconnue qui peut prendre
plusieurs valeurs. Par exemple, si on a "x*x=4",
alors x peut prendre deux valeurs
différentes, qui sont 2 et -2.
Par x on va désigner une certaine
valeur, que l'on ne connaît donc pas directement.
- Pour résumer, la variable est une inconnue
rattachée à une valeur qui peut changer, varier
(d'où son nom). Sur l'éditeur, la valeur initiale
d'une variable est 0 comme un booléen, et on peut la
modifier de deux façons différentes (NB : dans
tous mes exemples, nous utiliserons la Variable[44], mais c'est
arbitraire : ne l'utilisez pas sans l'autorisation de frostfall) :
- soit en lui attribuant une certaine valeur, par exemple :
Variable[44]=52
- soit en l'incrémentant,
c'est-à-dire en la modifiant, exemple :
Variable[44]=Variable[44]+1
- on peut également modifier plusieurs variables
en une commande, comme pour les booléens : écrire
Variable[3..5]=0 équivaut
à écrire Variable[3]=0,
Variable[4]=0 et Variable[5]=0,
et la première solution est beaucoup plus rapide pour le
serveur.
- Comment l'utiliser ?
Hé bien tout simplement comme un booléen, mais
qui peut prendre une panoplie de valeurs différentes, pas
seulement deux. Cela implique beaucoup plus de tests en conditions, et
une variable qui peut être utilisée pour beaucoup
d'états différents, pas seulement deux. Les
variables sont nécessaires à un jeu comme
celui-ci, et sont utilisées, par exemple pour :
- la quête principale
- les mini-jeux
- les quêtes secondaires
Dans la prochaine partie nous verrons des exemples
détaillés, et enfin vous aurez droit à
quelques exercices ...
retour au
titre
¤ Exemples
Effectivement, pour la quête principale, il faut absolument
des variables. Nous allons voir quelques utilisations des variables.
¤
Evénement bouton.
Pour cet exemple, je vais en reprendre un vu avec les
booléens : l'événement
bouton. Dans ce cas, manier une variable, c'est comme manier
un booléen. A quelques points près.
Je vous explique. Ici, avec une variable, il suffit d'augmenter la
variable de 1, par exemple, pour passer à un stade
différent de la quête. Pour ce cas-ci, l'ouverture
d'une porte en appuyant sur un bouton, la solution est simple : il
suffit d'augmenter la variable de 1 lorsque le joueur appuie sur le
bouton, ce qui signifiera que la porte pourra être ouverte.
Mais je vais passer à l'exemple, vous comprendrez
certainement mieux.
Dans cet événement, on va
considérer la variable 44. On va estimer qu'elle a une
valeur de 4 avant que le joueur appuie sur le bouton. Elle aura donc
une valeur de 5 une fois la porte ouverte.
Evidemment, il faudra tester plusieurs choses. Le booléen
n'a que deux valeurs, donc deux tests. Mais la variable peut avoir
beaucoup de valeurs, donc les tests vont être plus nombreux.
/*événement
bouton_avec_variable :*/
Page 1 :
Conditions :
Appuie sur bouton
Variable[44]<4
//Là on teste si la variable n'a pas encore la valeur
nécessaire pour appuyer sur le bouton.
Commandes :
Message('Le bouton est bloqué...')
|
Page 2 :
Conditions :
Appuie sur bouton
Variable[44]=4
//La valeur qui permet d'appuyer sur le bouton
Commandes :
Message('Vous appuyez sur le bouton... Cela a
déclenché quelque chose.')
Variable[44]=5
La valeur qui permet au joueur de passer la porte
|
Page 3 :
Conditions :
Appuie sur bouton
Variable[44]>4
//On teste toutes les autres valeurs, lorsque le joueur a
déjà appuyé sur le bouton
Commandes :
Message('Vous avez déjà appuyé sur le
bouton. Cela ne sert plus à rien maintenant.')
|
Voilà pour le premier exemple. C'était un exemple
facile. Comme je vous l'ai dit auparavant, essayez de faire
l'événement porte qui correspond à
l'ouverture de la porte en fonction de la valeur de la Variable[44]
;-)
retour au
titre
¤ Le paquet du fermier
Nous allons maintenant voir un exemple, beaucoup
plus explicatif pour les variables.
Au tout début du jeu, vous avez la possibilité
d'aller voir un paysan (que nous appelleront PNJ 1), qui vous demandera
de porter un paquet à son ami (que nous appelleront PNJ 2).
Une fois porté le paquet, vous pouvez revenir voir le paysan
qui vous donnera une récompense.
La question qui se pose : comment sait-il que vous êtes
allé porter le paquet à son ami ?
Réponse : tout simplement parce que la valeur de la variable
n'était pas la même. Nous allons supposer que la
variable utilisée est la variable 44 (Variable[44]),
et nous allons faire un récapitulatif de ses
états.
Je vous conseille fortement de faire un tableau
récapitulatif de tous les états
différents de la variable et de l'avancement de la
quête qu'ils représentent, comme suit (je ne
prétends pas détenir la solution ultime pour ce
qui est de la présentation du tableau, donc faites-le comme
vous voulez, mais en faire un facilite grandement les choses) :
Variable[44]
| valeurs |
événement
lié |
avancement
dans la quête |
| avant changement |
après changement
|
| 0->1 |
PNJ 1 |
on commence la quête |
PNJ 1 a donné le
paquet |
| 1->2 |
PNJ 2 |
on a le paquet |
PNJ 2 a
receptionné le paquet |
| 2->3 |
PNJ 1 |
on a donné le
paquet |
PNJ 1 nous donne la
récompense |
Maintenant, on va passer aux événements. Ici il y
aura donc deux événements, PNJ 1
et PNJ 2. Dans le premier, on va devoir tester
plusieurs valeurs de la variable : si elle est à 0,
à 2, ou plus grande que 3. Je ferai donc 4 pages
différentes, pour les différentes valeurs de la
variable.
/*événement PNJ 1*/
Page 1 :
Conditions :
Appuie sur bouton
Variable[44]=0
Commandes :
InputQuery('PNJ 1 : Voulez-vous porter ce paquet à mon ami
PNJ 2 s'il vous plaît ?','oui','non')
OnResultQuery('non')
Message('PNJ 1 : Tant pis, revenez me voir si vous voulez...')
OnResultQuery('oui')
Message('PNJ 1 : Merci, tenez.')
Variable[44]=1
QueryEnd
|
Page 2 :
Conditions :
Appuie sur bouton
Variable[44]=1
Commandes :
Message('PNJ 1 : Hé bien allez-y, il vous attend!')
|
Page 3 :
Conditions :
Appuie sur bouton
Variable[44]=2
Commandes :
Message('PNJ 1 : Merci de lui avoir apporté le paquet, tenez
ceci pour votre récompense')
Message('Vous gagnez un petit bouclier en bois.')
AddObject('petit bouclier en bois')
Variable[44]=Variable[44]+1
//On peut aussi mettre Variable[44]=3, mais c'est
pour vous montrer qu'ici, le résultat est le même.
|
Page 4 :
Conditions :
Appuie sur bouton
Variable[44]>=3
//On va supposer que le PNJ 1 ne servira plus dans le restant du jeu,
donc que cette page englobe le reste des possibilités...
Commandes :
Message('Merci de m'avoir aidé l'autre jour, je n'oublierai
pas!')
|
Maintenant passons à l'événement du
PNJ 2 : ici, il faut reconnaître seulement trois
états : 0, 1, et le reste (plus grand que 2) :
/*événement PNJ 2*/
Page 1 :
Conditions :
Appuie sur bouton
Variable[44]=0
Commandes :
Message('PNJ 2 : Je ne suis qu'un pauvre garde forestier....')
|
Page 2 :
Conditions :
Appuie sur bouton
Variable[44]=1
Commandes :
Message ('PNJ 2 : Merci de me rapporter ce paquet !! Revenez voir PNJ
1, il vous en sera gré.')
Variable[44]=2
|
Page 3 :
Conditions :
Appuie sur bouton
Variable[44]>=2
//De même que pour le PNJ 1, on va supposer ici que le PNJ 2
ne srevira plus pour le reste du jeu.
Commandes :
Message('PNJ 2 : Merci de m'avoir apporté le paquet, l'autre
jour.')
|
Voilà pour le deuxième exemple.
retour au
titre
¤ Un jeu de
dés.
Le dernier exemple que je vous montrerai n'utilise
pas les variables de la même façon... En fait, il
s'agit ici de réaliser un mini-jeu ;-). Nous allons
réaliser un jeu tout bête, un jeu de
dés, par exemple, entre un PNJ et un joueur. Celui qui fait
le plus gagne, et il y a match nul en cas
d'égalité.
Pour cela nous allons utiliser deux événements.
Un événement PNJ, bien sûr, mais aussi
un événement automatique, placé
n'importe où sur la carte. Et nous allons utiliser deux
variables, pour les scores de chaque joueur.
Nous allons donc nous servir de deux variables : 44 et 45,
par exemple. La variable 44 contiendra le score du joueur, alors que la
variable 45 contiendra celui du PNJ. Nous allons également
utiliser le booléen 2, qui passera à 1 lorsque
les scores seront distribués dans les variables, pour
permettre à l'événement automatique de
commencer. Nous allons commencer par faire
l'événement "PNJ", puis nous ferons
l'événement Automatique, qui indiquera le
vainqueur.
/*événement PNJ*/
Page 1 :
Conditions :
Appuie sur bouton
Commandes :
Message('PNJ : Nous allons commencer à jouer !')
Message('PNJ : Allez-y lancez le dé...')
Variable[44]=rand(6)
Message('PNJ : Vous faites Variable[44]. A mon tour.')
Variable[45]=rand(6)
Message('PNJ : Je fais Variable[45]')
Bool[12]=1
|
/*événement
résultat*/
Page 1 :
Conditions :
Automatique
Bool[12]=1
//C'est ce qui provoque le déclenchement de cet
événement
Variable[44]=Variable[45]
//On va maintenant tester quelle variable est la plus grande
Commandes :
Message('PNJ : Il y a match nul.')
Variable[44..45]=0
//Pour réinitialiser des variables ou des
booléens qui se suivent, il faut les écrire comme
ça.
//L'optimisation est meilleure pour le serveur, car une seule ligne est
envoyée.
Bool[12]=0
|
Page 2 :
Conditions :
Automatique
Bool[12]=1
Variable[44]>Variable[45]
Commandes :
Message ('PNJ : Vous avez gagné, bravo !')
Variable[44..45]=0
Bool[12]=0
|
Page 3 :
Conditions :
Automatique
Bool[12]=1
Variable[44]< Variable[45]
Commandes :
Message('PNJ : Vous avez perdu. Retentez votre chance !')
Variable[44..45]=0
Bool[12]=0
|
Voilà pour cet exemple de jeu. Sachez que c'est assez facile
de faire des jeux, et personnellement j'aime bien! Si vous avez des
idées de jeux à me donner, ou si vous en avez
fait, je me ferai un plaisir de les regarder :-)
retour au
titre
¤ Exercices
Comme prévu, je vais vous donner quelques "exercices" de
pratique, ne vous inquiétez pas, vous ne serez pas
notés dessus ! ;-). Ce sont simplement des exemples
d'utilisation de variables pour l'éditeur de Slayers-Online
(la liste est loin d'être exhaustive...).
Evidemment, les exercices vont en ordre croissant de
difficulté, donc commencez par le début ;-)
- Vous pouvez, comme pour les booléens, faire la
suite de l'événement du bouton et de la porte.
Vous pouvez faire l'événement de la porte, avec
la variable déjà vue dans l'événement
bouton.
- Ensuite, en vous inspirant de
l'événement du paysan,
vous pouvez faire la suite de la quête, lorsque le roi vous
envoie chercher la sphère de vie.
Ici, il y aurait deux événements : celui du roi
et celui du prêtre. Pour cet exemple nous pourrons dire que
le prêtre donne effectivement la sphère au joueur.
Pour aller plus loin, vous pouvez également faire jouer
l'événement "roi" dans la quête du
paysan et dans celle la. Cela devient un peu plus complexe, mais ce
n'est pas si dur ;-).
- Comme troisième exemple, je vous propose de
faire une "boucle". Qu'est-ce qu'une boucle? Et bien c'est un
état qui se répète à
l'infini, comme l'événement clignotement.
Quelle utilisation cela peut-il avoir ? Par exemple pour faire des
quêtes qui contiennent quelque chose de
répétitif, et dont on ne peut sortir que si on
effectue une autre action.
Si vous avez des idées de boucles, vous pouvez essayer de
les réaliser ;-). Pour le moment, je vous en donne une...
Lisez bien !
Pour cet exercice, vous pourrez
implémenter une petite quête : le joueur devra
parler à un PNJ qui l'enverra chercher son chien. Une fois
le chien attrapé, le joueur revient voir le PNJ, qui lui dit
qu'il s'est encore enfuit. Et ça continue tant que le joueur
ira chercher son chien. La boucle s'arrête si le joueur va
chercher l'os du chien avant d'aller chercher le chien (l'os se
trouvant dans un placard du PNJ).
Le principe de la boucle est le suivant : une fois l'action accomplie
(le chien ramené), vous allez remettre la variable
à la valeur qu'elle avait juste avant que l'action se fasse.
Mais à partir du moment où on va chercher l'os,
la variable changera, et ne reviendra pas à son
état précédent.
Si vous avez un quelconque problème de
compréhension ou de conception de cet exemple, vous pouvez
me demander via mail (Vanivan)
ou demander sur le forum.
- Enfin pour le dernier exercice que je vous propose, je
vais reprendre le jeu de dés du troisième
exemple. Essayer de réaliser un jeu de
dés entre le joueur et un PNJ, en deux manches gagnantes
(donc trois manches au pire), en utilisant trois variables et trois
booléens.
Les trois variables serviront à stocker le
résultat courant du joueur, celui du PNJ, et le nombre de
manches déjà jouées. Les
booléens serviront à dire que la manche courante
est finie, dire si le joueur a gagné une manche et dire si
le PNJ a gagné une manche.
N'oubliez pas de prendre en compte les matchs nuls !
retour au
titre
¤ Définitions et explications
Comme on l'a vu précédemment, les variables
joueurs contiennent des entiers (des numéros, des chiffres,
bref, un nombre). On sait également que certaines variables,
comme %String1% ou autres, contiennent des
string (des chaînes de caractères). Chaque
variable avait donc un type associé bien défini.
Or pour les variables serveur, c'est totalement différent.
On peut les utiliser comme une chaîne de
caractères, comme un entier ou encore comme un
booléen.
De plus, on peut faire exactement les mêmes
opérations que sur les variables classiques.
L'incrémentation par exemple, si on veut stocker des entiers
dans la variable serveur :
Serveur[VariableExemple] = Serveur[VariableExemple] + 1
Ou encore le InputString ou le Concat,
si l'on veut y stocker des chaînes de caractères
(voir la partie sur les commandes)
:
Serveur[VariableExemple] = InputString('Rentrez le nom de
la variable')
Une autre chose à savoir, les variables serveur sont
différentes des variables joueurs sur un autre point. Dans
le jeu, les variables joueurs n'influent que sur le personnage (si
votre personnage fait une quête, la variable de sa
quête n'est modifiée que pour lui). Alors que les
variables serveur influent sur le serveur, donc sur TOUS les
personnages. Le principe d'une variable serveur est de faire des
quêtes où tout le monde peut agir sur le jeu.
Un exemple :
Si un personnage rentre dans une pièce, qu'il appuie sur un
bouton pour ouvrir une porte, alors les effets sont
différents selon le type de variable :
- variable joueur : la porte ne s'ouvre que pour ce joueur.
- variable serveur : la porte s'ouvre pour tout le monde.
Pour compléter ceci, vous pouvez aller voir le petit
paragraphe écrit ici.
Si vous avez d'autres questions, envoyez-moi un mail, ou postez
dans le forum éditeur du jeu !
retour au
titre
¤ Exemples d'utilisation
On peut utiliser les variables serveur pour bon nombre de
quêtes, ou beaucoup d'autre choses. Par exemple, on peut les
utiliser :
- pour limiter l'accès d'une pièce
à un certain nombre de joueurs,
- pour pouvoir se marier,
- pour pouvoir montrer son animal de compagnie aux autres
(j'y travaille actuellement :-) ),
- pour pouvoir faire une quête où seul
le premier personnage qui trouve gagne,
- pour faire un mini jeu où plusieurs
personnages peuvent participer, etc.
retour au
titre
¤ Une autre spécificité
Lorsque l'on utilise des variables serveur, on peut en créer
en appelant des fonctions.
Par exemple (les exemples sont plus parlants dans ces
cas-là), on va pouvoir créer une (enfin une
multitude de) variable(s) serveur Serveur[VariableServeur%Name%].
Il existera alors autant de variables serveurs que de noms de
personnages différents. Evidemment, ces manipulations
demandent beaucoup de place mémoire. Il faut donc en parler
à frostfall avant toute chose (mais ceci est
réservé aux grosses quêtes, ou aux
projets assez conséquents, donc inutile d'utiliser ce type
de manipulation pour une maison de guilde, par exemple).
Donc pour l'exemple, on va prendre le système de
l'église et du mariage. Supposons que la variable
utilisée est, si le personnage s'appelle Test,
Serveur[MariageTest]. Comment
créer cette variable simplement, en tenant compte du nom du
joueur? Tout simplement en appelant cette fonction : Serveur[Mariage%Name%].
Cette variable est initialisée à 0, comme toutes
les autres. En fonction de sa valeur, on va donc pouvoir en
déduire si le personnage est marié ou non.
- si la variable vaut 0, alors il n'est pas
marié, donc lorsqu'il va s'adresser au prêtre, ce
dernier va lui demander s'il veut se marier.
- si la variable est différente de 0, elle
contient donc une chaîne de caractères, qui est en
fait le pseudo de la personne avec laquelle le joueur est
marié.
NB : on peut tout à fait incorporer des fonctions
dans la construction de nouvelles variables. Par exemple, la variable Serveur[InputString('Rentrez
le nom de la variable')] aura comme nom ce que le joueur
aura écrit.
Oui, ça paraît dingue, mais ça marche !
retour au
titre
¤ Exemples
Nous allons maintenant nous intéresser à quelques
exemples. Evidemment, ils sont beaucoup plus parlants que la
théorie. De plus, vous pourrez voir que l'on peut faire
vraiment beaucoup de choses grâce à ces variables
serveur ! Une option utile pour maison de guilde, mini-jeux, autres
fonctionnalités... Ce n'est pas tant dans les
quêtes que les variables serveur vont servir, mais
plutôt dans la conception de mini-jeux ou
d'événements utiles aux joueurs, et qui
renforcent le Role Play.
¤ Panneau d'affichage de guilde
Ici nous allons voir comment mettre un panneau d'affichage modifiable
par certaines personnes, dans une maison de guilde. Le message pourra
être lisible par tout le monde, mais seules quelques
personnes (ou seulement une seule) pourra la modifier.
Nous aurons donc besoin ici d'une et une seule variable, qui contiendra
le ou les message(s), ou qui sera vide. Les fonctions que nous allons
faire pourront ajouter un message, et vider le panneau de tous les
messages qu'il contient. Il faudra bien évidemment
également un événement pour le panneau
d'affichage.
Ici nous allons utiliser la variable (par exemple), Serveur[GuildeAdminsPanneauAffichage],
que nous allons utiliser dans deux événements,
l'événement "affichage_panneau" et
l'événement "modification_panneau"
/*événement
affichage_panneau :*/
Page 1 :
Conditions :
Appuie sur bouton
Commandes :
Message('Serveur[GuildeAdminsPanneauAffichage]')
//Hé oui, c'est tout pour afficher le contenu de la variable
:-)
|
/*événement
modification_panneau :*/
Page 1 :
Conditions :
Appuie sur bouton
%Name%=Vanivan
//Ici vous pouvez mettre la condition pour laquelle on peut changer le
panneau. On peut aussi le faire en fonction de la guilde et du rang du
personnage au sein de cette guilde, pour réserver ceci aux
chefs...
Commandes :
InputQuery('Que voulez-vous faire?','ajouter un message','tout
effacer','rien')
OnResultQuery('rien')
Message('Tant pis, au revoir')
OnResultQuery('tout effacer')
Serveur[GuildeAdminsPanneauAffichage]=
Message('Voilà, c'est fait !)
OnResultQuery('ajouter un message')
Serveur[GuildeAdminsPanneauAffichage]=Concat(' Message de %Name% :
InputString('Veuillez mettre votre message')')
Message('Voilà, c'est fait !')
QueryEnd
|
Page 2 :
Conditions :
Appuie sur bouton
%Name%!=Vanivan
Commandes :
Message('Vous n'avez pas accès au panneau d'affichage.')
|
retour au
titre
¤ Course de cochons
retour au
titre
¤ Mariage
Pour cet exemple du mariage, le système est
légèrement plus compliqué que les
autres. En effet, chaque joueur a plusieurs possibilités, et
il va falloir manier les variables et les appels de fonctions
à l'intérieur de celles-ci, et sans se tromper,
si possible !
Ce que je vais vous donner sera, je pense, correct. Si toutefois vous
trouvez une erreur, signalez-le moi.
Donc pour en revenir à l'exemple, soit le personnage est
déjà marié, soit il adresse sa demande
à un autre personnage, soit un autre personnage le demande
le mariage. Nous allons donc utiliser trois variables serveur,
respectivement pour les trois raisons que je viens de citer (il est
possible d'en utiliser moins, mais dans un souci de
compréhension, je le ferai avec trois variables), et qui
contiendront à chaque fois le nom de l'autre personnage
concerné :
- Serveur[Mariage%Name%]
contiendra le nom du personnage avec lequel notre personnage est
marié
- Serveur[MariageDemande%Name%]
contiendra le nom du personnage que notre personnage a
demandé en mariage
- Serveur[MariageReception%Name%]
contiendra le nom du personnage qui a envoyé une demande
à notre personnage
Ensuite, nous pouvons faire un tableau résumant les
possibilités du personnage, en fonction de la valeur des
trois variables qui lui sont associées. Pour
établir ce tableau, nous allons mettre des
"priorités" : si le personnage est
déjà marié, alors il ne peut demander
ni recevoir de demande en mariage. S'il a reçu une demande
en mariage, il peut soit l'annuler, soit l'accepter, mais il ne peut
pas en faire une. S'il a effectué une demande en mariage, il
peut l'annuler ou la laisser. Enfin, s'il n'a rien reçu ni
envoyé, il ne peut qu'envoyer une demande en mariage.
NB : le "= 0" signifie que la
variable est vide (une variable serveur est vide quand il y a 0
dedans), le "!= 0" signifie que la variable
contient un nom, donc qu'elle n'est pas vide. le "XXXX"
signifie que quelque soit la valeur de cette variable, ça ne
change pas l'état du joueur.
Mariage
| Serveur
[Mariage%Name%] |
Serveur
[MariageReception%Name%] |
Serveur
[MariageDemande%Name%] |
Etat du joueur |
| != 0 |
XXXX |
XXXX |
Le personnage est
marié avec Serveur[Mariage%Name%]. |
| =
0 |
!= 0 |
XXXX |
Le personnage n'est pas
marié, mais a reçu une demande de mariage de la
part de Serveur[MariageReception%Name%]. |
| =
0 |
!= 0 |
Le joueur n'est pas
marié, mais a demandé en mariage [MariageDemande%Name%]. |
| = 0 |
Le joueur n'est pas
marié, et n'a demandé en mariage ni
reçu de demande en mariage de personne. |
Voilà, nous avons notre tableau. Maintenant,
l'événement qui va en découler va
suivre effectivement la structure de ce dernier, tout en appliquant les
changements, et en mettant en place le reste des fonctions et des
changements de variables à gérer.
/*événement Mariage*/
Page 1 :
Conditions :
Appuie sur bouton
Serveur[Mariage%Name%]!=0
Commandes :
Message('Prêtre: Comment va Serveur[Mariage%Name%] ?
Passez-lui le bonjour de ma part !')
|
Page 2 :
Conditions :
Appuie sur bouton
Serveur[Mariage%Name%]=0
Serveur[MariageReception%Name%]!=0
Commandes :
InputQuery('Prêtre : Serveur[MariageReception%Name%] vous
demande en mariage. Acceptez-vous ?','oui','non')
OnResultQuery('non')
Message('Prêtre : J'espère que
Serveur[MariageReception%Name%] ne sera pas trop
déçu(e)...')
Serveur[MariageDemandeServeur[MariageReception%Name%]]=0
//Remise à 0 de la variable MariageDemande%Name% du
personnage qui a fait sa demande en mariage
Serveur[MariageReception%Name%]=0
//Remise à 0 de la variable MariageReception%Name% du
personnage qui parle au prêtre
OnResultQuery('oui')
Serveur[Mariage%Name%]=Serveur[MariageReception%Name%]
Serveur[MariageServeur[Mariage%Name%]]=%Name%
Serveur[MariageDemandeServeur[Mariage%Name%]]=0
Serveur[MariageReception%Name%]=0
Message('Serveur[Mariage%Name%] et %Name% sont
déclarés mariés !')
QueryEnd
|
Page 3 :
Conditions :
Appuie sur bouton
Serveur[Mariage%Name%]=0
Serveur[MariageReception%Name%]=0
Serveur[MariageDemande%Name%]!=0
Commandes :
InputQuery('Prêtre : Nous transmettons le message
à Serveur[MariageDemande%Name%]. Vous voulez
peut-être annuler cette demande ?','oui','non')
OnResultQuery('non')
Message('Prêtre : Bonne continuation !')
OnResultQuery('oui')
Serveur[MariageReceptionServeur[MariageDemande%Name%]]=0
Serveur[MariageDemande%Name%]=0
QueryEnd
|
Page 4 :
Conditions :
Appuie sur bouton
Serveur[Mariage%Name%]=0
Serveur[MariageReception%Name%]=0
Serveur[MariageDemande%Name%]=0
Commandes :
InputQuery('Prêtre : Voulez-vous vous marier ?','oui','non')
OnResultQuery('non')
Message('Prêtre : Bonne continuation !')
OnResultQuery('oui')
Serveur[MariageDemande%Name%]=InputQuery('A qui voulez-vous faire votre
demande ?')
Serveur[MariageReceptionServeur[MariageDemande%Name%]]=%Name%
Message('Nous lui transmettons la demande.')
QueryEnd
|
retour au
titre
¤ Commandes
- Message('Mettez
votre message ici.')
La fonction Message prend en paramètre une
chaîne de caractères (ou string, en anglais). Une
string peut être une lettre, un mot ou même une
phrase. - Condition('Appuie
sur bouton')
La fonction Condition permet de filtrer la condition par
laquelle le personnage est entré en contact avec
l'événement. Il faut pour cela mettre, dans les
conditions de déclenchement, TOUTES les
possibilités par lesquelles le personnage peut entrer en
contact avec l'événement (les conditions de base,
comme appui sur bouton, en contact etc...), puis utiliser Condition('')
à la manière d'un OnResultQuery (voir plus bas)
pour exécuter les commandes en fonction.
Update : Frostfall a fait en sorte que la commande (condition) puisse
agir sur TOUTES les conditions du jeu (sur les variables aussi).
Exemple : L'événement est un PNJ, et
le personnage peut entrer en contact avec lui soit en lui parlant
("Appuie sur bouton"), soit en étant "En Contact" avec lui.
L'événement tient sur une seule page (merci
à frostfall pour l'exemple).
/*événement Condition1 :*/
Page 1 :
Conditions :
Appuie sur bouton
En contact
Variable[0]=0
Commandes :
Condition('Appuie sur bouton')
Message('salut!')
Condition('En contact')
Message('Eh! ne me marche pas dessus!') |
Autre exemple : on souhaite qu'un PNJ dise au personnage
deux choses différentes selon que la variable 0 est
à 1 ou pas.
/*événement Condition2 :*/
Page 1 :
Conditions :
Appuie sur bouton
Commandes :
Condition('Variable[0]=1')
Message('Oh ! ta variable est à 1 !')
Condition('Appuie sur bouton')
Message('Bonjour.') |
- AddObject(NomObjet)
Ajoute un objet 'NomObjet' dans l'inventaire. Attention, si
l'inventaire est plein, l'objet est ajouté à la
place de l'avant dernier objet qui se trouve dans l'inventaire, quel
qu'il soit.
Exemple : AddObject('Herbe de
guérison') - DelObject(NomObjet)
Supprime la première occurrence de l'objet
'NomObjet' dans l'inventaire.
Exemple : DelObject('Chemise
renforcée') - Teleport(NomCarte,CaseX,CaseY)
Téléporte le joueur sur la carte
'NomCarte', aux coordonnées 'CaseX' et 'CaseY'.
Exemple : Teleport(maison,5,12)
- ChangeResPoint(NomCarte,CaseX,CaseY)
Change le point de résurrection du joueur sur la
carte 'NomCarte', aux coordonnées 'CaseX' et 'CaseY'.
Exemple : ChangeResPoint(maison,5,12)
- ChangeSkin('Chipset\skin.png')
Applique sur le joueur le skin 'skin.png', dans le
répertoire Chipset du jeu.
Exemple : ChangeSkin('Chipset\youga.png')
- GenereMonstre(NomMonstre,CaseX,CaseY,NbMonstre)
Crée NbMonstre monstre(s) en CaseX, CaseY.
- InputQuery('Voulez-vous
dormir ici?','oui','non')
Pose une question (ici, "Voulez-vous dormir ici?")
et affiche le choix des réponses. - OnResultQuery('oui')
Cette fonction ne fait rien de notable sur le jeu en
lui-même, mais il permet de "filtrer" les réponses
: on va utiliser cette fonction pour ensuite mettre les commandes
à exécuter si le joueur répond cette
réponse (cf. l'exemple ci-dessous). Cette fonction prend
comme argument un des choix de la question de InputQuery. - QueryEnd
Cette fonction non plus n'a pas d'effet direct sur le jeu.
Mais elle permet de dire que la question est finie (il faut mettre
cette fonction après la dernière commande de la
dernière réponse possible). Cette fonction ne
prend pas d'argument.
Exemple : on veut faire un PNJ qui pose une question au
joueur. Quelle que soit la réponse donnée, le PNJ
finit en disant "bonne journée" au joueur :
/*événement question :*/
InputQuery('Que vaut x si x*x=4 ?','x
vaut 2','x vaut -2','x vaut 2 ou -2','je ne sais pas')
OnResultQuery('x vaut 2')
Message('Non, ce n'est pas la bonne réponse')
OnResultQuery('x vaut -2')
Message('Non ce n'est pas la bonne réponse')
OnResultQuery('x vaut 2 ou -2')
Message('Bravo vous avez trouvé la bonne réponse
!')
Message('Je vais vous donner 50 PO pour avoir résolu cette
énigme !')
%Gold%=%Gold%+50
OnResultQuery('je ne sais pas')
Message('Hé bien relisez le tutorial de Vanivan, c'est
écrit dedans ;-)')
QueryEnd
//Notez que les commandes placées après le
QueryEnd seront effectuées quel que soit le choix du joueur.
Message('Bonne journée !') |
- InputString('Entrez le texte
ici')
Cette fonction permet au joueur de rentrer une
chaîne de caractère (ou String). Pour la stocker,
il faut utiliser une variable String.
Pour cet exemple, je vais vous montrer comment on peut
procéder pour réaliser un mot de passe. Le
premier événement se situe là
où le joueur doit taper le mot de passe, alors que le second
se situe n'importe où sur la carte, cela n'a pas
d'importance étant donné que c'est un
événement automatique.
"événement
demande_de_mot_de_passe"
Page 1 :
Conditions :
Appuie sur bouton
Commandes :
%String1%=InputString('Veuillez donner le mot de passe.')
//Ce que le joueur écrit sera stocké dans la
variable %String1%
|
"événement
automatique_mot_de_passe"
Page 1 :
Conditions :
Automatique
%String1%=motdepasse
//motdepasse est à remplacer par le mot de passe que vous
voulez utiliser
Commandes :
%String1%=
//Cette commande permet de réinitialiser %String1% pour
pouvoir le réutiliser ultérieurement
Message('Vous avez rentré le bon mot de passe.')
//Evidemment, vous pouvez mettre toutes les commandes que vous voulez
ici
|
Page 2 :
Conditions :
Automatique
%String1%!=
//Là, on teste si %String1% a été
modifié, et n'est pas égal à
motdepasse (2 en 1 :-) )
Commandes :
%String1%=
//Même chose
Message('Ce n'est pas le bon mot de passe.')
//Evidemment, vous pouvez mettre toutes les commandes que vous voulez
ici
|
Page 3 :
Conditions :
Commandes :
|
NB 1 : vous vous demandez sans doute pourquoi rajouter une
page vide dans l'événement, et bien pour une
raison simple. Le programme va tester les pages dans l'ordre, et va
s'arrêter s'il trouve une page qui a les bonnes conditions.
Mais s'il ne la trouve pas, il va quand même
exécuter la dernière page qu'il a
trouvée, qu'il y ait les conditions ou non. Or ici, si on
enlève la troisième page (vide), et que %String1%
est vide, alors le programme va quand même
exécuter la deuxième page, ce qui va bloquer le
jeu. Voilà pourquoi j'utilise ici une dernière
page vide.
NB 2 : on peut aussi utiliser le InputString avec une variable serveur.
Les explications dans le chapitre prévu à cet
effet : variables serveur.
- Magasin('Bonjour,
que puis-je faire pour vous?','Herbe de guérison','Potion de
vie')
Cette fonction permet de faire un magasin, la
première phrase que vous entrez en paramètre est
la phrase de bienvenue du marchand, et les autres paramètres
sont les objets en vente.
/!\ Attention à ne pas
insérer d'objets rares ou d'objets qui ne sont pas sur le
même continent que le marchand.
Exemple : Magasin('Bonjour, que
puis-je faire pour vous?','Herbe de guérison','Potion de
vie') - Coffre('Voici
le contenu de votre coffre')
Cette fonction permet d'accéder au coffre du
joueur, à son compte en banque, en quelque sorte.
Exemple : Coffre('Voici le contenu de
votre coffre') - PlayMusic('Sound\nom.mid')
Cette fonction sert à changer le fond musical du
jeu.
Exemple : PlayMusic('Sound\Castle1.mid')
- PlaySound('Sound\sound.wav')
Cette fonction permet de jouer un son.
Exemple : PlaySound('Sound\clac.wav')
- ChAttaqueSound('Sound\sound.wav')
Cette fonction change le bruit de l'attaque du personnage.
Exemple : ChAttaqueSound('Sound\clac.wav')
- ChBlesseSound('Sound\sound.wav')
Cette fonction change le bruit des coups donnés
aux personnages.
Exemple : ChBlesseSound('Sound\clac.wav')
- AddMagie(NomMagie)
Cette fonction ajoute une magie à la liste des
magies d'un personnage.
/!\ N'utilisez pas cette fonction pour
vous ajouter de la magie sur le jeu !
Exemple : AddMagie(Destruction)
- DelMagie(NomMagie)
Cette fonction sert à supprimer une magie de la
liste des magies du personnage.
Exemple : DelMagie(Destruction)
- Serveur[variable]=valeur
La section sur les variables
serveur est désormais ouverte ! A noter que les
noms des variables sont des mots, et qu'il vaut mieux bien
spécifier leur nom, pour qu'on puisse s'y retrouver. Par
exemple, une variable serveur qui permettra de gérer la
porte d'entrée d'une arène dans une maison de
guilde des admins pourra s'appeler Serveur[GuildeAdminsAreneEntree].
Evitez également de mettre des espaces, des accents ou des
caractères spéciaux dans les noms des variables.
Vous pouvez utiliser des variables serveur, mais n'oubliez pas de les
appeler avec des noms bien explicites ! De plus, si vous comptez en
utiliser beaucoup, parlez-en à Frostfall. - Concat('Chaîne')
Cette fonction sert à concaténer deux
chaînes de caractères (ou strings).
Concaténer c'est mettre une string à la suite
d'une autre. Par exemple, si on concatène les strings "Bonjour"
et " tout le monde !", et bien on va avoir la string
"Bonjour tout le monde !". Sur l'éditeur,
c'est le même principe. On va utiliser Concat sur une
chaîne déjà existante, pour y rajouter
une suite.
Exemple :
%String1%=%Name% /* ici on stocke le nom du personnage
dans la variable %String1% */
%String1%=Concat(' est votre nom.') /* là, la variable
%String1% vaut '%Name% est votre nom.', en remplaçant bien
sûr %Name% par le nom du personnage. */
On peut aussi s'en servir pour faire une page de news, dans la maison
d'une guilde par exemple. On va utiliser Concat pour rajouter un
message et non pas écraser tous les messages.
- //
Commentaires
Cette fonction sert à ajouter une ligne de
commentaires, qui n'aura aucune conséquence sur
l'événement. Elle permet à celui qui
implémente son projet de savoir où il va, et/ou
d'expliquer un événement à ceux qui
auront son projet sous la main.
Exemple : // Ce commentaire est un
test
retour au
titre
¤ Variables relatives aux
événements
Tout d'abord, il faut savoir qu'à chaque
fois qu'il y a écrit NomEv, cela
se réfère au nom de
l'événement. Il faut donc remplacer NomEv
par le nom de l'événement sur lequel vous
travaillez.
- %NomEv.Name%
Cette variable contient le nom de
l'événement. On peut donc le passer en commande
pour modifier le nom de l'événement. - %NomEv.CaseX%, %NomEv.CaseY%
Ces variables agissent comme les variables %CaseX% et %CaseY%, mais pour
l'événement NomEv. - %NomEv.Chipset%
Cette variable permet de changer le chipset de
l'événement NomEv. Il faut
lui donner en paramètre le nom du skin que l'on veut lui
donner.
Par exemple :
%NomEv.Chipset%=chipset\youga.png
/!\ Attention : ne pas oublier de
mentionner le nom du répertoire dans lequel se trouve le
fichier (la plupart du temps, dans Chipset\) - %NomEv.Bloquant%
Cette variable permet de modifier le champ "Bloquant" d'un événement. Si la variable est à 0, l'événement n'est pas bloquant : le personnage peut marcher dessus. Si la variable est à 1, alors l'événement est bloquant : le personnage ne peut pas marcher dessus.- %NomEv.Transparent%
Cette variable permet de rendre un
événement transparent. Lorsque %NomEv.Transparent%
vaut 0, alors l'événement est opaque,
c'est-à-dire en pleine couleur, normal. Si la variable est
à 1, alors l'événement est
transparent. - %NomEv.Visible%
Cette variable fonctionne comme la variable %Visible% des
variables relatives aux joueurs. - %NomEv.TypeAnim%
Cette variable contient le type d'animation de
l'événement. Si vous ne savez pas à
quoi cela se rapporte, revenez voir les tutoriaux de Symbiose. - %NomEv.Direction%
Cette variable fonctionne comme la variable %Direction% dans
les variables relatives aux joueurs. - %NomEv.X%, %NomEv.Y%
Ces variables contiennent les valeurs, en X et en Y, des
coordonnées de l'image de l'événement
dans son chipset.
Ces coordonnées sont visibles en bas à gauche de
la fenêtre événement, dans le cadre
réservé à l'image. - %NomEv.W%, %NomEv.H%
De même que pour les %NomEv.X%
et %NomEv.Y%, ces variables se
réfèrent au cadre réservé
à l'image de l'événement, en bas a
gauche de la fenêtre événement.
W signifie Width, qui veut dire "largeur", alors que H signifie height,
la hauteur. - %NomEv.NumAnim%
Cette variable contient le numéro d'animation
de l'événement. Si vous ne savez pas à
quoi cela se rapporte, revenez voir les tutoriaux de Symbiose. - %NomEv.Vitesse%
Cette variable contient la vitesse de
l'événement. Si vous ne savez pas à
quoi cela se rapporte, revenez voir les tutoriaux de Symbiose.
retour au
titre
¤ Variables relatives aux joueurs
- %Name%
Cette variable contient le nom du personnage. - %UpperName%
Cette variable contient le nom du personnage en "absolu",
sans les caractères interdits. Par exemple, si le joueur se
connecte en tant que frost@@//fall , %UpperName% donnera FROSTFALL. - %Classe%
Cette variable contient la classe du personnage. - %Skin%
Cette variable contient le nom du skin du personnage. On
peut aussi conserver la skin qu'avait un personnage en la stockant dans
un %String%, pour pouvoir la modifier temporairement. - %Force%
Cette variable contient la valeur de la
caractéristique "force" du personnage. - %Dext%
Cette variable contient la valeur de la
caractéristique "dextérité" du
personnage. - %Constit%
Cette variable contient la valeur de la
caractéristique "constitution" du personnage. - %Magie%
Cette variable contient la valeur de la
caractéristique "magie" du personnage. - %Attaque%
Cette variable contient la valeur de l'attaque du
personnage. - %Defense%
Cette variable contient la valeur de la défense
du personnage. - %Vie%
Cette variable contient le nombre de points de vie qu'il
reste au personnage. - %VieMax%
Cette variable contient le nombre maximum de points de vie
que peut avoir le personnage. - %CurrentMag%
Cette variable contient le nombre de points de magie
restants du personnage. - %Magmax%
Cette variable contient le nombre maximum des points de
magie du personnage. - %Alignement%
Cette variable contient l'alignement du personnage. - %Reputation%
Cette variable contient la réputation du
personnage. - %Gold%
Cette variable contient le nombre de pièces d'or
du personnage. - %Lvl%
Cette variable contient le niveau (level) du personnage. - %LvlPoint%
Cette variable contient le nombre de points à
répartir dans les caractéristiques. - %CurrentXP%
Cette variable contient le nombre de points
d'expérience acquis. - %NextXP%
Cette variable contient le nombre de points
d'expérience qu'il reste à avoir pour le prochain
niveau. - %Timer%
Cette variable est un peu spéciale. En fait,
c'est une variable qui change de valeur toute seule. Un timer est un
compteur : cette variable va donc compter toute seule, à
raison de 1 toutes les 30 ms. Pour l'initialiser, il faut la mettre
à 0, puis la variable change toute seule, de 1 en 1 toutes
les 30 ms.
Exemple : on va faire un PNJ qui va clignoter (il va
disparaître, réapparaître,
disparaître, etc, jusqu'à l'infini,
grâce au timer, justement) :
NB 1 : sur toutes les pages, mettez le même chipset d'un PNJ
quelconque.
NB 2 : j'appellerai cet événement "clignotement",
n'oubliez pas de remplir le titre en haut à gauche de chaque
page de l'événement !
/*événement
clignotement :*/
Page 1 :
Conditions :
Automatique
%Timer%<100
//Etant donné que la variable %Timer% est
initialisée à 0, ici on va donc dire que
jusqu'à 100, on va juste afficher le PNJ
Commandes :
//Rien à mettre ;-)
|
Page 2 :
Conditions :
Automatique
%Timer%<200
//Là, on a dépassé 100, donc on va
dire de ne pas afficher l'événement entre 100 et
200 (100 unités de cette variable font environ 3 secondes)
Commandes :
%clignotement.Visible%=0
//Remplacez clignotement par le nom de votre
événement
|
Page 3 :
Conditions :
Automatique
%Timer%=200
//Là on va réinitialiser le Timer à 0,
dès qu'on atteint 200, pour pouvoir reprendre à
la première page de l'événement. Cet
événement va donc boucler (faire une boucle
infinie), et va passer de la page 1 à la page 2, puis
à la page 3, pour ensuite revenir directement à
la page 1.
Commandes :
%clignotement.Visible%=1
%Timer%=0
|
- %Effect%
Cette variable est celle qui correspond au champ "Effet"
des propriétés d'une map. Les valeurs de cette
variable vont de 0 à 5, et sont les suivantes :
- 0 = normale
- 1 = grotte sombre (rond éclairé)
- 2 = nuit (aspect bleu)
- 3 = chaleur (aspect rouge)
- 4 = pluie
- 5 = neige
- %upper(chaine)%
Renvoie le paramètre chaine en "absolu",
c'est-à-dire sans les caractères interdits,
à l'instar de %UpperName% pour %Name%. Par exemple, si dans
%String1% on met frost@@//fall, %upper(%String1%)% renverra FROSTFALL. - %rand(100)%
Cette fonction est un random. Un random est une fonction
qui va donner un nombre aléatoire. rand(100)
va donner un nombre entre 0 et 99, aléatoirement. Evidemment
on peut changer les limites du random. Dans l'exemple, on va faire un
random entre 5 et 15.
Exemple : on va mettre un nombre entre 5 et 15 dans la
variable 44
Variable[44]=5+%rand(11)% /* le random donne un nombre
entre 0 et 10. Pour en obtenir un entre 5 et 15, il suffit de rajouter
5. */
NB : on peut l'utiliser aussi dans les conditions de
déclenchement. - %max(valeur1,valeur2)%,
%min(valeur1,valeur2)%
Ces variables sont en fait des fonctions qui prennent en
paramètres deux variables, ou deux valeurs, et qui
retournent soit la plus petite (pour %min(valeur1,valeur2)%)
soit la plus grande (pour %max(valeur1,valeur2)%).
/!\ Attention : ces fonctions retournent
une VALEUR, et non pas le nom de la variable! donc si on a Variable[0]
qui vaut 2 et la Variable[1]
qui vaut 3, alors %min(Variable[0],Variable[1])%
sera égal à 2, et non pas
à Variable[0]. - %KillPlayer%
Cette variable est à 0 en temps normal, et passe
à 1 si le joueur tue un autre joueur.
On peut utiliser cette variable dans les conditions
évidemment, mais aussi dans les commandes :
Si on veut faire plusieurs
événements, sur une carte, qui comptent un point
dès qu'un joueur en tue un autre, il faut
déjà repérer que la variable passe
à 1 (utilisation en conditions) et ensuite il faut remettre
cette variable à 0 (utilisation en commande), pour
éviter que le point soit compté plusieurs fois.
- %Visible%
Cette variable permet au personnage d'être
visible ou non. Si la variable est à 1 (par
défaut), alors le personnage est visible. Si la variable est
à 0, alors il est invisible (cf
l'événement clignotement
avec la variable %NomEv.Visible%). - %Bloque%
Cette variable peut bloquer le personnage. Si elle est
à 0, alors le joueur peut bouger librement, mais si elle
passe à 1, le joueur est bloqué et ne peut plus
bouger. - %CaseX%
Cette variable permet de bouger le personnage sur l'axe des
X, (l'axe horizontal). Le personnage ira de lui-même sur
cette case.
Exemple : on va faire bouger le personnage sur la case 12 de
la carte, sur l'axe horizontal :
%CaseX%=12 /* le personnage va alors bouger de l'endroit
où il est vers la case 12, sans s'arrêter. Il faut
donc faire attention si il y a des obstacles sur son chemin... */
- %CaseY%
Pareil que pour %CaseX%, mais sur
l'axe vertical (celui des Y). - %CentreX%
Cette variable permet de modifier le centre de la
caméra. Les coordonnées à donner sont
relatives à l'emplacement du personnage. Lorsque la
caméra est centrée sur le personnage, %CentreX%
et %CentreY% sont à 0. Pour
modifier l'axe X de la caméra et la mettre vers la gauche,
il faut rajouter un certain nombre de cases. Pour que la
caméra soit plus à droite, il faut lui enlever
quelques cases.
Exemple : on va mettre le centre de la caméra une
case à droite du personnage :
%CentreX%=-1 - %CentreY%
Pareil que pour %CentreX% mais
sur l'axe vertical, positif vers le haut, négatif vers le
bas. - %BloqueChangeSkin%
Lorsque cette variable est à 0, le personnage
peut changer de skin comme il veut. Mais si cette variable passe
à 1, le personnage ne peut pas changer de skin. Cette
variable reste active même après une
déconnexion. - %BloqueAttaque%
Lorsque cette variable est à 0, le personnage
peut attaquer comme il veut. Mais si cette variable passe à
1, le personnage ne peut pas attaquer. Cette variable reste active
même après une déconnexion. - %BloqueAttaqueLocal%
Lorsque cette variable est à 0, le personnage
peut attaquer comme il veut. Mais si cette variable passe à
1, le personnage ne peut pas attaquer. Cette variable ne reste pas
active après une déconnexion, mais ne fait pas
lagger comme la précédente lorsqu'elle est
modifiée. - %BloqueMagie%
Lorsque cette variable est à 0, le personnage
peut utiliser de la magie comme il veut (s'il en a ;-p). Mais si cette
variable passe à 1, le personnage ne peut pas utiliser de
magie. Cette variable reste active même après une
déconnexion. - %BloqueMagieLocal%
Lorsque cette variable est à 0, le personnage
peut utiliser de la magie comme il veut (toujours s'il en a ^^;). Mais
si cette variable passe à 1, le personnage ne peut pas
utiliser de magie. Cette variable ne reste pas active après
une déconnexion, mais ne fait pas lagger comme la
précédente lorsqu'elle est modifiée. - %BloqueDialogue%
Lorsque cette variable est à 0, le personnage
peut dialoguer comme il veut. Mais si cette variable passe
à 1, le personnage ne peut pas envoyer de messages normaux.
Il peut néanmoins utiliser /guild, /party et /msg pour
dialoguer. Cette variable reste active même après
une déconnexion. - %Direction%
Cette variable détermine vers où se
tourne le personnage. Cette variable a quatre valeurs possibles (NB
: les directions tournent dans le sens horaire) :
- Si
%Direction%=0 alors le
personnage regarde vers le haut.
- Si
%Direction%=1 alors le
personnage regarde vers la droite.
- Si
%Direction%=2 alors le
personnage regarde vers le bas.
- Si
%Direction%=3 alors le
personnage regarde vers la gauche.
- %Groupe%
Cette variable contient le nom du groupe du personnage (que
l'on crée en faisant /join nom_de_groupe), et est vide si le
personnage n'a pas de groupe. - %Guilde%
Cette variable contient le nom de la guilde du personnage,
et est vide si le joueur n'a pas de guilde. - %Rang%
Cette variable contient le rang du personnage dans sa
guilde, et est vide si le joueur n'a pas de groupe. - %String1%, %String2%, %String3%
Ce sont des variables qui contiennent des String
(chaînes de caractères). Ces variables peuvent
être utilisées pour stocker des mots, donc, par
exemple pour trouver un mot de passe, ou autre (cf InputString). - Variable[0], Bool[0]
Voilà les variables qui servent à
faire plein de choses... Si vous attendez une explication des Variables et des Booléens, vous
êtes au bon endroit! A noter, quelque chose quand
même : le numéro du booléen ou de la
variable s'écrit entre les crochets : pour la variable 44,
on va utiliser Variable[44].
Il y a une chose à savoir également, c'est sur la
modification de plusieurs variables en une commande :
écrire :Variable[3..5]=0
équivaut à écrire Variable[3]=0,
Variable[4]=0 et Variable[5]=0,
et la première solution est beaucoup plus rapide pour le
serveur. Utilisez-les !
retour au
titre
Dernière MAJ le 14 Octobre 2007
© Vanivan
- 2004-2007 pour Slayers-Online