Utiliser les "Creature Events".

Comme mentionné précédemment dans le tutorial "UserDefinedEvent est votre ami", tant que vous ne savez pas exactement ce que vous faites, ne modifiez pas l’IA par défaut qui est utilisé pour les créatures (excepté le script OnSpawn qui est fait pour ça). Il est parfaitement possible d’activer tous les "flag" du script OnSpawn et d’écrire un script OnUserDefined associé à chaque numéro d’événement (Tous les exemples ci dessous sont des script OnUserDefined qui le font).

Liste des évènements des créatures. (Creature event)

Evènement: OnPerception, déclenché par: quelque chose qui entre dans la zone de perception de la créature.

Ca ne veut pas dire que la créature entend ou voit quelque chose…mais juste quand c’est possible pour lui de la percevoir.

Qu’est ce qu’il a déclenché?
Utilisez GetLastPerceived() pour renvoyer la dernière créature percus. (qu’elle soit encore en vue ou non).

Aussi utilisé dans:
GetLastPerceptionHeard()
renvoie TRUE ou FALSE selon que le dernier objet perçu ai été entendu ou non,
GetLastPerceptionInaudible()
renvoie TRUE ou FALSE selon que le dernier objet perçu soit devenu inaudible ou non,
GetLastPerceptionSeen() idem que GetLastPerceptionSeen() pour la vue,
GetLastPerceptionVanished() renvoie TRUE ou FALSE selon que l’objet soit encore visible ou non.
Une chose dont il faut se souvenir : Toutes les commandes ci dessus sont en rapport uniquement avec le OnPerception event. Ne les utilisez pas n’importe où.

Qu’est ce que fait le script d’IA par défaut ?
L’IA générique de OnPerception dit en priorité à la créature de se mettre en mode recherche si un ennemi disparaît subitement, puis de l’attaquer dès qu’elle réapparaît.

Exemple : Je veux que mon humain se tourne vers tous ceux qu’il voit, mais si c’est une femme, il s’incline devant elle :


void main()
{
int nEvent = GetUserDefinedEventNumber();
// si l’événement OnPerception est lancé
if (nEvent == 1004) // OnPerception event
{
object oTarget = GetLastPerceived();
// si je peux voir la personne dans la limite de perception
if (GetLastPerceptionSeen())
{
// mettre la commande pour se tourner dans la file
ActionDoCommand(SetFacingPoint(GetPosition(oTarget)));
}
// si il s’agit d’une femme
if (GetGender(oTarget) == GENDER_FEMALE)
{
// pause de 0,5 seconde
ActionWait(0.5);
// puis salue
ActionPlayAnimation(ANIMATION_FIREFORGET_BOW);
}
}
}

Evènement: OnSpellCastAt, déclenché par: un sort a été lancé sur la créature... notez que ce n’est pas le sort lui même qui cause cet événement. Vous verrez dans votre liste de commande "EventSpelllCastAt". Le script du sort utilise cette commande sur la cible pour lui spécifié que le sort a été lancé…et la commande lui demande alors si le sort est hostile ou non.

Qu’est ce qu’il a déclenché?
Utilisez GetLastSpell() renvoie la constante du sort utilisé. (SPELL_*).

Aussi utilisé dans :
GetLastSpellCaster() pour retourner "l’objet" qui a lancé le sort, GetLastSpellHarmful() renvoie TRUE ou FALSE selon que l’événement soit ou non marqué hostile.

Que fait le script d’IA par défaut ?
Si un sort « nuisible » a été lancé sur la créature et qu’elle n’était pas en combat, elle devient hostile.

Evènement: OnPhysicalAttacked, déclenché par: La créature a été attaquée en mêlée.

Qu’est ce qu’il a déclenché?
Utilisez GetLastAttacker().

Aussi utilisé dans:
GetLastDamager()

Qu’est ce que fait le script d’IA par défaut?
Si la créature est est attaquée et qu’elle n’est pas encore en combat, elle devient hostile, et émet le cri apprprié pour alerter les alliés à proximité.

Evènement: OnDamaged, déclenché par: la créature pert des points de vie.

Qu’est ce qu’il a déclenché?
Utilisez GetLastDamager().

Aussi utilisé dans:
GetTotalDamageDealt(),
GetDamageDealtByType(int nDamageType),
GetCurrentHitPoints(object oObject = OBJECT_SELF),
GetMaxHitPoints(object oObject = OBJECT_SELF)

Que fait le script d’IA par défaut?
Si la créature est attaquée par quelqu’un qu’elle ne peut voir, elle essaye de le trouver. Dans les autres cas, elle trouve une cible appropriée et devient hostile.

Exemple : avec cette créature particulière, si elle pert plus de la moitié de ces points de vie, elle crie quelque chose, courre au waypoint appellé « CAVE_EXIT » et disparaît.


