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