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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Histoire de pile

Par Taern le 30/12/2002 à 4:23:42 (#2905904)

Après avoir rendu certains objets empilables grâce à un hak-pack, je me suis rapidement rendu compte que la commande DestroyObject() détruisait l'intégralité de la pile et non un élément de celle-ci.
D'ou la nécessité de "manipuler" ces piles d'objets. Premier réflexe, une fonction très simple :

void ModifierStack(object oObjet, int nModif)
{
int nPile = GetNumStackedItems(oObjet);
string sRef = GetResRef(oObjet);
object oPC = GetItemPossessor(oObjet);

DestroyObject(oObjet);
SendMessageToPC(oPC, "Quantite : "+IntToString(nPile+nModif)); //Ligne de debug : la quantité calculée est bonne
CreateItemOnObject(sRef, oPC, nPile+nModif);
}


Je crée ensuite un blueprint d'objet avec utilisation illimitée. Dans le OnActivateItem et pour cet objet précis j'appelle la fonction comme ceci :

ModifierStack(GetItemActivated(), -1);


1ere utilisation : parfait, le nombres d'éléments empilés baisse de 1.
2e utilisation : heu, il vient pas de m'en bouffer un de trop là ?
3e utilisation : hop là, 4 objets qui partent en fumée, soit 3 objets de trop
etc.

Première réaction : gnééééé :doute:
Deuxième réaction (beaucoup plus tardive) : quand j'utilise ma pile d'objets, plus le nombre d'objet qu'elle contient est petit, plus il y en a de supprimés.
C'est assez étrange, RAT se fera un plaisir de le confirmer ;) mais je suis convaincu que la fonction CreateItemOnObject() se comporte de manière anomale dans cette histoire. D'autant plus que quand j'affiche la quantité calculée, j'obtiens exactement ce à quoi je m'attend.

En bref, voilà, je donne ma langue au chat. Si certains avaient une fonction toute faite, ou tout simplement si quelqu'un pouvait me dire que Bioware a déjà fait cette fonction dans sa ribambelle de fichiers à inclure, ça m'aiderait beaucoup beaucoup :ange:

Merci :merci:

Par Jedaï le 30/12/2002 à 19:53:37 (#2911100)

Tu as vérifié que le problème ne venait pas plutôt du DestroyObject() : même quand le délai indiqué est nul, cette fonction attend la fin du script pour s'exécuter : ça pose de grave problème de comptage parfois....:(

Par Taern le 31/12/2002 à 0:24:53 (#2912723)

Exact, c'est de ça que ça venait :)

Il a suffit de mettre un délai au CreateItemOnObject de 0.1 seconde pour que tout rentre dans l'ordre.

Merci Jedaï ;)

JOL Archives 1.0.1
@ JOL / JeuxOnLine