jets de dés cachés
This commit is contained in:
parent
b4f298256a
commit
95708222dc
@ -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() {
|
getSurprise() {
|
||||||
if (this.isEntiteCauchemar()) {
|
if (this.isEntiteCauchemar()) {
|
||||||
|
@ -435,8 +435,8 @@ export class RdDCombat {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _onParadeNormale(rollData) {
|
async _onParadeNormale(rollData) {
|
||||||
console.log("RdDCombat._onParadeNormale >>>", rollData);
|
console.log("RdDCombat._onParadeNormale >>>", rollData);
|
||||||
await this.defender.computeDeteriorationArme(rollData);
|
await this.computeDeteriorationArme(rollData);
|
||||||
await this.defender.computeRecul(rollData, false);
|
await this.computeRecul(rollData, false);
|
||||||
|
|
||||||
let chatOptions = {
|
let chatOptions = {
|
||||||
content: "<strong>Test : " + rollData.selectedCarac.label + " / " + rollData.competence.name + "</strong>"
|
content: "<strong>Test : " + rollData.selectedCarac.label + " / " + rollData.competence.name + "</strong>"
|
||||||
@ -477,7 +477,7 @@ export class RdDCombat {
|
|||||||
|
|
||||||
ChatUtility.chatWithRollMode(chatOptions, this.defender.name)
|
ChatUtility.chatWithRollMode(chatOptions, this.defender.name)
|
||||||
|
|
||||||
await this.defender.computeRecul(rollData, true);
|
await this.computeRecul(rollData, true);
|
||||||
// TODO: gestion message pour chance/encaissement
|
// TODO: gestion message pour chance/encaissement
|
||||||
this.encaisser(rollData.attackerRoll);
|
this.encaisser(rollData.attackerRoll);
|
||||||
}
|
}
|
||||||
@ -574,10 +574,86 @@ export class RdDCombat {
|
|||||||
|
|
||||||
ChatUtility.chatWithRollMode(chatOptions, this.defender.name)
|
ChatUtility.chatWithRollMode(chatOptions, this.defender.name)
|
||||||
|
|
||||||
await this.defender.computeRecul(rollData, true);
|
await this.computeRecul(rollData, true);
|
||||||
this.encaisser(rollData.attackerRoll);
|
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) {
|
encaisser(attackerRoll) {
|
||||||
// TODO: gestion message pour chance/encaissement
|
// TODO: gestion message pour chance/encaissement
|
||||||
|
@ -91,7 +91,8 @@ export class RdDResolutionTable {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async rollData(rollData) {
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
Loading…
Reference in New Issue
Block a user