La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 21:57:41


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Blackblood
Chevalier
Inscrit le: 20 Juil 2004
Messages: 80
Localisation: France
Répondre en citant
Posté le : 28/07/2004 13:54:56 Sujet du message : connaitre le tag d'un objet de l'inventaire

Bonjour,

Comme j'ai un peu de mal avec l'anglais et que j'essaie de comprendre ce que dit le Lexicon, j'ai besoin de votre aide pour choisir la bonne fonction.

Je voudrais trouver la fonction qui retourne le tag d'un objet quelconque de l'inventaire.

Je ne comprend pas comment est organisé l'inventaire, les objets qui sont ramassés ont-ils un numéro attribué ? attention je parle de l'inventaire et non des items équipés (slot).

merci
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 28/07/2004 14:53:00 Sujet du message :

[http]

Si tu veux l'inventaire n'est plus ni moins qu'une liste d'objets ordonnée par ordre d'arrivée. Tu peux pas savoir quel est le dernier objet (encore que, si on utilise la fonction GetNextItemInInventory jusqu'à la fin on devrait bien avoir le dernier).
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 28/07/2004 14:58:35 Sujet du message : Re: connaitre le tag d'un objet de l'inventaire


Blackblood a écrit :
Je voudrais trouver la fonction qui retourne le tag d'un objet quelconque de l'inventaire.
Un objet quelconque de l'inventaire ?... Autant prendre le premier non ?
Voila une manière de faire :
NWScript :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.



