Repository navigation
FR Creer Drapeaux Variables Evenements
English · Explication · Publiée, relue par une personne · S'applique depuis : 4.3.0
Un drapeau (flag) est un état : la porte est ouverte. Un événement est un moment : la cloche vient de sonner. quest'n'click n'a pas de « variable » à part : un drapeau contient une valeur (un booléen, un nombre ou une chaîne), si bien qu'un compteur ou un choix est aussi un drapeau. Cette page dit ce qu'est chacun, ce que le moteur en garde, et comment choisir.
Public, contexte, et statuts de ce sur quoi repose la page
Public : auteur · Contexte : dépôt du moteur, projet créé
Un drapeau est une valeur nommée dans la sauvegarde (GameState.flags), posée par des commandes et lue par des
conditions :
| Écrire | Lire |
|---|---|
{ set: 'door_open' } (vrai) |
'door_open', '!door_open'
|
{ set: ['guess', 'grandpa'] } (une chaîne), { set: ['tries', 3] } (un nombre) |
{ flag: 'guess', eq: 'grandpa' }, { flag: 'tries', gte: 3 }, { flag: 'tries', lt: 3 }
|
{ inc: 'tries' }, { inc: 'tries', by: -1 } (un drapeau absent ou non numérique compte à partir de 0) |
pareil |
{ unset: 'door_open' } (retiré : faux, absent) |
Un drapeau reste jusqu'à ce que quelque chose le change ; une sauvegarde le garde, un chargement le restaure. On nomme
les drapeaux comme on veut ; le validateur prévient d'un drapeau lu et jamais posé, ou posé et jamais lu. Un mini-jeu
qui dit comment il s'est terminé écrit le drapeau réservé minigame.<id> (4.1.16). Un texte peut afficher la valeur
d'un drapeau par un aiguillage de texte, {form?gull=e|*=} (traductions).
Un événement est un nom déclenché par { emit: 'bell_rang' }. Sur-le-champ, dans l'ordre, il fait avancer chaque
script en pause sur { waitEvent: 'bell_rang' }, puis lance les écouteurs de la salle courante, puis ceux du jeu
(scripts et événements) :
// market.ts, dans une règle : { gain: 'key' }, { emit: 'key_found' }
// game.ts :
events: [
{ id: 'grandpa.goes-home', on: 'key_found', once: true, do: [{ moveActor: ['grandpa', 'house'] }, { toast: 'Papi est rentré.' }] },
],if et once marchent comme sur une règle. Un événement n'est pas retenu : une fois ses écouteurs passés, il
n'en reste rien, sauf ce qu'ils ont changé (et, pour un écouteur once, la marque qu'il s'est déclenché). Un écouteur
d'une salle où le joueur n'est pas ne l'entend pas.
D'autres parties de l'état répondent à « est-ce arrivé ? » sans drapeau : l'état d'un accessoire
({ prop: ['lamp', 'on'] }), l'inventaire ({ has }), une salle visitée ({ visited }), l'endroit où se trouve un
personnage mobile ({ actorIn }), un sujet entendu ({ seen }), le compte d'un bloc once, nth, cycle ou
random.
| Vous voulez | Prenez |
|---|---|
| Retenir qu'une chose est arrivée, et le tester plus tard (salle suivante, partie suivante) | un drapeau : { set: 'x' }, puis 'x'
|
| Un compteur (essais, pièces, un prix qui baisse) | un drapeau numérique : { inc }, { flag, gte/lt }
|
| Un choix parmi plusieurs (le pari du joueur, le héros choisi) | un drapeau texte : { set: ['guess', 'grandpa'] }, { flag, eq }
|
| Quelque chose qui se voit (une lampe allumée, un tiroir ouvert) | un état d'accessoire, pas un drapeau : l'image et la condition restent une seule chose |
| Que plusieurs endroits réagissent maintenant à un même moment, sans que chaque règle connaisse les autres | un événement : { emit } et des écouteurs |
| Un script qui attend un moment (la cuisinière vient quand le gong sonne) | un événement : { waitEvent }
|
| Un script qui attend un état | un drapeau ou n'importe quelle condition : { waitUntil: COND }
|
| Une chose dite seulement la première fois |
{ once: […], id }, sans drapeau |
| Une salle qui réagit plus tard à un événement arrivé ailleurs | l'écouteur pose un drapeau ; le onEnter de la salle le teste |
La dernière ligne est le schéma habituel : un événement n'est pas retenu, donc pour réagir la prochaine fois que le
joueur entre dans une salle, posez un drapeau dans l'écouteur et testez-le dans onEnter.
events: [{ id: 'bell.heard', on: 'bell_rang', do: [{ set: 'bell_rang_once' }] }],
// hall.ts
onEnter: [{ if: 'bell_rang_once', then: [{ say: ['butler', 'Vous avez sonné ?'] }] }],- Des variables typées à côté des drapeaux. Un second stockage, c'est une chose de plus à sauvegarder, à migrer, à montrer dans le panneau DEV et à expliquer ; un drapeau qui contient une valeur couvre compteurs et choix.
- Des événements retenus (un journal de moments que les conditions pourraient interroger). Les conditions dépendraient alors de l'historique, et les états du solveur grossiraient avec lui. Un drapeau posé par un écouteur dit exactement ce qui mérite d'être retenu.
- Du code dans les écouteurs. Les écouteurs sont des données, comme les règles : le validateur, le solveur et la sauvegarde les comprennent (principes).
- Chaque drapeau que voit le solveur fait partie de l'état qu'il explore : un drapeau que personne n'a besoin de lire
ralentit les preuves.
npm run lintetvalidatedésignent les drapeaux jamais lus. -
{ flag, lt }est vrai pour un drapeau absent : testez d'abordgte, ou posez le drapeau au départ (start.flagsdansgame.ts), quand absent doit vouloir dire « zéro essai ». - Renommer un drapeau casse les anciennes sauvegardes, sauf si une migration le renomme aussi
(
migrations: [{ from, renameFlag }], état et sauvegardes).
Limite ·
event-not-rememberedUn événement déclenché pendant que la condition d'un écouteur est fausse, ou dans une salle dont les écouteurs ne sont pas concernés, est perdu pour cet écouteur : rien ne le rejoue plus tard. Prenez un drapeau pour tout ce qui doit durer.
- ADR 0002, le contenu est une donnée : écouteurs et drapeaux sont des données que lisent les outils.
- ADR 0003, le solveur fait tourner le vrai moteur : chaque drapeau fait partie de l'état qu'il explore.
- Références : commandes, logique, conditions, scripts et événements, la référence du DSL, générée.
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.5.4 r2, documentation revision · révision de la documentation 63112c877c587cc4fad16b25a3400408db2c36bd.
Latest documentation · dernière documentation: https://quest-n-click.cleverapps.io/docs · https://quest-n-click.cleverapps.io/fr/docs; earlier versions · versions précédentes: each release's quest-n-click-docs-<version>.tar.gz · l'archive quest-n-click-docs-<version>.tar.gz de chaque release, https://github.com/Quest-n-Click/quest-n-click/releases
An edit made in this wiki is overwritten at the next publication · une modification faite dans ce wiki est écrasée à la publication suivante.
Edit the source · Modifier la source · Report an error · Signaler une erreur
Index (6)
Démarrer (6)
Jouer (9)
Installer (18)
- Prérequis
- Installer depuis l'archive de la release
- Installer depuis npm
- Installer depuis le dépôt pour travailler sur le moteur
- doctor : vérifier sa machine
- Outils pour les images
- Outils audio : ffmpeg, fluidsynth, Furnace, uv
- Mettre à jour
- Notes de mise à jour : 4.5
- Notes de mise à jour : 4.4
- Notes de mise à jour : 4.3
- Notes de mise à jour : 4.2
- Notes de mise à jour : 4.1
- Notes de mise à jour : v3
- Notes de mise à jour : v2 vers v3
- Venir de web-scumm
- Référence du paquet
- Dépannage de l'installation
Créer un jeu (55)
- Votre premier jeu
- Organisation d'un projet créé et du dépôt du moteur
- La boucle de travail
- Principes du contenu et contrat d'identité
- Salles
- Géométrie : placement, zones de marche, masques, calques, caméra
- Un objet est visible mais inaccessible
- Réactions
- Commandes du jeu
- Conditions
- Drapeaux, variables et événements : lequel choisir
- Code sur mesure
- Personnages
- Objets et inventaire
- Carte du monde
- Dialogues
- Scripts et événements
- Faire bouger les personnages : patrouilles et marches
- Sorties
- Chapitres et objectifs
- État et sauvegardes : persistant ou temporaire, renommer un id, migrations
- Mise en scène : salles larges et animations
- La scène : lumières, particules, sols
- Habillage et polices
- Titre et générique
- Héros : plusieurs personnages et choix du héros
- Mini-jeux intégrés
- Un mini-jeu sur mesure
- Traductions
- Musique en stems
- Bruitages
- Voix : par langue et par héros
- Images : prompts, découpe des planches, transparence, échelle
- Provenance des assets
- Le storyboard, source de vérité
- Concevoir des énigmes
- Mécaniques classiques
- Pages de relecture
- Référence du DSL
- Vérifier son jeu
- Ce que prouve le solveur
- Options du solveur
- Playtests
- Remix
- Speedrun pour les auteurs
- La fin scellée
- Modèle de production
- Jeux d'exemple
- Travailler avec une IA
- Construire et publier un jeu
- Publier sur GitHub Pages
- Le jeu statique sur Clever Cloud
- Autres hébergeurs statiques
- Sous-chemin, cache et service worker, déploiement incomplet, retour arrière
- Tester sur un téléphone en réseau local
Studio local (24)
- Le Studio local : présentation et lancement
- Modifier une salle
- Placement et scène
- Aperçu, application, annulation
- Storyboard
- Assets et découpe
- Vérifier : validateur, solveur, chemin critique, chaleur, santé, couverture
- Captures avant et après
- Diff sémantique
- Jouer et rejouer une session
- Explication des règles
- Langue et objectifs
- Voix et matrice héros × langues
- Carte
- Notes
- Remix dans le Studio
- Musique
- L'Assistant : votre propre clé
- Mode démo et studio-apply
- Sécurité en local et en réseau local
- API du Studio
- MCP local : configurer chaque client
- Outils MCP
- Dépannage du Studio
Studio d'équipe (21)
- Ce qui tourne où
- Concepts : révision, transaction, pan, bail, aperçu, build
- Débuter comme dev invité
- Travailler ensemble au quotidien
- Rôles et actions : la matrice complète
- Invitations
- Gérer les membres
- Écriture refusée sur le Studio hébergé : révision de base périmée (409)
- Écriture refusée sur le Studio hébergé : pan verrouillé (423)
- Reprendre après un bail perdu, une déconnexion ou un aperçu périmé
- Commentaires
- Carte et diff sémantique
- Publier des builds
- MCP distant
- Le jeu dans Git
- Mettre à jour le moteur d'un jeu hébergé
- Assets hébergés
- La ligne de commande du serveur
- Routes de santé et de métriques
- L'essayer en local avec compose.yml
- Limites connues
Clever Cloud (23)
- Clever Cloud : vue d'ensemble, coût et prérequis
- Applications et add-ons
- Domaines et TLS
- Keycloak
- OIDC générique et GitLab
- Configuration
- Premier déploiement
- Sauvegardes
- RPO et RTO
- Exercice de restauration sur une installation vierge
- Redéploiements
- Mettre à jour le serveur et vérifier l'état après une migration
- Limites du retour arrière
- Supervision
- Sécurité
- Renouveler les clés
- Récupérer l'accès administrateur
- Changer de domaine ou de fournisseur OIDC
- Worker, PostgreSQL ou Cellar en panne
- Exporter le jeu et quitter l'installation
- Rétention
- Dépannage sur Clever Cloud
- Coûts et démontage
Reality Bridge et connecteurs (16)
- Le Reality Bridge : ce que c'est
- Démarrage rapide
- Garanties
- Installer et lancer le Bridge
- Sauvegarde et restauration
- Plusieurs tenants
- Signaux et manifeste
- La ligne de commande du Bridge
- Vue d'ensemble des connecteurs
- Connecteur email
- Connecteur Telnet
- Connecteur SSH
- Connecteur Open Badges
- Le SDK des connecteurs
- Sécurité : Biscuit et signatures
- Dépannage du Bridge et des connecteurs
Contribuer (25)
- Bienvenue
- Préparer son poste de développement
- La boucle de développement
- Avant une pull request
- Conventions
- Écrire la documentation
- Architecture
- Visite du code
- Frontières d'import
- Quels tests tournent quand
- Tests de mutation
- Le cliquet de couverture
- La référence de qualité
- La CI expliquée
- Passes de terrain
- Mesures de performance
- Publier une release
- Paquets npm
- Décisions et ADR
- Gouvernance
- Pull requests des bots
- Contribuer avec des agents IA
- Politique de sécurité
- Code de conduite
- Licences et crédits