La récupération est bloquée par les maladies

Pas de récupération de vie ou de blessures possibles sous l'effet d'un
poison ou d'une maladie
This commit is contained in:
Vincent Vandemeulebrouck 2023-02-03 02:19:55 +01:00
parent 9bdde92d61
commit ca1ea5a854
1 changed files with 45 additions and 17 deletions

View File

@ -371,12 +371,7 @@ export class RdDActor extends RdDBaseActor {
};
for (let i = 0; i < nGrisReve; i++) {
await this.dormir(6, { grisReve: true });
const blessures = duplicate(this.system.blessures);
await this._recupererBlessures(message, "legere", blessures.legeres.liste.filter(b => b.active), []);
await this._recupererBlessures(message, "grave", blessures.graves.liste.filter(b => b.active), blessures.legeres.liste);
await this._recupererBlessures(message, "critique", blessures.critiques.liste.filter(b => b.active), blessures.graves.liste);
await this.update({ "system.blessures": blessures });
await this._recupererVie(message);
await this._recuperationSante(message);
const moralActuel = Misc.toInt(this.system.compteurs.moral.value);
if (moralActuel != 0) {
@ -390,6 +385,43 @@ export class RdDActor extends RdDBaseActor {
this.sheet.render(true);
}
async _recuperationSante(message) {
const maladiesPoisons = this._maladiePoisons(message);
this._messageRecuperationMaladiePoisons(maladiesPoisons, message);
const isMaladeEmpoisonne = maladiesPoisons.length > 0;
const blessures = duplicate(this.system.blessures);
await this._recupererBlessures(message, "legere", blessures.legeres.liste.filter(b => b.active), [], isMaladeEmpoisonne);
await this._recupererBlessures(message, "grave", blessures.graves.liste.filter(b => b.active), blessures.legeres.liste, isMaladeEmpoisonne);
await this._recupererBlessures(message, "critique", blessures.critiques.liste.filter(b => b.active), blessures.graves.liste, isMaladeEmpoisonne);
await this.update({ "system.blessures": blessures });
await this._recupererVie(message, isMaladeEmpoisonne);
}
_maladiePoisons(message) {
const actifs = this.items.filter(item => item.type == 'maladie' || (item.type == 'poison' && item.system.active));
return actifs;
}
_messageRecuperationMaladiePoisons(actifs, message) {
if (actifs.length > 0) {
const identifies = actifs.filter(it => it.system.identifie);
const nonIdentifies = actifs.filter(it => !it.system.identifie);
message.content += 'Vous souffrez';
switch (nonIdentifies.length) {
case 0: break;
case 1: message.content += ` d'un mal inconnu`; break;
default: message.content += ` de ${nonIdentifies.length} maux inconnus`; break;
}
if (identifies.length > 0) {
if (nonIdentifies > 0) {
message.content += ' et';
} else {
message.content += ' de ' + identifies.map(it => it.name).reduce(Misc.joining(', '));
}
}
}
}
/* -------------------------------------------- */
async dormirChateauDormant() {
let message = {
@ -398,11 +430,7 @@ export class RdDActor extends RdDBaseActor {
};
const blessures = duplicate(this.system.blessures)
await this._recupererBlessures(message, "legere", blessures.legeres.liste.filter(b => b.active), []);
await this._recupererBlessures(message, "grave", blessures.graves.liste.filter(b => b.active), blessures.legeres.liste);
await this._recupererBlessures(message, "critique", blessures.critiques.liste.filter(b => b.active), blessures.graves.liste);
await this.update({ "system.blessures": blessures });
await this._recupererVie(message);
await this._recuperationSante(message)
await this._jetDeMoralChateauDormant(message);
await this._recupereChance();
await this.transformerStress();
@ -433,7 +461,7 @@ export class RdDActor extends RdDBaseActor {
}
/* -------------------------------------------- */
async _recupererBlessures(message, type, liste, moindres) {
async _recupererBlessures(message, type, liste, moindres, isMaladeEmpoisonne) {
if (!this.bonusRecuperationPotion) this.bonusRecuperationPotion = 0;
let count = 0;
const definitions = RdDUtility.getDefinitionsBlessures();
@ -442,7 +470,7 @@ export class RdDActor extends RdDBaseActor {
if (blessure.jours >= definition.facteur) {
let rolled = await this._jetRecuperationConstitution(Misc.toInt(blessure.soins_complets) + this.bonusRecuperationPotion, message);
blessure.soins_complets = 0;
if (rolled.isSuccess && this._retrograderBlessure(type, blessure, moindres)) {
if (!isMaladeEmpoisonne && rolled.isSuccess && this._retrograderBlessure(type, blessure, moindres)) {
message.content += ` -- une blessure ${type} cicatrise`;
count++;
}
@ -481,7 +509,7 @@ export class RdDActor extends RdDBaseActor {
}
/* -------------------------------------------- */
async _recupererVie(message) {
async _recupererVie(message, isMaladeEmpoisonne) {
const tData = this.system
let blessures = [].concat(tData.blessures.legeres.liste).concat(tData.blessures.graves.liste).concat(tData.blessures.critiques.liste);
let nbBlessures = blessures.filter(b => b.active);
@ -492,7 +520,7 @@ export class RdDActor extends RdDBaseActor {
bonusSoins = Math.max(bonusSoins, Misc.toInt(b.soins_complets));
}
let rolled = await this._jetRecuperationConstitution(bonusSoins, message)
if (rolled.isSuccess) {
if (!isMaladeEmpoisonne && rolled.isSuccess) {
const gain = Math.min(rolled.isPart ? 2 : 1, vieManquante);
message.content += " -- récupération de vie: " + gain;
await this.santeIncDec("vie", gain);
@ -1727,7 +1755,7 @@ export class RdDActor extends RdDBaseActor {
await item.diminuerQuantite(doses, options);
}
/* -------------------------------------------- */
async boire(item, doses, options = { diminuerQuantite: true }) {
const desaltere = item.system.desaltere;
@ -1741,7 +1769,7 @@ export class RdDActor extends RdDBaseActor {
}
await item.diminuerQuantite(doses, options);
}
static $calculNewSust(value, sust, doses) {
return Misc.keepDecimals(Number(value) + Number(sust) * Number(doses), 1);
}