Les scripts

Sur Celendel, chaque chose est une entitée, et chaque entitée est définie par un script écrit en Lua. Pas de panique cependant, ils sont très simple d'utilisation.

Le code de base

  1. data = {};
  2.  
  3. function onUpdate(this, elapsed) end
  4.  
  5. function once(this) end
  6.  
  7. function onInit(this) end
  8.  
  9. function onDeath(this) end

Ce code peut paraitre un peu effrayant au premier abord, pour ceux qui ne connaissent pas le Lua par exemple. Il est en réalité très simple.
A la ligne 1, on déclare la table 'data' - cette table, présente dans toutes les entitées, indiquera à Celendel les informations à afficher. Nous y reviendrons plus tard.
Les autres lignes sont des fonctions (actuellement vides) dites 'callback'. Elles seront automatiquement appelée par le serveur, chacune dans des conditions différentes, qui seront détaillées par la suite.

La table data

En Lua, une variable se déclare de manière très simple :

  1. maVariable = "Texte";
  2. uneAutreVariable = 25.2
  3. uneVariableEncore = {"Salut", 24, maVariable};

Comme vous le voyez, le ';' à la fin des lignes d'instructions n'est pas obligatoire, et une variable Lua peut contenir à peut près n'importe quoi : du texte ('string' en anglais), un réel, une table, ou même une fonction.
Pour que cette variable apparaisse dans le client de Celendel, vous devez la renseigner dans la table 'data', de cette manière :

  1. data={};
  2. name = "Jean-Paul";
  3. data["name"] = "Nom";

Il est également possible d'utiliser des réels, ou des tables (à condition que les indexs et les valeurs sont convertibles en texte.

  1. data={};
  2. age = 25;
  3. data["age"] = "Age";
  4. attributes = {};
  5. attributes["force"]=12;
  6. attributes["charisme"]=2;
  7. data["attributes"] = "Caractéristiques";

La meilleure façon de comprendre comment ce système marche est encore d'experimenter par soi-même. N'hésitez pas à tester !

Les fonctions callback

Il existe plusieurs fonctions callback, appellées à différents moment par Celendel :

Vous n'aurez pas manqué de remarquer les paramètres de ces fonctions. Le 'this' correspond à l'objet C++ matérialisant l'entitée - pour faire simple, il permet au script d'agir sur son environnement.
La fonction 'onUpdate' contient aussi un paramètre 'elapsed', qui est un entier contenant le nombre de millisecondes écoulées depuis le dernier appel de cette fonction.

THIS §

Attardons-nous un instant sur cette variable 'this', un peu spéciale. Elle ne peut pas être appellée en dehors des fonctions callback, et est un objet. Vous pouvez acceder aux méthodes (=fonctions) d'un objet de cette manière :

  1. monObjet:maMethode();
  2. -- Dans notre cas :
  3. function once(this)
  4.         this:isSparta();
  5. end

Actuellement, ces méthodes ne sont pas très nombreuses :

Je réfléchis également à rajouter la possibilité d'acceder à d'autres entitées.

L'éditeur d'entitée : le Graal des flemmards

Pour les GM les plus allergiques au code, l'éditeur d'entitée permet de génerer simplement les données du script. Son utilisation est très intuitive, vous verrez.

Limitations du Lua

Le système de script est cependant limité sur quelques aspects :

Ces limitations tombent sous le sens, et dans le cadre d'une utilisation normale de Celendel, personne ne devrait s'y frotter.