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:
parent
9bdde92d61
commit
ca1ea5a854
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user