2023-11-04 17:48:50 +01:00
|
|
|
import { ENTITE_INCARNE } from "../constants.js";
|
2023-11-12 15:00:48 +01:00
|
|
|
import { TYPES } from "../item.js";
|
2023-11-04 17:48:50 +01:00
|
|
|
import { STATUSES } from "../settings/status-effects.js";
|
|
|
|
import { RdDBaseActorSang } from "./base-actor-sang.js";
|
|
|
|
|
|
|
|
export class RdDCreature extends RdDBaseActorSang {
|
|
|
|
|
|
|
|
static get defaultIcon() {
|
|
|
|
return "systems/foundryvtt-reve-de-dragon/icons/creatures/bramart.svg";
|
|
|
|
}
|
|
|
|
|
|
|
|
isCreature() { return true }
|
|
|
|
|
|
|
|
canReceive(item) {
|
|
|
|
return item.type == TYPES.competencecreature || item.isInventaire();
|
|
|
|
}
|
|
|
|
|
|
|
|
async remiseANeuf() {
|
|
|
|
await this.removeEffects(e => true);
|
|
|
|
await this.supprimerBlessures(it => true);
|
|
|
|
const updates = {
|
|
|
|
'system.sante.endurance.value': this.system.sante.endurance.max,
|
|
|
|
'system.sante.vie.value': this.system.sante.vie.max,
|
|
|
|
'system.sante.fatigue.value': 0
|
|
|
|
};
|
|
|
|
await this.update(updates);
|
|
|
|
}
|
|
|
|
|
|
|
|
async finDeRoundBlessures() {
|
|
|
|
const nbGraves = this.filterItems(it => it.isGrave(), 'blessure').length;
|
|
|
|
if (nbGraves > 0) {
|
|
|
|
// Gestion blessure graves : -1 pt endurance par blessure grave
|
|
|
|
await this.santeIncDec("endurance", -nbGraves);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
isEffectAllowed(statusId) {
|
|
|
|
return [STATUSES.StatusComma].includes(statusId);
|
|
|
|
}
|
|
|
|
|
|
|
|
isEntiteAccordee(attacker) {
|
|
|
|
if (this.isEntite([ENTITE_INCARNE])) {
|
|
|
|
let resonnance = this.system.sante.resonnance
|
|
|
|
return (resonnance.actors.find(it => it == attacker.id))
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
async setEntiteReveAccordee(attacker) {
|
|
|
|
if (this.isEntite([ENTITE_INCARNE])) {
|
|
|
|
let resonnance = duplicate(this.system.sante.resonnance);
|
|
|
|
if (resonnance.actors.find(it => it == attacker.id)) {
|
|
|
|
// déjà accordé
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
resonnance.actors.push(attacker.id);
|
|
|
|
await this.update({ "system.sante.resonnance": resonnance });
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
super.setEntiteReveAccordee(attacker)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|