Définir un objet.

Maintenant, ce topic est un peu plus compliqué…mais je me suis trouvé plusieurs fois fonçant dans un mur alors que j’essayais de faire quelque chose.

Beaucoup d’action requièrent un objet comme cible. La manière la plus facile de définir un objet est de lui avoir donné un tag particulièrement pratique…c’est génial si l’on sait quel est l’objet qui servira de cible. Mais comment faire si on ne le sait pas ? Comment faire si on veut trouver le PC le plus proche du personnage…où qu’il soit ? Comment faire si on veut cibler la créature la plus proche ? Comment faire si on veut vérifier à quelle distance se trouve quelque chose ?

Il y a de nombreuses manières de vérifier des choses comme ça… Je vais ici me focaliser sur trois :
GetNearestCreature, GetNearestObject et GetDistanceBetween.

GetNearestCreature
Cette commande vous permet de trier des créature selon leur proximité par rapport à un objet et cela en suivant 3 paramêtres. Notez que la cible ne doit pas être l’objet de ce type le plus proche…Si vous voulez, par exemple, localiser le second non PC voleur humain le plus proche vous devez utiliser cette commande.
La syntaxe est la suivante :

object GetNearestCreature (int nFirstCreatureType, int nFirstParameter, object oTarget=OBJECT_SELF, int nNth=1, int nSecondCreatureType = -1, int nSecondParameter = -1, int nThirdCreatureType = -1, int nThirdParameter = -1 )


Ca peut paraître un peu confus, mais nous allons y aller petit à petit.

'nFirstCreatureType' et 'nFirstParameter' sont les premières caractéristiques que nous recherchons. Admettons que nous cherchons l’humain le plus proche… « nFirstCreatureType » sera l’attribut CREATURE_TYPE_ RACIAL_TYPE, et 'nFirstParameter' sera RACIAL_TYPE_HUMAN.

Qu’est ce que ça veut dire ? Vous avez jusqu’à trois qualités que vous pouvez utiliser pour affiner la recherche… en utilisant pour chacun un attribut et un paramètre.

L’objet « oTarget » est bien évidemment l’objet qui sert de centre à la recherche. Ca peut être OBJECT_SELF (et c’a l’est par défault) si vous voulez cibler la recherche sur l’objet auquel appartient le script. Vous pouvez aussi faire quelque chose d’autre comme par exemple vérifier la créature la plus proche du PC le plus proche…Mais ça vous trouverez vous même comment le faire.
L’integer 'nNth' est ce que vous utilisez pour déterminer si vous voulez le premier objet le plus proche, le second…Par défault, le script cherche le premier. Mais n’importe quel nombre que vous mettez ici déterminera combien de créature plus proche ne seront pas retenue par la recherche. Notez que n’importe quelle fonction peut être utilisée à la place du moment qu’elle renvoie un entier… Vous pouvez mettre d4() par exemple, si vous voulez chercher aléatoirement du premier au quatrième objet le plus proche.

Ici, vous avez la liste de arguments que vous pouvez utiliser pour la recherche.
l CREATURE_TYPE_CLASS = classe de personnage ou de monstre
l CREATURE_TYPE_DOES_ NOT_HAVE_SPELL_EFFECT = Si vous recherchez une créature qui n’est pas affectée par un sort (spécifié par la constante SPELL_*) J’imagine qu’elle ne doit pas servir souvent.
l CREATURE_TYPE_SPELL_EFFECT = Voici l’inverse, si vous recherchez une créature affectée par tels ou tels sorts. Notez que tous les effets de sorts ne viennent pas de sorts.
l CREATURE_TYPE_IS_ALIVE = Ca s’explique tout seul ; si vous voulez ne pas tenir compte des créatures mortes.
l CREATURE_TYPE_PERCEPTION = C’est un cas particulier, car techniquement ce n’es pas un attribut de la créature, il dépend de la nature de la perception de l’objet cible…si il a par exemple été vu ou entendu.
l CREATURE_TYPE_PLAYER_CHAR = Cela détermine si la créature est un PC ou non.. l
l CREATURE_TYPE_RACIAL_TYPE = race de la créature.
l CREATURE_TYPE_REPUTATION = classe d’après sa réputation envers la cible.

