forked from public/foundryvtt-reve-de-dragon
		
	#68 deterioration armes et désarmé
This commit is contained in:
		| @@ -204,32 +204,34 @@ export class RdDActor extends Actor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   computeDeteriorationArme( rollData ) { |   async computeDeteriorationArme( rollData ) { | ||||||
|     if ( rollData.arme && rollData.attackerRoll) { // C'est une parade |     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 ? |       // 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  |       if ( (rollData.needResist || attackerRoll.particuliereAttaque == 'force' || attackerRoll.isCharge) | ||||||
|             && ( (rollData.attackerRoll.particuliereAttaque && rollData.attackerRoll.particuliereAttaque == 'force') || rollData.attackerRoll.isCharge) |       && !rollData.rolled.isPart ) { | ||||||
|             && !rollData.rolled.isPart ) { |         const dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor; | ||||||
|         // Jet de résistance de l'arme de parade (p.132) |         let resistance = Misc.toInt(rollData.arme.data.resistance); | ||||||
|         let resist = RdDResolutionTable.roll( rollData.arme.data.resistance, rollData.attackerRoll.domArmePlusDom ); |  | ||||||
|         let msg = ""; |         let msg = ""; | ||||||
|         if (resist.isSuccess) { // Perte de résistance |         // Jet de résistance de l'arme de parade (p.132) | ||||||
|           msg = "Jet de résistance de votre arme réussit !" |         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 { |         } else { | ||||||
|           rollData.arme.data.resistance -=  rollData.attackerRoll.domArmePlusDom; |           resistance -= dmg; | ||||||
|           if ( rollData.arme.data.resistance <= 0 ) { |           if ( resistance <= 0 ) { | ||||||
|             this.deleteEmbeddedEntity("OwnedItem", rollData.arme._id); |             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 { |           } else { | ||||||
|             this.updateEmbeddedEntity("OwnedItem", {_id: rollData.arme._id, 'data.resistance': rollData.arme.data.resistance });  |             this.updateEmbeddedEntity("OwnedItem", {_id: rollData.arme._id, 'data.resistance': resistance });  | ||||||
|             msg = "Votre arme a perdu de la résistance : " + rollData.arme.name + " - " + rollData.arme.data.resistance; |             msg = "En parant, vous endommagez votre " + rollData.arme.name + ", qui perd  " + dmg + " de résistance. "; | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|         // Jet de désarmement |         // 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) |         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 = RdDResolutionTable.roll( this.data.data.carac.force.value, Number(rollData.competence.data.niveau) + Number(rollData.attackerRoll.domArmePlusDom) ); |           let desarme = await RdDResolutionTable.roll( this.data.data.carac.force.value, Misc.toInt(rollData.competence.data.niveau) -dmg ); | ||||||
|           if ( !desarme.isSucess) { |           if ( desarme.isEchec) { | ||||||
|             msg += "<br>De plus, vous êtes désarmé ! Votre arme " + rollData.arme.name + "tombe au sol à vos pieds"; |             msg += "Vous ne parvenez pas à garder votre arme en main, elle tombe au sol à vos pieds"; | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|         ChatMessage.create( { content: msg, |         ChatMessage.create( { content: msg, | ||||||
| @@ -247,13 +249,13 @@ export class RdDActor extends Actor { | |||||||
|         let recul = await RdDResolutionTable.roll( 10, reculNiveau ); |         let recul = await RdDResolutionTable.roll( 10, reculNiveau ); | ||||||
|         let msg = ""; |         let msg = ""; | ||||||
|         if (recul.isSuccess) { |         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 { |         } else { | ||||||
|           let chute = await RdDResolutionTable.roll( this.data.data.carac.agilite.value, reculNiveau ); |           let chute = await RdDResolutionTable.roll( this.data.data.carac.agilite.value, reculNiveau ); | ||||||
|           if ( !chute.isSuccess || recul.isETotal ) { |           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 { |           } 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,  |         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 |        // In case of fight, replace the message per dommages + localization. it indicates if result is OK or not | ||||||
|       if (rollData.attackerRoll) { // Defense case ! |       if (rollData.attackerRoll) { // Defense case ! | ||||||
|         if (rolled.isSign || (!rollData.needSignificative && rolled.isSuccess)) { |         if (rolled.isSign || (!rollData.needSignificative && rolled.isSuccess)) { | ||||||
|           this.computeDeteriorationArme( rollData ); |           await this.computeDeteriorationArme( rollData ); | ||||||
|           explications += "<br><strong>Attaque parée/esquivée !</strong>"; |           explications += "<br><strong>Attaque parée/esquivée !</strong>"; | ||||||
|         } else  { |         } else  { | ||||||
|           explications += "<br><strong>Esquive/Parade échouée, encaissement !</strong>"; |           explications += "<br><strong>Esquive/Parade échouée, encaissement !</strong>"; | ||||||
| @@ -1887,7 +1889,7 @@ export class RdDActor extends Actor { | |||||||
|   /* -------------------------------------------- */   |   /* -------------------------------------------- */   | ||||||
|   computeArmure( attackerRoll ) { |   computeArmure( attackerRoll ) { | ||||||
|     let locData = attackerRoll.loc; |     let locData = attackerRoll.loc; | ||||||
|     let dmg =  attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor; |     let dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor; | ||||||
|     let arme =  attackerRoll.arme; |     let arme =  attackerRoll.arme; | ||||||
|     // TODO: arc ignore armure |     // TODO: arc ignore armure | ||||||
|     let protection = 0; |     let protection = 0; | ||||||
|   | |||||||
| @@ -368,10 +368,7 @@ export class RdDCombat { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _onParadeNormale(rollData) { |   async _onParadeNormale(rollData) { | ||||||
|     console.log("RdDCombat._onParadeNormale >>>", rollData); |     console.log("RdDCombat._onParadeNormale >>>", rollData); | ||||||
|     if (rollData.needResist && !rollData.rolled.isPart) { |     await this.defender.computeDeteriorationArme(rollData); | ||||||
|       // TODO: déplacer la logique détérioration armure dans RdDCombat |  | ||||||
|       this.defender.computeDeteriorationArme(rollData); |  | ||||||
|     } |  | ||||||
|     await this.defender.computeRecul(rollData, false); |     await this.defender.computeRecul(rollData, false); | ||||||
|  |  | ||||||
|     let chatOptions = { |     let chatOptions = { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user