Aller au contenu


Tuto de base pour les scripts


  • Veuillez vous connecter pour répondre
Aucune réponse à ce sujet

#1 Confridín

Confridín

    Daddy ! je VEUX un nouveau sous-nom!!!


Posté 23 juin 2004 - 12:29

De nombreuses personnes n'arrivent pas maîtriser les scripts. Je me suis dit qu'un tuto simpliste visant à apprendre les bases (celles qui sont enfouies sous le sol voir encore plus bas :green: ) aux nouveaux serait une bonne idée donc je me lance:


Tout d'abord, qu'est-ce qu'un script? C'est un langage spécifique, comme une langue étrangère: Au début, c'est incompréhensible. C'est après que cela devient marrant.

Tout script commence par Begin et fini par End. A côté de Begin, on met entre guillemets (pas obligatoire) et sans espace le nom du script. Dans mon exemple, ce sera totor

Begin "Totor"

End

ou


Begin Totor

End


Il faut savoir que dans un scipt, il faut éviter les espaces inutiles (par exemple dans les titres) et les accents.


Tout script est composé de variables et de fonctions. Lisez ce qui suit pour comprendre de quoi il retourne.


Dans chaque script, il faut déclarer les variables au début sous la ligne Begin... Mais qu'es ce que c'est une variable? C'est un chiffre qui porte un nom (Oui, je sais, c'est très réducteur :evil: ...). Vous pouvez leur donner n'importe quel nom. Dans les scripts présents dans Morro, on utilise souvent "DoOnce" (qui signifie "fait une fois" en anglais) et "Timer" (qui signifie temps). Chez moi, ce sera "Momo" et "Super". Par défaut, une variable est égale à 0. Il faut mettre juste devant la fonction désirée la commande adéquate pour la déclarer. Il en exite 3. Short, long et float sont des types de variables.
short : un petit entier
long : un grand entier
float : un flottant (nombre à virgule, en quelque sorte)

Pour une utilisation classique, long ne sert à rien puisqu'on ne va jamais très loin dans les nombres
Float est utilisé pour une variable de temps (voir plus bas).


Donc, chez moi, cela donne

Begin "Totor"

Short Momo
Float Super

End


Maintenant, on va commencer à s'amuser.
Pour qu'un script se declence, il y a souvent une condition (Vous avez fait ça, vous avez activez une porte,...). Pour savoir si une condition a été remplise, on utlise un if (un "si").
A chaque if, il doit y avoir un endif ("fin du si") en dessous.
A côté du if, on met la fonction qui va nous dire si oui ou non cette action est faite ou non.
A ce moment là, deux possibilité:
- Donner la valeur d'une variable [if ( momo == 1 )]
- Utiliser une fonction spécifique à l'action testée qui renvoi comme chiffre soit 1 (L'action est faite ou en cours), soit 0 (bah, que dalle...)

