Il faut aller dans les propriétés du module et aller sur l'évènement OnActivateItem.
C'est ici qu'on lie un script à un objet.
Tu as plusieurs méthodes possible, je vais en citer deux.
La première possibilité consiste à mettre les scripts de l'objet directement dans le OnActivateItem, les uns à la suite des autres. Tu test l'objets par rapport à son TAG pour savoir si le script doit s'exécuter ou non.
Avantage : tu économises des scripts.
Inconvénient : au bout de plusieurs objets, tu arrives à un script boulimique.
Exemple :
void main(){
// Déclaration des variables
//Variables objets
object oUser = GetItemActivator(); // Le personnage qui active l'objet
object oItem = GetItemActivated(); // L'objet activé
object oTarget = GetItemActivatedTarget(); // La cible de l'objet activé
location lPC = GetLocation(oUser);
location lTarget = GetItemActivatedTargetLocation();
string sItemTag = GetTag(oItem); // Le TAG de l'objet activé
int nAlea; // Valeure aléatoire
// Variables joueurs
int nLevel = GetHitDice(oUser); // Récupération du niveau de l'utilisateur
///////////////////////////////////////////////////////////////////////////////
// DEBUT Aura de Courage
if ( sItemTag == "PAL_AURACO" )
{
if(GetLevelByClass(CLASS_TYPE_PALADIN, oUser) < 2)
{
SendMessageToPC(oUser,"Vous n'êtes pas assez hardi pour insuffler du courage à vos compagnons.");
return;
}
location lHere = GetItemActivatedTargetLocation();
oTarget=GetFirstObjectInShape(SHAPE_SPHERE,3.0,GetLocation(oUser),FALSE,OBJECT_TYPE_CREATURE);
effect eVis = EffectVisualEffect(VFX_IMP_GOOD_HELP);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oUser);
while ( GetIsObjectValid(oTarget) )
{
if ( (GetIsFriend(oTarget,oUser)) && (oTarget != oUser ) )
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSavingThrowIncrease(SAVING_THROW_WILL,4,SAVING_THROW_TYPE_FEAR),oTarget,d6(2)*6.0);
if ( GetIsPC(oTarget) )
SendMessageToPC(oTarget,"Vous n'êtes pas assez hardi pour insuffler du courage à vos compagnons.");
}
oTarget=GetNextObjectInShape(SHAPE_SPHERE,3.0,GetLocation(oUser),FALSE,OBJECT_TYPE_CREATURE);
}
}
// FIN Aura de Courage
Une autre possibilité, tu crées un script par objet. Tu tests l'objet par rapport à son TAG et tu exécute le script correspondant.
Avantage : Le OnActivateItem n'est pas gargantuesque.
Inconvénient : au bout de plusieurs objets, tu arrives à un nombre de script important.
Tu appelles tes script comme ceci:
void main(){
// Déclaration des variables
//Variables objets
object oUser = GetItemActivator(); // Le personnage qui active l'objet
object oItem = GetItemActivated(); // L'objet activé
string sItemTag = GetTag(oItem); // Le TAG de l'objet activé
///////////////////////////////////////////////////////////////////////////////
// POUVOIR DU PALADIN //
////////////////////////
// DEBUT Détection du MAL
if(sItemTag=="PAL_DETECTMAL" &&
GetLevelByClass(CLASS_TYPE_PALADIN,oUser)>0)
{
ExecuteScript("5_pal_detevil",oUser);
return;
}
// FIN Détection du MAL
Une variante plus optimisée: tu donnes à ton scripts le même nom que le resref de ton objet. Pourquoi le resref ? Parce qu'il peut arriver que le TAG contienne des caractères qui ne sont pas permis pour un nom de script, des majuscules par exemple.
Le script donne donc quelque chose comme:
void main(){
// Déclaration des variables
//Variables objets
object oItem = GetItemActivated(); // L'objet activé
object oTarget = GetItemActivatedTarget(); // La cible de l'objet activé
string sItemTag = GetTag(oItem); // Le TAG de l'objet activé
///////////////////////////////////////////////////////////////////////////////
// SCRIPT GENERIQUE D'ACTIVATION D'OBJET //
///////////////////////////////////////////
string sTag = GetResRef(oItem);
ExecuteScript(sTag, oTarget);
En espérant que ça te débroussaille un peu le terrain.