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