====== Règles (avant / après / remplacer) ======
Une **règle** est une [[reference:routines:start|routine]] déclenchée par une action — soit **avant** que l’action s’exécute (pour la conditionner ou la bloquer), soit **après** (pour ajouter une réaction), soit **à la place de** l’action pour la réécrire entièrement. Contrairement à une [[reference:routines:action:start|action personnalisée]], une règle ne crée pas de nouveau verbe : elle vient se greffer sur un verbe existant pour en modifier le comportement.
===== Les trois types =====
* [[reference:routines:regle:avant|Règle avant]] — exécutée **avant** l’action. Peut empêcher l’action via ''refuser "msg"'' ou ''refuser l’action''.
* [[reference:routines:regle:apres|Règle après]] — exécutée **après** l’action. Remplace par défaut la sortie standard ; on peut la réintroduire avec ''continuer l’action avant'' ou ''continuer l’action après''.
* [[reference:routines:regle:remplacer|Règle remplacer]] — **écrase intégralement** une action existante (phases, balises, etc.).
===== Syntaxe générale =====
règle avant :
-- instructions
fin règle
règle après :
-- instructions
fin règle
règle remplacer :
-- phases qui remplacent intégralement l’action d’origine
fin règle
Les trois variantes se ferment par ''fin règle''.
===== Déclencheurs =====
==== Une action ciblée sur un objet précis ====
règle avant prendre la pomme:
si la pomme est pourrie:
refuser "Cette pomme est pourrie.".
fin si
fin règle
==== Plusieurs actions combinées (« ou ») ====
La même règle réagit à plusieurs actions :
règle après donner l’anneau au roi, donner l’anneau au prince ou donner l’anneau à la reine:
dire "<< Grâce à vous le royaume est sauvé ! >>".
fin règle
==== Une classe d’objets (générique) ====
Pour appliquer la règle à **tous** les objets d’un type, utilisez l’article indéfini :
règle après parler à un chien:
dire "<< Wouf ! >>".
fin règle
Cette règle se déclenche pour //n’importe quel chien// présent dans la partie.
==== Un déplacement (lieu ou direction) ====
Une règle sur ''aller'' peut cibler le **lieu de destination** ou la **direction** empruntée :
règle après aller dans le jardin:
dire "Vous voilà dans le jardin.".
fin règle
règle après aller vers le nord:
dire "Vous progressez vers le nord.".
fin règle
Les deux formes se déclenchent quelle que soit la commande tapée par le joueur (''aller au nord'', ''nord'', ''n''…). Si une règle « lieu » et une règle « direction » correspondent au même déplacement, les deux se déclenchent. Voir aussi les cibles ''origine'', ''destination'' et ''orientation'' des [[reference:texte:balises_dynamiques#cibles_speciales|balises dynamiques]].
==== Au démarrage du jeu ====
règle avant commencer le jeu:
changer le joueur possède la lampe.
changer la porte n’est plus verrouillée.
dire "Une voix vous murmure : << Bienvenue dans le labyrinthe… >>".
fin règle
===== Tester si la règle s’est déjà déclenchée =====
si la règle se déclenche pour la première fois:
...
sinonsi la règle se déclenche pour la deuxième fois:
...
sinon
...
fin si
-- Forme négative
si la règle ne se déclenche pas pour la première fois:
dire "Encore ?".
fin si
Pratique pour afficher une cinématique uniquement à la première rencontre, puis se contenter du texte standard ensuite. Voir un exemple complet sur [[reference:routines:regle:apres|Règle après]].
**À ne pas confondre avec la [[reference:routines:action:start|phase prérequis]] d’une action personnalisée.** Si vous écrivez **votre** action, mettez les conditions de blocage dans ''phase prérequis''. Si vous voulez intercepter une action **existante** (''prendre'', ''aller'', ''examiner'', …) sans la réécrire, utilisez une règle avant.
===== Voir aussi =====
* [[reference:routines:regle:avant|Règle avant — détails]]
* [[reference:routines:regle:apres|Règle après — détails]]
* [[reference:routines:regle:remplacer|Règle remplacer — détails]]
* [[reference:routines:action:start|Actions personnalisées]] — créer un nouveau verbe (à distinguer)
* [[reference:routines:start|Routines]] — vue d’ensemble (action / règle / réaction / routine simple)
{{tag>règle regle règles regles avant après apres remplacer déclencheur declencheur refuser continuer commencer_le_jeu intercepter routine routines}}