Prendre un objet plusieurs fois

Répondre
Partager Rechercher
Dans un dialogue, je voudrais que si le personnage à un "os" on lui donne sa récompense, mais que cela se fasse plusieurs fois s'il en a plusieurs dans son inventaire

#include "nw_i0_tool"
void main()
{

object oPC = GetPCSpeaker();

object oItem;
oItem = GetItemPossessedBy(oPC, "Os");

if (GetIsObjectValid(oItem))
{DestroyObject(oItem);

RewardPartyXP(50, oPC, FALSE);
RewardPartyGP(60, oPC, FALSE);}

if (GetItemPossessedBy(oPC, "Os") != OBJECT_INVALID)
{DestroyObject(oItem);

RewardPartyXP(50, oPC, FALSE);
RewardPartyGP(60, oPC, FALSE);}

if (GetItemPossessedBy(oPC, "Os") != OBJECT_INVALID)
{DestroyObject(oItem);

RewardPartyXP(50, oPC, FALSE);
RewardPartyGP(60, oPC, FALSE);}

if (GetItemPossessedBy(oPC, "Os") != OBJECT_INVALID)
{DestroyObject(oItem);

RewardPartyXP(50, oPC, FALSE);
RewardPartyGP(60, oPC, FALSE);}

if (GetItemPossessedBy(oPC, "Os") != OBJECT_INVALID)
{DestroyObject(oItem);

RewardPartyXP(50, oPC, FALSE);
RewardPartyGP(60, oPC, FALSE);}

if (GetItemPossessedBy(oPC, "Os") != OBJECT_INVALID)
{DestroyObject(oItem);

RewardPartyXP(50, oPC, FALSE);
RewardPartyGP(60, oPC, FALSE);}
}

Là ça file 5 fois les xp et l'or mais ne prend qu'un seul os.
Petit coup de main please.
Essaye sa :

Code PHP:

#include "nw_i0_tool"

void main()
{
    
// Donner de l'or à la personne qui parle
    
RewardPartyGP(60GetPCSpeaker());

    
// Donner des PX à la personne qui parle
    
RewardPartyXP(50GetPCSpeaker());

    
// Donner les objets à la personne qui parle
    
CreateItemOnObject("os"GetPCSpeaker(), 1);

    
// tu creer la ligne autant de fois que tu as des "os"
    
CreateItemOnObject("os"GetPCSpeaker(), 1);


Euh tu es sur là ?

Mon joueur doit apporter des os aux gars du cimetière et celui-ci le récompense...

Là tu créés un os dans l'inventaire du joueur... ça va créer une quête infinie...
Utilisez au maximum les includes fournis avec le jeu, en général ils proposent la majorité des fonctions que cherchent les concepteurs de modules classiques.

Code PHP:

#include "nw_i0_plot"

int nNum 10;
string sTag "tag_item";

int StartingConditional()
{
    
object oPC GetPCSpeaker();
    if(
GetNumItems(oPCsTag)>= nNum)
    {
         
TakeNumItems(oPCsTagnNum);
         
//ajoute ici les récompenses de quête, les variables locales, l'avancement du journal, etc...
         
return TRUE;
    }
    return 
FALSE;

Action conséquente
Code PHP:

void main()
{
    
object oPC GetPCSpeaker();
    
int gold 0;

    
object oItem GetFirstItemInInventory(oPC);
    while(
GetIsObjectValid(oItem))
    {
        if(
GetTag(oItem) == "Os")
        {
            
gold += 5//Or gagné par objet
            
DestroyObject(oItem);
        }
        
oItem GetNextItemInInventory(oPC);
    }
    
GiveGoldToCreature(oPC,gold);
    
GiveXPToCreature(oPC,(gold*2));

Conditon d'execution

Code PHP:

int StartingConditional()
{
    
int nShow OBJECT_INVALID != GetItemPossessedBy(GetPCSpeaker(), "Os");
    return 
nShow;

Si sa peux te donner des idées
Ok merci je vais réfléchir là dessus.

Je sors d'un gros script sur la casse d'objet qui laisse dans l'inventaire le débris magique que le joueur peut revendre (pour éviter une perte sèche). Ca m'a pris la nuit, donc je vais attendre un peu.
Tiens, je t'épargne une nuit blanche

Code PHP:

#include "nw_i0_plot" 

int StartingConditional() 

    
object oPC GetPCSpeaker(); 
    if(
GetNumItems(oPC"Os")>= 1
    { 
         
TakeNumItems(oPC"Os"999); 
         
RewardPartyXP(50oPCFALSE);
         
RewardPartyGP(60oPCFALSE);
         return 
TRUE
    } 
    return 
FALSE

Attention toutefois aux objets contenus dans les sacs magiques. Il y a un bug connu qui comptabilise plusieurs fois le même objet quand on fait une recherche dans l'inventaire du PJ.

EDIT : Par contre je n'ai pas encore testé les commandes Take/GiveNumItems, et donc si cela contourne le bug bioware.
Je n'ai jamais utilisé la fonction TakeNumItems et je n'ai jamais rencontré le bug dont tu parles.
Pour répondre à Clarisse, il y a plusieurs façons de faire:
  1. Compter d'abord les objets à prendre et payer ensuite
  2. Prendre un objet et payer directement puis chercher le suivant etc

Voici un exemple type du premier cas:

Code PHP:

void main()
{
    
object oPC GetPCSpeaker();
    
object oItem GetFirstItemInInventory(oPC);
    
int XPGP;

    while (
oItem != OBJECT_INVALID)
    {
        if (
GetTag(oItem) == "az_craneharpie"//crane de harpie
        
{
            
DestroyObject(oItem0.0);
            
XP XP 10;  // 20XP pr crane
            
GP GP 120// 150 PO par crane
        
}
        
oItem GetNextItemInInventory(oPC);
    }
    
GiveGoldToCreature(oPCGP);
    
GiveXPToCreature(oPCXP);

et un exemple du second:

Code PHP:

void main()
{
    
object oPC GetPCSpeaker();
    
object oItem GetFirstItemInInventory(oPC);
    while (
GetIsObjectValid(oItem))
    {
        if (
GetTag(oItem) == "az_glandmaladaex")
        {
            
DestroyObject(oItem0.0);
            
GiveGoldToCreature(oPC150);
            
GiveXPToCreature(oPC15);
        }
        
oItem GetNextItemInInventory(oPC);
    }

Après, on peut faire des combinaisons: compter juste les objets et payer ensuite, compter et stocker sur une variable pour débloquer plus tard etc.
Mais le principe est toujours le même: scanner l'inventaire du PJ avec une boucle.
Répondre

Connectés sur ce fil

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