comptage dans inventaire

Répondre
Partager Rechercher
Hello gentlemen

N'étant pas douée pour les scripts, je sollicite votre aide. Voilà le problème : 1 pnj "junky" doit fréquemment acheter de la drogue au pj. Ce dernier doit donc s'en procurer à plusieurs reprises et la revendre au pnj.

Pouvez-vous me faire les scripts nécessaires pour que le pnj compte les unités de drogues dans l'inventaire du pj, les prenne, puis donne au pj 120 po par unité prise.

Je pense pouvoir me débrouiller pour le reste.

Si je vous embête, dites-le moi...
Code PHP:

object oPC =      //La tu définis le PC, si c'ets un dialogue, tu mets GetPCSpeaker()
object oItem=GetFirstItemInInventory(oPC);
int nDoses=0;

while (
GetIsObjectValid(oItem))
{
    if (
GetTag(oItem)="xxxxxxx"//remplacer xxxxxxx par le tag de la drogue
    
{
        
int nStack=GetNumStackedItems(oItem);
        
int nDoses=nDoses+nStack;
        
DestroyObject(oItem);
    }
    
oItem=GetNextItemInInventory(oPC);
}

int nMoney=120*nDoses;
GiveGoldToCreature(oPCnMoney); 
Voila, a priori ca marche, si tes doses sont empilées ca prend en compte le nombre de doses, et ca vérifie s'il y a plusieurs piles de doses.
A mettre dans le "ActionConsequente"

Sans oublier le

Code PHP:

void main()
{
//le code de zunder

n'oublie pas de mettre

Code PHP:

object oPC GetPCSpeaker(); 

surtout l ";" a la fin de la ligne
Merci pour ce script messieurs, voilà ce que cela donne :

Code PHP:

void main()
{
    
object oPC GetPCSpeaker();
    
object oItem=GetFirstItemInInventory(oPC);
    
int nDoses=0;

    while (
GetIsObjectValid(oItem))
    {
        if (
GetTag(oItem)="drogue")
        {
            
int nStack=GetNumStackedItems(oItem);
            
int nDoses=nDoses+nStack;
            
DestroyObject(oItem);
        }
        
oItem=GetNextItemInInventory(oPC);
    }

    
int nMoney=120*nDoses;
    
GiveGoldToCreature(oPCnMoney);

Et j'obtiens ça comme message d'erreur :

Citation :
pg_dealer02.nss(9): ERREUR : CANNOT ASSIGN A VALUE TO THE LEFT-SIDE OF THIS STATEMENT
->

une idée ?
Pour une comparaison, il faut ==.

Code PHP:

void main()
{
    
object oPC GetPCSpeaker();
    
object oItem=GetFirstItemInInventory(oPC);
    
int nDoses=0;

    while (
GetIsObjectValid(oItem))
    {
        if (
GetTag(oItem)=="drogue"// <=== ICI, petit oubli. 
        
{
            
int nStack=GetNumStackedItems(oItem);
            
int nDoses=nDoses+nStack;
            
DestroyObject(oItem);
        }
        
oItem=GetNextItemInInventory(oPC);
    }

    
int nMoney=120*nDoses;
    
GiveGoldToCreature(oPCnMoney);

Désolé pour le = que j'avais oublié

Et ton message d'erreur, c'est parce que tu mets le script dans conditions d'execution au lieu de actions conséquentes.
ça marche pooooooo...

le pnj prend bien les doses de drogue présente dans l'inventaire du pj, mais il ne le paye pas ! (pourtant il a bien de l'or dans son inventaire ! ) -> (c'est du vol !)

Je t'aiderais volontiers... si je le pouvais, mais cette idée me semble rudement intéressante, il se pourrait que je l'utilise pour fourguer le produit de la chasse et de l'agriculture que j'essaye de mettre en place...

Tu est certaine que ça ne marche pas ?
La boucle detruit les object avant de les compter c'est pour cela que sa ne marche pas

[Edit] Bon je dis une semi connerie, donc je vais simplifier le code.

Code PHP:

void main()
{
    
object oPC GetPCSpeaker();
    
object oItem=GetFirstItemInInventory(oPC);
    
int nMoney=120;

    while (
GetIsObjectValid(oItem))
    {
        if (
GetTag(oItem)=="drogue"// <=== ICI, petit oubli.
        
{
            
GiveGoldToCreature(oPCnMoney);
            
DestroyObject(oItem);
        }
        
oItem=GetNextItemInInventory(oPC);
    }


Voila la il prend dose par dose et donne les po a chaque dose remise
Je crois que cette bibliothèque pourrait t'aider :
https://forums.jeuxonline.info/showthread.php?t=187646

Elle propose des fonctions standards qui facilite la gestion de l'inventaire, par exemple ici, tu peux faire ainsi pour que ton PNJ donne 120 PO par dose :

Code PHP:

#include nwl_forgitem

void main()
{
    
//je suppose que tu es dans l'action taken (action conséquente)
    //d'un dialogue
    
object oPJ GetPCSpeaker();
    
    
//On détruit toutes les doses, et on les comptes par la même occasion
    
int nNumDoses DestroyNumItem"Tag des doses"2000oPJ );
    
    
//on donne 120 PO par dose au joueur
    
GiveGoldToCreatureoPJ120 nNumDoses );

Voilà, c'était la version commentée

Maintenant la version compacte
Code PHP:

#include nwl_forgitem

void main(){
    
object oPJ GetPCSpeaker(); 
    
GiveGoldToCreatureoPJ120 DestroyNumItem"Tag des doses"2000oPJ ) );

Je pense qu'il est inutile de refaire à chaque fois les mêmes choses, donc ce genre d'opération de base (compter, détruire, etc les items) est plutôt à mettre dans une bibliothèque.
Répondre

Connectés sur ce fil

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