======= BOLEENS ET VARIABLES =======
Bienvenue dans le tutoriel « Booléens et Variables », réalisé par __Vanivan__ !
Ce tutoriel fait suite au [[tutos:bases_events|Tutoriel de Symbiose]].
----
===== Avant-propos =====
Les variables et les booléens utilisés dans ce tutoriel servent à titre d'exemple. Si vous avez besoin d'un booléen ou d'une variable unique, la démarche à suivre est de demander à [[editeur@slayersonline.net|EditeurSO]] un numéro que vous pourrez utiliser.
----
===== Booléens =====
==== Explications ====
=== Qu'est-ce que c'est un "booléen" ? ===
Un booléen est avant tout une variable, c'est-à-dire une **inconnue dont on peut changer la valeur**. Mais c'est une variable qui **ne peut avoir que 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 ça sert ? ===
Etant donné qu'il n'a que deux valeurs possibles (0 ou 1), les booléens pourront être utilisées pour :
* Savoir si un joueur a ouvert un coffre ;
* Savoir si le joueur a acheté un ticket de bateau ;
* Savoir si le joueur a appuyé sur un bouton pour débloquer une porte ;
* Et bien d’autres situations.
==== Utilisation ====
Le booléen __fonctionne comme une réponse à une question fermée__ (question dont la réponse est "oui" ou "non"). Nous allons donc interpréter ses valeurs comme étant "oui" et "non" :
* 0 -> Non
* 1 -> Oui
Evidemment, __un booléen est à 0 par défaut__. En d’autres termes, si l’on souhaite savoir si un joueur a activé un évènement, la réponse par défaut sera « non ».
Voici un exemple de situation où le joueur devra appuyer sur un bouton pour débloquer une porte :
* Au début, le joueur n'a touché à rien donc le booléen est à 0, la porte est bloquée.
* Le joueur a alors 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 et la porte est débloquée.
* Lorsque le booléen est à 1, le joueur a à nouveau deux choix :
* Si le joueur appuie sur le bouton, cela ne change rien, le booléen est déjà à 1.
* Si le joueur essaye d'ouvrir la porte, la porte s'ouvre.
En résumé, nous pouvons définir l'évènement de la porte comme une question dont la réponse correspond à la valeur d’un booléen :
"Le joueur a-t-il appuyé sur le bouton ?"
* "Oui" (booléen = 1) -> la porte est débloquée ;
* "Non" (booléen = 0) -> rien ne se passe.
L’utilisation d’un booléen dans un projet se fait grâce à la variable **Bool[XX]=...**. Dans ce-cas-ci, le XX correspond à un nombre qui peut s’obtenir de 2 façons :
* De façon libre via les booléens publiques et les booléens partagés ;
* Pour un usage privé en contactant [[editeur@slayersonline.net|EditeurSO]].
**//NB ://** lorsque vous avez plusieurs booléens à modifier dans vos CE (et uniquement dans les CE), il est vivement conseillé de les inscrire de la façon suivante : Bool[3..6]=0. Cette solution est bien plus rapide que la modification ligne par ligne.\\
__/!\ Cela ne fonctionne que pour les CE et pas pour les CD /!\__
==== Exemples ====
Pour ceux qui aiment les exemples concrets, voici deux exemples d'évènements qui utilisent les booléens.
=== Coffre ===
== Explication ==
Le but de cet événement est de **pouvoir ouvrir un coffre** et ce, **__une seule fois seulement__**. Il faut pour cela utiliser un booléen dont la valeur nous informera de l'état du coffre : s'il est ouvert ou pas.
Dans cet exemple, nous allons utiliser le booléen Bool[44] :
* S'il est à 0, c'est que le personnage n'a jamais ouvert le coffre.
* S'il est à 1, c'est qu'il l'a déjà ouvert.
**__/!\__** Le booléen 44 (ou Bool[44]) est numéro privé et déjà utilisé sur le jeu, vous ne pouvez donc pas l’ajouter dans votre projet.
**//NB ://** 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 [[Commandes:commentaires|ici]].
{{ :tutoriaux:ediwiki_-_tutovanivan_-_coffre.mp4?x400 |}}
== Code ==
Page 1 |
Conditions d'évènements | | Commande évènements |
|
|
|
Page 2 |
Conditions d'événements | | Commande événements |
|
|
|
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 ? Tout simplement pour "bloquer" le joueur, pour éviter qu'il prenne plusieurs fois le contenu du coffre. Si vous programmiez le coffre comme suit, son contenu pourrait être gagner indéfiniment et vous seriez alors accusé de tentative de triche :
Page 1 |
Conditions d'événements | | Commande événements |
|
|
|
Vous l'aurez compris, cet exemple est à ne surtout pas reproduire !
=== Bouton ===
== Explication ==
Cet évènement permet au joueur d’appuyer sur un bouton pour débloquer une porte :
* Si Bool[44]= 0, le joueur n'a pas appuyé sur le bouton, la porte est donc bloquée.
* Si Bool[44]= 1, le joueur a déjà appuyé sur le bouton, la porte est donc débloquée.
Dans cet exemple, le joueur ne pourra appuyer qu'une seule fois sur le bouton. La porte sera donc constamment ouverte par la suite.
**__/!\__** Le booléen 44 (ou Bool[44]) est numéro privé et déjà utilisé sur le jeu, vous ne pouvez donc pas l’ajouter dans votre projet.
{{ :tutoriaux:ediwiki_-_tutovanivan_-_bouton.mp4?400 |}}
== Code ==
Page 1 |
Conditions d'événements | | Commande événements |
|
|
|
Page 2 |
Conditions d'événements | | Commande événements |
|
|
|
Voilà, c’est déjà fini pour l'événement "bouton", à vous de voir pour quelles autres situations vous pouvez le reproduire =).
==== Exercices ====
Maintenant que vous avez compris le principe des booléens, voici quelques exercices pour vous entraîner :
- **Le ticket de bateau :** l'évènement du PNJ qui accepte ou non d'emmener le joueur sur l'île en bateau (si le booléen est à 0, le joueur n'a pas de ticket, mais s'il est à 1, alors le joueur a un ticket et peut prendre le bateau). N'oubliez pas le système des [[commandes:inputquery|Query]].
- **La clé** : pour pouvoir sortir de prison, le joueur a besoin de la clé qui ouvre la porte. Malheureusement, celle-ci est gardée par le soldat endormi juste devant sa cellule.
Envie de plus défi ? Essayez de reproduire ce que vous voyez sur la vidéo ci-dessous ;-).
{{ :tutos:ediwiki_-_tutovanivan_-_exercice_bool.mp4?x600 }}
Solution : {{ :tutos:ediwikitutos_2_.zip |Téléchargez-moi !}} :-)
==== Booléens publics ====
Certaines booléens sont dits **"publics"**, c'est-à-dire **utilisables par tous**, que ce soit dans le cadre d'un mini-jeu ou autre. Toutefois, ces booléens **doivent impérativement être remis à 0 à la sortie de la carte**.
^ Booléens publics ^
| 1 à 5 |
| 35 à 87 |
| 102 à 120 |
Il est important de **privilégier les booléens aux numéros les plus faibles** lorsque vous en avez besoin pour vos projets. Vous pourrez toutefois utiliser les numéros les plus forts si vous en avez besoin de beaucoup (pour éviter de passer de Bool[5] à Bool[35]).
Vous pouvez également retrouver ces informations dans le [[general:recapitulatif_boolvar|récapitulatif]].
==== Booléens partagés ====
En plus des booléens publics cités précédemment, il existe également certains booléens qui sont **utilisables par tout le monde** mais **leurs valeurs ne peuvent être modifiées** ! Il s'agit des booléens dits **"partagés"**.
→ __Exemple :__ le booléen 511 permet de connaître le genre du personnage (masculin ou féminin).
Ces booléens ne doivent pas être modifiés, juste lus (“lecture seule”). Ils ne doivent être utilisés que dans vos CD ou en CE précédés de la fonction “Condition()”.
Page 1 |
Conditions d'évènements | | Commande évènements |
|
|
|
=== Genre du joueur ===
Le booléen qui détermine le choix du genre au début du jeu est : **Bool[511]**
^ Position ^ Choix ^
| 1 | FEMININ |
| 0 | MASCULIN|
Vous pouvez également retrouver ces informations dans le [[general:recapitulatif_boolvar|récapitulatif]].
----
===== Variables =====
==== Explications ====
Comme dit précédemment, dans la définition d'un booléen, une variable est une inconnue. Toutefois, dans ce cas-ci, cette inconnue peut avoir de nombreuses valeurs. En d’autres termes, une 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 pour un booléen, et il est possible de la modifier de deux façons différentes :
* En lui attribuant une certaine valeur (Ex : Variable[44]=52) ;
* En l'incrémentant, c'est-à-dire en la modifiant selon son ancienne valeur, (Ex : Variable[44]=Variable[44]+1).
**__/!\__** Le booléen 44 (ou Bool[44]) est numéro privé et déjà utilisé sur le jeu, vous ne pouvez donc pas l’ajouter dans votre projet.
**//NB ://** comme pour les booléens, lorsque vous avez plusieurs variables à modifier dans vos CE, (et uniquement dans les CE), il est vivement conseillé de les inscrire de la façon suivante : Variable[3..6]=0. Cette solution est bien plus rapide que la modification ligne par ligne.\\
__/!\ Cela ne fonctionne que pour les CE et pas pour les CD /!\__
==== Utilisation ====
La variable s’utilise comme un booléen mais elle peut prendre une panoplie de valeurs différentes, pas seulement deux, ce qui implique beaucoup plus de tests en conditions. Les variables sont nécessaires à un jeu comme celui-ci, et sont utilisées, pour :
* La quête principale ;
* Les mini-jeux ;
* Les quêtes secondaires ;
* Et bien d’autres encore.
==== Exemple ====
=== Le paquet du fermier ===
//A VENIR//
==== Exercices ====
Comme pour les booléens, voici quelques exercices pour vous exercer à l’utilisation des variables :
* **La sphère de vie** : vous pouvez reproduire le début de la quête principale, 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. Dans cet exercice nous pourrons dire que le prêtre donne effectivement la sphère au joueur.
* **Boucle presque infinie** : qu'est-ce qu'une boucle ? 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 le joueur ne peut sortir que s’il 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).//
* **Jeu de dés** : 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 ! //
==== Variables publiques ====
Comme pour les booléens, certaines variables sont dites **"publiques"**, c'est-à-dire **utilisables par tous**, que ce soit dans le cadre d'un mini-jeu ou autre. Toutefois, ces variables **doivent impérativement être remises à 0 à la sortie de la carte**.
^ Variables publiques ^
| 13 à 16 |
| 61 à 65 |
| 306 à 316 |
Il est important de **privilégier les variables aux numéros les plus faibles** lorsque vous en avez besoin pour vos projets. Vous pourrez toutefois utiliser les numéros les plus forts si vous en avez besoin de beaucoup (pour éviter de passer de Variable[16] à Variable[61]).
Vous pouvez également retrouver ces informations dans le [[general:recapitulatif_boolvar|récapitulatif]].
==== Variables partagées ====
En plus des variables publiques citées précédemment, il existe également certaines variables qui sont **utilisables par tout le monde** mais **leurs valeurs ne peuvent être modifiées** ! Il s'agit des variables dites **"partagées"**.
→ __Exemple :__ la variable 96 permet de connaître selon l'arme choisie par le joueur au début du jeu (Arc, Baguette magique ou Epée).
Ces variables ne doivent pas être modifiées, juste lues (“lecture seule”). Elles ne doivent être utilisées que dans vos CD ou en CE précédées de la fonction “Condition()”.
Page 1 |
Conditions d'évènements | | Commande évènements |
|
|
|
=== Arme du joueur ===
La variable qui détermine le choix de l'arme au début du jeu est : **Variable[96]**
^ Position ^ Choix ^
| 1 | ARC |
| 2 | BAGUETTE MAGIQUE|
| 3 | EPEE |
=== Divinité du joueur ===
La variable qui détermine le choix de la divinité au début du jeu est : **Variable[95]**
^ Position ^ Choix ^
| 1 | DEMONIO |
| 2 | DONBLAS|
| 3 | DRANIGBA |
| 4 | VANILIUS |
| 5 | DANAVA |
| 6 | ZANDAROS |
| 7 | WILLANJIS |
| 8 | FULRULLIA |
| 9 | DRANIG |
| 10 | BRASTOS |
| 11 | AARIBA |
| 12 | NARTHE |
Vous pouvez également retrouver ces informations dans le [[general:recapitulatif_boolvar|récapitulatif]].
----
===== Variables serveur =====
==== Explications ====
En plus des variables simples, il existe des variables dites « serveur ». La différence entre les deux est assez simple à retenir :
* Variable : influence uniquement le joueur qui la modifie ;
* Variable serveur : influence tous les joueurs. Elles servent donc à faire des quêtes, des évènements où tout le monde a une influence dessus.
Par exemple, si un joueur rentre dans une pièce et qu'il appuie sur un bouton pour ouvrir une porte, les effets sont différents selon le type de variable : \\
-> Variable : la porte ne s'ouvre uniquement pour ce joueur ; \\
-> Variable serveur : la porte s'ouvre pour tout le monde.
==== Utilisation ====
Comme nous l’avons vu précédemment, les variables joueurs contiennent des nombres. Chaque variable avait donc un type associé bien défini. Or pour les variables serveur, c'est totalement différent : il est possible de les utiliser comme une chaîne de caractères, comme un entier ou encore comme un booléen (au choix).
Il est donc possible de faire exactement les mêmes opérations que sur les variables classiques.\\
-> L'incrémentation par exemple, pour stocker des entiers dans la variable serveur :
Serveur[VariableExemple] = Serveur[VariableExemple] + 1
-> Ou encore les commandes [[commandes:inputstring|InputString]] ou [[commandes:concat|Concat]] pour y stocker des chaînes de caractères :
Serveur[VariableExemple] = InputString('Rentrez le nom de la variable')
==== Exemples ====
Les variables serveurs peuvent être utilisées pour de nombreuses choses comme :
* Limiter l'accès d'une pièce à un certain nombre de joueurs ;
* Pouvoir se marier ;
* Pouvoir faire une quête où seul le premier personnage qui trouve gagne ;
* Faire un mini jeu où plusieurs personnages peuvent participer ;
* ...
Les variables serveur sont très utiles pour une maison de guilde, un mini-jeux et d'autres fonctionnalités... Ce n'est pas tant dans les quêtes que les variables serveur vont servir, mais plutôt dans la conception d'évènements utiles aux joueurs et qui renforcent le Role Play.
==== Particularités ====
=== Variable serveur contenant une variable joueur ===
Lorsque l'on utilise des variables serveurs, on peut en créer en intégrant des variables relatives aux joueurs. Par exemple : Serveur[VariableServeur%Name%]. Dans ce cas-ci, il existera alors autant de variables serveurs qu’il y a de noms de personnages différents.
Évidemment, ces manipulations demandent beaucoup de place en mémoire. Il faut donc en parler à [[editeur@slayersonline.net|EditeurSO]] avant toute chose. Mais attention, 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.
__Exemple :__\\
Prenons par exemple le système du mariage à l’église.
Serveur[Mariage%Name%]=…
Dans ce cas-ci, si Test (nom du joueur) se rend à l’église, la variable va se transformer en Seveur[MariageTest]. Cette variable serveur est initialisée à 0 comme toutes les autres. En fonction de sa valeur, nous pourrons alors savoir si le joueur est marié ou non.\\
-> Si la variable vaut 0, alors il n'est pas marié. Donc s’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, c’est qu’elle contient donc une chaîne de caractères, qui est en fait le pseudo de la personne avec laquelle le joueur est marié.
Cela est possible parce qu’il est tout à fait possible d’incorporer des fonctions dans la construction de nouvelles variables.
Serveur[InputString('Rentrez le nom de la variable')] (Prendra comme nom ce que le joueur aura écrit.)
Ça peut paraître dingue, mais ça marche !
**__/!\__** Serveur[Test_Variable[22]] ne fonctionne pas. Même chose pour les booléens.
=== Variable Serveur se modifiant en dehors du jeu ===
Il est également possible d'utiliser des variables qui se modifient toute seule en dehors de tout schéma de code de l'éditeur. C'est la machine qui héberge le jeu qui s'en occupe.
Vous pouvez donc demander à ce que la variable serveur fasse plusieurs actions parmi les suivantes :
- **Se réinitialise à 0 à chaque relance du jeu :**\\ //-> Intégration manuelle à communiquer à EditeurSo// \\ \\
- **Se réinitialise à 0 à chaque relance journalière (ou par semaine, mois, saison, année) :**\\ //-> Intégration par préfixe de la variable : Serveur[ResetJour_Name], Serveur[ResetSemaine_Name], Serveur[ResetMois_Name], Serveur[ResetSaison_Name] et Serveur[ResetAnnee_Name]// \\ \\
- **S'incrémente à chaque relance journalière (ou par semaine, mois, saison, année) :**\\ //-> Intégration par préfixe de la variable : Serveur[IncrementJour_Name], Serveur[IncrementSemaine_Name], Serveur[IncrementMois_Name], Serveur[IncrementSaison_Name] et Serveur[IncrementAnnee_Name]// \\ \\
- **Se modifie avec un aléatoire N à N2 à chaque relance journalière (ou par semaine, mois, saison, année) :**\\ //-> Intégration par préfixe de la variable + paramètre N et N2 pour les bornes de l'aléatoire : Serveur[AleatoireJour_0_1000_Name], Serveur[AleatoireSemaine_0_1000_Name], Serveur[AleatoireMois_0_1000_Name], Serveur[AleatoireSaison_0_1000_Name] et Serveur[AleatoireAnnee_0_1000_Name]// \\ \\
----
===== Variables serveurs partagées =====
Comme pour les variables et booléens joueurs, il y a aussi des variables serveurs dits **"partagées"**, dont la lecture est possible mais la modification non, sauf demande spécifique...
__Exemple :__ la variable serveur Serveur[MoisVesperaeName] permet de connaitre le mois actuel dans la langue de Vesperae.
Pour retrouver la liste, rendez-vous sur le [[general:recapitulatif_boolvar|récapitulatif]].
----