Gestion des signes draconiques #455

Closed
vincent.vandeme wants to merge 233 commits from v1.4-signes-draconiques into master
Showing only changes of commit 68cd086a2f - Show all commits

View File

@ -37,11 +37,15 @@ import { Monnaie } from "./item-monnaie.js";
export class RdDActor extends Actor { export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
static init() { static init() {
Hooks.on("deleteActiveEffect", (actor, effect, options) => actor.onDeleteActiveEffect(effect, options)); Hooks.on("deleteActiveEffect", (effect, options, userId) => RdDActor.getParentActor(effect)?.onDeleteActiveEffect(effect, options));
Hooks.on("createActiveEffect", (actor, effect, options) => actor.onCreateActiveEffect(effect, options));
Hooks.on("createOwnedItem", (actor, item, options, id) => actor.onCreateOwnedItem(item, options, id)); Hooks.on("createOwnedItem", (actor, item, options, id) => actor.onCreateOwnedItem(item, options, id));
Hooks.on("deleteOwnedItem", (actor, item, options, id) => actor.onDeleteOwnedItem(item, options, id)); Hooks.on("deleteOwnedItem", (actor, item, options, id) => actor.onDeleteOwnedItem(item, options, id));
Hooks.on("updateActor", (actor, update, options, actorId) => actor.onUpdateActor(update, options, actorId)); Hooks.on("updateActor", (actor, update, options, actorId) => actor.onUpdateActor(update, options, actorId));
Hooks.on("createActiveEffect", (effect, options, userId) => RdDActor.getParentActor(effect)?.onCreateActiveEffect(effect, options));
}
static getParentActor(document){
return document?.parent instanceof Actor ? document.parent : undefined
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -3076,11 +3080,12 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async setStatusDemiReve(status) { async setStatusDemiReve(status) {
const demiReve = StatusEffects.demiReve();
if (status) { if (status) {
await this.addStatusEffect(StatusEffects.demiReve()) await this.addStatusEffect(demiReve)
} }
else { else {
this.deleteStatusEffect(StatusEffects.demiReve()) this.deleteStatusEffect(demiReve)
} }
} }
@ -3093,8 +3098,8 @@ export class RdDActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async forceStatusEffectId(statusId, sonne) { async forceStatusEffectId(statusId, isSet) {
if (sonne) { if (isSet) {
await this.addStatusEffectById(statusId); await this.addStatusEffectById(statusId);
} }
else { else {
@ -3104,21 +3109,17 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
deleteStatusEffectById(id) { deleteStatusEffectById(id) {
const effects = Array.from(this.effects?.values()) const ids = Array.from(this.effects?.values())
.filter(it => it.data.flags.core?.statusId == id); .filter(it => it.data.flags.core?.statusId == id)
this._deleteStatusEffects(effects); .map(it => it.id);
this.deleteEmbeddedDocuments('ActiveEffect', ids);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
deleteStatusEffect(effect) { deleteStatusEffect(effect) {
const toDelete = Array.from(this.effects?.values()) const ids = Array.from(this.effects?.values())
.filter(it => StatusEffects.statusId(it.data) == StatusEffects.statusId(effect)); .filter(it => StatusEffects.statusId(it.data) == StatusEffects.statusId(effect))
this._deleteStatusEffects(toDelete); .map(it => it.id);
}
/* -------------------------------------------- */
_deleteStatusEffects(effects) {
const ids = effects.map(it => it.id);
this.deleteEmbeddedDocuments('ActiveEffect', ids); this.deleteEmbeddedDocuments('ActiveEffect', ids);
} }
@ -3130,9 +3131,9 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async addStatusEffect(statusEffect) { async addStatusEffect(statusEffect) {
this.deleteStatusEffectById(statusEffect.id);
const effet = duplicate(statusEffect); const effet = duplicate(statusEffect);
effet["flags.core.statusId"] = effet.id; this.deleteStatusEffectById(effet.id);
effet.flags.core.statusId = effet.id;
await this.createEmbeddedDocuments('ActiveEffect', [effet]); await this.createEmbeddedDocuments('ActiveEffect', [effet]);
} }