Cours de Scripts pour les Quiches. Leçon Deux.

Introduction
Le but de cette série de leçons, est d'apprendre a se servir des scripts a n'importe qui. Cette deuxième leçon porte sur les variables. Il est toujours possible de trouver la première leçon ici.

Cette leçon risque d’être un peu plus longue que la précédente. Les concepts abordés sont également un peu plus complexes. Si ma manière de présenter les choses n’est pas assez claire, n’hésitez pas a posez des questions. Partez toujours du principe que pour une personne qui pose la question, il y en a cinq qui attendent la réponse.

Modifions donc notre module de test. Ouvrez le dans l’éditeur.
Cliquez droit sur le npc que nous avions crée. Choisissez propriétés et allez dans l’onglet des scripts.

Nous allons cette fois ci écrire deux petits scripts.

Le premier va dans le « OnSpawn »


void main()
{
  
SetLocalInt(OBJECT_SELF“CHANTEUR_COUNT”0);
}

Sauvegardez le en tm_chanteur_os ( « os » pour « OnSpawn » )
Bien, même si ce script ne fait qu’une seule ligne, il est du genre a faire fuir la plupart des gens qui n’ont pas l’expérience de la programmation. Essayons donc d’expliquer un peu avant de s’attaquer au script réel.

Premièrement, remarquez que ce script est placé dans le « OnSpawn ». Ce qui signifie qu’il ne sera exécuté qu’une seule fois, lorsque le npc apparaît pour la première fois dans le jeu. C’est donc l’endroit idéal pour initialiser des choses, et c’est justement ce que nous cherchons a faire.

Cette ligne définit une variable. Souvenez vous de vos cours de math, qu’est ce qu’une variable ? Une lettre qui représente un nombre. C’est a peu près la même chose ici, mis a part qu’au lieu d’utiliser une simple lettre, nous lui donnons un nom.

La commande SetLocalInt est une fonction que sert a définir une variable. Elle nécessite trois paramètres, séparés par des virgules.
- Le premier est ce a quoi la variable va être attachée.
- Le second est le nom que nous voulons donner a la variable.
- Le troisième est la valeur que nous voulons mettre dans la variable.

J’espère que vous avez compris que nous voulions créer une variable, nommée CHANTEUR_COUNT et que nous voulions lui donner la valeur 0. Le premier paramètre nécessite un peu plus d’explications.

Tout ou presque dans un module, est un objet ( object ). Les npcs sont des objets, les Placeables sont des objets. Même les pcs eux mêmes sont des objets. Avec tant et tant d’objets dans un module, il est vital de savoir s’y retrouver et de toujours savoir duquel on parle.

OBJECT_SELF est un des moyens les plus pratique de se référer a un objet. Comme vous pouvez le deviner, il fait référence a l’objet qui l’appelle. Dans notre cas, notre script est attaché a un npc, donc OBJECT_SELF est ce npc. Aussi simple que cela.

Nous avons donc, par le truchement de cette simple ligne, définis une variable nommée CHANTEUR_COUNT, qui a pour valeur 0. Cette variable étant attachée au npc CHANTEUR.

Il est intéressant aussi de noter que le Int de SetLocalInt est pour « Integer » ce qui veut dire Entier. C’est a dire un nombre entier. Nous aurions pu mettre 2, 15 et même –7 mais pas 3,8 par exemple.

Le deuxième script maintenant. Nous allons écraser le « OnHeartbeat » de notre première leçon.



int nCount
=GetLocalInt(OBJECT_SELF"CHANTEUR_COUNT");
void main()
{
    
nCount nCount+1;
    
ActionSpeakString("J’ai parle "+IntToString(nCount)+" fois.");
    
SetLocalInt(OBJECT_SELF"CHANTEUR_COUNT"nCount);
}

Sauvegardez le, gardez le nom tm_singer_hb.

Avant que j’explique, regardez donc ce que fait ce script. Fermez la fenêtre de script. Cliquez sur Ok pour le npc, et sauvegardez le module. Lancez le module de test et regardez comment se comporte votre chanteur.

C’est votre premier script avec quelque chose d’écrit avant le void main() et cela mérite donc d’être signalé. Ceci est appelé la phase d’Initialisation du script. Nous parlons ici des choses auxquelles le script va se référer. Contrairement a la variable locale que nous avons défini précédemment, ce nCount n’aura d’existence que le temps que ce script tourne. Des que ce script sera terminé, nCount n’existera plus. C’est pour cette raison que ces variables sont nommées « Temporaires ».

Remarquez combien de fois nous utilisons nCount dans notre fonction, et imaginez combien cela serait long et déroutant si nous devions a chaque fois réécrire a la place quelque chose comme GetLocalInt(OBJECT_SELF, "CHANTEUR_COUNT").

Pour ce qui est du nCount. A chaque fois que vous déclarez une variable temporaire, la première lettre est un tag qui sert a déterminer le type de valeur que cette variable peut prendre. Ce n’est nullement obligatoire, c’est simplement une convention. N est ici mis pour Integer. Quelque soit le nom que vous donnez a votre variable, vous savez qu’elle va contenir un Integer.

Les « int » signifie donc que nous définissons une variable de type integer, le « = » signifie que nous allons lui donner une valeur et le GetLocalInt récupère la valeur de la variable CHANTEUR_COUNT.

Notez au passage la similarité entre les fonctions SetLocalInt et GetLocalInt.

Cette première ligne crée donc une variable temporaire nCount, que notre script va pouvoir utiliser, et lui assigne la valeur de CHANTEUR_COUNT stockée au niveau de notre npc. Donc la première fois que le script est appelé, nCount vaut 0. Puisque c’est ce que nous avons initialisé dans notre script « OnSpawn ».

Je sais que cela fait beaucoup d’explication pour une simple ligne de code. Et je me doute que beaucoup ne comprendrons pas du premier coup. Relisez et si cela n’est toujours pas clair, attendez de l’avoir utilisé deux ou trois fois et vous verrez alors…

Voyons maintenant le corps du script et décortiquons le.

nCount = nCount+1;

Cela ne fait que prendre notre variable temporaire et lui ajouter 1. Il suffit de lire : Affectez a la variable nCount le contenu de la variable nCount + 1.

Si nCount vaut 9, alors après cette ligne, elle vaudra 10.

( Il est également possible d’écrire cela : nCount++ ;
le ++ est l’incrément de 1. C’est parfait une fois que l’on y est habitué, mais au début c’est généralement assez déroutant. )

La deuxième ligne est une commande connue : ActionSpeakString. Par contre le paramètre demande peut être explication. Il est composé de trois parties, séparées par des +. Lorsqu’on l’applique a des chaînes de caractères ( String ) le + sert a la concaténation. Par exemple :
« Ceci est une String » est équivalent à : « Ceci est » + « une String ».

Cela n’a que peu d’intérêt écrit comme cela, mais prends tout son sens quand on regarde la partie du milieu de l’expression : IntToString(nCount).
Ce qui fait exactement ce que ça veut dire. nCount est un integer, et cela transforme sa valeur en une chaîne de caractère de façon a ce qu’elle puisse être concaténée et utilisée par la commande ActionSpeakString.

Vous devriez maintenant facilement comprendre la dernière ligne. Cela ne fait que stocker la nouvelle valeur de nCount dans notre variable locale. Si nous voulons que cette variable soit réutilisée, il faut stocker sa valeur. Rappelez vous que nCount n’existera plus une fois que vous serez sortis de la fonction..


__________________
Amaranthe.
Thoerel, un monde semi-persistant pour Neverwinter Nights.