Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 
NWN 2 - JOL

NWScript - pour niveau 8

Après les plaçables et les portes, trois autres objets ont une importance capitale pour un module. Ce sont les zones, les déclencheurs, et les rencontres. Ces trois objets ont un fonctionnement relativement identique, à quelques événements près.

Si vous voulez peupler vos donjons, créer vos zones de transition ou vos pièges, c'est ici que vous trouverez votre bonheur. Que la fête commence donc, plus on est de fous...



NWScript - Page générale


NWScript - pour niveau 6
- Evénements du module -

NWScript - pour niveau 7
- Evénements d'un plaçable, d'une porte -

NWScript - pour niveau 8
- Evénements d'une zone, d'un déclencheur, d'une rencontre -

NWScript - pour niveau 9
- Evénements d'une conversation, d'une échoppe -

NWScript - pour niveau 10
- Evénements d'une créature -

Evénements d'une zone, d'un declencheur, d'une rencontre...

Avant toute chose, il est important de différencier un "déclencheur" d'une "rencontre". Les deux semblent identiques car ils se dessinent de la même manière.

Premièrement, une rencontre disposera de moins d'événements qu'un déclencheur. Deuxièmement, une rencontre prendra en charge des créatures qui apparaîtront lorsqu'un joueur et/ou une créature entreront dans la zone dessinée.

Un déclencheur, quant à lui, pourra prendre divers aspects. Il peut faire office de "déclencheur générique", de piège, ou encore de "zone de transition". Ces différents aspects auront un impact sur les événements, qui pourront ou ne pourront pas se déclencher.

Ce détail mis au clair, nous pouvons à présent observer les événements qui se déclencheront pour une zone, un déclencheur, ou une rencontre :
- lorsqu'un objet entre
- lors de la fin du chargement d'un joueur (zone)
- lorsqu'un objet sort
- lors d'un clic (déclencheur)
- lors de l'activation d'un piège (déclencheur)
- lors du désarmement d'un piège (déclencheur)
- lorsque la dernière créature est éliminée (rencontre)
- événement récurrent
- événement défini par l'utilisateur

... Lorsqu'un objet entre
     (OnEnter)

Cet événement se déclenche lorsqu'un objet entre dans une zone, un déclencheur, ou une rencontre.


Pour une zone :

La zone de départ dans laquelle le joueur arrive sur le module est affectée par cet événement, au même titre que les autres. Notez toutefois que lors de la connexion d'un joueur, les événements "OnClientEnter" et "OnClientLoaded" du module seront déclenchés avant l'événement "OnEnter" d'une zone.

Dans un module persistant pour NWN1, on utilisait l'événement "OnEnter" d'une zone pour envoyer un joueur à une position sauvegardée. Il est toujours possible de le faire, même si l'événement "OnClientLoaded" du module s'y prête mieux désormais.

Notez que l'événement "OnEnter" se déclenchera dans la zone où une créature aura été créée.


Pour un déclencheur :

Quel que soit le type de déclencheur, l'événement "OnEnter" se déclenchera si une créature entre dans la zone dessinée.

Notez que l'événement "OnEnter" ne se déclenchera pas si une créature est créée dans la zone dessinée.


Pour une rencontre :

L'événement "OnEnter" fonctionnera de la même manière qu'un déclencheur. Notez cependant que si un script est défini pour l'événement "OnEnter", les créatures affiliées n'apparaîtront pas. Il faudra les faire apparaître "manuellement".

Au même titre qu'un déclencheur, l'événement "OnEnter" ne se déclenchera pas si une créature est créée dans la zone dessinée.


Pour une zone, un déclencheur, une rencontre :

La fonction permettant de retrouver l'objet entrant dans une zone, un déclencheur ou une rencontre, est "GetEnteringObject()".

Notez que si vous placez le point de départ du module à la fois dans une zone, un déclencheur, et une rencontre, les trois verront leur événement "OnEnter" se déclencher. De ces trois objets, la zone sera toujours la première à réagir.

De manière générale, si un joueur se connecte et apparaît à la fois dans une zone et un déclencheur, les événements seront déclenchés dans l'ordre suivant :

- OnClientEnter (module)
- OnClientLoaded (module)
- OnEnter (zone)
- OnClientLoaded (zone)
- OnEnter (déclencheur)

... Lors de la fin du chargement d'un joueur (zone)
     (OnClientLoaded)

Au même titre que l'événement du "OnClientLoaded" du module, cet événement se déclenchera lorsque le joueur aura été complètement chargé dans la zone.

Notez que dans le cas où un joueur apparaît à la fois dans une zone et dans un déclencheur, les événements "OnEnter" et "OnClientLoaded" de la zone seront déclenchés avant l'événement "OnEnter" d'un déclencheur.

Dans le cas d'interaction avec un joueur, il vaut mieux utiliser cet événement plutôt que l'événement "OnEnter" si vous voulez être sûr qu'il n'y ait aucun problème.

La fonction permettant de retrouver le joueur dont le personnage a fini le chargement est "GetEnteringObject()".

... Lorsqu'un objet sort
     (OnExit)

Cet événement se déclenche lorsqu'un objet sort d'une zone, d'un déclencheur, ou d'une rencontre.

Notez qu'un objet détruit ne déclenchera pas l'événement "OnExit".

Certains modules persistants utilisent l'événement "OnExit" d'une zone pour vérifier s'il ne reste plus aucun joueur à l'intérieur, et ainsi la "nettoyer".

