JeuxOnLineForumsPlusConnectés : 511 (sites) | 934 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > comptage dans inventaire RSS
   
Répondre
Partager Outils Rechercher
Avatar de Acid Queen
Acid Queen
Reine
 
Avatar de Acid Queen
 

comptage dans inventaire

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...
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
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.
Lien direct vers le message - Vieux
Avatar de Tyrion
Tyrion
Roi
 
Avatar de Tyrion
 
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
Lien direct vers le message - Vieux
Avatar de Acid Queen
Acid Queen
Reine
 
Avatar de Acid Queen
 
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 ?
Lien direct vers le message - Vieux
Avatar de Archamedes_Fr
Archamedes_Fr
Alpha & Oméga
 
Avatar de Archamedes_Fr
 
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);

Lien direct vers le message - Vieux
Avatar de Acid Queen
Acid Queen
Reine
 
Avatar de Acid Queen
 
Citation:
ERREUR : NO FUNCTION STARTINGCONDITIONAL() IN SCRIPT
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
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.
Lien direct vers le message - Vieux
Avatar de Acid Queen
Acid Queen
Reine
 
Avatar de Acid Queen
 
ç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 !)

Lien direct vers le message - Vieux
Avatar de Acidamere
Acidamere
Alpha & Oméga
 
Avatar de Acidamere
 
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 ?
Lien direct vers le message - Vieux
Avatar de Tyrion
Tyrion
Roi
 
Avatar de Tyrion
 
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
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Problème de ton script : si les doses sont empilée, il filera 120 po pour 99 doses par exemple.
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Je crois que cette bibliothèque pourrait t'aider :
http://forums.jeuxonline.info/showth...hreadid=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.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > comptage dans 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 01h24.
   

© 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