La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 07/05/2024 10:45:36


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 17/08/2007 02:47:05 Sujet du message : [Gros Script] Vente aux enchères

Salut Smile
C'est encore moi et mes idées farfelues Very Happy

Voilà, j'ai une idée de système, mais je ne sais absolument pas comment procéder scriptatiquement parlant... C'est un petit défi aux rois du script, si ça vous tente Embarassed


Le but, c'est que : Lorsqu'un joueur rentre dans la salle, un pnj orateur commence un dialogue "le premier article est Y, l'enchère de base est XXpo". Ces articles doivent être choisis au hasard dans une liste, et le prix de base de chaque objet est établi à l'avance.

à partir de là, des pnj présents dans la salle commencent à augmenter l'enchère aléatoirement de 10 à 100 po de plus. Plus le prix augmente, moins les pnj doivent faire d'offres. Par exemple, si un objet coûte 200po, les pnj font rapidement des offres : 220, 260, 300, 310, 350, 390, 400, et à partir de 200% donc, commencer à hésiter. ...420... ...430... ...450... ...hum, 470...

Evidemment, il faut les "j'ai ici, une offre de X po" de l'orateur", puis, si aucune autre offre n'est faite "X po, qui dit mieux", et enfin, si toujours aucune offre, "adjugé pour X po".

Plus dur encore, il faut qu'à tout moment, un joueur puisse parler au pnj orateur pour renchérir, et, si aucun pnj n'a relancé dans un délai de 3 secondes, l'objet est à lui. Si le pj ne propose pas la plus haute enchère, l'objet est perdu, et on passe au suivant.

Bien sûr, il faut que ça ne marche que quand un pj est là.

Pour le dialogue de l'orateur, celui auquel accèdera le pj en cliquant dessus, ce sera du genre :

Citation :
De combien voulez-vous renchérir ?
- 10po
- 20po
- 30po
- 40po
- 50po
etc jusqu'à 200.

C'est assez dur ou bien j'en rajoute une couche ? Very Happy
Merci d'avance pour toute l'aide que vous pourrez apporter Smile
^^
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 19/08/2007 01:35:07 Sujet du message :

J'ai cherché un peu, pour l'instant c'est pas la grande découverte, je fais un script sur le OnEnter de la zone (pour qu'il ne marche que si un joueur est présent), qui fait une liste.

NWScript :

void objets()
{
    //Armes
    object oArme1 = GetObjectByTag("TAG");

    // Armures
    object oArmure1 = GetObjectByTag("TAG");

    // Vetements
    object oBotte1 = GetObjectByTag("TAG");
    object oBracelet1 = GetObjectByTag("TAG");
    object oCape1 = GetObjectByTag("TAG");
    object oCeinture1 = GetObjectByTag("TAG");

    // Bijoux
    object oAnneau1 = GetObjectByTag("TAG");
    object oCollier1 = GetObjectByTag("TAG");

    // Divers
    object oDivers1 = GetObjectByTag("TAG");

    // Special
    object oSpecial1 = GetObjectByTag("TAG");
}


/* Main */
void main()
{
    object oPC = GetEnteringObject();
    object oCrieur = GetObjectByTag("Crieur");
    object oPNJ1 = GetObjectByTag("PNJ_ench1");
    object eObjet1 = ???
    object eObjet2 = ???
    object eObjet3 = ???

    string sAnnonce = "Les objets mis en vente sont";

    AssignCommand(oCrieur, SpeakString(sAnnonce));
}
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.


Les eObjet sont en fait les 3 objets choisis dans la liste par vente. Il faudrait donc que l'annonce soit "Les objets mis en vente sont Machin, Truc et Bidule". J'imagine qu'il va falloir utiliser des custom token pour ça, ce en quoi je ne connait pas grand chose (l'occasion de s'y mettre...). Donc un genre de "Les objets mis en vente sont <CUSTOMX>, <CUSTOMY> et <CUSTOMZ>", peut-être.

