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:
+12
-2
@@ -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);
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user