Citation :
Je ne comprend pas comment est organisé l'inventaire, les objets qui sont ramassés ont-ils un numéro attribué ? attention je parle de l'inventaire et non des items équipés (slot).
Mal. Il est mal organisé dans le sens ou la structure de données ne reflète pas la présentation visuelle des inventaires...
On a absolument pas la main sur les emplacements exact des objets d'inventaires. Ils ont probablement une position fixe puisqu'on les retrouve toujours à l'emplacement où on les a mis en terme de page d'inventaire et de position, mais cela est une gestion interne au moteur du jeu. Les seules instructions qui nous permettent de retrouver les objets d'inventaires sont GetFirstItemInInventory et GetNextItemInInventory lesquelles restitue la structure de donnée appelée la liste linéaire chaînée. En gros, la première fonction nous donne le premier membre de la liste, et la seconde nous donne la suivante de la courante. Après avoir placé la première commande, le premier objet de la liste devient l'objet courant. En utilisant la seconde commande l'objet suivant devient l'objet courant, et ainsi de suite. Mais la construction de cette structure, c'est du "made in Bioware land".
Je soupçonne toutefois de ne pas réorganiser spécialement la liste. Partant d'un inventaire vide, le premier objet placé dans l'inventaire (quel que soit sa page) doit être le premier élément de la liste. Le second objet placé devient le second, etc. Si on enlève un objet d'un inventaire, si celui-ci est au milieu de la liste, on enlève l'élément et raccorde les deux bout de la liste (si c'est le premier qu'on enlève, c'est le second qui devient le premier). S'il est replacé dans l'inventaire, même immédiatement après, il sera ajouté à la fin de la liste. Bien entendu, on pourrait vérifier ces suppositions mais je doute que ça soit d'une grande utilité.
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
Blackblood
Chevalier
Inscrit le: 20 Juil 2004
Messages: 80
Localisation: France
Répondre en citant
Posté le : 28/07/2004 15:09:43 Sujet du message :

Pour tout expliquer, je voudrais connaitre le script permettant de voler un objet.

Les roublards volent un objet aléatoire, j'aurais voulu mettre ce script sur une créature.

Mais afin de me permettre de bien comprendre les scripts j'aurais aimé le faire moi-même. Ca permet de trouver le bug d'un script, c'est un avantage lorsque l'on développe un module.

Je sais je suis ambitieux et je pars de loin. J'ai commencé en utilisant le script generator mais on s'aperçoit qu'il est limité à certaines fonctions (pas de tirage aléatoire, pas de boucle, etc...).

Effectivement, j'avais bien vu ce petit script permettant de compter le nombre total d'objet dans l'inventaire. Je pense ensuite faire un tirage aléatoire d'un chiffre dont le maximum est le nombre total d'objets. De récupérer ensuite le tag de l'objet puis de le voler.

Mais si je récupère le script de vole, certes je n'aurais pas à le faire mais je pourrais comprendre les subtilités du script.

Merci de vos conseils
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 28/07/2004 15:43:50 Sujet du message :

Tu peux toujours utiliser les fonctions de base et bricoler :

NWScript :
// Prend un objet au hasard dans la liste des objets de oSource, et tente de le voler s'il n'est pas trop lourd,

object StealObject( object oSource, object oThief );

object StealObject( object oSource, object oThief )
{
  object oItem = GetFirstItemInInventory(oSource);
  object oSteal = OBJECT_INVALID;
  int iThrow, iWeight;
  while (GetIsObjectValid(oItem) == TRUE)
  {
      iWeight = GetWeight( oItem );
      iThrow = Random( iWeight );
     
      if ( ( iThrow / iWeight ) < 0.75 )
      {
        iThrow = d20();
       
        if ( !( d20() % 3 ) )
        {
          AssignCommand( oSource, ActionAttack( oThief ) );
          return OBJECT_INVALID;
        }
        else
        {
          SetStolenFlag( oItem, TRUE );
          AssignCommand( oThief, ActionTakeItem( oItem, oSource ) );
          return oItem;
        }
      }
      oItem = GetNextItemInInventory(oSource);
  }
  return OBJECT_INVALID;
}
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.


Ce truc n'est peut être pas très D&D3 mais ça devrait marcher. Je sais pas où le mettre ceci dit Smile
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Blackblood
Chevalier
Inscrit le: 20 Juil 2004
Messages: 80
Localisation: France
Répondre en citant
Posté le : 28/07/2004 21:18:45 Sujet du message :

Houlà, ça commence à me faire mal à la tête.
Merci en tout cas je vais y réfléchir posément.

En tout cas j'ai commencé mon script, pour le moment il est très simple et cela peut suffire, le PNJ vole bien les objet dans l'inventaire.

Ce que je peux affirmer c'est qu'en utilisant la fonction GetFirstItemInInventory() le PNJ vole le dernier item placé dans l'inventaire.
En fait j'avais vider l'inventaire sur le sol puis tout replacer un à un. Le voleur a pris le dernier item placé dans l'inventaire. C'est bon à savoir.

Trève de blabla voici mon script :
NWScript :
// placer dans OnPerception
void main()
{

object oPC = GetLastPerceived();

if (!GetIsPC(oPC)) return;

if (!GetLastPerceptionSeen()) return;

/// trouvez le premier objet de l'inventaire et le prendre

object oItem = GetFirstItemInInventory(oPC);

ActionTakeItem(oItem, oPC);

}
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.


Voilà, je vous fait part de mes premier travaux et vous donnerais le script final (si j'y arrive Razz)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Konrad
Grand Maître Chanteur du Conseil
Inscrit le: 30 Sep 2002
Messages: 1258
Localisation: Empire d'Halöven
Répondre en citant
Posté le : 01/08/2004 12:51:56 Sujet du message :


Baldurien a écrit :
Je sais pas où le mettre ceci dit Smile
C'est simple, après tu appelle la fonction

NWScript :
object StealObject( object oSource, object oThief );
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.


dans un main que tu mets soit dans un dialogue auquel cas ça devient :

NWScript :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.


Ou alors dans le OnPerception comme à fait Blackblood

NWScript :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.

_________________
Le site du Module Dragon Noir
Le groupe du Module L5A - L'ombre et la Lumière
Crimson Skies
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur 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 31.204ms