Fix: le jet de vie indique la mort
Jusque là, le 20 indiquait la mort, mais ne diminuait pas la vie en dessous de - SConst Désormais: - la vie passe à -SConst - 1 sur 20 au jet de vie - Le message indique que le personnage est mort si sa vie est inférieure à -SConst - le jet de vie n'est pas fait si le personnage est déjà mort
This commit is contained in:
parent
3ca33e85b7
commit
381242c8d0
@ -348,7 +348,7 @@ export class RdDActorSheet extends RdDBaseActorReveSheet {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.html.find('.jet-vie').click(async event => {
|
this.html.find('.jet-vie').click(async event => {
|
||||||
this.actor.jetVie();
|
this.actor.jetDeVie();
|
||||||
});
|
});
|
||||||
this.html.find('.jet-endurance').click(async event => {
|
this.html.find('.jet-endurance').click(async event => {
|
||||||
await this.jetEndurance();
|
await this.jetEndurance();
|
||||||
|
@ -60,13 +60,21 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
return this.system.sante.vie.value < -this.getSConst()
|
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() {
|
computeResumeBlessure() {
|
||||||
const blessures = this.filterItems(it => it.system.gravite > 0, 'blessure')
|
const nbLegeres = this.nbBlessuresLegeres()
|
||||||
|
const nbGraves = this.nbBlessuresGraves()
|
||||||
const nbLegeres = blessures.filter(it => it.isLegere()).length;
|
const nbCritiques = this.nbBlessuresCritiques()
|
||||||
const nbGraves = blessures.filter(it => it.isGrave()).length;
|
|
||||||
const nbCritiques = blessures.filter(it => it.isCritique()).length;
|
|
||||||
|
|
||||||
if (nbLegeres + nbGraves + nbCritiques == 0) {
|
if (nbLegeres + nbGraves + nbCritiques == 0) {
|
||||||
return "Aucune blessure";
|
return "Aucune blessure";
|
||||||
@ -206,26 +214,36 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async jetVie() {
|
async jetDeVie() {
|
||||||
let roll = await RdDDice.roll("1d20");
|
if (this.isDead()) {
|
||||||
let msgText = "Jet de Vie : " + roll.total + " / " + this.system.sante.vie.value + "<br>";
|
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) });
|
||||||
if (roll.total <= this.system.sante.vie.value) {
|
return
|
||||||
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 !!!!!";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
const message = {
|
const jetDeVie = await RdDDice.roll("1d20");
|
||||||
content: msgText,
|
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
const sConst = this.getSConst();
|
||||||
};
|
const vie = this.system.sante.vie.value;
|
||||||
ChatMessage.create(message);
|
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: <strong>${jetDeVie.total} / ${vie}</strong>`
|
||||||
|
if (isSuccess) {
|
||||||
|
msgText += "<br>Réussi, pas de perte de point de vie."
|
||||||
|
} else {
|
||||||
|
msgText += `<br>Echoué, perte ${perte} point de vie`;
|
||||||
|
await this.santeIncDec("vie", -perte);
|
||||||
|
}
|
||||||
|
if (this.isDead()) {
|
||||||
|
msgText += `<br><strong>${this.name} est mort !!!!</strong>`;
|
||||||
|
}
|
||||||
|
else if (prochainJet > 0) {
|
||||||
|
msgText += `<br>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 }
|
return { jetEndurance, sonne }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async finDeRoundBlessures() {
|
async finDeRoundBlessures() {
|
||||||
const nbGraves = this.filterItems(it => it.isGrave(), 'blessure').length;
|
const nbGraves = this.filterItems(it => it.isGrave(), 'blessure').length;
|
||||||
if (nbGraves > 0) {
|
if (nbGraves > 0) {
|
||||||
|
@ -518,7 +518,7 @@ export class RdDCombat {
|
|||||||
let token = canvas.tokens.placeables.find(t => t.id == tokenId)
|
let token = canvas.tokens.placeables.find(t => t.id == tokenId)
|
||||||
const actor = token?.actor ?? game.actors.get(actorId);
|
const actor = token?.actor ?? game.actors.get(actorId);
|
||||||
if (actor?.isOwner) {
|
if (actor?.isOwner) {
|
||||||
actor.jetVie();
|
actor.jetDeVie();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user