Aide pour créer un système de commerce dans mon jeu

Bonjour bonjour

comme le titre du topic l’indique, j’ai sévèrement besoin d’aide pour inclure dans mon jeu un système monétaire (minimaliste : une monnaie, pas de centimes, que des pièces, etc, bref : An écu is a kind of thing et basta) ainsi qu’un système commercial.

Déjà, j’ai de grosses lacunes en syntaxe informienne, car je ne sais même pas comment faire pour que le joueur puisse donner X pièces à un PNJ (ni l’inverse). Et je ne trouve pas, dans le manuel :frowning:

Je pensais à un truc simple du genre par exemple :

[code]A thing has a number called price.

Instead of buying something (called S):
let P be the price of S;
say « Vous payez [P] écus. »;
move S to player;
… et là , comment je retranche les P écus de l’inventaire du joueur ???[/code]

j’avais fait un truc comme ça ici ifiction.free.fr/concours2006/sa … source.txt

l’argent s’appelle klitt ou glutt, mais je n’avais sans doute pas prévu tous les cas de figure possibles.

Merci Otto, je trouverai sans doute dans ton code, des choses qui m’aideront par ailleurs, mais en fait ça ne répond pas à ma question fondamentale (au delà de l’objet " monnaie ") : comment faire pour donner X objets du même type à un PNJ , ou qu’un PNJ donne X objets du même type au joueur ?

si le joueur porte 5 bananes, comment dire au jeu : " transfère ces 5 bananes du player au pnj trucmuche " ?

Ok, il semblerait que ce que je veuille faire, soit tout simplement impossible.

Je pense qu’il y a d’autres solutions. Tu n’est pas obligé de créer des écus physiques, mais ce serait plutôt une variable que tu pourrais afficher dans la barre en haut par exemple.

[code]The player has a number called money. A thing has a number called price.

Instead of buying something (called S):
decrease the money of the player by the price of S;
etc.[/code]
Comme ça, il n’y a pas de limites d’argent. Parce que si tu créé 100 pièces dès le départ, ça prend beaucoup de mémoire et une fois que le joueur a dépensé toutes ces pièces, elles se retrouvent où ? Hors du jeu ? Elles prennent de la place inutililement, alors.

Par contre, j’ai quand même trouvé une solution avec de vrais écus:

[code]A thing has a number called price.

Instead of buying something (called S):
let P be the price of S;
say « Vous payez [P] écus. »;
move S to player;
repeat with x running from 1 to P:
let C be a random écu carried by the player;
remove C from play[/code]
Ce que ça fait, ça choisi une pièce au hasard dans l’inventaire du joueur (on s’en fiche laquelle, puisque elles sont toutes pareilles), l’enlève du jeu, et ça le refait autant de fois que le prix de l’objet acheté (une boucle for, quoi). Comme ça, Inform ne se demande pas « which 3 coins? », puisque c’est du hasard.

Ca m’a l’air bien, ça, je vais essayer :slight_smile: merci beaucoup

hummm en fait je me retrouve avec ça :

J’ai inséré le code à peu près tel quel :

[code]A marchand is a kind of man.
An échoppe is a kind of room.

EchoppeOmarBjärn is an échoppe. It is southwest from ForêtKohnstla. « [line break]Sous une simple tenture, une table est posée, derrière laquelle [bold type]Omar Bjärn[roman type] vend des bananes. ».

Omar Bjärn is a marchand. Omar Bjärn is in EchoppeOmarBjärn.

50 bananes are in EchoppeOmarBjärn.

A thing has a number called price.

The price of a banane is 2.

Instead of buying something (called S) :
let P be the price of S;
say « Vous payez [P] écus. »;
move S to player;
repeat with x running from 1 to P:
let C be a random écu carried by the player;
remove C from play.[/code]

Ça me l’avait fait aussi, j’aurais dû préciser. En fait il faut que tu indentes les deux dernières lignes (un coup de tab) pour qu’inform comprenne qu’elles font partie du repeat et pas du instead of.
Normalement, ça devrait marcher.

Je ne savais pas que la mise en forme du texte avait une réelle incidence, tiens … merci encore !

Hum … désolé, mais en fait … j’ai toujours le même message d’erreur … :blush:

Bien, à force de tâtonner voilà un truc qui fonctionne

A marchand is a kind of man.
An échoppe is a kind of room.

EchoppeOmarBjärn is an échoppe. It is southwest from Champs. « [line break]Sous une simple tenture, une table est posée, derrière laquelle [bold type]Omar Bjärn[roman type] vend des bananes. ».

Omar Bjärn is a marchand. Omar Bjärn is in EchoppeOmarBjärn. Omar Bjärn carries a torche.

A banane is a kind of fruit.

A goyave is a kind of fruit.

50 bananes are in EchoppeOmarBjärn.

10 goyaves are in EchoppeOmarBjärn.

A thing has a number called price.

The price of a banane is 2.
The price of a goyave is 20.

Instead of buying something (called S) :
let P be the price of S;
say « Vous payez [P] écus pour [if S is male]un[otherwise if S is female]une[end if] [the printed name of S]. »;
move S to player;
repeat with x running from 1 to P
begin;
let C be a random écu carried by the player;
let M be a random marchand in the location of the player;
move C to M;
end repeat.

désolé de monologuer !

par contre là j’ai un nouveau problème qui se pose : quand le joueur veut acheter un objet d’un type qu’il possède déjà (exemple, il a une gourde dans son inventaire, mais veut en acheter une deuxième, à vendre chez un marchand) , le jeu ne " comprend " pas de lui même qu’il achète … la gourde qu’il n’a pas sur lui ! :cry:

hmm, je pense que ce n’est pas possible de base. Faudrait sans doute faire une fonction spéciale pour ça. Je pense que dans la doc il y a des exemples de ce type.