diff --git a/changelog.md b/changelog.md index 544646c3..01b080d1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,17 +1,17 @@ # 12.0 ## 12.0.34 - la tête d'Astrobazzarh -- on peut ajouter des liens "jet de dés" dans les journaux texte -- on peut ajouter des liens "jet de dés" dans les descriptions, notes, ... -- les liens "jet de dés" peuvent être utilisés pour un acteur, ou les items de l'acteurs -- les liens "jet avec caractéristiques" s'appliquent: - - à tous les tokens sélectionnés - - sinon, à l'acteur propriétaire d'un Item - - sinon, au personnage du joueur +- support de liens "jets de dés" + - on peut ajouter des liens "jet de dés" dans les journaux, descriptions, notes, maladresses, ... + - avec la syntaxe `@roll[...]` on peut ajouter le lien vers: + - un jet de caractéristique/compétence `@roll[carac/competence/difficulte]` / `@roll[carac/difficulte]` / `@roll[carac/competence]` + - une formule foundry `@roll[2d6]` pour lancer 2d6 + - une manipulation alchimique `@roll[couleur vert-bleu]` + - les liens "jet avec caractéristiques" s'appliquent: + - à tous les tokens sélectionnés + - sinon, à l'acteur propriétaire (dans le cas d'un Item) ou à l'acteur courant + - sinon, au personnage du joueur + - on peut poster les liens dans le tchat pour proposer un jet aux joueurs - gestion des blocs secrets dans les descriptions -- on peut ajouter des liens "jet de dés" pour appeler une formule dés de foundry -- les liens "manipulation alchimiques" peuvent être dans les descriptions, notes, ... -- les "manipulation alchimiques" fonctionnent comme tous les autres jets -- on peut poster les liens "jet de dés" dans le tchat et les utiliser depuis le tchat ## 12.0.33 - la vieillesse d'Astrobazzarh - retour de l'expérience pour les joueurs diff --git a/module/apps/rdd-text-roll-editor.js b/module/apps/rdd-text-roll-editor.js index 4ab58bd4..1cadfbfa 100644 --- a/module/apps/rdd-text-roll-editor.js +++ b/module/apps/rdd-text-roll-editor.js @@ -12,10 +12,14 @@ const TEXT_ROLL_MANAGERS = [ new TextRollFormula()]; export class RdDTextEditor { + static registerChatCallbacks(html) { + html.on("click", '.roll-text', async event => await RdDTextEditor.rollText(event)) + } - static async enrichHTML(text, object) { + static async enrichHTML(text, object, options = {}) { const context = { text, object, + options, competences: await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage), } @@ -59,14 +63,16 @@ export class RdDTextEditor { const param = node.data('json') const manager = TEXT_ROLL_MANAGERS.find(it => it.code == code) - const text = await TextRollManager.createRollText(manager.template, - param, false) + const text = await TextRollManager.createRollText( + { + code, + template: manager.template, + options: { showLink: false } + }, + param) ChatMessage.create({ content: text }) } } - static registerChatCallbacks(html) { - html.find('.roll-text').click(async event => await RdDTextEditor.rollText(event)) - } } \ No newline at end of file diff --git a/module/apps/textroll/text-roll-alchimie.js b/module/apps/textroll/text-roll-alchimie.js index 4f96a47e..2e6ff20f 100644 --- a/module/apps/textroll/text-roll-alchimie.js +++ b/module/apps/textroll/text-roll-alchimie.js @@ -67,7 +67,7 @@ class AlchimieTextBuilder { const carac = RdDCarac.caracDetails(RdDAlchimie.getCaracTache(manip)) const diff = RdDAlchimie.getDifficulte(termes) const recette = (this.context.object instanceof Item && this.context.object.type == ITEM_TYPES.recettealchimique) ? this.context.object : undefined - const replacement = await TextRollManager.createRollText(this.context.template, + const replacement = await TextRollManager.createRollText(this.context, { code: this.context.code, manip, termes, carac, diff, recetteid: recette?.id, diff --git a/module/apps/textroll/text-roll-carac-competence.js b/module/apps/textroll/text-roll-carac-competence.js index dc91300e..1f0f23c2 100644 --- a/module/apps/textroll/text-roll-carac-competence.js +++ b/module/apps/textroll/text-roll-carac-competence.js @@ -74,7 +74,7 @@ class CaracCompetenceTextBuilder { const carac = RdDCarac.caracDetails(rollMatch.carac) if (carac) { const competence = rollMatch.competence ? RdDItemCompetence.findCompetence(this.context.competences, rollMatch.competence) : undefined - const replacement = await TextRollManager.createRollText(this.context.template, + const replacement = await TextRollManager.createRollText(this.context, { code: this.context.code, carac: carac, diff --git a/module/apps/textroll/text-roll-formatter.js b/module/apps/textroll/text-roll-formatter.js index 40b6bbd9..7e0dbc05 100644 --- a/module/apps/textroll/text-roll-formatter.js +++ b/module/apps/textroll/text-roll-formatter.js @@ -1,11 +1,10 @@ export class TextRollManager { - static async createRollText(template, param, showLink = true) { - return await renderTemplate(template, { - param: param, - options: { showlink: showLink } - }) + static async createRollText(context, param) { + return await renderTemplate(context.template, { + param, options: context.options + }) } static getNode(event) { diff --git a/module/apps/textroll/text-roll-formula.js b/module/apps/textroll/text-roll-formula.js index 416777c1..5b025024 100644 --- a/module/apps/textroll/text-roll-formula.js +++ b/module/apps/textroll/text-roll-formula.js @@ -40,7 +40,7 @@ class FormulaTextBuilder { async replaceMatch(rollMatch, i) { if (rollMatch.formula) { - const replacement = await TextRollManager.createRollText(this.context.template, + const replacement = await TextRollManager.createRollText(this.context, { code: this.context.code, formula: rollMatch.formula, diff --git a/module/item/signedraconique.js b/module/item/signedraconique.js index 42c34498..f37063a0 100644 --- a/module/item/signedraconique.js +++ b/module/item/signedraconique.js @@ -106,7 +106,7 @@ export class RdDItemSigneDraconique extends RdDItem { } static async randomSigneDescription() { - return await RdDRollTables.drawTextFromRollTable("Signes draconiques", false); + return await RdDRollTables.drawTextFromRollTable("Signes draconiques", {toChat:false}); } } \ No newline at end of file diff --git a/module/rdd-combat.js b/module/rdd-combat.js index fc3d9409..dc4a6035 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -472,15 +472,15 @@ export class RdDCombat { /* -------------------------------------------- */ static registerChatCallbacks(html) { for (let button of [ - '#parer-button', - '#esquiver-button', - '#particuliere-attaque', - '#encaisser-button', - '#appel-chance-defense', - '#appel-destinee-defense', - '#appel-chance-attaque', - '#appel-destinee-attaque', - '#echec-total-attaque', + '.parer-button', + '.esquiver-button', + '.particuliere-attaque', + '.encaisser-button', + '.appel-chance-defense', + '.appel-destinee-defense', + '.appel-chance-attaque', + '.appel-destinee-attaque', + '.echec-total-attaque', ]) { html.on("click", button, event => { const rddCombat = RdDCombat.rddCombatForAttackerAndDefender( @@ -539,22 +539,22 @@ export class RdDCombat { const compId = event.currentTarget.attributes['data-compid']?.value; switch (button) { - case '#particuliere-attaque': return await this.choixParticuliere(attackerRoll, event.currentTarget.attributes['data-mode'].value); - case '#parer-button': return this.parade(attackerRoll, armeParadeId); - case '#esquiver-button': return this.esquive(attackerRoll, compId, competence); - case '#encaisser-button': return this.encaisser(attackerRoll, defenderRoll); - case '#echec-total-attaque': return this._onEchecTotal(attackerRoll); + case '.particuliere-attaque': return await this.choixParticuliere(attackerRoll, event.currentTarget.attributes['data-mode'].value); + case '.parer-button': return this.parade(attackerRoll, armeParadeId); + case '.esquiver-button': return this.esquive(attackerRoll, compId, competence); + case '0encaisser-button': return this.encaisser(attackerRoll, defenderRoll); + case '.echec-total-attaque': return this._onEchecTotal(attackerRoll); - case '#appel-chance-attaque': return this.attacker.rollAppelChance( + case '.appel-chance-attaque': return this.attacker.rollAppelChance( () => this.attaqueChanceuse(attackerRoll), () => this._onEchecTotal(attackerRoll)); - case '#appel-chance-defense': return this.defender.rollAppelChance( + case '.appel-chance-defense': return this.defender.rollAppelChance( () => this.defenseChanceuse(attackerRoll, defenderRoll), () => this.afficherOptionsDefense(attackerRoll, defenderRoll, { defenseChance: true })); - case '#appel-destinee-attaque': return this.attacker.appelDestinee( + case '.appel-destinee-attaque': return this.attacker.appelDestinee( () => this.attaqueSignificative(attackerRoll), () => { }); - case '#appel-destinee-defense': return this.defender.appelDestinee( + case '.appel-destinee-defense': return this.defender.appelDestinee( () => this.defenseDestinee(defenderRoll), () => { }); } @@ -967,7 +967,6 @@ export class RdDCombat { async _onAttaqueEchec(rollData) { console.log("RdDCombat.onAttaqueEchec >>>", rollData); await RdDResolutionTable.displayRollData(rollData, this.attacker, 'chat-resultat-attaque.html'); - } /* -------------------------------------------- */ diff --git a/module/rdd-rolltables.js b/module/rdd-rolltables.js index a80e94d5..16e74554 100644 --- a/module/rdd-rolltables.js +++ b/module/rdd-rolltables.js @@ -1,3 +1,4 @@ +import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js"; import { CompendiumTable, CompendiumTableHelpers, SystemCompendiums } from "./settings/system-compendiums.js"; export class RdDRollTables { @@ -28,8 +29,8 @@ export class RdDRollTables { } /* -------------------------------------------- */ - static async drawTextFromRollTable(tableName, toChat) { - const drawResult = await RdDRollTables.genericGetTableResult(tableName, toChat); + static async drawTextFromRollTable(tableName, options = {}) { + const drawResult = await RdDRollTables.genericGetTableResult(tableName, options.toChat); return drawResult.text; } @@ -101,9 +102,10 @@ export class RdDRollTables { /* -------------------------------------------- */ static async getMaladresse(options = { toChat: false, arme: false }) { - return await RdDRollTables.drawTextFromRollTable( + const maladresse = await RdDRollTables.drawTextFromRollTable( options.arme ? "Maladresse armé" : "Maladresses non armé", - options.toChat); + options); + return await RdDTextEditor.enrichHTML(maladresse, undefined, {showLink:false}) } } diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 66090cfa..7d6aff52 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -699,7 +699,6 @@ export class RdDUtility { RdDCoeur.registerChatCallbacks(html) RdDTextEditor.registerChatCallbacks(html) - // Gestion spécifique message passeurs html.on("click", '.tmr-passeur-coord a', event => { let coord = event.currentTarget.attributes['data-tmr-coord'].value; diff --git a/packs_src/sorts-hypnos/sort_D_rision_7q0zFbBhxYdf6OZ2.yml b/packs_src/sorts-hypnos/sort_D_rision_7q0zFbBhxYdf6OZ2.yml index ea0c5bc8..9beab6ca 100644 --- a/packs_src/sorts-hypnos/sort_D_rision_7q0zFbBhxYdf6OZ2.yml +++ b/packs_src/sorts-hypnos/sort_D_rision_7q0zFbBhxYdf6OZ2.yml @@ -19,7 +19,7 @@ system:
Si un personnage ainsi rendu dérisoire participe à un combat, il peut tenter une fois par round de lancer une plaisanterie en guise d’attaque (tout en esquivant/parant normalement). Il joue pour cela @roll[APPARENCE/Comédie] - à -@roll[1d4] (ce d4 résume les conditions ponctuelles plus ou moins propices, et + à @roll[-1d4] (ce d4 résume les conditions ponctuelles plus ou moins propices, et il est en fait soustrait du bonus de +4 conféré par le sort). Puis selon la réussite, on obtient un ajustement :
diff --git a/packs_src/tables-diverses/tables_Maladresse_arm__pXYVWRlCftWdwsBP.yml b/packs_src/tables-diverses/tables_Maladresse_arm__pXYVWRlCftWdwsBP.yml index d7b9deb2..b6dcd07f 100644 --- a/packs_src/tables-diverses/tables_Maladresse_arm__pXYVWRlCftWdwsBP.yml +++ b/packs_src/tables-diverses/tables_Maladresse_arm__pXYVWRlCftWdwsBP.yml @@ -22,9 +22,9 @@ results: flags: {} type: text text: >- - Ami bousculé : Le compagnon bousculé doit réussir - @roll[Empathie/Vigilance] à - -@roll[1d6] ou être en demi-surprise jusqu’à la fin du round suivant. + Ami bousculé : Le compagnon bousculé doit réussir + @roll[Empathie/Vigilance] à @roll[-1d6] ou être en + demi-surprise jusqu’à la fin du round suivant. img: icons/svg/d20-black.svg weight: 1 range: @@ -40,7 +40,7 @@ results: - _id: APqyDePFzBaROB6i flags: {} type: text - text: 'Chute : Encaissement à -1d6 sur la table des Coups non mortels.' + text: 'Chute : Encaissement à @roll[-1d6] sur la table des Coups non mortels.' img: icons/svg/d20-black.svg weight: 1 range: @@ -73,7 +73,7 @@ results: flags: {} type: text text: >- - Arme choquée : L’arme utilisée joue un jet de Résistance à -@roll[2d6] et perd ce + Arme choquée : L’arme utilisée joue un jet de Résistance à @roll[-2d6] et perd ce nombre de points de résistance en cas d’échec. img: icons/svg/d20-black.svg weight: 1 @@ -91,7 +91,7 @@ results: flags: {} type: text text: >- - Déséquilibré : Réussir Agilité/Vigilance à -@roll[1d6] ou être en demi-surprise + Déséquilibré : Réussir @roll[Agilité/Vigilance] à @roll[-1d6] ou être en demi-surprise jusqu’à la fin du round suivant. img: icons/svg/d20-black.svg weight: 1 @@ -125,7 +125,7 @@ results: flags: {} type: text text: >- - Déséquilibré : Réussir Agilité/Vigilance à -@roll[1d6] ou être en demi-surprise + Déséquilibré : Réussir @roll[Agilité/Vigilance] à @roll[-1d6] ou être en demi-surprise jusqu’à la fin du round suivant. img: icons/svg/d20-black.svg weight: 1 @@ -143,7 +143,7 @@ results: flags: {} type: text text: >- - Arme choquée : L’arme utilisée joue un jet de Résistance à -@roll[2d6] et perd ce + Arme choquée : L’arme utilisée joue un jet de Résistance à @roll[-2d6] et perd ce nombre de points de résistance en cas d’échec. img: icons/svg/d20-black.svg weight: 1 @@ -176,7 +176,7 @@ results: - _id: c61AFRaP9poCmr9B flags: {} type: text - text: 'Chute : Encaissement à -1d6 sur la table des Coups non mortels.' + text: 'Chute : Encaissement à @roll[-1d6] sur la table des Coups non mortels.' img: icons/svg/d20-black.svg weight: 1 range: @@ -194,8 +194,8 @@ results: type: text text: >- Ami bousculé : Le compagnon bousculé doit réussir - @roll[Empathie/Vigilance] à - -@roll[1d6] ou être en demi-surprise jusqu’à la fin du round suivant. + @roll[Empathie/Vigilance] à @roll[-1d6] ou être en + demi-surprise jusqu’à la fin du round suivant. img: icons/svg/d20-black.svg weight: 1 range: diff --git a/packs_src/tables-diverses/tables_Maladresses_non_arm__7Py520wVyrjAgS9j.yml b/packs_src/tables-diverses/tables_Maladresses_non_arm__7Py520wVyrjAgS9j.yml index 0d458b14..4e5efc79 100644 --- a/packs_src/tables-diverses/tables_Maladresses_non_arm__7Py520wVyrjAgS9j.yml +++ b/packs_src/tables-diverses/tables_Maladresses_non_arm__7Py520wVyrjAgS9j.yml @@ -22,8 +22,9 @@ results: flags: {} type: text text: >- - Ami bousculé : Le compagnon bousculé doit réussir Empathie/Vigilance à - -1d6 ou être en demi-surprise jusqu’à la fin du round suivant. + Ami bousculé : Le compagnon bousculé doit réussir + @roll[Empathie/Vigilance] à @roll[-1d6] ou être en + demi-surprise jusqu’à la fin du round suivant. img: icons/svg/d20-black.svg weight: 1 range: @@ -39,7 +40,7 @@ results: - _id: 1DtaMqWygL8BjZjw flags: {} type: text - text: 'Chute : Encaissement à -1d6 sur la table des Coups non mortels.' + text: 'Chute : Encaissement à @roll[-1d6] sur la table des Coups non mortels.' img: icons/svg/d20-black.svg weight: 1 range: @@ -56,7 +57,8 @@ results: flags: {} type: text text: >- - Déséquilibré : Réussir Agilité/Vigilance à -1d6 ou être en demi-surprise + Déséquilibré : Réussir @roll[Agilité/Vigilance] + à @roll[-1d6] ou être en demi-surprise jusqu’à la fin du round suivant. img: icons/svg/d20-black.svg weight: 1 @@ -73,7 +75,7 @@ results: - _id: kyAKakRIPGKr6Gdy flags: {} type: text - text: 'Faux mouvement : Perte de 2d6 points d’endurance.' + text: 'Faux mouvement : Perte de @roll[2d6] points d’endurance.' img: icons/svg/d20-black.svg weight: 1 range: @@ -90,7 +92,8 @@ results: flags: {} type: text text: >- - Déséquilibré : Réussir Agilité/Vigilance à -1d6 ou être en demi-surprise + Déséquilibré : Réussir @roll[Agilité/Vigilance] + à @roll[-1d6] ou être en demi-surprise jusqu’à la fin du round suivant. img: icons/svg/d20-black.svg weight: 1 @@ -107,7 +110,7 @@ results: - _id: NY1uI3k3YbJKQddk flags: {} type: text - text: 'Chute : Encaissement à -1d6 sur la table des Coups non mortels.' + text: 'Chute : Encaissement à @roll[-1d6] sur la table des Coups non mortels.' img: icons/svg/d20-black.svg weight: 1 range: @@ -124,8 +127,9 @@ results: flags: {} type: text text: >- - Ami bousculé : Le compagnon bousculé doit réussir Empathie/Vigilance à - -1d6 ou être en demi-surprise jusqu’à la fin du round suivant. + Ami bousculé : Le compagnon bousculé doit réussir + @roll[Empathie/Vigilance] à @roll[-1d6] ou être en + demi-surprise jusqu’à la fin du round suivant. img: icons/svg/d20-black.svg weight: 1 range: diff --git a/templates/apps/textroll/link-text-roll-alchimie.hbs b/templates/apps/textroll/link-text-roll-alchimie.hbs index 05aeaf4d..929a9f30 100644 --- a/templates/apps/textroll/link-text-roll-alchimie.hbs +++ b/templates/apps/textroll/link-text-roll-alchimie.hbs @@ -3,12 +3,11 @@ data-json="{{json-stringify param}}" data-manip="{{param.manip}}" data-termes="{{param.termes}}" - {{#if recetteid}}data-recetteid="{{param.recetteid}}"{{/if}} -> + {{#if recetteid}}data-recetteid="{{param.recetteid}}"{{/if}}> {{~param.manip}} {{param.termes~}} -{{#if options.showlink}} +{{~#if options.showlink}} -{{/if}} +{{/if~}} diff --git a/templates/apps/textroll/link-text-roll-carac-competence.hbs b/templates/apps/textroll/link-text-roll-carac-competence.hbs index acdc67dc..af0528c8 100644 --- a/templates/apps/textroll/link-text-roll-carac-competence.hbs +++ b/templates/apps/textroll/link-text-roll-carac-competence.hbs @@ -3,13 +3,12 @@ data-json="{{json-stringify param}}" data-carac-code="{{param.carac.code}}" {{#if competence}}data-competence="{{param.competence}}"{{/if~}} - {{#if diff}}data-diff="{{param.diff}}"{{/if~}} -> + {{#if diff}}data-diff="{{param.diff}}"{{/if~}}> {{~uppercase param.carac.label~}} {{#if param.competence}} / {{upperFirst param.competence}}{{/if~}} {{#if param.diff}} à {{param.diff}}{{/if~}} -{{#if options.showlink}} +{{~#if options.showlink}} -{{/if}} +{{/if~}} diff --git a/templates/apps/textroll/link-text-roll-formula.hbs b/templates/apps/textroll/link-text-roll-formula.hbs index bb8b0cf5..35adcb41 100644 --- a/templates/apps/textroll/link-text-roll-formula.hbs +++ b/templates/apps/textroll/link-text-roll-formula.hbs @@ -1,10 +1,9 @@ + data-roll-formula="{{param.formula}}"> {{~param.formula~}} -{{#if options.showlink}} +{{~#if options.showlink}} -{{/if}} +{{/if~}} diff --git a/templates/chat-demande-attaque-etotal.html b/templates/chat-demande-attaque-etotal.html index c72007d7..2364ddc5 100644 --- a/templates/chat-demande-attaque-etotal.html +++ b/templates/chat-demande-attaque-etotal.html @@ -3,21 +3,21 @@