fix(hooks): delay editMode flag setting to avoid phase error on createActor

The createActor hook was calling actor.setFlag() immediately, which triggered
updateActor -> prepareData -> prepareEmbeddedDocuments() -> applyActiveEffects().

Since the actor had already gone through data preparation during creation,
the effects had already been applied, causing the 'phase already completed' error.

Solution: Use setTimeout(..., 0) to defer the flag setting until after the
current preparation cycle is complete.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
2026-06-04 23:20:40 +02:00
parent 6fbc7e7864
commit 02aabbea36
+12 -2
View File
@@ -147,7 +147,17 @@ export const registerHooks = function () {
}*/
}
});
Hooks.on("createActor", function (actor, options, id) {
actor.setFlag("world", "editMode", true)
Hooks.on("createActor", async function (actor, options, id) {
// Delay flag setting to avoid the "phase already completed" error
// When an actor is created, it goes through data preparation which applies effects.
// If we call setFlag() immediately, it triggers updateActor -> prepareData ->
// prepareEmbeddedDocuments() which tries to apply effects again, causing the error.
// By using setTimeout with 0ms, we defer the flag setting until after the current
// preparation cycle is complete.
setTimeout(() => {
actor.setFlag("world", "editMode", true).catch(err => {
console.error("Vermine2047 | Failed to set editMode flag:", err);
});
}, 0);
})
}