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:
@@ -62,10 +62,9 @@ export default class MournbladeCYD2ItemSheetV2 extends HandlebarsApplicationMixi
|
||||
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.document.system.description || "", { async: true }
|
||||
),
|
||||
isEditMode: true,
|
||||
isEditMode: this.isEditMode,
|
||||
isEditable: this.isEditable,
|
||||
isGM: game.user.isGM,
|
||||
config: game.system.mournbladecyd2.config,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -189,29 +188,36 @@ export default class MournbladeCYD2ItemSheetV2 extends HandlebarsApplicationMixi
|
||||
*/
|
||||
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: false,
|
||||
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: false,
|
||||
flags: {}
|
||||
};
|
||||
|
||||
// Créer directement l'effet actif sur l'item
|
||||
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"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,6 +229,8 @@ export default class MournbladeCYD2ItemSheetV2 extends HandlebarsApplicationMixi
|
||||
*/
|
||||
static async #onEditEffect(event, target) {
|
||||
event.preventDefault();
|
||||
if (!this.isEditable || !this.document) return;
|
||||
|
||||
const effectId = target?.dataset?.effectId;
|
||||
if (!effectId) return;
|
||||
|
||||
@@ -241,18 +249,30 @@ export default class MournbladeCYD2ItemSheetV2 extends HandlebarsApplicationMixi
|
||||
*/
|
||||
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}" ?`
|
||||
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"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -265,30 +285,50 @@ export default class MournbladeCYD2ItemSheetV2 extends HandlebarsApplicationMixi
|
||||
*/
|
||||
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"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Applique un effet à partir de l'item
|
||||
* Applique un effet à partir de l'item à un acteur sélectionné
|
||||
* Cette méthode n'est pas directement utilisable sans acteur cible
|
||||
* Elle est gardée pour compatibilité mais devrait être appelée avec un acteur
|
||||
* @param {Event} event - Événement
|
||||
* @param {HTMLElement} target - Éléments cible
|
||||
* @private
|
||||
*/
|
||||
static async #onApplyEffect(event, target) {
|
||||
event.preventDefault();
|
||||
if (!this.isEditable) return;
|
||||
|
||||
const effectId = target?.dataset?.effectId;
|
||||
if (!effectId) return;
|
||||
if (!effectId || !this.document) return;
|
||||
|
||||
const effect = this.document.effects.get(effectId);
|
||||
if (effect) {
|
||||
await effect.apply();
|
||||
}
|
||||
if (!effect) return;
|
||||
|
||||
// Pour appliquer un effet d'item, il faut sélectionner un acteur
|
||||
// Cette méthode est placeholders - l'application devrait être gérée par drag-drop
|
||||
// ou par une action spécifique qui demande à l'utilisateur de sélectionner un acteur
|
||||
ui.notifications.warn(
|
||||
game.i18n.localize("MOURNBLADECYD2.EFFECT.selectActor") ||
|
||||
"Veuillez d'abord sélectionner un acteur pour appliquer cet effet."
|
||||
);
|
||||
}
|
||||
|
||||
// #endregion
|
||||
|
||||
Reference in New Issue
Block a user