Hey there
We’ve found the root of that issue and it will be fixed soon in an upcoming update.
To fix the model validation issues, please run this macro / script in your world.
for (const id of game.actors.invalidDocumentIds) {
const actor = game.actors.getInvalid(id);
ui.notifications.info(`Fixing ${actor.name} (${actor.uuid})`);
await actor.update(actor.toObject(), { diff: false })
}
for (const scene of game.scenes) {
for (const token of scene.tokens) {
if (!token.id) {
continue;
}
const actorId = token.actorId;
const baseActor = game.actors.get(actorId)
?? (game.actors.invalidDocumentIds.has(actorId)
? game.actors.getInvalid(actorId) : null);
if (!baseActor) {
continue;
}
const overrides = getDocumentClass("Actor").schema.clean(token.actorData, { partial: true });
const actorData = foundry.utils.mergeObject(baseActor.toObject(), overrides);
const actor = getDocumentClass("Actor").fromSource(foundry.utils.deepClone(actorData), { parent: token });
const fixedActorData = foundry.utils.filterObject(actor.toObject(), token.actorData);
const diffActorData = foundry.utils.diffObject(token.actorData, fixedActorData);
if (foundry.utils.isEmpty(diffActorData)) {
continue;
}
ui.notifications.info(`Fixing ${token.name} (${token.uuid})`);
if (token.actorLink) {
await token.update({ actorData: diffActorData }, { diff: false });
} else {
await token.update({ actorLink: true }, { diff: false });
await token.update({ actorLink: false, actorData: diffActorData }, { diff: false });
}
}
}
foundry.utils.debouncedReload();
(Thanks to the folks over on the Foundry Discord for the script!)