La fonction permettant de retrouver l'objet entrant dans une zone, un déclencheur ou une rencontre, est "GetExitingObject()".

... Lors d'un clic (déclencheur)
     (OnClick)

L'événement "OnClick" est déclenché une fois qu'un joueur arrive à portée d'un déclencheur du type "Transition de zone" sur lequel il a cliqué.

Notez bien que cet événement sera traité uniquement pour les déclencheurs de type "Transition de zone".

Si une transition de zone a un script spécifié dans l'événement "OnClick", sa transition ne fonctionnera plus. Il faudra alors transférer un joueur "manuellement". Vous pouvez néanmoins garder les paramètres de transition, ceux-ci pouvant être utiles.

La fonction permettant de retrouver le joueur ayant utilisé la "Transition de zone" est "GetClickingObject()".

Le script suivant vous permettra de transférer "manuellement" un joueur vers le point de passage voulu :

void main()
{
    // En admettant qu'il existe un point de
    // passage dont le tag est "WP_DESTINATION" :

    object oWaypoint = GetObjectByTag("WP_DESTINATION");
    AssignCommand(GetClickingObject(), ActionJumpToObject(oWaypoint));
}

... Lors de l'activation d'un piège (déclencheur)
     (OnTrapTriggered)

Cet événement se déclenche lorsqu'une créature entre dans un déclencheur du type "Piège".

Notez bien que cet événement sera traité uniquement pour les déclencheurs de type "Piège".

Notez également que si un script est défini pour l'événement "OnTrapTriggered", le piège défini ne fonctionnera pas. Il faudra alors faire fonctionner le piège "manuellement". Vous pouvez néanmoins garder les paramètres de piège, ceux-ci pouvant être utiles.

Il semblerait qu'il n'existe aucune fonction directement liée à cet événement.

Examinons toutefois le fonctionnement d'un piège personnalisé. Ce piège sera censé ôter un quart du total des points de vie de chaque personne dans une aire d'effet de trois mètres de rayon. Je ne mettrai pas d'effet visuel, seul l'essentiel sera traité :

void main()
{
    // Je déclare mes variables :
    effect eDamage;
    location lLocation = GetLocation(OBJECT_SELF);

    // Je vais donc faire le compte des créatures à portée
    // de mon piège, et leur appliquer les dégâts :


    // Je récupère la première cible présente dans ma zone d'effet :
    object oBoucle = GetFirstObjectInShape(SHAPE_SPHERE,3.0,lLocation);
    while(GetIsObjectValid(oBoucle))
    {
        // Je calcule l'effet de dégâts :
        eDamage = EffectDamage((GetMaxHitPoints(oBoucle)/4));
        // Puis je les applique sur la cible en cours :
        ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oBoucle);

        // Ensuite, je passe à la cible suivante :
        oBoucle = GetNextObjectInShape(SHAPE_SPHERE,3.0,lLocation);
    }
}

... Lors du désarmement d'un piège (déclencheur)
     (OnTrapDisarm)

Cet événement se déclenche lorsque le piège d'un déclencheur du type "Piège" est désarmé.

La fonction permettant de retrouver l'objet ayant désarmé le piège d'un plaçable ou d'une porte est "GetLastDisarmed()".

... Lorsque la dernière créature est éliminée (rencontre)
     (OnExhausted)

Cet événement se déclenche lorsque la dernière créature liée à une rencontre a été tuée.

Par exemple, dans un système d'expérience par "groupe de monstres", vous pouvez utiser cet événement pour accorder ce gain.

Il semblerait qu'il n'existe aucune fonction directement liée à cet événement.

Evénement récurrent
     (OnHeartbeat)

Cet événement est déclenché toutes les 6 secondes par la zone, le déclencheur, ou la rencontre. Il n'y a pas d'objet associé au déclenchement de cet événement.

Dans une zone au climat extrème, comme dans l'extension "Hordes of the Underdark" de NWN, vous pouvez utiliser l'événement "OnHeartbeat" pour appliquer des dégâts périodiques.

Vous pouvez également utiliser l'événement "OnHeartbeat" d'un piège personnalisé "persistant", qui appliquerait donc ses effets toutes les 6 secondes aux créatures présentes dans la zone dessinée.

Evénement défini par l'utilisateur
     (OnUserDefined)

Au même titre que pour le module, il est possible de faire réagir l'événement "OnUserDefined" à partir des autres événements, ou à partir d'événements personnalisés.

Vous avez gagné un niveau !

A présent, votre trousse vient de se remplir de quelques outils supplémentaires. Vous devriez pouvoir créer un donjon simple et efficace, grâce à ces différents objets. Et si les événements d'une zone sont en général peu utilisés, vous verrez qu'il est difficile de se passer de déclencheurs et de rencontres.



NWScript - Page générale


NWScript - pour niveau 6
- Evénements du module -

NWScript - pour niveau 7
- Evénements d'un plaçable, d'une porte -

NWScript - pour niveau 8
- Evénements d'une zone, d'un déclencheur, d'une rencontre -

NWScript - pour niveau 9
- Evénements d'une conversation, d'une échoppe -

NWScript - pour niveau 10
- Evénements d'une créature -

Rédigé par Deyonara
article mis en ligne le 21 juin 2007 à 12:23,
dernière mise à jour : 17 octobre 2007 à 19:11.
Haut de page