From 611b57c149ba41c44a2b0228d676030a128559a4 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 12 May 2024 21:58:48 +0200 Subject: [PATCH] Adaptation des encaissement alternatifs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les encaissement alternatifs fonctionnent avec la validation d'encaissement par le MJ. - l'ajout de la difficulté d'attaque au dégâts est indiqué dans les bonus de dégâts - pour les minimums sur les dés d'encaissement, si le MJ remplace le jet, les minimums sont alors ignorés. --- module/rdd-utility.js | 71 ++++++++++--------- templates/dialog-validation-encaissement.html | 31 ++++---- 2 files changed, 55 insertions(+), 47 deletions(-) diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 81bee8bd..374c4cfb 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -549,49 +549,54 @@ export class RdDUtility { /* -------------------------------------------- */ static async jetEncaissement(rollData, armure, options = { showDice: HIDE_DICE }) { - let formula = "2d10"; + const diff = Math.abs(rollData.diffLibre); + let formula = RdDUtility.formuleEncaissement(diff, options) + const roll = await RdDDice.roll(formula, options); - // Chaque dé fait au minmum la difficulté libre - if (ReglesOptionnelles.isUsing('degat-minimum-malus-libre')) { - if (rollData.diffLibre < 0) { - let valeurMin = Math.abs(rollData.diffLibre); - formula += "min" + valeurMin; - } - } - // Chaque dé fait au minmum la difficulté libre - if (ReglesOptionnelles.isUsing('degat-ajout-malus-libre')) { - if (rollData.diffLibre < 0) { - let valeurMin = Math.abs(rollData.diffLibre); - formula += "+" + valeurMin; - } - } - - let roll = await RdDDice.roll(formula, options); - - // 1 dé fait au minmum la difficulté libre - if (ReglesOptionnelles.isUsing('degat-minimum-malus-libre-simple')) { - if (rollData.diffLibre < 0) { - let valeurMin = Math.abs(rollData.diffLibre); - if (roll.terms[0].results[0].result < valeurMin) { - roll.terms[0].results[0].result = valeurMin; - } else if (roll.terms[0].results[1].result < valeurMin) { - roll.terms[0].results[1].result = valeurMin; - } - roll._total = roll.terms[0].results[0].result + roll.terms[0].results[1].result; - } - } + RdDUtility.remplaceDeMinParDifficulte(roll, diff, options); return await RdDUtility.prepareEncaissement(rollData, roll, armure); } + static remplaceDeMinParDifficulte(roll, diff, options) { + if (!ReglesOptionnelles.isUsing('degat-minimum-malus-libre-simple')) { + return + } + // 1 dé fait au minmum la difficulté libre + const total = options.forceDiceResult?.total; + if (total) { + const reste = Math.max(total - diff, 1) + roll.terms[0].number = reste + diff + } + else { + if (roll.terms[0].results[0].result < diff) { + roll.terms[0].results[0].result = diff; + } else if (roll.terms[0].results[1].result < diff) { + roll.terms[0].results[1].result = diff; + } + roll._total = roll.terms[0].results[0].result + roll.terms[0].results[1].result; + } + } + + static formuleEncaissement(diff, options) { + // Chaque dé fait au minimum la difficulté libre + if (ReglesOptionnelles.isUsing('degat-minimum-malus-libre')) { + return `2d10min${diff}` + } + return '2d10' + } + /* -------------------------------------------- */ static async prepareEncaissement(rollData, roll, armure) { - const jetTotal = roll.total + rollData.dmg.total - armure; - let encaissement = RdDUtility._selectEncaissement(jetTotal, rollData.dmg.mortalite); - let over20 = Math.max(jetTotal - 20, 0); + // La difficulté d'ataque s'ajoute aux dégâts + const bonusDegatsDiffLibre = ReglesOptionnelles.isUsing('degat-ajout-malus-libre') ? Math.abs(rollData.diffLibre ?? 0) : 0 + const jetTotal = roll.total + rollData.dmg.total - armure + bonusDegatsDiffLibre + const encaissement = RdDUtility._selectEncaissement(jetTotal, rollData.dmg.mortalite); + const over20 = Math.max(jetTotal - 20, 0); encaissement.dmg = rollData.dmg; encaissement.dmg.loc = rollData.dmg.loc ?? await RdDUtility.getLocalisation(this.type); encaissement.dmg.loc.label = encaissement.dmg.loc.label ?? 'Corps;'; + encaissement.dmg.bonusDegatsDiffLibre = bonusDegatsDiffLibre encaissement.roll = roll; encaissement.armure = armure; encaissement.penetration = rollData.arme?.system.penetration ?? 0; diff --git a/templates/dialog-validation-encaissement.html b/templates/dialog-validation-encaissement.html index ca665620..c8076f84 100644 --- a/templates/dialog-validation-encaissement.html +++ b/templates/dialog-validation-encaissement.html @@ -15,33 +15,36 @@
Armure: {{encaissement.armure}}
- {{#if rollData.dmg.penetration}} -
Pénétration: -{{rollData.dmg.penetration}}
+ {{#if encaissement.dmg.penetration}} +
Pénétration: -{{encaissement.dmg.penetration}}
{{/if}}
{{#if encaissement.dmg.total}} -
+dom encaissement: {{plusMoins rollData.dmg.total}}
+
+dom encaissement: {{plusMoins encaissement.dmg.total}}
{{/if}} - {{#if rollData.dmg.dmgArme}} -
+dom arme: {{plusMoins rollData.dmg.dmgArme}}
+ {{#if encaissement.dmg.dmgArme}} +
+dom arme: {{plusMoins encaissement.dmg.dmgArme}}
{{/if}} - {{#if rollData.dmg.dmgActor}} -
+dom attaquant: {{plusMoins rollData.dmg.dmgActor}}
+ {{#if encaissement.dmg.dmgActor}} +
+dom attaquant: {{plusMoins encaissement.dmg.dmgActor}}
{{/if}} - {{#if rollData.dmg.dmgParticuliere}} -
+dom particulière: {{plusMoins rollData.dmg.dmgParticuliere}}
+ {{#if encaissement.dmg.dmgParticuliere}} +
+dom particulière: {{plusMoins encaissement.dmg.dmgParticuliere}}
{{/if}} - {{#if rollData.dmg.dmgTactique}} -
+dom tactique: {{plusMoins rollData.dmg.dmgTactique}}
+ {{#if encaissement.dmg.dmgTactique}} +
+dom tactique: {{plusMoins encaissement.dmg.dmgTactique}}
{{/if}} - {{#if rollData.dmg.dmgSurprise}} -
+dom surprise: {{plusMoins rollData.dmg.dmgSurprise}}
+ {{#if encaissement.dmg.dmgSurprise}} +
+dom surprise: {{plusMoins encaissement.dmg.dmgSurprise}}
+ {{/if}} + {{#if encaissement.dmg.bonusDegatsDiffLibre}} +
+dom attaque: {{plusMoins encaissement.dmg.bonusDegatsDiffLibre}}
{{/if}}
  • - +