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)
|