Fix: Replace deprecated ActiveEffectDialog.create() with createEmbeddedDocuments

- ActiveEffectDialog.create() was removed in Foundry VTT v14
- Replaced with direct document.createEmbeddedDocuments() call
- After creation, opens the effect sheet for editing
- Fixed in both base-actor-sheet.mjs and base-item-sheet.mjs

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
2026-06-07 00:33:44 +02:00
parent d0423b2017
commit f28719fc6f
3 changed files with 178 additions and 59 deletions
@@ -327,29 +327,36 @@ export default class MournbladeCYD2ActorSheetV2 extends HandlebarsApplicationMix
*/
static async #onCreateEffect(event, target) {
event.preventDefault();
if (!this.isEditable || !this.document) return;
// Créer les données par défaut pour un nouvel effet
const defaultEffectData = {
name: game.i18n.localize("MOURNBLADECYD2.effect.new") || "Nouvel Effet",
icon: "systems/fvtt-mournblade-cyd-2-0/assets/icons/effect.webp",
description: "",
changes: [],
disabled: false,
duration: {},
origin: this.document.uuid,
tint: "",
transfer: true,
flags: {}
};
// Utiliser la dialog native FoundryVTT pour créer l'effet
const effect = await foundry.applications.api.ActiveEffectDialog.create({
document: this.document,
effect: defaultEffectData
});
if (effect) {
await this.document.createEmbeddedDocuments("ActiveEffect", [effect.toObject()]);
try {
// Créer les données par défaut pour un nouvel effet
const defaultEffectData = {
name: game.i18n.localize("MOURNBLADECYD2.EFFECT.new") || "Nouvel Effet",
icon: "systems/fvtt-mournblade-cyd-2-0/assets/icons/effect.webp",
description: "",
changes: [],
disabled: false,
duration: {},
origin: this.document.uuid,
tint: "",
transfer: true,
flags: {}
};
// Créer directement l'effet actif sur l'acteur
const [effect] = await this.document.createEmbeddedDocuments("ActiveEffect", [defaultEffectData]);
if (effect) {
// Ouvrir la feuille d'édition de l'effet
effect.sheet.render(true);
}
} catch (error) {
console.error("MournbladeCYD2 | Failed to create effect:", error);
ui.notifications.error(
game.i18n.localize("MOURNBLADECYD2.EFFECT.createError") ||
"Erreur lors de la création de l'effet"
);
}
}
@@ -361,6 +368,8 @@ export default class MournbladeCYD2ActorSheetV2 extends HandlebarsApplicationMix
*/
static async #onEditEffect(event, target) {
event.preventDefault();
if (!this.isEditable || !this.document) return;
const effectId = target?.dataset?.effectId;
if (!effectId) return;
@@ -379,18 +388,30 @@ export default class MournbladeCYD2ActorSheetV2 extends HandlebarsApplicationMix
*/
static async #onDeleteEffect(event, target) {
event.preventDefault();
if (!this.isEditable || !this.document) return;
const effectId = target?.dataset?.effectId;
if (!effectId) return;
const effect = this.document.effects.get(effectId);
if (effect) {
const effectName = effect.name;
const confirmed = await foundry.applications.api.DialogV2.confirm({
title: game.i18n.localize("MOURNBLADECYD2.effect.deleteConfirm") || "Supprimer l'effet",
content: game.i18n.localize("MOURNBLADECYD2.effect.deleteConfirmText") || `Êtes-vous sûr de vouloir supprimer l'effet "${effect.name}" ?`
title: game.i18n.localize("MOURNBLADECYD2.EFFECT.deleteConfirm") || "Supprimer l'effet",
content: game.i18n.localize("MOURNBLADECYD2.EFFECT.deleteConfirmText", {name: effectName}) ||
`Êtes-vous sûr de vouloir supprimer l'effet "${effectName}" ?`
});
if (confirmed) {
await this.document.deleteEmbeddedDocuments("ActiveEffect", [effectId]);
try {
await this.document.deleteEmbeddedDocuments("ActiveEffect", [effectId]);
} catch (error) {
console.error("MournbladeCYD2 | Failed to delete effect:", error);
ui.notifications.error(
game.i18n.localize("MOURNBLADECYD2.EFFECT.deleteError") ||
"Erreur lors de la suppression de l'effet"
);
}
}
}
}
@@ -403,12 +424,22 @@ export default class MournbladeCYD2ActorSheetV2 extends HandlebarsApplicationMix
*/
static async #onToggleEffect(event, target) {
event.preventDefault();
if (!this.isEditable || !this.document) return;
const effectId = target?.dataset?.effectId;
if (!effectId) return;
const effect = this.document.effects.get(effectId);
if (effect) {
await effect.update({ disabled: !effect.disabled });
try {
await effect.update({ disabled: !effect.disabled });
} catch (error) {
console.error("MournbladeCYD2 | Failed to toggle effect:", error);
ui.notifications.error(
game.i18n.localize("MOURNBLADECYD2.EFFECT.toggleError") ||
"Erreur lors du basculement de l'effet"
);
}
}
}