Le problème reste encore de pouvoir établir que :
* Chaque fois qu'un PJ rentre dans la zone, le script pioche 3 objets au hasard, avec un pourcentage de chance de tirage différent selon les objets.
* Ces objets sont ensuite cités dans l'annonce.
* La vente commence, avec un "Premier objet : Machin, prix de départ, Xpo". Le prix de base est calculé à la moitié du prix attribué par nwn à l'objet. Il faut donc utiliser GetGoldPieceValue quelquepart, forcément.
* Le prix de l'objet est augmenté à chaque surenchère d'un PNJ ou d'un PJ, mais sans modifier le prix de l'objet dans la palette (je suis clair là ? Embarassed).
* les PNJ font des propositions entre 10% et 40% du prix de base + les offres déjà faites, et ce toutes les 1-2 secondes environs, jusqu'à atteindre le double du prix de base. Ils tirent un dé (d100 par exemple ?) pour savoir s'ils vont surenchérir ou non. S'ils font de 1 à 10, ils ne montent pas l'enchère.
* Les PNJ font ensuite les mêmes propositions, mais (à partir du double du prix de base donc) s'ils font entre 1 et 40, ils ne relance pas l'enchère.
* Arrivés au triple du prix de mise en vente, ils ne relancent pas s'ils font entre 1 et 80.
* Au quadruple du prix de mise en vente, entre 1 et 99.
* A tout moment, le PJ peut parler au vendeur (tag "crieur" ici) d'augmenter l'offre. Pour les PNj, ça ne change rien, mais il faut que chaque proposition du joueur soit bien sûr ajoutée à l'enchère actuelle.
* Si au bout de 3 secondes, aucune offre n'est faite, alors le "crieur" lance une nouvelle SpeakString "Cette personne a proposé X po". 3 secondes plus tard, si aucune offre n'a été faite, "X po, qui dit mieux ?". Enfin, si 2 secondes plus tard, aucune offre n'a été faite, " Adjugé pour Xpo".
* Si le PJ a proposé la plus haute enchère, et qu'il a bien l'argent nécéssaire, on lui donne l'objet.
* On passe ensuite à l'objet suivant.
* Une fois que les 3 objets ont été vendus "Une petite pause avant de continuer". Le PJ doit ressortir de la zone et y rerentrer pour commencer une nouvelle enchère.

Ben, ça en fait du boulot -__-

Merci d'avance pour toute aide, suggestion, script, encouragement (XD), tout ça.
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 19/08/2007 14:10:28 Sujet du message :

Bon bon bon... toi t'as vraiment de ces idées Embarassed

Je pense que déjà, il vaut mieux faire avec une library, pour éviter de se perdre, le problème c'est que ça peut prendre du temps avant que je le fasse.

Bon, moi je vois à quoi ça ressemble pour les ventes aux enchères, je dirais un truc comme ça:

Une zone avec plein de chaise, où les joueurs peuvent s'assoir dessus (Décor). Un PNJ est devant un bureau, et c'est lui qui écoutera ce que disent les joueurs.

Ce qu'on peut faire, c'est déjà faire un plan:

-1 : Il faudrait avoir minimum 3 PJs dans la salle (sinon 1 PJ, où est l'utilité? 2 PJs ça sera surement bof... Donc faut faire qu'à chaque fois qu'un PNJ sort ou rentre dans la carte, celui-ci active une local. Dès que cette local est égale à X personnes (où X = nombre de personne a avoir pour faire les enchères) on fait apparaitre un PNJ devant le bureau (à toi de mettre les effets si ça te fais plaisir ^^).

-2 : Il faut que au début, soit dit des messages de bienvenue. Sur ce coup là, je pense qu'un script dans le OnSpawn du PNJ fera très bien l'affaire. À la fin de ce script, on commence les enchères...

-3 : Pour faire classe, on pourrait mettre sur la table, l'objet qui est a enchérir (comme ça, les joueurs peuvent l'examiner sans se faire avoir). À ce moment la, tu laisse 10 secondes pour que les joueurs puissent avoir le temps d'examiner l'objet.

