TESCS2 : Les bases du scripting

De Wiwiki
Aller à la navigation Aller à la recherche

Les règles de syntaxe ci dessous ne concernent que les scripts nommés, c'est à dire les scripts de quête, d'effet magique ou d'objet.

Pour avoir une liste des règles de base qui sont détaillées ici, vous pouvez aussi regarder ce sujet.


Définir le nom du script

Un script doit obligatoirement commencer par son nom, qui est défini grace à la fonction ScriptName (ou à son raccourci, Scn). Un script "vide" ne contenant qu'un nom est le minimum syndical pour créer un script nommé (mais vous avouerez que point de vue utilité, on peut quand même mieux faire ! ^^).

 ScriptName MonPremierScriptVide
 Scn MonSecondScriptVide


Les variables locales

Après la définition du nom du script, vous pouvez définir les variables locales que contient ce script. Ces variables peuvent être de type Short (nombre entier), Float (nombre réel), Ref (référence d'objet) ou Long (nombre entier de grande taille). Par défaut, si vous n'effectuez aucune autre action, ces variables seront mises à la valeur 0.

Les variables locales sont définies pour chaque instance du script. Prenons l'exemple du script suivant :

 Scn ZeScript
 
 Short var

Supposons qu'on associe ce script à un personnage dont il existe deux copies dans le jeu. Si, pour une raison quelconque, la variable "var" du premier était mise à la valeur 1, la variable du second resterait à la valeur 0. Bien qu'ayant le même nom, les variables locales sur des objets séparés ont donc leur vie propre et n'interagissent pas entre elles !


Séparation du code en blocs

Dans Oblivion, le code exécuté à chaque appel du script est divisé en unités distinctes qui ne seront effectivement exécutées que sous certaines conditons. Par exemple, un bloc MenuMode n'est exécuté que quand le joueur est en mode menu (actuellement dans l'interface), un bloc GameMode est exécuté en permanence, et un bloc ScriptEffectStart ne sera exécuté que quand un effet scripté s'activera pour la première fois.


Attention, tout algorithme présent dans un script nommé doit obligatoirement se trouver à l'intérieur d'un des blocs Begin/End !!


Cette séparation est très interessante pour n'effectuer une action spécifique que quand on le souhaite. Supposons que vous vouliez afficher un message quand on active une porte, puis jouer un son en permanence après son ouverture. Vous utiliserez alors un bloc OnActivate pour l'ouvrir et un bloc GameMode pour jouer le son en permanence (et non pas seulement à la frame pendant laquelle la porte est activée) :

 Scn SesameOuvreToi
 
 Short ouvert
 
 Begin OnActivate
     Message "La porte s'ouvre." 3
     Set ouvert to 1
     Activate
 End
 
 Begin GameMode
     if ( ouvert == 1 )
         PlaySound MonSon
     endif
 End

Il existe un certain nombre de blocs Begin/End pouvant être utilisés.


... à poursuivre : les commentaires, les opérateurs de comparaison et les opérateurs logiques.