From 9bca364b68445bad3297c753e04ddd94e2be2ba6 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 15 Dec 2020 21:48:28 +0100 Subject: [PATCH] =?UTF-8?q?=20#68=20deterioration=20armes=20et=20d=C3=A9sa?= =?UTF-8?q?rm=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/actor.js | 48 +++++++++++++++++++++++--------------------- module/rdd-combat.js | 5 +---- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/module/actor.js b/module/actor.js index 43c69973..45489778 100644 --- a/module/actor.js +++ b/module/actor.js @@ -204,32 +204,34 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - computeDeteriorationArme( rollData ) { - if ( rollData.arme && rollData.attackerRoll) { // C'est une parade + 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.attackerRoll.rolled.isPart - && ( (rollData.attackerRoll.particuliereAttaque && rollData.attackerRoll.particuliereAttaque == 'force') || rollData.attackerRoll.isCharge) - && !rollData.rolled.isPart ) { - // Jet de résistance de l'arme de parade (p.132) - let resist = RdDResolutionTable.roll( rollData.arme.data.resistance, rollData.attackerRoll.domArmePlusDom ); + if ( (rollData.needResist || attackerRoll.particuliereAttaque == 'force' || attackerRoll.isCharge) + && !rollData.rolled.isPart ) { + const dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor; + let resistance = Misc.toInt(rollData.arme.data.resistance); let msg = ""; - if (resist.isSuccess) { // Perte de résistance - msg = "Jet de résistance de votre arme réussit !" + // Jet de résistance de l'arme de parade (p.132) + let resistRoll = await RdDResolutionTable.roll( resistance, - dmg ); + if (resistRoll.isSuccess) { // Perte de résistance + msg = "Votre " + rollData.arme.name + " tient le choc de la parade. " } else { - rollData.arme.data.resistance -= rollData.attackerRoll.domArmePlusDom; - if ( rollData.arme.data.resistance <= 0 ) { + resistance -= dmg; + if ( resistance <= 0 ) { this.deleteEmbeddedEntity("OwnedItem", rollData.arme._id); - msg = "Votre arme s'est brisée sous le coup de la parade : " + rollData.arme.name; + 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': rollData.arme.data.resistance }); - msg = "Votre arme a perdu de la résistance : " + rollData.arme.name + " - " + rollData.arme.data.resistance; + 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 ( !rollData.arme.includes('Bouclier') ) { // Si l'arme de parade n'est pas un bouclier, jet de désarmement (p.132) - let desarme = RdDResolutionTable.roll( this.data.data.carac.force.value, Number(rollData.competence.data.niveau) + Number(rollData.attackerRoll.domArmePlusDom) ); - if ( !desarme.isSucess) { - msg += "
De plus, vous êtes désarmé ! Votre arme " + rollData.arme.name + "tombe au sol à vos pieds"; + 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.roll( this.data.data.carac.force.value, Misc.toInt(rollData.competence.data.niveau) -dmg ); + if ( desarme.isEchec) { + msg += "Vous ne parvenez pas à garder votre arme en main, elle tombe au sol à vos pieds"; } } ChatMessage.create( { content: msg, @@ -247,13 +249,13 @@ export class RdDActor extends Actor { let recul = await RdDResolutionTable.roll( 10, reculNiveau ); let msg = ""; if (recul.isSuccess) { - msg = this.data.name + " - Jet de Recul réussi, aucun effet !"; + msg = " Vous ne reculez pas malgré la force du coup."; } else { let chute = await RdDResolutionTable.roll( this.data.data.carac.agilite.value, reculNiveau ); if ( !chute.isSuccess || recul.isETotal ) { - msg = this.data.name + " - Jet de Recul : Vous subissez le recul du coup, et vous chutez au sol ! Vous ne pouvez plus attaquer ce round."; + msg = "Sous la violence du coup, vous reculez et chutez au sol ! Vous ne pouvez plus attaquer ce round."; } else { - msg = this.data.name + " - Jet de Recul : Vous subissez le recul du coup, et vous reculez de quelques mètres ! Vous ne pouvez plus attaquer ce round."; + msg = "La violence du choc vous fait reculer de quelques mètres ! Vous ne pouvez plus attaquer ce round."; } } ChatMessage.create( {content: msg, @@ -282,7 +284,7 @@ export class RdDActor extends Actor { // In case of fight, replace the message per dommages + localization. it indicates if result is OK or not if (rollData.attackerRoll) { // Defense case ! if (rolled.isSign || (!rollData.needSignificative && rolled.isSuccess)) { - this.computeDeteriorationArme( rollData ); + await this.computeDeteriorationArme( rollData ); explications += "
Attaque parée/esquivée !"; } else { explications += "
Esquive/Parade échouée, encaissement !"; @@ -1887,7 +1889,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ computeArmure( attackerRoll ) { let locData = attackerRoll.loc; - let dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor; + let dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor; let arme = attackerRoll.arme; // TODO: arc ignore armure let protection = 0; diff --git a/module/rdd-combat.js b/module/rdd-combat.js index ed053fde..d6fafbb2 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -368,10 +368,7 @@ export class RdDCombat { /* -------------------------------------------- */ async _onParadeNormale(rollData) { console.log("RdDCombat._onParadeNormale >>>", rollData); - if (rollData.needResist && !rollData.rolled.isPart) { - // TODO: déplacer la logique détérioration armure dans RdDCombat - this.defender.computeDeteriorationArme(rollData); - } + await this.defender.computeDeteriorationArme(rollData); await this.defender.computeRecul(rollData, false); let chatOptions = {