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) {
|
Hooks.on("createActor", async function (actor, options, id) {
|
||||||
actor.setFlag("world", "editMode", true)
|
// 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