Je ne citerais pas tout les classes particulières, les races et les effets qui peuvent être utilisé parce qu’ils sont assez évidents. Quelque autres le sont moins, les voici :

CREATURE_TYPE_IS_ALIVE:
l TRUE ou FALSE (facile)
CREATURE_TYPE_PERCEPTION:
l PERCEPTION_HEARD
l PERCEPTION_HEARD_ AND_NOT_SEEN
l PERCEPTION_NOT_HEARD
l PERCEPTION_NOT_SEEN
l PERCEPTION_NOT_SEEN_ AND_NOT_HEARD
l PERCEPTION_SEEN
l PERCEPTION_SEEN_AND_HEARD
l PERCEPTION_SEEN_ AND_NOT_HEARD
CREATURE_TYPE_PLAYER_CHAR:
l PLAYER_CHAR_IS_PC
l PLAYER_CHAR_NOT_PC
CREATURE_TYPE_REPUTATION:
l REPUTATION_TYPE_ENEMY
l REPUTATION_TYPE_FRIEND
l REPUTATION_TYPE_NEUTRAL

(je pense que là, même sans être une bilingue en anglais vous comprenez.)


Bon, et maintenant, si je veux trouver le PC le plus proche de moi ?


GetNearestCreature (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);

Le mage ennemi le plus proche de moi ?


GetNearestCreature (CREATURE_TYPE_ REPUTATION, REPUTATION_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_CLASS, CLASS_TYPE_WIZARD);

L’ennemi vivant le plus proche du plus proche PC allié ?


GetNearestCreature (CREATURE_TYPE_ REPUTATION, REPUTATION_ENEMY, GetNearestCreature (CREATURE_TYPE_ PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, 1, CREATURE_TYPE_ REPUTATION, REPUTATION_FRIENDLY), 1, CREATURE_TYPE_ IS_ALIVE, TRUE);

Le non PC que je peux voir le plus proche ?


GetNearestCreature (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, OBJECT_SELF, 1, CREATURE_TYPE_ PERCEPTION, PERCEPTION_TYPE_ SEEN);


GetNearestObject

C’est beaucoup moins compliqué parce que vous pouvez seulement trier les objets par leur type…vous n’avez pas les multiples paramètres qu’on les créatures. Mais ca marche de la même manière :


object GetNearestObject (int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1)

'nObjectType' est évidemment le type d’objet que vous recherchez. Si vous ne marquez rien, ce sera l’objet le plus proche, quel qu’il soit.
L’objet « oTarget » correspont toujours au centre des recherches. Par défault, c’est « OBJECT_SELF ».
L’integer « nNth » n’a pas changé non plus, il correspond au nième objet par ordre de proximité. (le troisième si nNth=3)

Les types d’objet sont donc ::
l OBJECT_TYPE_ALL
l OBJECT_TYPE_AREA_OF_EFFECT
l OBJECT_TYPE_CREATURE
l OBJECT_TYPE_DOOR
l OBJECT_TYPE_INVALID
l OBJECT_TYPE_ITEM
l OBJECT_TYPE_PLACEABLE
l OBJECT_TYPE_STORE
l OBJECT_TYPE_TRIGGER
l OBJECT_TYPE_WAYPOINT

La non plus, je pense que la traduction n’est pas nécessaire.

GetDistanceBetween
Ca donne la distance en mètre entre 2 objets valides. Il est important que les 2 objet soient valides, sinon la distance reportée est de 0.


float
GetDistanceBetween(object oObjectA, object oObjectB)

(Qu’est ce que float ? Un « float » comme un integer est juste un nombre, mais il possede toujours une partie décimale. 50 est un integer, 50.0 est un « float ». Si vous avez besoin, vous pouvez utiliser la commande

int FloatToInt(float fFloat)
pour convertir un float en integer.)

Si vous voulez simplement connaître la distance entre un objet et celui à qui appartient le script, il est actuellement plus facile d’utiliser cette commande :


float GetDistanceToObject(object oObject)


De cette manière, vous n’êtes pas constamment obligé de spécifier OBJECT_SELF dans la commande GetDistanceBetween.

__________________
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