Userdefined Event est votre ami.
Sérieusement. Il n’y a pas du tout de blague la dedans.
Il y aura naturellement des utilisateurs qui préfèreront aller plus en profondeur
et personnaliser différents scripts pour remplacer l’IA générique…Certain
voudront aller plus vite que ça monter leur propre version des fichier de l’IA
qui sont inclus. C’est génial, et il n’y a rien de faux à faire ça.
Une des meilleur chose est : vous n’êtes pas obligé de.98% des scripts des
créatures de la campagne officielle ont été fait en utilisant UserDefinedEvent.
Je me suis assis avec Preston (un de nos scripteurs et un de nos principaux gars
derrière l’IA) et j’ai posé une rapide série de choses que je voulais
scripter…à propos de ce que chacun était capable de faire en utilisant UserDefinedEvent.
Et c’est facile à utiliser.
Faisons une pause une seconde ici et discutons de ce que sont les événements.
Fondamentalement une créature a des scripts numérotés (des ensembles d’instructions)…et
chaque script est lié à des évènements. Quand un événement a lieu, il dit à la
créature de lancer le bon script. Pas d’événement = le script ne marche
pas.
Il y a un nombre d’évènements qui sont très souvent mentionnés ici. L’évènement
« OnHeartbeat » a lieu toutes les 6 secondes…donc le script lié à cet événement
se lance aussi souvent. L’évènement « OnPerceived » a lieu à chaque fois
que le NPC perçoit quelque chose…le script correspondant se lance.
Ces scripts peuvent aussi entraîner d’autre événement qui lanceront eux
même d’autres scripts…et c’est ici que l’on place le UserDefinedEvent.
Fondamentalement , UserDefinedEvent permet d’accéder aux évènements normaux
qu’une créature utilise (OnPerception,OnDeath,etc.) sans déranger l’IA
normale ou modifier les scripts déjà existant.
Utiliser UserDefinedEvent
Il y a un script sur chaque créature qui a déjà été souvent mentionné, et c’est
un de ceux que vous devriez bien connaître. C’est le script OnSpawn. C’est
un événement qui marche seulement quand la créature apparaît la première fois…imaginez
que c’est un script d’initialisation.
Le script OnSpawn générique a une série de commandes qui sont inactivées (précédées
par « // »)…mais en réalité, sans que l’utilisateur change quelque
chose, tout ce long script n’exécute en fait que trois commandes : il dit
à la créature de suivre les waypoint qui se réfère spécifiquement à son tag, lui
donne son comportement (il répondra aux attaque des autres NPC) et génère un faible
montant de trésor générique dans l’inventaire (de l’or…
)
Il est écrit pour permettre à l’utilisateur de définir les condition pour
accéder à l’IA générique comme il le veut. Tout ce qu’il y a à faire
est de repérer le « state flag » que vous voulez utiliser et d’enlever le
« // » au début de la commande pour l’activer Puis sauvez le script OnSpawn
sous un nom différent et utilisez le à la place de script normal…voilà,
le comportement générique a été modifié.
Les « state flags » auquels nous avons besoin de faire attention sont ceux la
:
SetSpawnInCondition (NW_FLAG_PERCIEVE_EVENT);
//OPTIONAL BEHAVIOR - Fire User Defined Event 1002
SetSpawnInCondition (NW_FLAG_ATTACK_EVENT);
//OPTIONAL BEHAVIOR - Fire User Defined Event 1005
SetSpawnInCondition (NW_FLAG_DAMAGED_EVENT);
//OPTIONAL BEHAVIOR - Fire User Defined Event 1006
SetSpawnInCondition (NW_FLAG_DISTURBED_EVENT);
//OPTIONAL BEHAVIOR - Fire User Defined Event 1008
SetSpawnInCondition (NW_FLAG_END_COMBAT_ROUND_EVENT);
//OPTIONAL BEHAVIOR - Fire User Defined Event 1003
SetSpawnInCondition (NW_FLAG_ON_DIALOGUE_EVENT);
//OPTIONAL BEHAVIOR - Fire User Defined Event 1004
SetSpawnInCondition (NW_FLAG_DEATH_EVENT);
//OPTIONAL BEHAVIOR - Fire User Defined Event 1007
Et après?
Okay... Vous avez activé les « flags » que vous voulez scriptez et re sauvé la
script OnSpawn. Ca vous a pris 2 minutes. Maintenant, comment l’utiliser
?
Chaque créature a une section OnUserDefined dans laquelle vous pouvez mettre un
script. Pour toutes les créatures que vous avez faites, elle est complètement
vide…c’est la ou nous allons faire notre script. Tout script que vous
mettez ici sera lancé à chaque fois qu’un événement que vous avez « activé
» (en enlevant le « // » dans le OnSpawn) se produira.
Donc, si vous avez activé 'SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT)',
alors a chaque fois que l’inventaire de la créature est « perturbé » (quand
quelqu’un vole un objet) le script OnUserDefined sera lancé.
Le script OnUserDefined basique ressemblerait à ça :
void main()
{
int nUser = GetUserDefinedEventNumber();
if (nUser == le nombre dans le OnSpawn, de 1001 à 1007)
{
(faire qqch)
}
}
Admettons que je veuille qu’une créature fasse signe au premier PC qu’elle
voit. Je vais dans OnSpawn, « j’active » 'SetSpawnInCondition
(NW_FLAG_PERCIEVE_EVENT)' et je le re sauvegarde comme un nouveau script.
Puis je crée un script dans OnUserDefined:
// Ce script fera que le NPC salut le PC en l’apercevant
// souvenez vous que si le PC commence le module dans la zone de perception du
// NPC, le script ne se lancera pas (la perception n’a pas changée)
void main()
{
int nUser = GetUserDefinedEventNumber();
if (nUser == 1002) // OnPerception event
{
object oCreature = GetLastPerceived();
int nWave = GetLocalInt(OBJECT_SELF, "Wave_Once");
//vérifie que ce soit bien un PC vu la première fois
if (GetLastPerceptionSeen() && GetIsPC(oCreature) && (nWave == 0))
{
// salut qu’une fois
SetLocalInt(OBJECT_SELF, "Wave_Once", 1);
// fixe un temps pour que le NPC puisse re saluer 15 sec plus tard
DelayCommand(15.0, SetLocalInt(OBJECT_SELF, "Wave_Once", 0));
// se tourne face au PC
ActionDoCommand(SetFacingPoint(GetPosition(oCreature)));
// salut
ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING);
SpeakString("Hello!");
}
}
}
Et c’est tout. Je peux ajouter d’autres condition comme une distance
minimale, voir si le PC est en face de moi…ou lui donner un comportement
aussi complexe que je le souhaite…et je n’ai pas à me préoccuper du
script qui est déjà dans la case OnPerceive.
__________________
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