I7 - Instead of doing anything except...

Bonjour,

Dans mon jeu j’ai une aide à plusieurs volets et j’ai défini une scène pour l’afficher. Pourquoi pas ?
Pendant que cette scène se déroule, j’ai évidemment envie d’éviter que le joueur fasse autre chose que regarder l’aide.
J’ai donc codé ceci :

Instead of going to any room during Affichage Aide:
	say "Un peu de patience, l'aide est en train de s'afficher.";

Ça marche mais ce n’est pas assez restrictif. Je voudrais que seul le fait d’appuyer sur la touche « Entrée » ( pour afficher le volet suivant ) soit accepté.

Pouvez-vous aider ? Merci d’avance.

Si on ne peut qu’appuyer sur entrée, alors autant désactiver la commande et attendre une touche avec l’extension Basic Screen Effects à la place ? Et tu n’aurais plus besoin de scène parce que tout se ferait en un seul tour.

Si tu veux vraiment n’autoriser que la touche entrée, alors il faut utiliser ce code avec Basic Screen Effects :

let touche be 0; while touche is not -6: now touche is the chosen letter;

La chosen letter met le jeu en pause et attend que le joueur appuie sur une touche. Elle renvoie un nombre qui est le code de la touche pressée. -6 est le code de la touche entrée.

Pour savoir quel est le code d’une touche, il suffit d’écrire « say « [the chosen letter] » ».

Si tu veux vraiment garder l’invite de commande, alors il vaut sûrement mieux utiliser une règle after reading a command plutôt qu’une instead.

After reading a command when ma scène is happening: if the player's command matches the text "azerty": [Afficher la suite de l'aide]; else: reject the player's command.

Ou « azerty » est n’importe quelle commande qui remplace une commande vide quand on utilise l’extension Empty Command Handling.

Bonjour, Natrium.

Merci pour ta réponse mais « After reading a command » ne semble pas marcher deux fois de suite. Je m’explique :

Le volet d’aide qui correspond à ma petite scène est le numéro 5 dans le menu. J’ai codé ça;

Rule for repairing an empty command: change the text of the player's command to "suite".

Et ça :
Et ça :

Carry out warning:
	let N be the number understood;
	if N is not 5:
		choose the row N in Table of Messages;
		now Serror is the MESSAGE entry;
		say "[Serror][line break]";
	else:
		now AdventureID is 7;
		now Frame is 0;
		say "[bold type]Tapez sur la touche [quotation mark]Entrée[quotation mark] pour afficher l[apostrophe]aide sur le combat.[roman type][line break]";
		now the command prompt is ">>";
When Affichage Aide begins:
	Display Help;
	
To Display Help:
	increase Frame by 1;		
	if Frame is:
		-- 1:
			choose the row 5 in Table of Messages;
			now Serror is the MESSAGE entry;
			say "[Serror][line break]";
		-- 2: try warning 8;
		-- 3: try warning 9;
		-- 4:
			try warning 10;
			now AdventureID is 0;
			
When Affichage Aide ends:
	now the command prompt is ">";
	
After reading a command when Affichage Aide is happening:
	showme player's command;
	if the player's command matches the text "suite":
		Display Help;
	else:
		say "Un peu de patience, l'aide est en train de s'afficher.";

Et encore ça:

Every turn during Affichage Aide:
	Display Help;		

Et quand j’affiche l’aide numéro 5 ça se passe bien la première fois mais pas la seconde :

>>5
Tapez sur la touche "Entrée" pour afficher l'aide sur le combat.

>>
[Scene 'Affichage Aide' begins]
A la base les combats se déroulent automatiquement mais de manière aléatoire, et leur issue n'est jamais certaine : le personnage du joueur peut très bien être tué. A chaque tour il y a un échange de coups suivant les règles de "Donjons & Dragons". Pendant l'échange vous infligez à votre adversaire des dommages qui diminuent ses points de vie tandis qu'il fait de même pour vous, et le combat se termine par la mort du personnage du joueur ou de son adversaire, ou encore par la fuite de celui-ci. 
Vous pouvez passer d'un échange à l'autre en utilisant les commandes ATTAQUER, COMBATTRE, FRAPPER, G ou SUITE, ou simplement en tapant sur la touche "Entrée".

