Oui, en ce moment, vu que le script est dans le OnActivateItem, il ne fera rien d'autre que de lancer le DMFI_wand
Cependant, le but est d'activer le baton avec un script qui lui est propre.
Explication :
Ton baton DMFI a un tag précis, que je nommerai ici "dmfi_wand". Le script qui lui correspondra se nommera donc "dmfi_wand". pas besoin de rajouter quoi que ce soit, les lignes du OnActivateItem feront le reste, et enverront au script l'évènement qui correspondra à l'activation.
Dans OnActivateItem, OnActivateItem, OnEquipItem, OnUnAcquireItem, et OnUnEquipItem :
#include "x2_inc_switches"
void main()
{
// Pour OnAcquireItem :
object oItem = GetModuleItemAcquired();
// Pour OnActivateItem :
object oItem = GetItemActivated();
// Pour OnEquipItem :
object oItem = GetPCItemLastEquiped();
// Pour OnUnAcquireItem :
object oItem = GetModuleItemLost();
// Pour OnUnequipItem :
object oItem = GetPCItemLastUnequiped();
if(GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS)==TRUE)
{
// Pour OnAcquireItem :
SetUserDefinedItemEventNumber(X2_ITEM_EVENT_ACQUIRE);
// Pour OnActivateItem :
SetUserDefinedItemEventNumber(X2_ITEM_EVENT_ACTIVATE);
// Pour OnEquipItem :
SetUserDefinedItemEventNumber(X2_ITEM_EVENT_EQUIP);
// Pour OnUnacquireItem :
SetUserDefinedItemEventNumber(X2_ITEM_EVENT_UNACQUIRED);
// Pour OnUnequipItem :
SetUserDefinedItemEventNumber(X2_ITEM_EVENT_UNEQUIP);
int nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oItem),OBJECT_SELF);
if(nRet==X2_EXECUTE_SCRIPT_END)
{
return;
}
}
}
Comme le script "dmfi_wand" est prévu, grace à ce système, pour réagir différemment selon des évènements différents, je te montre ce à quoi ressemblerait un baton dm "dmfi_wand" dédié à un MD exclusivement :
#include "x2_inc_switches"
void main()
{
// On déclare les variables, pour les items à évènements multiples
object oUser,oItem;
// On va détecter l'évènement d'item que rapporte la fonction ci-dessous
int nEvent = GetUserDefinedItemEventNumber();
// Si l'évènement correspond à OnAcquireItem :
if(nEvent == X2_ITEM_EVENT_ACQUIRE)
{
oItem = GetModuleItemAcquired();
oUser = GetModuleItemAcquiredBy();
if(!GetIsDM(oUser))
{
SendMessageToPC(oUser,"Vous ne pouvez pas posséder cet objet.");
DestroyObject(oItem);
}
// On déclare ici que le script est terminé, et que le reste du script du
// OnAcquireItem ne doit pas se poursuivre.
SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END);
}
// Si l'évènement correspond à OnActivateItem :
else if(nEvent == X2_ITEM_EVENT_ACTIVATE)
{
// oItem n'est pas utilisé dans cet évènement, mais c'est pour montrer
// que la déclaration correspond à celle utlisée dans OnActivateItem.
oItem = GetItemActivated();
oUser = GetItemActivator();
AssignCommand(oUser,ActionStartConversation(oUser,"dmfi_dialogue"
// On déclare ici que le script est terminé, et que le reste du script du
// OnActivateItem ne doit pas se poursuivre.
SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END);
}
}