La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 18:20:10


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Troubadour
Novice
Inscrit le: 15 Sep 2004
Messages: 7
Répondre en citant
Posté le : 17/09/2004 17:51:26 Sujet du message : Vérifier la présence de plusieurs items

salut les aminches. ca fait quelques temps que je parcoure ces forums et que j'utilise dans mon module perso les cripts des uns et des autres... Quel chouette concept, décidément, et je vous félicite tous pour votre passion et votre talent.

On ne peut pas dire que je sois un dieu du script, loin de là, mais j'en apprend un peu plus tous les jours. Bien sûr c'est souvent sur les choses les plus simples qu'on bute le plus, alors voilà un petit problème que je n'arrive pas à résoudre :

Un forgeron propose de fabriquer un item à un PJ en échange d'une certaine somme et de plusieurs composants du même type (là il s'agit d'une épée d'argent qui sera fabriquée à partir de pépites d'argent).

Je veux insérer dans une des lignes du dialogue une vérification de ce que possède le PJ :

- X pièces d'or.

ET :

- X pépites d'argent.


J'ai essayé avec GetGold et GetItemPossededBy mais le script ne se compile pas... C'est peut-être sur le chiffrage des quantités (>= X) que je bute, je ne sais pas.

Comment vous y prendriez-vous ?


Ensuite j'aurai un autre problème : comment faire en sorte qu'un script détruise une certaine quantité de mêmes objets possédés par un joueur ?
_________________
"Oyez, oyez braves gens, etc..."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Archéops
Ecuyer
Inscrit le: 03 Mai 2004
Messages: 55
Répondre en citant
Posté le : 17/09/2004 18:32:18 Sujet du message :