void main()
{
int nEvent = GetUserDefinedEventNumber();
if (nEvent == 1006) // OnDamaged event
{
int nMaxHP = GetMaxHitPoints();
int nCurHP = GetCurrentHitPoints();
// si elle a moins de la moitié de ses points de vie.
if (nCurHP < (nMaxHP / 2))
{
// arrête ce que je suis en train de faire
ClearAllActions();
// crie
ActionSpeakString("Ahhh! Cours!!");
// court vers la sortie
ActionMoveToObject(GetObjectByTag("CAVE_EXIT"), TRUE);
// et s’autodétruit
ActionDoCommand(DestroyObject(OBJECT_SELF));
// n’accepte plus de commande de l’IA à partir de maintenant
SetCommandable(FALSE);
}
}
}

Evènement: OnDisturbed, déclenché par: quelque chose a été rajouté ou enlevé de l’inventaire de la créature.

Qu’est ce qu’il a déclenché?
Utilisez GetLastDisturbed() to return the creature object who disturbed the inventory.

Aussi utilisé dans:

GetInventoryDisturbType() retournera soit INVENTORY_DISTURB_TYPE_ADDED, soit INVENTORY_DISTURB_TYPE_REMOVED, soit INVENTORY_DISTURB_TYPE_STOLEN,
GetInventoryDisturbItem()donne l’objet qui a été ajouté, enlevé ou volé de l’inventaire.

Que fait le script de l’IA par défaut?
Puisqu’une créature ne peut avoir un objet ajouté ou enlevé de son inventaire (ce n’est pas un contenaire), si son inventaire est modifié, il a du être volé…elle deviens hostile si il y a une cible valide.

Evènement: OnCombatRoundEnd, déclenché par: A la fin d’un round de combat, l’événement est déclenché automatiquement..

Que fait le script de l’IA par défaut?
Si il n’y a pas de comportement spécial spécifié ou que le "flag" du script OnSpawn n’a été modifié, un nouveau round de combat commence.

Evènement: OnConversation, déclenché par: On a cliqué sur la créature pour une conversation OU quelqu’un a parlé audiblement.

Qu’est ce qu’il a déclenché?
Utilisez GetLastSpeaker() pour renvoie la créature qui a cliqué dessus ou celle qui vient de crier.

Aussi utilisé dans:
GetListenPatternNumber() renvoie un numéro de « pattern » si il y en a un qui a été entré.

Que fait le script de l’IA par défaut?
Si quelqu’un a cliqué sur la créature, elle arrête ce qu’elle faisait et commence le dialogue (si elle le peut). Sinon le script vérifie si la phrase prononcée est reconnaissable, et si la créature a été paramêtrée pour reconnaître un cri de combat.

Evènement: OnRested, déclenché par: la créature se repose via ActionRest(). Les créature du jeu ne se reposent pas, c’est pourquoi il n’y a pas de script d’IA.

Evènement: OnDeath, déclenché par: la créature a été tuée

Qu’est ce qu’il a déclenché?
Utilisez GetLastKiller() pour renvoyer "l’objet" (au sens large) qui a tué la créature.
Note: Tout script lancé par cet événement doit être immédiat…utiliser DelayCommand ne marchera pas car la créature ne peut pas accomplir une commande une fois morte.

Que fait le script de l’IA par défaut?
Il vérifie si la créature était non mauvaise et avais des niveaux de Commoner (roturier)…et si c’est le cas change le niveau du tueur un peu plus vers mauvais. Il émet aussi un cri "standard" pour demander de l’aide à toutes les créatures à l’intérieur de la zone de perception auditive (toutes les créatures qui peuvent l’entendre)

Evènement : OnBlocked, déclenché par: une porte bloque le mouvement de la créature.

Qu’est ce qu’il a déclenché?
Utilisez GetBlockingDoor() renvoie la porte qui gène.. Notez que seule les portes déclenchent l’évènement OnBlocked event... il ne peut pas être utilisé pour détecter une collision (du moins pas encore)

Que fait le script de l’IA par défaut?
Si la créature est assez astucieuse pour utiliser la porte (Intelligence de 5 ou plus) elle essayera d’abord de l’ouvrir, et si ce n’est pas possible dela casser.

Evènement: OnHeartbeat, déclenché par: Il ne nécessite pas de déclencheurs... n’importe quel script placé ici se déclenchera toutes les 6 secondes. Il est important que vous n’utilisiez pas des script qui marchent en permanence dans le OnHeartBeat, l’ordinateur serait très vite dépassé (surtout si vous avez un grand nombre de créatures dans la zone).

Que fait le script de l’IA par défaut?
Il vérifie quelques conditions qui sont précisées dans le OnSpawn et les éxécute si elles sont applicables…comme les poste de jour et de nuit (post) pour la fonction WalkWayPoints() et les animation ambientes utilisées par les créatures quand elles restent debout.

__________________
Théranthil, Mage Elfe prêtre de Mystra Membre des GdE
Parti Elmotiste pour un parler jowilien: Ministre supérieur de la corruption

"Les langues vont toujours bon train. Les pieds ont du mal à suivre."
(les bourses aussi NdT )
Mespert de la porte de Baldur