Scripting Tutorial: Making Unique Items
Tutorial de Script : Faire des Objets Uniques
par David Gaider
Comment effectuer un script pour qu'un item dépasse l'article standard... comment conditionner un effet, par exemple? Comment faire un script de baguette magique ou une épée parlante ?
Bien, la première chose à comprendre est que contrairement aux autres objets et créatures du jeu, les items n'ont pas de scripts. Vous ne pouvez pas ouvrir la fenêtre de propriété et spécifier quel script vous allez utiliser... ils n'en usent aucun.
Il y a une manière de programmer des choses que les items pourront utiliser au niveau du module. Dans le Module Properties, vous avez trois 'événements' qui affectent les items. Lorsque ces évènements se produisent, cela fait lancer au module les queconques scripts liés à ces items.
Deux de ces événements sont OnAcquireItem et OnUnAcquireItem. Cela signifie que chaque fois qu'un item est pris ou perdu, l'événement est lancé est appelle le script correspondant. S'il n'y a pas de script, il
ne se passe rien.
Donc si vous voulez ajouter une variable particulière quand une épée spéciale (avec le Tag "SWORD01") est prise, vous n'avez qu'à ajouter ceci dans la section OnAcquireItem du module :
void main ()
{
object oItem = GetObjectByTag("SWORD01");
int iVar = GetLocalInt(GetItemPossessor( oItem ), "VARIABLENAME");
if ((GetModuleItemAcquired() == oItem) && (iVar == 0))
{
SetLocalInt(GetItemPossessor( oItem), "VARIABLENAME", 1);
}
}
Cela ne fait pas beaucoup pour scripter vos propres propriétés d'item, n'est ce pas ? C'est pour cela que vous devez tirer profit du troisième événement : OnActivateItem.
L'activation d'un item nécessite un événement spécifique d'activation. Quand vous faites un item, vous pouvez lui assignez une propriété de 'Cast Spell'... et deux des choix seront Unique Power et Unique Power: Self Only. La différence entre les deux est que le deuxième déclenche simplement l'événement OnActivateItem... pour le premier, vous devez sélectionner Unique Power d'abord.
Cet Unique Power apparaît sur le menu radial de l'item tout comme n'importe qu'elle capacité. Si vous vouliez indiquer à l'utilisateur qu'elle est cette capacité, vous pourriez le faire dans la description (qui comprend une description quand l'objet est identifié et une description quand il ne l'est pas, si souhaitez employer les deux).
En écrivant un script dans OnActivateItem, il ya quelques références a garder a l'esprit:
object GetItemActivated()
Ceci renvoie a l'item qui a causé le dernier événement OnActivateItem.
object GetItemActivatedTarget()
Ceci renvoie la cible de l'Unique Power, s'il visait un objet spécifique.
location GetItemActivatedTargetLocation()
Ceci renvoie la cible de l'Unique Power, si c'était une zone d'effet plutôt qu'un objet spécifique.
object GetItemActivator()
Ceci renvoie a la créature qui a activé l'item... c'est un peu plus pratique que de passer par GetItemPossessedBy.
Et c'est tout ce dont vous avez besoin. Avec ceci, vous pouvez scripter autant de propriétés pour autant d'items que vous souhaitez. Gardez à l'esprit, bien sûr, que ces scripts sont spécifiques au module. Si vous les prenez pour d'autres modules qui n'ont pas ces scripts (ou d'autres qui cherchent cet item) dans OnActivateItem il ne se passera rien.
NOTE : il ya pour le moment un bug avec OnActivateItem par rapport aux items avec une seule charge (et ceci s'applique aussi pour la dernière charge des autres items). Quand un item est épuisé, il disparaît toujours... (Parce que l'article en question n'existe plus).