Fix: récupération des blessures
This commit is contained in:
parent
0bfcfec58f
commit
ea992aae46
@ -521,16 +521,17 @@ export class RdDActor extends RdDBaseActor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _recuperationBlessures(message, isMaladeEmpoisonne) {
|
async _recuperationBlessures(message, isMaladeEmpoisonne) {
|
||||||
const timestamp = game.system.rdd.calendrier.getTimestamp()
|
const timestamp = game.system.rdd.calendrier.getTimestamp()
|
||||||
const blessures = this.filterItems(it => it.gravite > 0, 'blessure').sort(Misc.ascending(it => it.system.gravite))
|
const blessures = this.filterItems(it => it.system.gravite > 0, 'blessure').sort(Misc.ascending(it => it.system.gravite))
|
||||||
|
|
||||||
Promise.all(blessures.map(b => b.recuperationBlessure({
|
await Promise.all(blessures.map(b => b.recuperationBlessure({
|
||||||
actor: this,
|
actor: this,
|
||||||
timestamp,
|
timestamp,
|
||||||
message,
|
message,
|
||||||
isMaladeEmpoisonne,
|
isMaladeEmpoisonne,
|
||||||
blessures
|
blessures
|
||||||
})));
|
})));
|
||||||
await this.supprimerBlessures(filterToDelete);
|
|
||||||
|
await this.supprimerBlessures(it => it.system.gravite <= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
async supprimerBlessures(filterToDelete) {
|
async supprimerBlessures(filterToDelete) {
|
||||||
@ -548,7 +549,7 @@ export class RdDActor extends RdDBaseActor {
|
|||||||
}
|
}
|
||||||
let vieManquante = tData.sante.vie.max - tData.sante.vie.value;
|
let vieManquante = tData.sante.vie.max - tData.sante.vie.value;
|
||||||
if (vieManquante > 0) {
|
if (vieManquante > 0) {
|
||||||
let rolled = await this.jetRecuperationConstitution(bonusSoins, message)
|
let rolled = await this.jetRecuperationConstitution(0, message)
|
||||||
if (!isMaladeEmpoisonne && rolled.isSuccess) {
|
if (!isMaladeEmpoisonne && rolled.isSuccess) {
|
||||||
const gain = Math.min(rolled.isPart ? 2 : 1, vieManquante);
|
const gain = Math.min(rolled.isPart ? 2 : 1, vieManquante);
|
||||||
message.content += " -- récupération de vie: " + gain;
|
message.content += " -- récupération de vie: " + gain;
|
||||||
@ -566,7 +567,7 @@ export class RdDActor extends RdDBaseActor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async jetRecuperationConstitution(bonusSoins, message = undefined) {
|
async jetRecuperationConstitution(bonusSoins, message = undefined) {
|
||||||
let difficulte = Misc.toInt(bonusSoins) + Math.min(0, this.system.sante.vie.value - this.system.sante.vie.max);
|
let difficulte = Math.min(0, this.system.sante.vie.value - this.system.sante.vie.max) + bonusSoins + this.system.sante.bonusPotion;
|
||||||
let rolled = await RdDResolutionTable.roll(this.system.carac.constitution.value, difficulte);
|
let rolled = await RdDResolutionTable.roll(this.system.carac.constitution.value, difficulte);
|
||||||
if (message) {
|
if (message) {
|
||||||
message.content = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/roll/explain.hbs", {
|
message.content = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/roll/explain.hbs", {
|
||||||
@ -1532,7 +1533,7 @@ export class RdDActor extends RdDBaseActor {
|
|||||||
_computeEnduranceMax() {
|
_computeEnduranceMax() {
|
||||||
const diffVie = this.system.sante.vie.max - this.system.sante.vie.value;
|
const diffVie = this.system.sante.vie.max - this.system.sante.vie.value;
|
||||||
const maxEndVie = this.system.sante.endurance.max - (diffVie * 2);
|
const maxEndVie = this.system.sante.endurance.max - (diffVie * 2);
|
||||||
const nbGraves = this.countBlessures(it => it.isGraves()) > 0
|
const nbGraves = this.countBlessures(it => it.isGrave()) > 0
|
||||||
const nbCritiques = this.countBlessures(it => it.isCritique()) > 0
|
const nbCritiques = this.countBlessures(it => it.isCritique()) > 0
|
||||||
const maxEndGraves = Math.floor(this.system.sante.endurance.max / (2 * nbGraves));
|
const maxEndGraves = Math.floor(this.system.sante.endurance.max / (2 * nbGraves));
|
||||||
const maxEndCritiques = nbCritiques > 0 ? 1 : this.system.sante.endurance.max;
|
const maxEndCritiques = nbCritiques > 0 ? 1 : this.system.sante.endurance.max;
|
||||||
|
@ -89,30 +89,34 @@ export class RdDItemBlessure extends RdDItem {
|
|||||||
|
|
||||||
async recuperationBlessure({ actor, timestamp, message, isMaladeEmpoisonne, blessures }) {
|
async recuperationBlessure({ actor, timestamp, message, isMaladeEmpoisonne, blessures }) {
|
||||||
if (this.parent != actor || actor == undefined) {
|
if (this.parent != actor || actor == undefined) {
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
if (new RdDTimestamp(this.system.fin).isAfterIndexDate(timestamp)) {
|
if (new RdDTimestamp(this.system.temporel.fin).compare(timestamp) > 0) {
|
||||||
// attente periode
|
// attente periode
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (this.system.gravite > 0) {
|
if (this.system.gravite > 0) {
|
||||||
const update = { premierssoins: { bonus: 0 }, soinscomplets: { bonus: 0 } }
|
const update = { system: { premierssoins: { bonus: 0 }, soinscomplets: { bonus: 0 } } }
|
||||||
const gravite = this.system.gravite;
|
const gravite = this.system.gravite;
|
||||||
const graviteMoindre = gravite - 2;
|
const graviteMoindre = gravite - 2;
|
||||||
const moindres = blessures.filter(it => it.system.gravite == graviteMoindre, 'blessures').length
|
const moindres = blessures.filter(it => it.system.gravite == graviteMoindre, 'blessures').length
|
||||||
const labelGravite = RdDItemBlessure.getLabelGravite(gravite);
|
const labelGravite = this.getLabelGravite();
|
||||||
|
|
||||||
let rolled = await actor.jetRecuperationConstitution(Misc.toInt(this.system.soinscomplets.bonus) + actor.system.sante.bonusPotion, message);
|
let rolled = await actor.jetRecuperationConstitution(this.system.soinscomplets.bonus, message);
|
||||||
|
|
||||||
if (rolled.isETotal) {
|
if (rolled.isETotal) {
|
||||||
message.content += ` -- une blessure ${labelGravite} s'infecte (temps de guérison augmenté de ${definition.facteur} jours, perte de vie)`;
|
message.content += ` -- une blessure ${labelGravite} s'infecte (temps de guérison augmenté de ${gravite} jours, perte de vie)`;
|
||||||
mergeObject(update, { fin: { indexDate: timestamp.addJours(gravite).indexDate } });
|
|
||||||
await actor.santeIncDec("vie", -1);
|
await actor.santeIncDec("vie", -1);
|
||||||
|
mergeObject(update, {
|
||||||
|
system: { fin: { indexDate: timestamp.addJours(gravite).indexDate } }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!isMaladeEmpoisonne && rolled.isSuccess && this.peutRetrograder(graviteMoindre, moindres)) {
|
if (!isMaladeEmpoisonne && rolled.isSuccess && this.peutRetrograder(graviteMoindre, moindres)) {
|
||||||
message.content += ` -- une blessure ${labelGravite} cicatrise`;
|
message.content += ` -- une blessure ${labelGravite} cicatrise`;
|
||||||
mergeObject(update, { gravite: graviteMoindre, fin: { indexDate: timestamp.addJours(graviteMoindre).indexDate } });
|
mergeObject(update, {
|
||||||
|
system: { gravite: graviteMoindre, fin: { indexDate: timestamp.addJours(graviteMoindre).indexDate } }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
message.content += ` -- une blessure ${labelGravite} reste stable`;
|
message.content += ` -- une blessure ${labelGravite} reste stable`;
|
||||||
|
@ -1295,7 +1295,7 @@ export class RdDCombat {
|
|||||||
blessuresStatus: actor.computeResumeBlessure(),
|
blessuresStatus: actor.computeResumeBlessure(),
|
||||||
SConst: actor.getSConst(),
|
SConst: actor.getSConst(),
|
||||||
actorId: actor.id,
|
actorId: actor.id,
|
||||||
isGrave: actor.countBlessures(it => it.isGraves()) > 0,
|
isGrave: actor.countBlessures(it => it.isGrave()) > 0,
|
||||||
isCritique: actor.countBlessures(it => it.isCritique()) > 0
|
isCritique: actor.countBlessures(it => it.isCritique()) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user