Salut, voici une petite fonction qui permet de donner le nombre d'objet de même tag possédés par un joueur.
oPC, c'est le joueur (que tu determines comme tu veux) rt à la place de sTag tu mets le tag de l'objet)
NWScript :
int NumberItembyTag(object oPC, string sTag)
{
  object oItem=GetFirstItemInInventory(oPC);
  int iCount=0;

  while (GetIsObjectValid(oItem))
  {
      if (GetTag(oItem)==sTag)
      {
      iCount++;
      }
      else
      {
      }
  oItem=GetNextItemInInventory(oPC);
  }
  return iCount;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

Aprés pour la ressortir dans un dialogue, je pense qu'il faut stocker la variable sur le joueur par exemple. Pour contre, je ne sais pas comme la ressortir dans le dialogue. Faut voir comment les variables génériques fonctionnent...
Une dernière chose, pour détruire les objets, l faut juste rajouter un DestroyObject(oItem) entre les deux accolades du if...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
grosraoul
Ecuyer
Inscrit le: 10 Sep 2004
Messages: 60
Répondre en citant
Posté le : 17/09/2004 19:04:50 Sujet du message :

voila ton script qui devrait marcher je pense

NWScript :

#include "nw_i0_tool"

void main()
{
    //declarations

    object oPC=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
    object oItem=GetObjectByTag("tag_de_tes_cristaux");
    int iNombre;

    //verifie si le PC a l'objet et compte le nombre qu'il possede
    if (HasItem(oPC,"tag_de_tes_cristaux")==TRUE)
        {
        iNombre=GetItemStackSize(oItem);
        }

    //le forgeron avise alors

    if ((iNombre>=quantite_de_cristaux) && (GetGold(oPC)>=cout_de_l'operation))
      {
        definir la variable locale qui va bien pour acceder a un dialogue du genre :
        ok , tu as assez de cristaux je vais te faire ca .
      }
    else
        {
          definir la variable locale qui va bien pour acceder a un dialogue du genre :
        c'est pas bon , tu as soit pas assez de thunes, soit pas assez de cristaux
        }

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


edit : j'avais pas pensé au fait que ces objets n'etaient pas stackables. au temps pour moi, le premier script est mieux que le mien.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Troubadour
Novice
Inscrit le: 15 Sep 2004
Messages: 7
Répondre en citant
Posté le : 17/09/2004 19:38:09 Sujet du message :

Merci pour vos réponses, et rapides en plus !Very Happy

Je vais tester ça et je vous donne des nouvelles.

Grosraoul ton script me sera utile plus tard lorsque j'utiliserai les gemmes stackables dans ma forge d'objets magiques...

Je sais qu'il existe de gros scripts de "craft" créés par de vrais malades, j'en ai testé et il est vrai que c'est tentant de les utiliser mais bon... C'est tellement plus amusant quand on essaye de faire les choses soi-même.Razz
_________________
"Oyez, oyez braves gens, etc..."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Troubadour
Novice
Inscrit le: 15 Sep 2004
Messages: 7
Répondre en citant
Posté le : 18/09/2004 17:34:52 Sujet du message :

EDIT DE MON POST

Voilà j'ai pris quelques instants pour bricoler un peu ce script; j'ai utilisé certaines de vos idées et j'ai trafiqué pour le reste... Et test effectué ça ne fonctionne PAS...

J'ai enlevé l'item non-stackable et l'ai remplacé par un stackable, créé à partir du modèle "billes de frondes"... (On peut donc utiliser les pépites d'argent comme des billes de frondes, ça fait cher le tir mais bon...).

Bon, voilà le script fini.

NWScript :
//:Confused///////////////////////// /////////////////////
//:: FileName sc_cond_craft1
//:Confused///////////////////////// ////////////////////
//:Confused///////////////////////// ////////////////////
//:: Created By: Script Wizard
//:: Created On: 18/09/2004 16:25:12
//:Confused///////////////////////// ////////////////////



#include "nw_i0_tool"

int StartingConditional()
{
  object oItem=GetObjectByTag("tag de l'objet");
  object oPC=GetPCSpeaker();

   
        if ((GetItemStackSize(oItem)>=nombre d'objets) && (GetGold(oPC)>=nombre de p.o.))
        return FALSE;

    return TRUE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



Je reprécise que pour le moment ça ne fonctionne PAS !

Qu'est-ce qui se passe ? Ben, RIEN. C'est comme s'il n'y avait pas de script du tout. Le dialogue renvoie à la réplique à laquelle est liée le script "oui je possède tout ça" alors que mon PJ n'a aucune pépite dans son inventaire et une somme d'or insuffisante...

Je ne sais pas où ça merde, des idées ?
_________________
"Oyez, oyez braves gens, etc..."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
grosraoul
Ecuyer
Inscrit le: 10 Sep 2004
Messages: 60
Répondre en citant
Posté le : 18/09/2004 18:15:21 Sujet du message :

la condition de ton script est la suivante :

SI le pj a au moins 1 bille ET au moins 1 po alors je renvoi FAUX (en suposant que le nombre est 1 pour simplifier)
SINON je renvoi VRAI

Ca veux dire que ton script doit etre une condition qui amene un dialogue du marchand du genre :
"vous n'avez pas assez de billes ou bien pas assez d'or "

est ce que c'est bien ce que tu voulais ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Troubadour
Novice
Inscrit le: 15 Sep 2004
Messages: 7
Répondre en citant
Posté le : 19/09/2004 10:29:04 Sujet du message :

Effectivement j'aurais dû inverser le TRUE et le FALSE pour rester dans ma logique narrative... Mais dans le cas présent, ce que le script devrait faire c'est renvoyer à la réplique SUIVANTE ou à une fin de dialogue lorsque le PJ possède au moins X billes ET au moins X or.

Pourtant il ne le fait pas, qu'il y ai une réplique suivante dans le dialogue ou pas.

J'ai essayé en inversant le TRUE et le FALSE, le résultat est le même.

C'est comme si le dialogue ignorait le script.

Je n'ai pas la moindre idée de ce qui ne va pas. Le script est correctement compilé, sans erreurs... GetItemStackSize peut bien être associé à un comparatif numérique, de même que GetGold (ce qui n'est pas le cas de GetItemPossededBy apparement)...

Je vais essayer d'autres trucs mais si je n'y arrive pas je vais procéder autrement : je pourrais mettre dans ma mine un plaçable "forge" qui permet de "fondre" un certain nombres de pépites pour obtenir différents lingots. Ainsi je ne serai pas obligé d'inclure dans le script de forgeron ces vérifications de quantité qui semblent foutrent la merde.
_________________
"Oyez, oyez braves gens, etc..."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
grosraoul
Ecuyer
Inscrit le: 10 Sep 2004
Messages: 60
Répondre en citant
Posté le : 19/09/2004 10:53:20 Sujet du message :

a mon avis, il y'a une autre ligne dans ton dialogue qui shunte cette condition. OU bien ce n'est peut etre pas les bon tags , ou alors il y'a une erreur mais je la vois pas Sad
il faudrait que tu nous fasses passer l'arbre de dialogue déplié pour voir.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Archéops
Ecuyer
Inscrit le: 03 Mai 2004
Messages: 55
Répondre en citant
Posté le : 20/09/2004 16:58:34 Sujet du message :

Re..
Pour ton script, j'écrirai plutôt ça :
NWScript :
#include "nw_i0_tool"

int StartingConditional()
{
  object oPC=GetPCSpeaker();
  object oItem=GetItemPossessedBy(oPC,"tag de l'objet");

   
    return (((GetItemStackSize(oItem)>=0) && (GetGold(oPC)>=0)));

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Bien sûr, tu remplace les zéro par la valeur que tu veux... Je sais pas si ça marche mais à mon avis la fonction GetItemPossessedby et plus appropriée...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 54.633ms