D'autres commandes sont disponibles et vous permettent d'influencer cette logique par défaut. Mais elles ont un prix ; pendant l'échange, seule l'attaque de votre adversaire s'exécute. Ce sont :

- BOTTER, UTILISER PIED ou UTILISER PIEDS.
- ESQUIVER, CONTRER ou PARER.
- UTILISER ( Une arme ).

Les commandes BOTTER, UTILISER PIED ( ou PIEDS ) vous permettent de donner un coup de pied à votre adversaire.
Elles sont disponibles à tout moment pendant un combat, même si vous ne portez pas d'armes.

>>
"player's command" = snippet: suite
Parfois, au cours d'un combat vous préférez adopter une posture plus défensive. C'est là qu'interviennent les commandes PARER, CONTRER et ESQUIVER.
Quand vous les utilisez vous tombez en garde au début du tour et vous attendez l'attaque de votre adversaire. Si votre parade réussit, vous récupérez un nombre de points de vie pouvant aller jusqu'à compenser entièrement les dommages que vous venez de subir.

Au fur et à mesure que vous avancez dans le jeu vous pouvez constater que les armes ne sont pas toutes équivalentes. Aussi la commande UTILISER vous permet de changer d'arme au cours d'un combat, à la condition, bien entendu, que l'objet correspondant soit présent dans la salle.

[Scene 'Affichage Aide' ends]
>
Quelques instants passent.

>aide

A quel sujet voulez-vous de l'aide ?

1 - Introduction
2 - Se déplacer
3 - L'invite de commande
4 - Commandes valides
5 - Combats
6 - Situations ambigües
7 - Si vous ne savez pas quoi faire

>>5
Tapez sur la touche "Entrée" pour afficher l'aide sur le combat.

>>
>>
>>

L’insolite étrangeté de cette curieuse bizarrerie me plonge dans la perplexité. Et tu remarqueras que la scène « Affichage Aide » ne redémarre pas correctement…

J’ai pas tout compris de ce que tu as écrit…

Je pense tout de même qu’il y avait une petite erreur de ma part : il faudrait sûrement rejeter la commande dans tous les cas.

After reading a command when ma scène is happening: if the player's command matches the text "suite": [Afficher la suite de l'aide]; else: [Dire le message d'erreur.] reject the player's command.

Mais dans ce cas-ci, les scènes ne passeront plus parce que les tours seront bloqués. Il faudra alors remplacer la scène par un bête compteur et changer la condition dans la règle. (Je pense qu’une scène, c’est un peu trop pour un cas comme ça, de toute façon.)

Sinon, si tu veux vraiment garder une règle instead (mais ça aura le défaut de pouvoir interférer avec d’autres règles instead) :

Instead of doing anything other than asking for help:

Où asking for help est l’action qui affiche la suite.

Désolé si je te donne des pistes en vrac, mais je ne suis pas sûr de bien comprendre comment ton truc fonctionne. (Pour être honnête, je trouve que ça a l’air un peu trop tarabiscoté pour la situation.)

Merci, Natrium :smiley: . , j’ai la solution. Et au cas où ça intéresserait quelqu’un j’ai fait tout petit truc de démo :

"Ask For Help" by Thierry

Include Empty Command Handling by Daniel Stelzer.

Rule for repairing an empty command: change the text of the player's command to "suite". 

Frame is a number variable.
Frame is 0.

[-------------------------------------------------------------------------------------------------]
	
Loafing is an action applying to nothing.
Understand "suite" as loafing.

Carry out loafing:
	increase frame by 1;
	if Aide is happening:
		Help;
	else:
		say "Quelques instants passent.";

[-------------------------------------------------------------------------------------------------]

Instead of doing anything except loafing when Aide is happening:
	say "Zut";
	
[-------------------------------------------------------------------------------------------------]

To Help:
	say "Page [Frame] de l'aide.";
	
[-------------------------------------------------------------------------------------------------]
	
Cuisine is a room.

Salon is a room. It is south of Cuisine.

Aide is a scene.
Aide begins when Frame is 3.
Aide ends when Frame is 7.