A chaque fois, on utilise ==, >=, <=, >, < != (non égale) à côté de la fonction avec ensuite le chiffre testé... (Oui, je sais, c'est pas très clair...)

Pour connaître toutes les fonctions, reportez vous à l'aide du TESCS ou aux tutos déjà dispo.

Mon script va consister à ce que si le joueur appuie sur une porte, il y ai un message "Youplaboum" la première fois et que après, la porte fonctionne normalement
Pour savoir si un objet est activé (que ce soit un objet que l'on veut prendre, une porte,...), on utilise OnActivate. Donc, si c'est 0, la porte n'est pas activée, et le 1 est l'inverse. Cela donne

Begin "Totor"


Short Momo
Float Super


if ( OnActivate == 1 )

endif


End
La fonction pour envoyer un message est: Message Box "Message"
on met cela après le "if ( OnActivate == 1 )".

Begin "Totor"


Short Momo
Float Super


if ( OnActivate == 1 )
    MessageBox "Youplaboum"
endif


End
Avec un script comme celui-ci, on aura le message à chaque activation de la porte. Comme je ne le veux qu'une fois, on va faire en sorte de mettre la variable Momo à 1 (car elle était à zéro). On fait cela grâce à un set "Nom de la variable" to "le chiffre désiré".

Begin "Totor"


Short Momo
Float Super


if ( OnActivate == 1 )
    MessageBox "Youplaboum"
    Set Momo to 1
endif


End

On va aussi tester le fait que cette variable est à 0 quand on lance ce message la première fois. On la passe à un juste après afin de savoir que l'on a fait cette action

Begin "Totor"


Short Momo
Float Super


if ( OnActivate == 1 )
    if ( Momo == 0 )
        MessageBox "Youplaboum"
        Set Momo to 1
    endif
endif


End

Donc, là, ce script envoie un message à la premiere activation de la porte. Mais après, elle ne marche plus.

Petite explication par Korfandar:

L'objet sur lequel est appliqué le script doit être "activable" i.e. c'est une porte, un container ou un activator (voire un pnj).
Normalement un tel objet à un comportement par défaut quand on l'active : une porte s'ouvre ou téléporte le pj, un container s'ouvre en inventaire, un pnj dialogue...
Le script intercepte cette activation par défaut par le test "onactivate", donc si on ne mets pas le "activate" l'objet n'effectue plus son action par défaut d'activation.
Pour que l'objet puisse s'activer normalement, il faut lui dire quand c'est nécessaire par la fonction "activate".


Il faut donc mettre la fonction activate (qui revient à dire au script de faire l'action habituelle pour l'objet sur lequel il est rattaché.). Et tout cela quand Momo est égale à 1. Pour ne pas surcharger le script, on peut mettre un Elseif ("autre si"). Le Elseif ne nécessite pas un autre endif car il dépend d'un "if" mis précedemment.

Begin "Totor"


Short Momo
Float Super


if ( OnActivate == 1 )
    if ( Momo == 0 )
        MessageBox "Youplaboum"
        Set Momo to 1
    Elseif ( Momo == 1 )
        Activate
    endif
endif


End

En résumé, sachez que si un script est attaché à un objet avec un OnActivate, cet objet ne fera plus ce à quoi il est destiné.



Bon revenons à mon float qui ne sert à rien. On va faire la même chose en faisant en sorte qu'il attende 2 secondes pour afficher le message.

Tout comme les short et les long, les float ont une valeur de 0 au début. Il faut donc les modifier avec cette ligne de code:
Set Timer to ( Timer + GetSecondsPassed )

Ce qui donne chez moi en remplaçant le nom de ma variable:
Begin "Totor"

Short Momo
Float Super

Set Super to ( Super + GetSecondsPassed )

if ( OnActivate == 1 )
    if ( Momo == 0 )
        MessageBox "Youplaboum"
        Set Momo to 1
    Elseif ( Momo == 1 )
        Activate
    endif
endif

End

Maintenant, à chaque seconde de passée, la variable augmentera de 1. Il suffit ensuite de mettre une condition pour qu'il affiche le message au bout de 2 secondes:

Begin "Totor"

Short Momo
Float Super

Set Super to ( Super + GetSecondsPassed )

if ( OnActivate == 1 )
    if ( Super >= 2 )
        if ( Momo == 0 )
            MessageBox "Youplaboum"
            Set Momo to 1
        Elseif ( Momo == 1 )
            Activate
        endif
   endif
endif

End

Dernière chose, les scripts tournent constamment, ce qui explique pourquoi Morro rame si souvent. Il existe trois lignes de code permettant de soulager les scripts. Il s'agit de:
if ( MenuMode == 1 )
    Return
endif
En fait, ces lignes renvoi ( le Return ) au début du script. Le MenuMode fait référence au fait que le joueur se trouve dans un des menu (que ce soit pour sauvegarder, l'inventaire,...). Donc n'utilisez ce passage que lorsque votre script n'a pas besoin d'être utilisé dans un des menu :D

Et voilà le script final:

Begin "Totor"

Short Momo
Float Super

if ( MenuMode == 1 )
    Return
endif

Set Super to ( Super + GetSecondsPassed )

if ( OnActivate == 1 )
    if ( Super >= 2 )
        if ( Momo == 0 )
            MessageBox "Youplaboum"
            Set Momo to 1
        Elseif ( Momo == 1 )
            Activate
        endif
   endif
endif

End

Ancien modérateur de Wiwiland à la retraite.

Ancien créateur et fan du mod Morrowind Stargate.

Et depuis, je suis devenu consultant SEO sur SeoMix et game addict sur Play-Mod




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)