====== Règle « remplacer » ====== Une **règle remplacer** **écrase intégralement** une action existante : description, phases (''prérequis'', ''exécution'', ''épilogue''), balises d’aide… Tout le bloc d’origine est remplacé par le vôtre. C’est l’outil à utiliser quand on veut **réécrire** une action (souvent une [[reference:routines:actions_predefinies:start|action de base]] héritée du moteur) plutôt que de simplement la conditionner ([[reference:routines:regle:avant|règle avant]]) ou y ajouter une réaction ([[reference:routines:regle:apres|règle après]]). ===== Syntaxe ===== règle remplacer : -- phases qui remplacent intégralement l’action d’origine fin règle Le bloc se ferme par ''fin règle'' — c’est bien une règle qui s’applique sur une action. Le mot ''action'' après ''remplacer'' est **facultatif**. Les deux formes sont équivalentes : règle remplacer sauter: -- forme courte règle remplacer action sauter: -- forme explicite ===== Correspondance par signature ===== Une règle remplacer ne touche **que** l’action dont la **signature** correspond exactement. La signature combine : * **l’infinitif** (''sauter'', ''examiner'', ''ouvrir''…) * **l’arité** : sans complément / avec ''ceci'' / avec ''ceci'' et ''cela'' * **les prépositions** (''sauter sur ceci'', ''mettre ceci dans cela''…) * **le type** de ''ceci'' et ''cela'' donné dans ''définitions:'' (''objet'', ''lieu'', ''direction'', ''personne'', ''vivant''…) Si une seule de ces dimensions diffère, l’action **n’est pas remplacée**. Les **épithètes** (''visible'', ''vu'', ''accessible'') et la **priorité** (''prioritairement…'') ne participent **pas** à l’identification. Recopiez-les tout de même dans votre bloc remplaçant : comme le remplacement est total, ces critères sont aussi remplacés ; si vous les omettez, le résolveur de commandes peut ne plus sélectionner votre version au profit d’une autre action concurrente. ==== Exemple 1 — signature simple (sans complément) ==== Le belvédère est un lieu. Le joueur se trouve dans le belvédère. règle remplacer sauter: phase épilogue: dire "Vous bondissez sur place. Quelle vue !". fin règle [[djnc>wiki_regles_remplacer_sauter|tester cet exemple]] — testez avec la commande ''sauter''. ==== Exemple 2 — l’arité compte (sauter ≠ sauter sur ceci) ==== ''sauter'' et ''sauter sur ceci'' sont deux signatures distinctes. Une règle qui cible l’une **ne touche pas** l’autre. Le belvédère est un lieu. Le joueur se trouve dans le belvédère. Le banc est un support ici. règle remplacer sauter: phase épilogue: dire "Vous bondissez sur place.". fin règle règle remplacer sauter sur ceci: phase épilogue: dire "Vous voilà perché sur [le ceci].". fin règle [[djnc>wiki_regles_remplacer_sauter_sur|tester cet exemple]] — essayez ''sauter'' puis ''sauter sur le banc''. ==== Exemple 3 — désambiguïsation par ''définitions'' ==== Plusieurs actions du moteur partagent le même infinitif et la même arité, mais ciblent des **types** différents. Le fichier ''actions.djn'' définit par exemple quatre ''examiner ceci'' (direction, lieu, objet, spécial). Pour cibler la bonne version, reproduisez le bloc ''définitions'' de la version visée : règle remplacer examiner ceci: définitions: ceci est un objet prioritairement visible et mentionné. phase épilogue: dire "Rien d’intéressant à signaler sur [le ceci].". fin règle Si plusieurs actions correspondent sans pouvoir être désambiguïsées → erreur de compilation. Si aucune n’est trouvée → avertissement non bloquant dans l’éditeur et création d’une nouvelle action. ==== Exemple 4 — deux compléments hétérogènes ==== Le salon est un lieu. Le joueur se trouve dans le salon. La gemme est un objet ici. L’elfe est un vivant ici. règle remplacer montrer ceci à cela: définitions: ceci est un objet. cela est un vivant. phase épilogue: dire "[Intitulé cela] examine [le ceci] avec curiosité.". fin règle [[djnc>wiki_regles_remplacer_montrer|tester cet exemple]] — essayez ''montrer la gemme à l’elfe''. ===== Une seule règle remplacer par action ===== Deux blocs ''règle remplacer'' qui ciblent la **même** signature sont refusés par le compilateur — une seule règle de remplacement est autorisée par action. De même, deux blocs ''action :'' identiques sont refusés ; le compilateur invite alors à utiliser ''règle remplacer''. ===== Voir aussi ===== * [[reference:routines:regle:start|Règles (avant / après / remplacer) — index]] * [[reference:routines:regle:avant|Règle avant]] — pour conditionner ou bloquer * [[reference:routines:regle:apres|Règle après]] — pour ajouter une réaction * [[reference:routines:action:start|Actions personnalisées]] — créer un nouveau verbe (à distinguer) * [[reference:routines:actions_predefinies:start|Actions de base]] — la liste des actions du moteur