-4 : Bon alors là, j'te déconseil de mettre 3 secondes à chaque fois ... On est sur un jeu, faut prendre le temps d'écrire et de pas faire de faute Very Happy Bon, moi je me dis qu'il faut ça :
*Si le joueur dit "+X", alors on dit qu'il veut rajouter X po à l'enchère
*Si le joueur dit "/X", alors on dit qu'il veut que l'enchère soit à X po (ce n'est pas un rajout)
Tout ça sera stocker dans une variable. Le problème c'est que à chaque fois, faut faire des recherches, de tous les PJs, etc... donc c'est facile et chiant en même temps. Faudrait que pour plus de facilité, la local soit sur le joueur.

-5 : Après chaque augmentation de l'enchère, on laisse 10 secondes. Quand ça arrive à 5 secondes on fait un message qui dit "1 fois, 2 fois" etc...

Problème : Les secondes et moi ... la le truc, c'est qui faut STOPPER le delay si un joueur augmente l'enchère ! Et c'est ici que ça devient très compliqué ! J'vois pas réellement comment faire pour stopper le delay, le remettre à 10 etc...

-6 : Aussi compliqué. Le joueur gagne l'enchère, donc, gagne l'item ... pour moi j'aurais dit que c'est simple, j'ai un blacksmith qui utilise cette méthode, on drop l'item à terre, on en fait une copy dans l'inventaire du joueur, et toc, celui qui est par terre disparait. Simple. Dur : faire en sorte que les items soient déposés ET PAS PERDU LORS D'UN CRASH ! Et la ... je ne vois que NWNX et je ne l'utilise pas Embarassed

-7 : on détruit toutes les variables, et on refait comme si le pnj avait spawn.

Je vais voir pour commencer, mais faut trouver une solution au problème de l'item à stocker.
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 19/08/2007 15:56:37 Sujet du message :


Black Knight a écrit :
Bon bon bon... toi t'as vraiment de ces idées Embarassed
Hé oui Wink



Black Knight a écrit :
Je pense que déjà, il vaut mieux faire avec une library, pour éviter de se perdre, le problème c'est que ça peut prendre du temps avant que je le fasse.
;
Effectivement, une librarie peut être utile, mais je savais pas vraiment dans quelle condition l'utiliser.



Black Knight a écrit :
Une zone avec plein de chaise, où les joueurs peuvent s'assoir dessus (Décor). Un PNJ est devant un bureau, et c'est lui qui écoutera ce que disent les joueurs.
Ca c'est déjà fait.


Black Knight a écrit :
-1 : Il faudrait avoir minimum 3 PJs dans la salle (sinon 1 PJ, où est l'utilité? 2 PJs ça sera surement bof... Donc faut faire qu'à chaque fois qu'un PNJ sort ou rentre dans la carte, celui-ci active une local. Dès que cette local est égale à X personnes (où X = nombre de personne a avoir pour faire les enchères) on fait apparaitre un PNJ devant le bureau (à toi de mettre les effets si ça te fais plaisir ^^).
Je souhaite quand même que ça fonctionne, qu'il y ai un seul ou 40 PJ. les pnj sont là pour faire monter les enchères aussi, et l'intérêt reste entier (il faut avoir l'argent suffisant hein). S'ils sont plusieurs, tant mieux, sinon tant pis, ça doit marcher quand même.


Black Knight a écrit :
-2 : Il faut que au début, soit dit des messages de bienvenue. Sur ce coup là, je pense qu'un script dans le OnSpawn du PNJ fera très bien l'affaire. À la fin de ce script, on commence les enchères...
Je vois Pas trop l'intérêt d'un message de bienvenue, mais au besoin, ça se rajoute.


Black Knight a écrit :
-3 : Pour faire classe, on pourrait mettre sur la table, l'objet qui est a enchérir (comme ça, les joueurs peuvent l'examiner sans se faire avoir). À ce moment la, tu laisse 10 secondes pour que les joueurs puissent avoir le temps d'examiner l'objet.
C'est pas bête, mais ça complique énormement non ? Il faut qu'ils ne puissent pas le prendre.


Black Knight a écrit :
-4 : Bon alors là, j'te déconseil de mettre 3 secondes à chaque fois ... On est sur un jeu, faut prendre le temps d'écrire et de pas faire de faute Very Happy Bon, moi je me dis qu'il faut ça :
*Si le joueur dit "+X", alors on dit qu'il veut rajouter X po à l'enchère
*Si le joueur dit "/X", alors on dit qu'il veut que l'enchère soit à X po (ce n'est pas un rajout)
Tout ça sera stocker dans une variable. Le problème c'est que à chaque fois, faut faire des recherches, de tous les PJs, etc... donc c'est facile et chiant en même temps. Faudrait que pour plus de facilité, la local soit sur le joueur.
Ca, c'est technique XD. Le fait d'augmenter l'enchère en écrivant la somme n'est pas une mauvaise idée, mais pourquoi dire à combien on veut que l'enchère soit ? c'est pas au pj de décider de ça Smile. Je préfère rester sur ce que j'ai dit, on prend le prix de l'objet, et on le divise par deux pour avoir son prix de départ.


Black Knight a écrit :
-5 : Après chaque augmentation de l'enchère, on laisse 10 secondes. Quand ça arrive à 5 secondes on fait un message qui dit "1 fois, 2 fois" etc...

Problème : Les secondes et moi ... la le truc, c'est qui faut STOPPER le delay si un joueur augmente l'enchère ! Et c'est ici que ça devient très compliqué ! J'vois pas réellement comment faire pour stopper le delay, le remettre à 10 etc...
Ca peut poser problème, c'est sûr. C'est pour ça que je pensais faire une vérification toutes les 3 secondes plutôt. comme ça, il n'y a pas besoin de l'arrêter. Si au bout de 3 secondes, aucune enchère n'a été faite, on commence le "1 fois", sinon on réattend. etc.


Black Knight a écrit :
-6 : Aussi compliqué. Le joueur gagne l'enchère, donc, gagne l'item ... pour moi j'aurais dit que c'est simple, j'ai un blacksmith qui utilise cette méthode, on drop l'item à terre, on en fait une copy dans l'inventaire du joueur, et toc, celui qui est par terre disparait. Simple. Dur : faire en sorte que les items soient déposés ET PAS PERDU LORS D'UN CRASH ! Et la ... je ne vois que NWNX et je ne l'utilise pas Embarassed
Pourquoi le dropper à terre dans ce cas là ? CreateItemOnObject, et y a pas à s'embêter Smile.


Black Knight a écrit :
-7 : on détruit toutes les variables, et on refait comme si le pnj avait spawn.
Oui.


Black Knight a écrit :
Je vais voir pour commencer, mais faut trouver une solution au problème de l'item à stocker.
Merci de ton aide Smile Bon courage.
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 19/08/2007 17:57:10 Sujet du message :

Bein j'ai mis dans le INC une variable que tu peux changer pour dire le minimum de joueur... t'auras juste à mettre à 1.

Bein tu mets des barrières des trucs comme ça ... au pire, on fait pas Embarassed

Pour les enchères, j'ai fait ça (dans le debut que j'ai fait ^^) :

On prend la valeur de l'item. Ensuite, les joueurs modifient cette valeur, mais de plus en plus haut. J'ai trouvé un système pour faire simple. Je mettrais la plus haute valeur en local sur l'objet avec le nom du mec, et ça sera très simple.

Pour les secondes j'avais pas compris comme ça. Mais effectivement ça peux le faire.

Non, pour le drop ... héhé tu te ferais avoir aussi. Enfin tu te ferais avoir ... moi c'est des items modifiés par la suite donc ... Non parce que CreateItemOnObject crée enfaite l'objet de reference qu'on lui indique. Or si l'item est modifié quand il est par terre... et qu'on dit de créer un objet avec reference, celui-ci n'aura plus les propriétées qu'on a mit en plus. Mais c'est vrai que on est pas dans mon module, alors ça fera surement l'affaire Razz

J'viens de trouver comment faire la liste des objets: Faut les mettres dans une zone, avec un objet invisible (pour faire l'analyse). Je met chaque objet dans une local nommé "Item_Choose_x" par exemple (où X est un nombre de 1 à Y (Y = nombre d'item à terre)). Ensuite, on fait un random entre 1 et Y, et on repère qu'elle est l'item "Item_Choose_Random" Very Happy
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 19/08/2007 22:41:41 Sujet du message :

Effectivement, le coup des objets dans une zone (qui sera la même, dans un coin inaccessible, je pense), ça peut être pas mal, bonne idée ^^. Pour les items à visualiser, c'est à toi de voir, si ça pose un problème, il suffira de ne pas le faire.

J'ai pas de grandes connaissances en variables. Le système de la phrase, "les objets mis en vente sont...", tu as une idée pour qu'il donne les noms des objets en question ?

Merci de ton aide ^^.
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 19/08/2007 23:31:53 Sujet du message :

Oui c'est déjà fait Embarassed je verrais pour continuer un peu demain
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 21/08/2007 17:45:53 Sujet du message :

Je laisse de côté le temps que tu fasses tes bidouillages à toi (si je pars sur une autre façon de faire, ça va être dur après), je reprendrais dès que tu auras fini Smile

merci à toi ^^
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 05/09/2007 11:02:06 Sujet du message :

Bon ben je relance hein Very Happy
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
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 32.443ms