Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Comptez le nombre d'instances d'un objet dans un inventaire.

Par Amaranthe le 8/11/2002 à 23:39:01 (#2517075)

Bonjour,

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)

Je suis un peu déçus je n’ai pas réussi à l’avoir moi ce message de compilation :D. Donc ton erreur je ne sais pas ou elle se trouve mais avec ça :


int StartingConditional()
{
object oToto= GetObjectByTag("TOTO");

if(GetNumItemInInventory(GetLastSpeaker(), oToto)) return TRUE;

return FALSE;
}

tes fonctions (copier-coller) compilent. Peut-être un problème d’include (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.
int GetNumStackedItems(object oItem)
..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.

Par Twist le 9/11/2002 à 3:28:21 (#2517948)

Et si tu souhaites avoir toutes les instances d'un item, sans tenir compte du stack (par exemple 3 stacks de flèches comptant respectivement 20, 30, et 60 flèches), tu as la fonction :


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)

Par ailleurs, quelqu'un m'a récemment fait remarquer (je crois que c'était procto) que faire des test d'égalité d'objet c'était pas très prudent vu que deux objets de même tag (ce qui t'intéresse c'est que les objets soit identique hein, pas qu'il soit exactement les mêmes ?) n'ont pas forcément la même ID !;)
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