diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index e63c0411..fba45626 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -348,7 +348,7 @@ export class RdDActorSheet extends RdDBaseActorReveSheet {
});
this.html.find('.jet-vie').click(async event => {
- this.actor.jetVie();
+ this.actor.jetDeVie();
});
this.html.find('.jet-endurance').click(async event => {
await this.jetEndurance();
diff --git a/module/actor/base-actor-sang.js b/module/actor/base-actor-sang.js
index e754674a..8398ac08 100644
--- a/module/actor/base-actor-sang.js
+++ b/module/actor/base-actor-sang.js
@@ -60,13 +60,21 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
return this.system.sante.vie.value < -this.getSConst()
}
+ nbBlessuresLegeres() {
+ return this.itemTypes[TYPES.blessure].filter(it => it.isLegere()).length;
+ }
+ nbBlessuresGraves() {
+ return this.itemTypes[TYPES.blessure].filter(it => it.isGrave()).length;
+ }
+ nbBlessuresCritiques() {
+ return this.itemTypes[TYPES.blessure].filter(it => it.isCritique()).length;
+ }
+
/* -------------------------------------------- */
computeResumeBlessure() {
- const blessures = this.filterItems(it => it.system.gravite > 0, 'blessure')
-
- const nbLegeres = blessures.filter(it => it.isLegere()).length;
- const nbGraves = blessures.filter(it => it.isGrave()).length;
- const nbCritiques = blessures.filter(it => it.isCritique()).length;
+ const nbLegeres = this.nbBlessuresLegeres()
+ const nbGraves = this.nbBlessuresGraves()
+ const nbCritiques = this.nbBlessuresCritiques()
if (nbLegeres + nbGraves + nbCritiques == 0) {
return "Aucune blessure";
@@ -206,26 +214,36 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
}
/* -------------------------------------------- */
- async jetVie() {
- let roll = await RdDDice.roll("1d20");
- let msgText = "Jet de Vie : " + roll.total + " / " + this.system.sante.vie.value + "
";
- if (roll.total <= this.system.sante.vie.value) {
- msgText += "Jet réussi, pas de perte de point de vie (prochain jet dans 1 round pour 1 critique, SC minutes pour une grave)";
- if (roll.total == 1) {
- msgText += "La durée entre 2 jets de vie est multipliée par 20 (20 rounds pour une critique, SCx20 minutes pour une grave)";
- }
- } else {
- msgText += "Jet échoué, vous perdez 1 point de vie";
- await this.santeIncDec("vie", -1);
- if (roll.total == 20) {
- msgText += "Votre personnage est mort !!!!!";
- }
+ async jetDeVie() {
+ if (this.isDead()) {
+ ChatMessage.create({ content: `Jet de Vie: ${this.name} est déjà mort, ce n'est pas la peine d'en rajouter !!!!!`, whisper: ChatMessage.getWhisperRecipients(this.name) });
+ return
}
- const message = {
- content: msgText,
- whisper: ChatMessage.getWhisperRecipients(this.name)
- };
- ChatMessage.create(message);
+ const jetDeVie = await RdDDice.roll("1d20");
+
+ const sConst = this.getSConst();
+ const vie = this.system.sante.vie.value;
+ const isCritique = this.nbBlessuresCritiques() > 0;
+ const isGrave = this.nbBlessuresGraves();
+ const isEchecTotal = jetDeVie.total == 20;
+ const isSuccess = jetDeVie.total == 1 || jetDeVie.total <= vie;
+ const perte = isSuccess ? 0 : 1 + (isEchecTotal ? vie + sConst : 0)
+ const prochainJet = (jetDeVie.total == 1 && vie > 0 ? 20 : 1) * (isCritique ? 1 : isGrave > 0 ? sConst : 0)
+
+ let msgText = `Jet de Vie: ${jetDeVie.total} / ${vie}`
+ if (isSuccess) {
+ msgText += "
Réussi, pas de perte de point de vie."
+ } else {
+ msgText += `
Echoué, perte ${perte} point de vie`;
+ await this.santeIncDec("vie", -perte);
+ }
+ if (this.isDead()) {
+ msgText += `
${this.name} est mort !!!!`;
+ }
+ else if (prochainJet > 0) {
+ msgText += `
Prochain jet de vie dans ${prochainJet} ${isCritique ? 'round' : 'minute'}${prochainJet > 1 ? 's' : ''} ${isCritique ? '(état critique)' : '(état grave)'}`
+ }
+ ChatMessage.create({ content: msgText, whisper: ChatMessage.getWhisperRecipients(this.name) });
}
/* -------------------------------------------- */
@@ -238,7 +256,6 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
return { jetEndurance, sonne }
}
-
async finDeRoundBlessures() {
const nbGraves = this.filterItems(it => it.isGrave(), 'blessure').length;
if (nbGraves > 0) {
diff --git a/module/rdd-combat.js b/module/rdd-combat.js
index 01924c4b..b8dbb066 100644
--- a/module/rdd-combat.js
+++ b/module/rdd-combat.js
@@ -518,7 +518,7 @@ export class RdDCombat {
let token = canvas.tokens.placeables.find(t => t.id == tokenId)
const actor = token?.actor ?? game.actors.get(actorId);
if (actor?.isOwner) {
- actor.jetVie();
+ actor.jetDeVie();
}
}