Problème de script simple

Répondre
Partager Rechercher
Bonjour ^^

Voila j'ai un problème a priori simple a résoudre, mettons j'ai un PNJ qui rachète des peaux de rats. Jusque la pas de problème, mais j'aimerai qu'il achète d'un coup toutes les peaux que transporte le PJ qui lui parle pour éviter les ventes a répétition.

Donc il faudrait que le PNJ compte les peaux portées par le PJ, qu'il les détruise toutes, et donne en échange la somme de toutes les peaux vendues.

Vi je sais c'est bête mais je vois pas comment ni quelle fonction utiliser, et mes recherches sur le forum n'ont rien donné.

D'avance merci
On a déjà eu des problêmes de ce genre sur le forum, donc j'ai une petite idée de comment procéder. Je vais pas te refaire le script, mais juste t'expliquer la manière de proceder.

En premier lieu, il faut bien identifier le PJ

Ensuite il faut récupérer le premier objet de l'inventaire de son inventaire (GetFirstItemInInventory) que l'on met dans une variable (oItem par exemple)

Ensuite, tant que oItem est un objet valide, on boucle... a l'interieur de la boucle, on test si l'objet est la peua de rat: si oui, on detruit l'objet et on fait ce qu'il y a à faire*, sinon on ne fait rien.

Puis on passe à l'objet suivant (GetNextItemInInventory)

Voilà la marche à suivre

Fanley, apprenti scripteur.

*Pour ce qu'il y a à faire, je vois deux méthodes: soit tu donnes directement l'or, soit tu incrémentes une variable numerique ( = lui ajouter 1) et tu payes tout d'un coup après la boucle. Personelement, je prendrais la deuxieme solution pour eviter au joueur d'avoir plusieurs messages d'or obtenu
Tiens, il se trouve que j'en avais également l'utilité de ce principe de rachat groupé. Je profite de ta demande pour faire le script dans la foulée. Attention, je ne l'ai pas encore testé !

Dans ta conversation, tu intègres cette fonction, et tu déclares l'acheteur en OBJECT_SELF et le vendeur en GetPCSpeaker(), sans oublier de fixer ton prix, et le tag de l'item que tu achètes. Ca devrait fonctionner.
On peut compliquer la fonction pour savoir si l'acheteur a suffisamment d'argent, etc... Mais voici la base.

Code PHP:

// Le vendeur vend des objets de tag sTag qui sont dans son inventaire
// L'acheteur les achete au prix nPrix l'unite
void AcheteXObjets(object oVendeurobject oAcheteurstring sTagint nPrix);


void AcheteXObjets(object oVendeurobject oAcheteurstring sTagint nPrix)
{
    
object oItem=GetFirstItemInInventory(oVendeur);

    
int nPas;
    while(
oItem!=OBJECT_INVALID)
    {
        if(
GetTag(oItem)==sTag)
        {
            
nPas+=GetItemStackSize(oItem);
            
AssignCommand(oVendeur,ActionGiveItem(oItem,oAcheteur));
        }
        
oItem=GetNextItemInInventory(oVendeur);
        
AssignCommand(oAcheteur,GiveGoldToCreature(oVendeur,nPas nPrix));
    }

Ah je n'avais pas fait attention que tu voulais détruire les objets ! Bon, je modifie en fonction, et tu choisis : nDestroy à TRUE les items sont détruits, à FALSE les items sont placés dans l'inventaire de l'acheteur.
De plus, si tu ne renseignes pas le prix, l'acheteur utilisera la valeur en PO par défaut de l'objet. Encore une fois, c'est à tester, il peut y avoir des fôtes !

Code PHP:

// Le vendeur vend des objets de tag sTag qui sont dans son inventaire
// L'acheteur les achete au prix nPrix l'unite
void AcheteXObjets(object oVendeurobject oAcheteurstring sTagint nPrix=0int nDestroy=TRUE);


void AcheteXObjets(object oVendeurobject oAcheteurstring sTagint nPrix=0int nDestroy=TRUE)
{
object oItem=GetFirstItemInInventory(oVendeur);
if (
nPrix==0)nPrix=GetGoldPieceValue(oItem);
int nPas;
while(
oItem!=OBJECT_INVALID)
{
if(
GetTag(oItem)==sTag)
{
nPas+=GetItemStackSize(oItem);
if (
nDestroy)DestroyObject(oItem,1.);
else
AssignCommand(oVendeur,ActionGiveItem(oItem,oAcheteur));
}
oItem=GetNextItemInInventory(oVendeur);
AssignCommand(oAcheteur,GiveGoldToCreature(oVendeur,nPas nPrix));

Merci beaucoup Twist, mais j'ai beau tripatouiller je n'y arrive pas :P (oui très quiche est le mot que tu cherche )

enfin merci quand même, je sens que c'est pas loin là
j'utilise le meme principe. voici le script qu'on m'a refilé :

Code PHP:

/* Créé par Sigbald modifie par JulienL */

#include "nw_i0_tool"

void main()
{
  
object oPC GetPCSpeaker();
  
object oItem GetFirstItemInInventory(oPC);
  
int nNumber 0;
  while (
GetIsObjectValid(oItem)) // boucle qui vide l'inventaire des phalanges de squelette
    
{
    if (
GetTag(oItem) == "NW_IT_MSMLMISC13")// tag de ton item
      
{
      
DestroyObject(oItem);
      
nNumber++;
      }
    
oItem GetNextItemInInventory(oPC);
    }

  
// donne la recompense au personnage ici, l'or et l'xp sont de 20 chacun
int nRecompense 20*nNumber;
RewardPartyXP(nRecompenseoPC);
RewardPartyGP(nRecompenseoPC);

Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés