7. Les événements
Dans Neverwinter Nights les événements sont le fer de lance de vos scripts : ils vont vous permettre de lancer chacun de vos différents scripts (sauf les scripts d'inclusion, bien sûr).
Lorsque vous utilisez un événement, celui-ci est attaché à un objet - représenté par la constante spéciale OBJECT_SELF : ne l'oubliez jamais, elle vous sera quasiment indispensable.
Les événements se découpent en fonction des types d'objets auquel vous avez affaire ; les différents types d'objets sont : zones, créature, portes, encounter, module, objets plaçables, pièges et triggers (déclencheurs).
Lorsqu'un événement se produit, il active automatiquement le script qui lui est lié.
a. Evénements liés aux zones :
- OnEnter : l'événement OnEnter se produit lorsqu'un objet rentre dans la zone. Vous pourrez obtenir l'objet qui vient de rentrer dans la zone avec la fonction GetEnteringObject() ;
- OnExit : cet événement se déclenche lorsque qu'un objet quitte la zone. Vous pourrez obtenir l'objet qui vient de sortir de la zone avec la fonction GetExitingObject().
- OnHeartBeat : cet événement se déclenche toutes les six secondes. Vous devez l'éviter au possible car celui-ci à une certaine tendance à rapidement saturer le processeur.
- OnUserDefined : il s'agit d'un événement plus ou moins défini par vous-même. Vous pourrez obtenir l'événement en cours avec GetUserDefinedEventNumber(). Nous ne sommes pas très sûrs du comportement de cet événement.
b. Evénements liés aux créatures :
- OnBlocked : cet événement se produit quand la créature est bloquée par une porte (et seulement par une porte).
- OnCombatRoundEnd : cet événement se déclenche à chaque fin de round (toutes les 6 secondes dans Neverwinter).
- OnConversation : cet événement se produit chaque fois qu'une conversation se fini ou lorsqu'un cri est entendu.
- OnDamagedScript : cet événement se déclenche lorsque la créature est endommagée (ou blessée).
- OnDeath : cet événement se produit lorsque la créature meurt quelque soit la raison.
- OnDisturbed : cet événement se produit quand l'inventaire de la créature est perturbé. Par exemple, lorsqu'un voleur tente de voler la créature.
- OnHeartbeat : cet événement se déclenche à chaque round (soit toutes les 6 secondes). Il peut vous être utile pour répéter une action, mais évitez d'utiliser trop de OnHeartBeat : cela ralentirai le PC.
- OnPerception : cet événement se déclenche lorsque la créature perçoit une autre créature. Vous pouvez obtenir le dernier objet perçu avec GetLastPerceved(). Neverwinter Nights fournit un ensemble de fonction qui vous permet de définir si la créature perçue a été vue, entendue, etc.
- OnPhysicalAttacked : cet événement se produit lorsque la créature est attaquée. Il ne se reproduit plus jusqu'à la fin de l'attaque.
- OnRested : cet événement se déclenche lorsque la créature tente de se reposer.
- OnSpawn : ceci vous permet de définir une action par défaut pour la créature une fois qu'elle a été créee, comme par exemple : attaquer les personnages d'alignement inverse.
- OnSpellCastAt : cet événement se produit lorsqu'un sort a pour cible la créature porteuse du script OnSpellCastAt.
- OnUserDefined : il s'agit d'un événement plus ou moins défini par vous-même. Vous pourrez obtenir l'événement en cours avec GetUserDefinedEventNumber(). Nous ne sommes pas très sûrs du comportement de cet événement.
c. Evénements liés aux portes
- OnAreaTransitionClick : cet événement se déclenche lorsque le joueur tente de changer de zone en cliquant sur la porte ; si vous définissez un script, alors vous devrez vous-même ajouter le code permettant au joueur de changer de zone.
- OnClose : cet événement se produit lorsque la porte est fermée.
- OnDamagedScript : cet événement se déclenche lorsque la porte est endommagée.
- OnDeath : cet événement se produit lorsque la porte est détruite quelque soit la raison.
- OnFailToOpen : cet événement se produit lorsque la créature qui tente d'ouvrir la porte n'a pas réussi à l'ouvrir. Ceci vous permet de faire venir un garde pour voir qui a tenté d'ouvrir la porte.
- OnHeartbeat : cet événement se déclenche à chaque round (soit toutes les 6 secondes). Il peut vous être utile pour répéter une action, mais évitez d'utiliser trop de OnHeartBeat : cela ralentirai le PC.
- OnLock : cet événement se produit lorsque la porte est verrouillée.
- OnOpen : cet événement est déclenché lorsque la porte est ouverte.
- OnPhysicalAttacked : cet événement se produit lorsque la porte est attaquée. Il ne se reproduit plus jusqu'à la fin de l'attaque.
- OnSpellCastAt : cet événement se produit lorsqu'un sort a pour cible la porte porteuse du script OnSpellCastAt.
- OnUnlock : cet événement se déclenche lorsque la porte est déverrouillée.
- OnUserDefined : il s'agit d'un événement plus ou moins défini par vous-même. Vous pourrez obtenir l'événement en cours avec GetUserDefinedEventNumber(). Nous ne sommes pas très sûrs du comportement de cet événement.
d. Evénements liés aux encounters
- OnEnter : l'événement OnEnter se produit lorsqu'un objet rentre dans la zone délimitée par l'encounter. Vous pourrez obtenir l'objet qui vient de rentrer dans la zone avec la fonction GetEnteringObject() ;
- OnExhausted : cet événement démarre lorsque la dernière créature de l'encounter est crée.
- OnExit : cet événement se déclenche lorsque qu'un objet quitte la zone délimitée par l'encounter. Vous pourrez obtenir l'objet qui vient de sortir de la zone avec la fonction GetExitingObject().
- OnHeartbeat : cet événement se produit toutes les 6 secondes. A éviter pour les mêmes raisons évoquées plus haut.
- OnUserDefined : il s'agit d'un événement plus ou moins défini par vous-même. Vous pourrez obtenir l'événement en cours avec GetUserDefinedEventNumber(). Nous ne sommes pas très sûrs du comportement de cet événement.
e. Evénements liés aux modules
- OnAcquireItem : cet événement se déclenche lorsqu'un item a été obtenu par une créature (ou un placeable).
- OnActivateItem : cet événement se produit lorsque un item a été activé. L'item ne doit pas forcément avoir la capacité « Unique Power »
- OnClientEnter : cet événement se déclenche lorsque un nouveau joueur rentre dans le module. Ceci peut vous êtres très utile pour détruire des objets et avoir un personnage clean dés le début.
- OnClientLeave : cet événement se produit lorsque un joueur quitte le module.
- OnHeartbeat : cet événement se produit toutes les 6 secondes, et évidemment partout dans le module. Vous devez éviter de mettre des scripts trop lourds dans cet événement-là.
- OnModuleLoad : cet événement se produit lorsque le module est chargé pour la première fois. (Il se produit lorsque le premier joueur arrive)
- OnPlayerDeath : cet événement se produit lorsqu'un joueur meurt. Ceci vous permet de décider s'il doit revivre, de faire un script laissant les objets du joueur par terre ... etc.
- OnPlayerDying : cet événement se déclenche lorsque le joueur n'a plus que 0 points de vie (et pas -10 comme dans le cas de l'événement OnPlayerDeath).
- OnPlayerRespawn : cet événement se produit lorsque le joueur est mort et qu'il clique sur le bouton « Respawn ».
- OnPlayerRest : cet événement de déclenche quand un joueur se repose ; très utile pour lui envoyer quelques ennemis...
- OnUnAcquireItem : cet événement se produit lorsque le joueur perd un item (par exemple, il dépose une statue en or, et des gens viennent l'attaquer pour la reprendre).
- OnUserDefined : il s'agit d'un événement plus ou moins défini par vous-même. Vous pourrez obtenir l'événement en cours avec GetUserDefinedEventNumber(). Nous ne sommes pas très sûrs du comportement de cet événement.
f. Evénements liés aux objets plaçables
- OnClose : cet événement se produit lorsque le plaçable est fermé.
- OnDamagedScript : cet événement se déclenche lorsque le plaçable est endommagé.
- OnDeath : cet événement se produit lorsque pour une quelconque raison le plaçable est détruit.
- OnDisturbed : cet événement se produit lorsque l'inventaire du plaçable a été manipulé.
- OnHeartbeat : ceci se produit toutes les 6 secondes (sauf si le plaçable est détruit). Comme pour les autres types d'objets : évitez si possible de mettre un script pour cet événement.
- OnLock : cet événement se déclenche lorsque le plaçable a été verouillé.
- OnOpen : cet événement se produit lorsque quelqu'un ouvre le plaçable et fouille son contenu.
- OnPhysicalAttacked : cet événement se déclenche lorsque quelqu'un « tape » le plaçable (par exemple, lorsque vous tentez d'ouvrir un coffre verrouillé en le détruisant à coup de projectiles magiques).
- OnSpellCastAt : cet événement se produit lorsqu'un sort est lancé sur le plaçable.
- OnUnlock : cet événement se déclenche lorsque le plaçable est déverrouillé.
- OnUsed : cet événement se produit lorsque le plaçable est utilisé. Servez vous en pour par exemple démarrer un dialogue avec le plaçable.
- OnUserDefined : il s'agit d'un événement plus ou moins défini par vous-même. Vous pourrez obtenir l'événement en cours avec GetUserDefinedEventNumber(). Nous ne sommes pas très sûrs du comportement de cet événement.
g. Evénements liés aux pièges
- OnDisarm : cet événement se produit lorsque le piège est désarmé.
- OnTrapTriggered : cet événement se produit lorsque le piège a été découvert.
h. Evénements liés aux triggers
- OnClick : cet événement se déclenche lorsqu'un joueur clique sur le trigger (si c'est un trigger « Area transition »).
- OnEnter : cet événement se déclenche lorsqu'une créature rentre dans la zone délimitée par le trigger. Utilisez GetEnteringObject() pour savoir quelle créature est rentrée.
- OnExit : cet événement se déclenche lorsqu'une créature quitte la zone délimitée par le trigger. Utilisez GetExitingObject() pour savoir quelle créature a quittée la zone.
- OnHeartbeat : cet événement se produit toutes les 6 secondes. Il peut être intéressant pour vérifier si une créature est encore dans la zone délimitée par le trigger, et pour l'avertir de quitter la zone (par exemple). Cependant, comme pour les autres types d'objets : cet événement a une tendance à surcharger le processeur, il vaut mieux éviter de s'en servir si possible.
- OnUserDefined : il s'agit d'un événement plus ou moins défini par vous-même. Vous pourrez obtenir l'événement en cours avec GetUserDefinedEventNumber(). Nous ne sommes pas très sûrs du comportement de cet événement.
|