## ╔══════════════════════════════════════════════════════════════════╗ ## ║ SHOWCASE JDR-BOT — Tutoriel syntaxe .txt ║ ## ║ ║ ## ║ Version .txt du scénario showcase.yaml ║ ## ║ Comparez les deux fichiers pour voir les différences. ║ ## ║ ║ ## ║ En .txt, les commentaires ## sont sur leur propre ligne. ║ ## ║ Ils sont ignorés par le bot au parsing. ║ ## ╚══════════════════════════════════════════════════════════════════╝ ## LIGNE 1 — TITRE ## Peut contenir des variables online (v_nom_o_v) ## ⚠️ | est interdit dans le titre → utiliser · ou — ## Options après | : rafraichir§emoji, inventaire§emoji, precedent§emoji, v_nom_v§emoji, id_salle§emoji 🎓 Showcase JDR-Bot · v4.7 · (v_nbparties_o_v parties jouées)|rafraichir§🔄|inventaire§🎒|precedent§↩️|v_score_v§⭐|accueil§🏠 ## LIGNE 2 — Nombre de salles + mode markdown (fix, none, null) ## La salle de départ est TOUJOURS la salle 1 (pas ce nombre). ## fix = bloc code monospace | none = texte brut 23 fix ## ════════════════════════════════════════════ ## SALLE 1 — ACCUEIL & NAVIGATION ## ════════════════════════════════════════════ ## L1 : [numéro] [nom_interne]§[emoji label du bouton] ## Pas de *** avant la première salle ! 1 accueil§🏠 Accueil ## L2 : Texte affiché (ou null) ## +n+ = saut de ligne | [[texte]] = bloc markdown Discord | **gras** ## v_nom_v = variable numérique | t_nom_t = variable textuelle **🎓 Bienvenue dans le Showcase JDR-Bot !**+n+Bonjour t_nomjoueur_t ! Score actuel : v_score_v ⭐+n++n+Choisissez une démonstration : ## L3 : Variables et objets (ou | si rien — OBLIGATOIRE même vide !) ## Format variable : nom|variable|=valeur|null|Description ## Plusieurs variables sur UNE SEULE ligne, séparées par | ## ⚠️ Jamais de _ dans le nom sauf suffixe _o score|variable|=0|null|Score du joueur|pv|variable|=10|null|Points de vie|pvmax|variable|=10|null|PV maximum|force|variable|=3|null|Force|chance|variable|=5|null|Chance|desresultat|variable|=0|null|Résultat du dé|compteur|variable|=0|null|Compteur de passages|combinaison|variable_t|rien|null|Ingrédient en attente|nomjoueur|variable_t|Aventurier|null|Nom du joueur ## L4+ : Sorties, alias locaux (mot->salle), événements 997, actions ## Alias local : mot->numéro (sans condition supplémentaire) 1->2 2->3 3->5 3g->6 4->10 5->11 6->12 7->16 8->17 ## "aide" fonctionne déjà sans alias (c'est le nom interne de la salle 2). ## Pas de §label ici → pas de bouton Discord pour "aide" depuis l'accueil. ******************* ## SALLE 2 — AIDE ## Accessible uniquement en tapant "aide" (pas de bouton §) ## Le mot "precedent" seul sur une ligne active le retour arrière 2 aide **💡 Comment naviguer dans ce showcase ?**+n++n+Tapez un numéro ou cliquez un bouton pour avancer.+n+Pour interagir : tapez le verbe directement (ex: prendre clé)+n+Sur Discord : commandes slash dédiées (/prendre, /examiner, /jeter)+n+ou /action pour les verbes personnalisés (/action combiner cristal)+n+Le bouton ↩️ retourne à la salle précédente.+n+Le bouton 🏠 retourne à l'accueil depuis n'importe où. | precedent ******************* ## ════════════════════════════════════════════ ## SALLE 3 — OBJETS & INVENTAIRE ## ════════════════════════════════════════════ ## L1 : §label = label du bouton Discord associé à cette salle 3 demo_objets§📦 Objets & Inventaire ## L2 : texte affiché **📦 Démonstration — Objets & Inventaire**+n++n+Une table trône au centre. Sur le sol, une clé brille.+n+Un vieux coffre contient des pièces d'or — examinez-le et prenez une pièce à la fois. (Le coffre se vide progressivement, mais vous ne pouvez porter qu'une pièce.)+n+prendre [objet] · examiner [objet] · jeter [objet]+n+(Discord : /prendre · /examiner · /jeter) ## L3 : déclaration des objets de la salle ## Format objet sur meuble : nom|endroit|desc_endroit§react_meuble|msg_ramassage§react_prise|description§react_objet ## Format objet invisible : nom|invisible|null|msg_ramassage|description ## Retirer un objet : -nom|invisible|null|msg_retrait|description ## ── Objets multiples sur le même meuble ── ## Déclarer le même nom plusieurs fois sur le même endroit sur UNE SEULE ligne L3 : ## à chaque prise le slot suivant devient actif → desc_endroit change. ## Idéal pour simuler une pile, un stock qui diminue, etc. grimoire|table|Une vieille table en bois. Un grimoire poussiéreux y est posé.§🪑 Examiner la table|Vous prenez le grimoire sur la table.§📖 Prendre le grimoire|Un vieux grimoire aux pages jaunies, couvert de formules alchimiques.§🔎 Examiner le grimoire|cle|invisible|null|Vous ramassez la clé.|Une petite clé en argent.|-vieillepotion|invisible|null|null|null|piece|coffre|Un vieux coffre. Il contient trois pièces d'or !§💰 Examiner le coffre|Vous prenez une pièce. Il en reste deux.§🪙 Prendre une pièce|Une pièce d'or étincelante.|piece|coffre|Un vieux coffre. Il reste deux pièces d'or.|Vous prenez une pièce. Il en reste une.|Une pièce d'or étincelante.|piece|coffre|Un vieux coffre. Il reste une dernière pièce.|Vous prenez la dernière pièce. Le coffre est vide.|Une pièce d'or étincelante.|coffreVide|coffre|Le coffre est complètement vide. Mais... un double fond ?|Vous découvrez le compartiment secret !|Un compartiment secret ! Vous y trouvez un parchemin. ## Pas d'actions personnalisées ici — prendre/examiner/jeter sont des commandes de base. 997|cle v_compteur_v.>.2|score.+.5|🗝️ Vous avez la clé ET visité 3 fois — bonus +5 score ! 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 4 — ACTIONS PERSONNALISÉES & CRAFT ## ════════════════════════════════════════════ 4 demo_actions§⚙️ Actions personnalisées **⚙️ Démonstration — Actions personnalisées**+n++n+Un alambic attend sur l'établi.+n+Des ingrédients sont disponibles : herbe, cristal.+n+prendre [herbe / cristal] · combiner [ingrédient] · aller [destination]+n+(Discord : /prendre · /action combiner · /action aller)+n+"aller" est une action globale — fonctionne dans toutes les salles ! ## L3 : objets disponibles dans cette salle herbe|établi|null|Vous prenez l'herbe.§🌿 Prendre l'herbe|Herbe verte aux propriétés magiques.|cristal|établi|null|Vous prenez le cristal.§💎 Prendre le cristal|Un cristal bleu translucide. ## Craft : variable_t comme slot temporaire ## t_action_cible_t = dernière cible tapée (valide ou non) ## t_action_cible_ok_t = dernière cible valide prendre:herbe|-herbe|herbe&&inventaire&&null|Vous prenez l'herbe.|Vous avez déjà l'herbe. prendre:cristal|-cristal|cristal&&inventaire&&null|Vous prenez le cristal.|Vous avez déjà le cristal. examiner:herbe|null|null|Une herbe aux vertus apaisantes. Idéale comme premier ingrédient.|null examiner:cristal|null|null|Le cristal vibre légèrement. Il amplifie les potions.|null examiner:alambic|null|null|L'alambic central. Utilisez 'combiner [ingrédient]' pour créer des potions.|null ## Même verbe/cible, conditions différentes → première condition vraie gagne combiner:herbe|herbe t_combinaison_t.=.rien|-herbe&&inventaire&&null@@combinaison&&variable_t&&herbe&&En attente du cristal|🌿 L'herbe entre dans l'alambic. Ajoutez maintenant : combiner cristal|Vous n'avez pas d'herbe. combiner:cristal|cristal t_combinaison_t.=.herbe|-cristal&&inventaire&&null@@combinaison&&variable_t&&rien&&null@@potion&&inventaire&&Potion verte scintillante (+5 PV)@@score.+.10|💚 L'alambic s'illumine ! Potion créée ! (+10 score)|Vous n'avez pas de cristal. ## Fallback action:all combiner:all|null|null|«t_action_cible_t» n'est pas un ingrédient connu. Essayez : herbe, cristal.|null ## Action avec bouton attaché : verbe:cible|§emoji texte|condition|action|ok|ko utiliser:potion|§💚 Utiliser la potion|potion|-potion&&inventaire&&null@@pv.+.5@@score.+.5|Vous buvez la potion. +5 PV, +5 score ! (PV : v_pv_v/v_pvmax_v)|Vous n'avez pas de potion. 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 5 — ÉVÉNEMENTS AUTOMATIQUES & ALÉATOIRE ## ════════════════════════════════════════════ 5 demo_events§🎲 Événements & Aléatoire **🎲 Démonstration — Événements automatiques & Aléatoire**+n++n+À l'entrée, un dé est lancé automatiquement.+n+Résultat du dernier lancer : v_desresultat_v 🎲+n+(0 à la première visite — le tirage s'affiche à la prochaine entrée)+n++n+Cliquez sur un bouton pour voir d'autres exemples. ## L3 : %=X:Y tire un entier aléatoire entre X et Y à l'entrée de la salle ## Variables comme bornes : %=v_force_v:v_pvmax_v desresultat|variable|%=1:6|null|Résultat du dé|chance|variable|%=v_force_v:v_pvmax_v|null|Chance recalculée ## 997 séquentiels — chaque face du dé ## ⚠️ CRITIQUE : comportement séquentiel — chaque 997 voit les valeurs ## modifiées par les précédents. Un 997 qui redirige stoppe les suivants. 997|v_desresultat_v.=.1|score.+.1|🎲 Face 1 — Malchance ! (+1 score quand même) 997|v_desresultat_v.=.2|score.+.2|🎲 Face 2 — Pas terrible... (+2 score) 997|v_desresultat_v.=.3|score.+.3|🎲 Face 3 — Correct. (+3 score) 997|v_desresultat_v.=.4|score.+.4|🎲 Face 4 — Bien joué ! (+4 score) 997|v_desresultat_v.=.5|score.+.5|🎲 Face 5 — Excellent ! (+5 score) 997|v_desresultat_v.=.6|score.+.10|🎲 Face 6 — CRITIQUE ! Score doublé ! (+10 score) ## Alias locaux pour les boutons relancer->5 globaux->6 loot->7 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 6 — ÉVÉNEMENTS GLOBAUX ## ════════════════════════════════════════════ 6 demo_events_globaux§✨ Événements globaux **✨ Démonstration — Événements globaux**+n++n+Les événements globaux s'exécutent à chaque salle visitée+n+(après les événements locaux par défaut).+n++n+Ici, vous pouvez activer un bonus de +1 score par salle visitée.+n+Une fois activé, naviguez dans d'autres salles pour le voir s'appliquer. | 997|null|event_global:bonus_visite:ON|✨ Bonus global activé ! (+1 score à chaque salle visitée) desactiver->23 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 7 — TABLE DE LOOT PONDÉRÉE ## ════════════════════════════════════════════ ## Table pondérée de redirection : %=salle1:poids1,salle2:poids2,... ## Poids relatifs (pas besoin de totaliser 100). Numéros de salle. 7 demo_loot§🎁 Loot **🎁 Démonstration — Tables de loot pondérées**+n++n+Un coffre mystérieux s'ouvre... desresultat|variable|%=1:6|null|Résultat ## Redirection pondérée : %=numéro_salle:poids,... dans l'action d'un 997 997|null|%=8:60,9:30,10:10|Vous ouvrez le coffre... ******************* ## Salles résultat de loot 8 loot_commun **🪨 Loot Commun**+n+Vous trouvez quelques pièces de cuivre. (+2 score) | 997|null|score.+.2|null relancer_loot->7 1->1 ******************* 9 loot_rare **💎 Loot Rare !**+n+Une gemme bleue scintillante ! (+10 score) | 997|null|score.+.10|null relancer_loot->7 1->1 ******************* 10 loot_legendaire **🌟 LOOT LÉGENDAIRE !!**+n+Un artefact ancien ! Incroyable ! (+50 score) | 997|null|score.+.50|null relancer_loot->7 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 11 — VARIABLES & CONDITIONS AVANCÉES ## ════════════════════════════════════════════ 11 demo_variables§🔢 Variables & Conditions **🔢 Démonstration — Variables & Conditions**+n+Score : v_score_v ⭐ | PV : v_pv_v/v_pvmax_v ❤️+n+Nom : t_nomjoueur_t | Compteur : v_compteur_v+n++n+Les événements ci-dessous s'exécutent automatiquement à l'entrée. ## L3 : incrémenter le compteur à chaque visite compteur|variable|+1|null|Compteur de passages ## Opérateurs de comparaison 997|v_score_v.=.0|null|📊 Score nul — vous débutez ! 997|v_score_v.>.0|null|📊 Score positif : v_score_v points ! 997|v_pv_v.<.v_pvmax_v|null|❤️ Vous n'êtes pas à pleine santé (v_pv_v/v_pvmax_v) 997|v_pv_v.=.v_pvmax_v|null|❤️ Vous êtes à pleine santé ! ## Intervalle .in. (inclus entre 1 et 9) 997|v_score_v.in.1-9|null|⭐ Score entre 1 et 9 — continuez ! ## Intervalle .out. (hors de la plage 1-99) 997|v_score_v.out.1-99|null|🏆 Score hors de la plage 1-99 (≤0 ou ≥100) ! ## Conditions multiples ET : espace entre chaque condition 997|v_compteur_v.>.1 v_score_v.>.0|null|🔁 Vous avez visité plusieurs fois ET avez des points ! ## Condition objet présent / absent 997|grimoire|null|📖 Vous avez le grimoire de la salle Objets ! 997|-grimoire|null|📖 Vous n'avez pas le grimoire (allez en salle Objets pour le prendre). ## Actions multiples enchaînées @@ 997|v_score_v.>.50|pv.+.2@@score.+.5|🌟 Score > 50 ! Bonus : +2 PV et +5 score ! ## Actions personnalisées renommer:all|null|nomjoueur&&variable_t&&t_action_cible_t&&Nom du joueur|Votre nom est maintenant : t_nomjoueur_t|null soigner:all|null|pv.=.v_pvmax_v|❤️ PV restaurés à v_pvmax_v !|null 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 12 — SONS, IMAGES, FORMATAGE ## ════════════════════════════════════════════ 12 demo_media§🔊 Sons, Images, Formatage ## <> lance un son (remplace le son en cours) ## [[texte]] = bloc markdown Discord | **gras** | +n+ saut de ligne **🔊 Démonstration — Sons, Images, Formatage**+n++n+<>+n+Une mélodie apaisante joue. (<> lance un son)+n+🎵 *Musique issue du scénario "Une galerie pour Sulimo" (Virginie Chaillou)*+n++n+[[**📖 Bloc markdown Discord**+n+Ce texte est dans un bloc [[texte]] — affiché en code block.]]+n++n+**Texte en gras** avec markdown natif.+n+Score : v_score_v ⭐ | Joueur : t_nomjoueur_t | 997|null|score.+.3|+3 score pour avoir exploré la salle média ! ## Sons simultanés : <> joue sur le canal N (indépendant des autres canaux) tester:canaux|§🎵 Sons simultanés|null|<<1:https://cyril-fiesta.fr/jdr-bot/scenarios/sounds/sulimo/balade.mp3>><<2:https://cyril-fiesta.fr/jdr-bot/scenarios/sounds/combat/kotor-hit.wav>>Deux sons jouent simultanément sur les canaux 1 et 2 !|null ## <> arrête tous les sons | <> arrête uniquement le canal N stopper:sons|§🔇 Stop tous les sons|null|<>Tous les sons sont arrêtés.|null stopper:canal1|null|null|<>Canal 1 arrêté.|null 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 13 — TIMERS ## ════════════════════════════════════════════ 13 demo_timers§⏱️ Timers **⏱️ Démonstration — Timers**+n++n+Trois types de timers existent :+n++n+1. {.{timer:N}.} (sans les points) — pause visuelle+n+ Bloque le jeu N secondes, puis affiche les choix.+n++n+2. 997|null|nom:durée|salle — timer local (lié à la salle)+n+ Se lance à l'entrée de la salle. Si vous quittez la salle,+n+ il s'annule. Utile pour des compte-à-rebours in-situ.+n++n+3. 997|null|event_global:timer_global:id:ON — timer global+n+ Continue même si vous changez de salle. Déclenche les+n+ événements globaux quand il atteint 0.+n++n+Cliquez un bouton pour tester : | pause->14 local->15 global->17 1->1 ******************* ## Pause visuelle : {{timer:N}} dans le texte — bloque le jeu N secondes 14 demo_timer_block **⏳ Timer block — pause visuelle**+n++n+Le jeu est suspendu pendant 3 secondes...+n+{{timer:3}}+n+Reprise ! La pause visuelle est terminée. | 997|null|score.+.2|+2 score pour votre patience ! retour->13 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 15 — TIMER LOCAL (lié à la salle) ## ════════════════════════════════════════════ ## Format timer local : 997|condition|nom:durée|salle_destination|texte ## Si le joueur quitte la salle, le timer s'annule automatiquement 15 demo_timer_local **⏱️ Timer local — lié à la salle**+n++n+Un timer de 5 secondes démarre à l'entrée de cette salle.+n+Restez ici — si vous partez, il s'annule. | ## Format : 997|condition|nom:durée_secondes|salle_destination|texte 997|null|sablier:5|16|⏱️ Timer 'sablier' lancé — v_sablier_v secondes restantes. global->17 1->1 ******************* 16 timer_local_expire **⏱️ Timer local expiré !**+n++n+Les 5 secondes se sont écoulées sans que vous partiez.+n+(+3 score pour votre patience !) | 997|null|score.+.3@@13|null ******************* ## ════════════════════════════════════════════ ## SALLE 17 — TIMER GLOBAL (survit aux changements de salle) ## ════════════════════════════════════════════ 17 demo_timer_global **🌐 Timer global — survit aux changements de salle**+n++n+Un timer global de 10 secondes est activé.+n+Contrairement au timer local, il continue même si vous+n+naviguez vers d'autres salles !+n++n+Quand il atteint 0, l'événement global "alarme" se déclenche+n+dans la salle où vous serez à ce moment-là.+n++n+Naviguez librement — le timer tourne en fond. | 997|null|timer_global:comptebombe:ON@@event_global:alarme_bombe:ON|🌐 Timer global 'comptebombe' activé — v_comptebombe_v secondes restantes. 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 18 — VARIABLES ONLINE & LEADERBOARD ## ════════════════════════════════════════════ 18 demo_online§🌐 Variables Online **🌐 Démonstration — Variables Online**+n++n+Les variables online persistent entre TOUTES les parties,+n+sur TOUS les serveurs Discord.+n++n+📊 Statistiques globales :+n+• Parties jouées : v_nbparties_o_v+n+• Record de score : v_recordscore_o_v ⭐+n++n+Votre score actuel : v_score_v ⭐ | ## ⚠️ PIÈGE : afficher v_score_v (source), pas v_recordscore_o_v (destination) ## Le texte est évalué AVANT l'action du même 997 → affiche l'ancienne valeur ! 997|v_score_v.>.v_recordscore_o_v|recordscore_o.=.v_score_v|🏆 Nouveau record mondial : v_score_v ⭐ (ancien : v_recordscore_o_v) 997|v_score_v.<=.v_recordscore_o_v|null|📊 Record actuel : v_recordscore_o_v ⭐ — essayez de le battre ! 1->1 ******************* ## ════════════════════════════════════════════ ## SALLE 19 — FINS DE PARTIE ## ════════════════════════════════════════════ 19 demo_fins§🏆 Fins de partie **🏆 Démonstration — Fins de partie**+n++n+Score final : v_score_v ⭐+n++n+Choisissez votre fin : | victoire->20 defaite->21 auto->22 1->1 ******************* 20 fin_victoire <>**🏆 VICTOIRE !**+n+Félicitations t_nomjoueur_t !+n+Score final : v_score_v ⭐+n+Record mondial : v_recordscore_o_v ⭐ | 997|null|recordscore_o.=.v_score_v|null ## 999|texte → fin de partie victoire (équivalent fin: victoire en YAML) 999|🏆 Vous avez terminé le Showcase avec v_score_v points ! ******************* 21 fin_defaite **💀 DÉFAITE**+n+Vous abandonnez t_nomjoueur_t...+n+Score : v_score_v ⭐ | ## 998|texte → fin de partie défaite (équivalent fin: defaite en YAML) 998|💀 Partie terminée. Recommencez pour améliorer votre score ! ******************* 22 fin_auto **🎲 Fin automatique selon votre score...**+n+Score : v_score_v ⭐ | ## Fin conditionnelle : victoire si score > 20, défaite sinon ## ⚠️ Les 997 s'arrêtent au premier qui termine (998/999). 997|v_score_v.>.20|999|🏆 Score suffisant (>20) — Victoire ! 997|null|998|💀 Score insuffisant (≤20) — Défaite ! Score : v_score_v ******************* ## ════════════════════════════════════════════ ## SALLE 23 — DÉSACTIVER ÉVÉNEMENT GLOBAL ## ════════════════════════════════════════════ 23 demo_events_globaux_off **✨ Bonus global désactivé** | 997|null|event_global:bonus_visite:OFF|🚫 Bonus global désactivé. reactiver->6 1->1 ******************* ## Variables online — déclarées APRÈS la dernière *** ## Format : nom_o|valeur_defaut|Description ## ⚠️ Le nom DOIT finir par _o nbparties_o|0|Nombre de parties jouées recordscore_o|0|Meilleur score jamais atteint ## 997 globaux — déclarés après les variables online ## Format : 997|condition|action|texte|id ## id unique permet d'activer/désactiver via event_global:id:ON/OFF/SWITCH ## état initial OFF par défaut 997|null|score.+.1|✨ Bonus visite : +1 score ! (Total : v_score_v)|bonus_visite 997|v_pv_v.<.5|pv.+.2|🚑 Soin d'urgence ! +2 PV (PV : v_pv_v/v_pvmax_v)|soin_urgence 997|v_comptebombe_v.=.0|event_global:alarme_bombe:OFF@@score.+.10@@13|💥 BOOM ! Le timer 'comptebombe' a expiré — où que vous soyez ! (+10 score)|alarme_bombe ## Timers globaux — déclarés après les 997 globaux ## Format : timer_global|id|durée_secondes timer_global|comptebombe|10 ## Aliases globaux — DERNIÈRE ligne du fichier ## Format : nom§emoji texte|nom2§emoji2 texte2 ## ⚠️ Chaque nom doit être unique dans tout le fichier → noms différents par salle relancer§🎲 Relancer le dé|relancer_loot§🔄 Relancer|globaux§✨ Événements globaux|3g§✨ Événements globaux|loot§🎁 Table de loot|pause§⏳ Pause visuelle (3s)|local§⏱️ Timer local (5s)|global§🌐 Timer global (10s)|desactiver§🚫 Désactiver le bonus|reactiver§✨ Réactiver|victoire§🏆 Fin Victoire|defaite§💀 Fin Défaite|auto§🎲 Fin automatique