Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Comptez le nombre d'instances d'un objet dans un inventaire.
Comptez le nombre d'instances d'un objet dans un inventaire.
Par Amaranthe le 8/11/2002 à 23:39:01 (#2517075)
Je cherchais a savoir le nombre d'unstance d'un objet oItem dans l'inventaire d'une créature oCreature.
Pour cela j'ai fait une petite fonction. Puis je me suis dit qu'il fallait gérer le cas des contenants, et comme je n'étais pas sur que le language de script soit récursif, j'ai fait une deuxieme petite fonction...
int CountItemInsideContainer(object oContainer, object oItem)
{
int nNumber = 0;
object oEquip = GetFirstItemInInventory(oContainer);
while(GetIsObjectValid(oEquip))
{
if (oEquip == oItem)
nNumber = nNumber + 1;
oEquip = GetNextItemInInventory(oContainer);
}
return nNumber ;
}
int GetNumItemInInventory(object oCreature, object oItem)
{
object oEquip = GetFirstItemInInventory(oCreature);
int nNumber = 0;
while(GetIsObjectValid(oEquip))
{
if (oEquip == oItem)
nNumber = nNumber + 1;
nNumber = nNumber + CountItemInsideContainer(oEquip, oItem);
oEquip = GetNextItemInInventory(oCreature);
}
return nNumber ;
}
Et apres, j'appele ma fonction...
object oToto= GetObjectByTag("TOTO");
if GetNumItemInInventory(GetLastSpeaker(), oToto) return TRUE;
return FALSE
Et la j'ai droit a un fabuleux message d'erreur a la compile...
ERREUR : ELLIPSIS IN IDENTIFIER
Alors... ou qu'elle est ma gourance ?
Amaranthe.
Demain il fera jour.
Par LeProctophantasmiste le 9/11/2002 à 0:08:33 (#2517230)
int StartingConditional()
{
object oToto= GetObjectByTag("TOTO");
if(GetNumItemInInventory(GetLastSpeaker(), oToto)) return TRUE;
return FALSE;
}
tes fonctions (copier-coller) compilent. Peut-être un problème dinclude (double définition... avec un message pareil ...) ?
Par Tynril le 9/11/2002 à 1:52:18 (#2517649)
ERREUR : ELLIPSIS IN IDENTIFIER
Ca vient de la recursivité des déclarations d'inclusions.
Je m'explique : Tu as un include A, et dedant tu inclus ton fichier B. Puis tu fais ton script C, dans lequel tu inclus les fichiers A et B. Ton fichier include B sera donc deux fois dans le script C.
Un autre exemple : Tu as un fichier include A, dans lequel tu inclus le fichier B. Dans le fichier B, tu inclus le fichier A. Ca fait une boucle.
Concernant tes fonctions, j'avoue que je suis très supris, parce que, tu sais...// Get the number of stacked items that oItem comprises.
..Ca marche aussi. Par contre, effectivement, si les objets ne sont pas "stackés" (du genre les 99 flèches d'un pack), ca en compte qu'un. Enfin, c'est à vérifier.
int GetNumStackedItems(object oItem)
Par Twist le 9/11/2002 à 3:28:21 (#2517948)
int GetNumItems(object oTarget, string sItem);
qui retournera 110 flèches. Elle nécessite #include "nw_i0_plot".
Par Jedaï le 9/11/2002 à 8:27:59 (#2518234)
Donc peut-être que tu ferais mieux d'utiliser le tag de l'objet dans ta fonction ? :confus:
JOL Archives 1.0.1
@ JOL / JeuxOnLine