jets de dés cachés
This commit is contained in:
		| @@ -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()) { | ||||
|   | ||||
| @@ -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: "<strong>Test : " + rollData.selectedCarac.label + " / " + rollData.competence.name + "</strong>" | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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; | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user