#68 deterioration armes et désarmé

This commit is contained in:
Vincent Vandemeulebrouck 2020-12-15 21:48:28 +01:00
parent 398f1af132
commit 9bca364b68
2 changed files with 26 additions and 27 deletions

View File

@ -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;

View File

@ -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 = {