Utiliser les "Placeable Object Events".

Comme avec les zones, la chose dont il faut se souvenir est que quand vous écrivez des scripts pour les objets placables et que vous utilisez des commandes commançant par « Action » l’éxécutant par défaut est l’objet lui même. Si vous voulez que le script demande à l’objet d’accomplir une autre commande, vous devez utiliser AssignCommand. Donc gardez à l’esprit qui si les objet placables sont capable d’accomplir des actions (comme ActionPlayAnimation avec la référence ANIMATION_PLACEABLE_*…comme Open/close ou activate/desactivate quoique tous les placables ne le peuvent pas), leur demander de faire des choses qui leur sont impossible peut causer des problèmes (ActionLockObject, ActionUnlockObjet, ActionEquipItem, ActionPickUpItem sont des exemple que vous devez pas utiliser pour des objets placables.).

Liste des évènements des objets plaçables (placeable object)

Evènement: OnClose, déclencheur: l’objet a été fermé (notez que seuls les objet qui peuvent être fermé ou ouvert peuvent lancer cet événement…comme un coffre ou une armoire.)

Qu’est ce qu’il a déclenché?
Utilisez GetLastClosedBy() renvoie "l’objet" qui a fermé l’objet placable.

Exemple: Voici un script OnClose qui permet de vérifier si l’inventaire est vide après qu’il soit fermé…et dans ce cas, il crée 100 po à l’intérieur.


void main()
{
// donner le premier objet dans l’inventaire
object oInside = GetFirstItemInInventory();
// et si il n’y en a pas
if (!GetIsObjectValid(oInside))
{
// créer des pièces d’or au nombre de 100
CreateItemOnObject("NW_IT_GOLD001", OBJECT_SELF, 100);
}
}

Evènement: OnDamaged, déclencheur: l’objet placable a pris des dégats.

Qu’est ce qu’il a déclenché?
Utilisez GetLastDamager() pour renvoyer "l’objet" qui lui a infligé des dommages.

Aussi utilisé dans:
GetTotalDamageDealt(),
GetDamageDealtByType (int nDamageType),
GetCurrentHitPoints(),
GetMaxHitPoints().

Evènement: OnDeath, déclencheur: l’objet a été détruit (jouer l’animation "destruction" est automatique).

Qu’est ce qu’il a déclenché?
Utilisez GetLastKiller() pour renvoyer "l’objet" qui l’a détruit.

Evènement: OnHeartbeat, déclencheur: 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é.

Evènement: OnDisturbed, déclencheur: Un objet a été ajouté ou enlevé de l’inventaire de l’objet placable.

Qu’est ce qu’il a déclenché?
Utilisez GetInventoryDisturbType(). Le résultat est une de ces constantes: INVENTORY_DISTURB_TYPE_ADDED, INVENTORY_DISTURB_TYPE_REMOVED, ou INVENTORY_DISTURB_TYPE_STOLEN.

Aussi utilisé dans:
GetLastDisturbed() renvoie "l’objet" quia enlevé ou rajouté un objet, GetInventoryDisturbItem() renvoie l’objet qui a été ajouté/enlevé.

Exemple: Voici un script OnDisturbed qui envoie un évènement UserDefinedEvent #500 qui signale a un magicien (avec le tag "WIZARD1") si quelqu’un enlève une potion particulière (avec le tag "PRECIOUS_POTION" ) de l’objet placable.


void main()
{
object oWizard = GetObjectByTag("WIZARD1");
object oPC = GetLastDisturbed();
object oPotion = GetObjectByTag("PRECIOUS_POTION");
// si l’objet enlevé est valable et a le tag "PRECIOUS_POTION"
if (GetIsObjectValid(oPC) && (GetInventoryDisturbType() == INVENTORY_DISTURB_TYPE_REMOVED)
&& (GetInventoryDisturbItem() == oPotion))
{
// envoie le signal au mage
SignalEvent(oWizard, EventUserDefined(500));
}
}

Evènement: OnLock, déclencheur: L’objet a été fermé (ou refermé)

Qu’est ce qu’il a déclenché?
Utilisez GetLastLocked() pour renvoyer « l’objet » qui l’a fermé.

Aussi utilisé dans:
GetLockLockDC() renvoie le DC pour fermer l’objet placable.

Note: J’ai eu quelques messages selon lesquel cet événement ne marcherait pas.
Note du Webmestre: Les events onUnlock and onLock ne marchent pas, inutile de vous acharnez à y mettre des scripts, ils ne seront jamais lancés

Evènement: OnPhysicalAttacked, déclencheur: l’objet a été attaqué physiquement (mais n’a pas forcement reçu de dommage).

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

Evènement: OnOpen, déclencheur: l’objet a été ouvert (pour les placables qui peuvent être ouvert et ont la case « inventory » cochée).

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

Evènement: OnSpellCastAt, déclencheur: un sort a été lancé sur l’objet placable.

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

Aussi utilisé dans:
GetLastSpell() retournera la constante du sort lancé (SPELL_*),
GetLastSpellHarmful() renverra TRUE ou FALSE selon que le dernier sort lancé était hostile.

Evènement: OnUnlock, déclencheur: l’objet placable a été déverouillé.

Qu’est ce qu’il a déclenché?
Utilisez GetLastUnlocked() pour renvoyer "l’objet" qui l’a dévérouillé.
Note: J’ai eu quelques messages selon lesquel cet événement ne marcherait pas.
Note du Webmestre: Les events onUnlock and onLock ne marchent pas, inutile de vous acharnez à y mettre des scripts, ils ne seront jamais lancés


Evènement: OnUsed, déclencheur: si un objet placable a la case « Useable », alors cliquer sur cette objet lancera cet événement.

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

Exemple: un script pour un objet qui soigne quiconque l’utilise.


void main()
{
object oUser = GetLastUsedBy();
effect eHeal = EffectHeal(GetMaxHitPoints(oUser));
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_HOLY);
// si l’utilisateur de l’objet est valide
if (GetIsObjectValid(oUser))
{
// applique l’effet usuel
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oUser);
// et une seconde plus tard, soigne l’utilisateur
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oUser));
}
}

Evènement: OnUserDefined, déclencheur: Cet événement se lancera uniquement si un usage particuliera été défini qui enverra un « UserDefinedEvent » à l’objet placable.

__________________
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