JeuxOnLineForumsPlusConnectés : 656 (sites) | 1218 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Supprimer plusieurs objets identiques de l'inventaire RSS
   
Répondre
Partager Outils Rechercher
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 

Supprimer plusieurs objets identiques de l'inventaire

Salut !

Dans mon module il y a un forgeron qui fabrique des armes avec du métal enrichi aux oeufs de Poulet Canibale (non, cherchez pas, c'est une longue histoire... ), et doit donc donner l'arme lorsque le joueur a les ingrédients qu'il faut.

Par exemple pour une épée courte il faut 15 oeufs et 15 000 po ; dans mon script l'épée est donnée, l'or est retiré, mais pas les oeufs.
Voilà le script en question :

Code PHP:
object oPC GetPCSpeaker();

void main()
{
CreateItemOnObject ("epedoeufdepoulet"oPC1);

ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);
ActionTakeItem (GetObjectByTag("OeufdePouletCannibale"), oPC);

TakeGoldFromCreature (15000oPCFALSE);

Bon, la méthode des 15 actions pour supprimer les oeufs n'est pas très élégante, mais je n'ai pas trouvé mieux (enfin, pas trop eu le temps de chercher non plus...).
Mais donc, les oeufs ne sont pas supprimés de l'inventaire...

Comment se fait-ce-t-il donc ? Et comme faire pour supprimer tous les oeufs en une seule ligne de commande ? (parce que pour une épée à 2 mains il faut 50 oeufs, ça va faire beaucoup )
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
Lien direct vers le message - Vieux
Avatar de Iridian
Iridian
Roi
 
Avatar de Iridian
 
Essai peut-être avec la fonction DestroyObject (ou DestroyItem, je ne sais plus trop )
Lien direct vers le message - Vieux
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 
Le DestroyObject marche aussi dans l'inventaire ?

Parce que je me demande un truc, imaginons que le joueur pose quelques-uns des oeufs par terre avant de donner les autres au forgerons, ça ne va pas détruire ceux au sol plutôt que ceux dans l'inventaire ?
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
mm, je sais pas comment ca fait un ActionTakeItem, mais pour le DestroyObject ca risque de poser un pb, car il me semble que les objets ne seront détruits qu'a la fin du script, donc je ne sais pas si il va choisir un objet différent a chaque fois, ou bien le premier dans l'inventaire qui a ce tag, alots tu te retrouve avec un objet sur 50 qui est détruit 50 fois :/

essai plutot un boucle sur GetFirstItemInInventory, style

Code PHP:
void main()
{
object oPC GetPCSpeaker();
CreateItemOnObject ("epedoeufdepoulet"oPC1);
object oOeuf GetFirstItemInInventory(oPC);
int i 1;
while((
GetIsObjectValid(oOeuf)) && (50))
{
if(
oOeuf == GetObjectByTag("OeufdePouletCannibale"))
{
DestroyObject(oOeuf);
i++;
}
oOeuf GetNextItemInInventory(oPC);
}
TakeGoldFromCreature (15000oPCFALSE);

ouala
en modifiant les conditions dans le while et tu change le nb d'oeuf virer ^_^
bon, par contrepour avoir le nb exact que tu veu, fais des tests, chuis jamais sure, à un ou deux oeuf près ...
mais je pense que ca marche
( tt cas ca compil )

ps : la, il va creer même si y a pas assez d'oeuf, ou de tunes, faut tester tt ca d'abord ^_^
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
Citation:
Provient du message de Cassin
Le DestroyObject marche aussi dans l'inventaire ?

Parce que je me demande un truc, imaginons que le joueur pose quelques-uns des oeufs par terre avant de donner les autres au forgerons, ça ne va pas détruire ceux au sol plutôt que ceux dans l'inventaire ?
pas si tu les cherchent dans l'inventaire
fin je pense pas :-/
( pk g un doute là ? )
Lien direct vers le message - Vieux
Avatar de Iridian
Iridian
Roi
 
Avatar de Iridian
 
Il y a une fonction genre GetItemPossessedBy() qui renvoi l'objet dont le resref est passé en paramètre et présent dans l'inventaire du PJ, ou OBJECT_INVALID si le PJ ne l'a pas.

C'est celle ci qu'il faut utiliser a mon avis pour ne taper que dans l'inventaire du PJ.
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Heuuu... ayant fait un script s'en rapprochant, j'avais utilisé le DestroyObject () et cela fonctionne très bien .
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
mm, GetItemPossedBy demande le tag
et avec un destroyObject je pense que ca n'iras pas, a cause que l'objet seras pas détruit avant la fin du script, y avait un topic la dessus chais plus où ... bref

et avec GetFirstItemInInventory tu pense que ca va pas marcher (j'en ai déjà fait, et d'ailleur le nettoyeur d'inventaire c comme ca qu'il marche ^_^ )
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
exemple de code tout à fait faisable

Code PHP:
object oItem=GetFirstItemInventory(oPC);

while(
GetIsObjectValid(oItem))
{

DestroyObject(oItem);
oItem=GetNextItemInventory(oPC);

voila, ce genre de code marche très bien, pour vous dire , je l'utilise tout le temps
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
ba, on est d'accord, c'est ce que j'ai fais
Lien direct vers le message - Vieux
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 
OK, merci, j'essaierais ça cet après-midi si je peux

J'avoue que j'ai du mal avec les sélections multiples, que ce soit des objets, des créatures ou des joueurs
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
Lien direct vers le message - Vieux
Avatar de Cassin
Cassin
Roi
 
Avatar de Cassin
 
Bouhouhouuuuu, j'arrive à rien...


J'ai utilisé le script de Reyan, mais que je mette le tag ou le resref de l'oeuf, rien y change, l'épée est bien ajoutée à l'inventaire, l'or est bien enlevé... mais pas les oeufs !


Y'a-t-il quelque chose que je n'aurais pas compris ???
__________________
"Pour l'Honneur de Dame Pounard et la sauvegarde la Couveuse Impériale, je me battrais jusqu'à mon dernier Couac !"

Mon site de modules pour NwN, de portraits pour BG et de fanfictions
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Par rapport au script de Reyan, je pense que :

- Au lieu de (oOeuf==GetObjectByTag(....)) pese plus lourd que
GetTag(oOeuf)==..., mais je peux me tromper.
(mais je pense qu'un string est moins lourd a recuperer qu'un objet... bon, ca change rien au probleme, mais a mon avis, ca optimiserait ^^

- l'entier i designe un nombre d'oeufs a detruire, c'est ca ?
Deja, verifie le stack des oeufs: s'ils sont tous stacké, ca peut gener.

Ensuite, je ferai personnelement un DelayCommand(0.5,DestroyObject())... juste au cas ou ... (normalement, y'en a pas besoin, mais bon, vu que lors d'une boucle de recuperation d'objet, il cree une liste qu'il met a jour dynamiquement, ca peut eventuellement servir...

Enfin, si ca ne marche pas, ajoute une ligne de DEBUG, genre :

au lieu de
{
DestroyObject(oOeuf);
i++;
}


tu met
Code PHP:
{
DestroyObject(oOeuf);
SendMessageToPC(oPC,IntToString(i));
i++;

Juste histoire de savoir ce qu'il se passe reeelement...
(je pense que tu va obtenir 50ligne de 1 à 50, mais je peut me tromper... ^^)
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
euh, mea very maxima culpa je pense, ca doit être a cause des objets, essai en faisant ca :
Code PHP:
void main()
{
object oPC GetPCSpeaker();
CreateItemOnObject ("epedoeufdepoulet"oPC1);
object oOeuf GetFirstItemInInventory(oPC);
int i 1;
while((
GetIsObjectValid(oOeuf)) && (50))
{
if(
GetTag(oOeuf) == "OeufdePouletCannibale")
{
DestroyObject(oOeuf);
i++;
}
oOeuf GetNextItemInInventory(oPC);
}
TakeGoldFromCreature (15000oPCFALSE);

et c'est le TAG qu'il faut
edit : ouned comme on dit ^_^
Lien direct vers le message - Vieux
Avatar de Corbeau Prod
Corbeau Prod
Alpha & Oméga
 
Avatar de Corbeau Prod
 
on fait pas d'omelette.....
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Supprimer plusieurs objets identiques de l'inventaire
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 23h39.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite