From 95708222dce9cada7e3e43ce185c4a2799e09cf2 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 17 Dec 2020 00:44:32 +0100 Subject: [PATCH] =?UTF-8?q?jets=20de=20d=C3=A9s=20cach=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/actor.js | 76 ------------------------------ module/rdd-combat.js | 84 ++++++++++++++++++++++++++++++++-- module/rdd-resolution-table.js | 3 +- 3 files changed, 82 insertions(+), 81 deletions(-) diff --git a/module/actor.js b/module/actor.js index ae0c8b85..225b0cdd 100644 --- a/module/actor.js +++ b/module/actor.js @@ -170,82 +170,6 @@ export class RdDActor extends Actor { } } - - /* -------------------------------------------- */ - async computeDeteriorationArme( rollData ) { - const attackerRoll = rollData.attackerRoll; - if (rollData.arme && attackerRoll) { // C'est une parade - // Est-ce que l'attaque est une particulière, en force ou charge et que l'attaque n'en est pas une ? - if ( (rollData.needResist || attackerRoll.particuliereAttaque == 'force' || attackerRoll.tactique == 'charge') - && !rollData.rolled.isPart ) { - const dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor; - let resistance = Misc.toInt(rollData.arme.data.resistance); - let msg = ""; - // Jet de résistance de l'arme de parade (p.132) - let resistRoll = await RdDResolutionTable.rollData({ - caracValue: resistance, - finalLevel: - dmg, - showDice: false}); - if (resistRoll.isSuccess) { // Perte de résistance - msg = "Votre " + rollData.arme.name + " tient le choc de la parade. " - } else { - resistance -= dmg; - if ( resistance <= 0 ) { - this.deleteEmbeddedEntity("OwnedItem", rollData.arme._id); - msg = "Sous la violence de la parade, votre " + rollData.arme.name + " s'est brisée sous le coup!"; - } else { - this.updateEmbeddedEntity("OwnedItem", {_id: rollData.arme._id, 'data.resistance': resistance }); - msg = "En parant, vous endommagez votre " + rollData.arme.name + ", qui perd " + dmg + " de résistance. "; - } - } - // Jet de désarmement - if (resistance > 0 && !rollData.arme.name.toLowerCase().includes('bouclier') ) { // Si l'arme de parade n'est pas un bouclier, jet de désarmement (p.132) - let desarme = await RdDResolutionTable.rollData({ - caracValue: this.data.data.carac.force.value, - finalLevel: Misc.toInt(rollData.competence.data.niveau) - dmg, - showDice: false}); - if ( desarme.isEchec) { - msg += "Vous ne parvenez pas à garder votre arme en main, elle tombe au sol à vos pieds"; - } - } - ChatMessage.create( { content: msg, - user: game.user._id, - whisper: [game.user._id, ChatMessage.getWhisperRecipients("GM") ] } ); - } - } - } - - /* -------------------------------------------- */ - async computeRecul( rollData, encaisser = undefined ) { // Calcul du recul (p. 132) - if ( rollData.arme || encaisser ) { - if ( (rollData.attackerRoll.particuliereAttaque && rollData.attackerRoll.particuliereAttaque == 'force') || rollData.attackerRoll.tactique == 'charge') { - let reculNiveau = Misc.toInt(this.data.data.carac.taille.value) - (rollData.attackerRoll.forceValue+rollData.attackerRoll.arme.data.dommagesReels); - let recul = await RdDResolutionTable.rollData({ - caracValue: 10, - finalLevel: reculNiveau, - showDice: false}); - - let msg = ""; - if (recul.isSuccess) { - msg = " Vous ne reculez pas malgré la force du coup."; - } else { - let chute = await RdDResolutionTable.rollData({ - caracValue: this.data.data.carac.agilite.value, - finalLevel: reculNiveau, - showDice: false}); - if ( !chute.isSuccess || recul.isETotal ) { - msg = "Sous la violence du coup, vous reculez et chutez au sol ! Vous ne pouvez plus attaquer ce round."; - } else { - msg = "La violence du choc vous fait reculer de quelques mètres ! Vous ne pouvez plus attaquer ce round."; - } - } - ChatMessage.create( {content: msg, - user: game.user._id, - whisper: [game.user._id, ChatMessage.getWhisperRecipients("GM") ] } ); - } - } - } - /* -------------------------------------------- */ getSurprise() { if (this.isEntiteCauchemar()) { diff --git a/module/rdd-combat.js b/module/rdd-combat.js index c63bc7e0..eb4f1819 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -435,8 +435,8 @@ export class RdDCombat { /* -------------------------------------------- */ async _onParadeNormale(rollData) { console.log("RdDCombat._onParadeNormale >>>", rollData); - await this.defender.computeDeteriorationArme(rollData); - await this.defender.computeRecul(rollData, false); + await this.computeDeteriorationArme(rollData); + await this.computeRecul(rollData, false); let chatOptions = { content: "Test : " + rollData.selectedCarac.label + " / " + rollData.competence.name + "" @@ -477,7 +477,7 @@ export class RdDCombat { ChatUtility.chatWithRollMode(chatOptions, this.defender.name) - await this.defender.computeRecul(rollData, true); + await this.computeRecul(rollData, true); // TODO: gestion message pour chance/encaissement this.encaisser(rollData.attackerRoll); } @@ -574,10 +574,86 @@ export class RdDCombat { ChatUtility.chatWithRollMode(chatOptions, this.defender.name) - await this.defender.computeRecul(rollData, true); + await this.computeRecul(rollData, true); this.encaisser(rollData.attackerRoll); } + + /* -------------------------------------------- */ + async computeDeteriorationArme( rollData ) { + const attackerRoll = rollData.attackerRoll; + if (rollData.arme && attackerRoll) { // C'est une parade + // Est-ce que l'attaque est une particulière, en force ou charge et que l'attaque n'en est pas une ? + if ( (rollData.needResist || attackerRoll.particuliereAttaque == 'force' || attackerRoll.tactique == 'charge') + && !rollData.rolled.isPart ) { + const dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor; + let resistance = Misc.toInt(rollData.arme.data.resistance); + let msg = ""; + // Jet de résistance de l'arme de parade (p.132) + let resistRoll = await RdDResolutionTable.rollData({ + caracValue: resistance, + finalLevel: - dmg, + showDice: false}); + if (resistRoll.isSuccess) { // Perte de résistance + msg = "Votre " + rollData.arme.name + " tient le choc de la parade. " + } else { + resistance -= dmg; + if ( resistance <= 0 ) { + this.defender.deleteEmbeddedEntity("OwnedItem", rollData.arme._id); + msg = "Sous la violence de la parade, votre " + rollData.arme.name + " s'est brisée sous le coup!"; + } else { + this.defender.updateEmbeddedEntity("OwnedItem", {_id: rollData.arme._id, 'data.resistance': resistance }); + msg = "En parant, vous endommagez votre " + rollData.arme.name + ", qui perd " + dmg + " de résistance. "; + } + } + // Jet de désarmement + if (resistance > 0 && !rollData.arme.name.toLowerCase().includes('bouclier') ) { // Si l'arme de parade n'est pas un bouclier, jet de désarmement (p.132) + let desarme = await RdDResolutionTable.rollData({ + caracValue: this.defender.data.data.carac.force.value, + finalLevel: Misc.toInt(rollData.competence.data.niveau) - dmg, + showDice: false}); + if ( desarme.isEchec) { + msg += "Vous ne parvenez pas à garder votre arme en main, elle tombe au sol à vos pieds"; + } + } + ChatMessage.create( { content: msg, + user: game.user._id, + whisper: [game.user._id, ChatMessage.getWhisperRecipients("GM") ] } ); + } + } + } + /* -------------------------------------------- */ + async computeRecul( rollData, encaisser = undefined ) { // Calcul du recul (p. 132) + if ( rollData.arme || encaisser ) { + if ( (rollData.attackerRoll.particuliereAttaque && rollData.attackerRoll.particuliereAttaque == 'force') || rollData.attackerRoll.tactique == 'charge') { + let reculNiveau = Misc.toInt(this.defender.data.data.carac.taille.value) - (rollData.attackerRoll.forceValue+rollData.attackerRoll.arme.data.dommagesReels); + let recul = await RdDResolutionTable.rollData({ + caracValue: 10, + finalLevel: reculNiveau, + showDice: false}); + + let msg = ""; + if (recul.isSuccess) { + msg = " Vous ne reculez pas malgré la force du coup."; + } else { + let chute = await RdDResolutionTable.rollData({ + caracValue: this.defender.data.data.carac.agilite.value, + finalLevel: reculNiveau, + showDice: false}); + if ( !chute.isSuccess || recul.isETotal ) { + msg = "Sous la violence du coup, vous reculez et chutez au sol ! Vous ne pouvez plus attaquer ce round."; + } else { + msg = "La violence du choc vous fait reculer de quelques mètres ! Vous ne pouvez plus attaquer ce round."; + } + } + ChatMessage.create( {content: msg, + user: game.user._id, + whisper: [game.user._id, ChatMessage.getWhisperRecipients("GM") ] } ); + } + } + } + + /* -------------------------------------------- */ encaisser(attackerRoll) { // TODO: gestion message pour chance/encaissement diff --git a/module/rdd-resolution-table.js b/module/rdd-resolution-table.js index 4109811e..e1a9686b 100644 --- a/module/rdd-resolution-table.js +++ b/module/rdd-resolution-table.js @@ -91,7 +91,8 @@ export class RdDResolutionTable { /* -------------------------------------------- */ static async rollData(rollData) { - rollData.rolled = await this.roll(rollData.caracValue, rollData.finalLevel, rollData.bonus, rollData.needSignificative, !rollData.showDice); + rollData.rolled = await this.roll(rollData.caracValue, rollData.finalLevel, rollData.bonus, rollData.needSignificative, rollData.showDice); + return rollData; } /* -------------------------------------------- */