Créer des objets uniques.

NdT: Il est ici difficile de différencier les termes « object » (qui désigne quasiment tous modèles 3D, des chaises aux personnages et aux pièges) et « item » (qui désigne ce qu’on peut avoir dans son inventaire (épée, armure…. Pour les différencier, quand j’utiliserais « objet » (entre guillemets) ça désigne le terme « object », et sans guillemets, il désigne les « items ».

Comment un script crée ces propres objets qui vont au dela des objets standarts…Comment par exemple faire un effet conditionnel ? Comment puis je scripter une baguette de souhait ou une épée parlante ?
Bien, la première a réaliser est que, par opposition aux « objets » (chaise, lampe… et aux créatures, ils n’ont pas de script propre. Vous ne pouvez pas aller dans les propriétés des objets et spécifier quels scripts utiliser…il ne peut en utiliser aucun.

La seule manière par laquelle vous pouvez affecter des scripts à des objets, c’est dans le « module level ». Dans les propriétées du module, vous avez 3 évènements qui affectent les objets. Deux de ces énènements sont OnAquireItem et OnUnAcquireItem. Cela veut dire qu’à chaque fois qu’un objet est pris ou laissé tomber, un événement est lancer qui démarre le script approprié. Si il n’y a pas de script, rien ne se passe. Donc, si je veux fixer une variable quand une épée particuliaire (qui a le tag "SWORD01") est prise, je peux mettre ce script dans le section OnAcquireItem du module :

void main ()
{

object oItem = GetObjectByTag("SWORD01");
int iVar = GetLocalInt(GetItemPossessor(oItem), "VARIABLENAME");
// ci dessous est spécifié : « Si le déclenchement est bien celui voulu, et que aucune
// variable n’a été spécifiée, fixez la variable sur le possesseur de l’objet.
if ((GetModuleItemAcquired() == oItem) && (iVar == 0))
{
SetLocalInt(GetItemPossessor(oItem),
"VARIABLENAME", 1);
}
}

Cependant, ce n’est pas très utile pour scripter vos propres objets, n’est ce pas ? Por cela, vous devez tirer avantage du troisième événement du module : OnActivateItem().

Activer un objet requière un événement spécifique. Quand vous créez un objet, vous pouvez lui assigner une propriétée « Cast Spell » (lancer un sort)…et deux des choix peuvent être Unique Power et Unique Power :Self Only. La différence entre eux est que le second est simplement un déclencheur de l’événement « OnActivateItem »…le premier vous demande d’abord la cible du pouvoir unique.
Ce « Unique Power » apparaît dans le menu radial de l’objet comme n’importe quel autre caractéristique. Si vous voulez spécifier à l’utilisateur ce qu’est cette caractéristique, vous devez l’inclure dans la description de l’objet (il y a une description pour l’objet « identifié » et « non identifié », vous pouvez aussi utiliser les 2).

Quand vous écrivez le script à placer dans OnActivateItem(), il y a juste quelques références que vous devez garder à l’esprit :


//cela renvoie l’objet qui a déclenché l’événement OnActivateItem(). object GetItemActivated() //Cela renvoie la cible du pouvoir unique, si il est ciblé comme un objet spécifique. object GetItemActivatedTarget() //Cela renvoie la cible du pouvoir unique, si il est ciblé comme un emplacement plutôt qu’un objet spécifique.
location GetItemActivatedTargetLocation()
//Renvoie la créature qui a activée l’objet... un peu plus pratique que d’utiliser GetItemPossessedBy.
object GetItemActivator()

Et c’est tout ce dont vous avez besoin. Avec ça, vous pouvez scriptez autant de propriétées pour autant d’objets que vous le souhaitez. Gardez quand même à l’esprit que ces scripts sont spécifiques au module. Si vous prenez l’objet d’un autre module qui n’aura pas ce script in le OnActivateItem(), alors rien ne se passera.

NOTE: Il y a actuellement un bug avec OnActivateItem en ce qui concerne les objet à usage unique (et qui arrive aussi aux objet qui n’ont plus qu’une charge). Quand un objet est usé, il disparaît…l’événement se lance, mais toutes les commandes comme GetItemActivate renvoie un objet invalide (car l’objet n’existe plus.)

__________________
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