TESCS2 : Les bases du scripting
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.