diff --git a/module/config.js b/module/config.js index 403404a5..5ef67a5e 100644 --- a/module/config.js +++ b/module/config.js @@ -1242,4 +1242,4 @@ SW5E.characterFlags = { }; // Configure allowed status flags -SW5E.allowedActorFlags = ["isPolymorphed", "originalActor"].concat(Object.keys(SW5E.characterFlags)); +SW5E.allowedActorFlags = ["isPolymorphed", "originalActor", "dataVersion"].concat(Object.keys(SW5E.characterFlags)); diff --git a/module/migration.js b/module/migration.js index c0e9ca70..ef2d0667 100644 --- a/module/migration.js +++ b/module/migration.js @@ -154,6 +154,11 @@ export const migrateActorData = function(actor) { if ( hasItemUpdates ) updateData.items = items; } + // Update NPC data with new datamodel information + if (actor.type === "npc") { + //_updateNPCData(actor); + } + // migrate powers last since it relies on item classes being migrated first. _migrateActorPowers(actor, updateData); @@ -234,6 +239,54 @@ export const migrateSceneData = function(scene) { /* Low level migration utilities /* -------------------------------------------- */ +/* -------------------------------------------- */ + +/** + * Update an NPC Actor's data based on compendium + * @param {Object} actor The data object for an Actor + * @return {Object} The updated Actor + */ +function _updateNPCData(actor) { + + const actorData = actor.data; + const updateData = {}; +// check for flag.core + const hasSource = actor?.flags?.core?.sourceId !== undefined; + if (!hasSource) return actor; + // shortcut out if dataVersion flag is set to 1.2.4 + const sourceID = actor.flags.core.sourceID; + const coreSource = sourceID.substr(0,sourceID.length-17); + const core_id = sourceID.substr(sourceID.length-16,16); + if (coreSource === "Compendium.sw5e.monsters"){ + const monster = game.actors.entities.filter(entry => entry._id === core_id); + const monsterData = monster.data; + // copy movement[], senses[], powercasting, force[], tech[], powerForceLevel, powerTechLevel + updateData["data.attributes.movement"] = monsterData.attributes.movement; + updateData["data.attributes.senses"] = monsterData.attributes.senses; + updateData["data.attributes.powercasting"] = monsterData.attributes.powercasting; + updateData["data.attributes.force"] = monsterData.attributes.force; + updateData["data.attributes.tech"] = monsterData.attributes.tech; + updateData["data.details.powerForceLevel"] = monsterData.details.powerForceLevel; + updateData["data.details.powerTechLevel"] = monsterData.details.powerTechLevel; + // push missing powers onto actor + for ( let i of monster.items ) { + const itemData = migrateItemData(i.data); + if ( itemData.type === "power" ) { + // check to see if actor has that core item, if not, push to actor. + } + } + // set flag to check to see if migration has been done so we don't do it again. + actor.setFlag("sw5e","dataVersion","1.2.4"); + } + + + //merge object + actorData = mergeObject(actorData, updateData); + // Return the scrubbed data + return actor; +} + + /** * Migrate the actor speed string to movement object * @private @@ -294,11 +347,11 @@ function _migrateActorPowers(actorData, updateData) { if ( !hasNewLimit ) { for (let i = 1; i <= 9; i++) { // add new - updateData["data.powers.power" + i + ".fvalue"] = getProperty(ad.powers,"power" + i + ".fvalue"); - updateData["data.powers.power" + i + ".fmax"] = getProperty(ad.powers,"power" + i + ".fmax"); + updateData["data.powers.power" + i + ".fvalue"] = getProperty(ad.powers,"power" + i + ".value"); + updateData["data.powers.power" + i + ".fmax"] = getProperty(ad.powers,"power" + i + ".max"); updateData["data.powers.power" + i + ".foverride"] = null; - updateData["data.powers.power" + i + ".tvalue"] = getProperty(ad.powers,"power" + i + ".tvalue"); - updateData["data.powers.power" + i + ".tmax"] = getProperty(ad.powers,"power" + i + ".tmax"); + updateData["data.powers.power" + i + ".tvalue"] = getProperty(ad.powers,"power" + i + ".value"); + updateData["data.powers.power" + i + ".tmax"] = getProperty(ad.powers,"power" + i + ".max"); updateData["data.powers.power" + i + ".toverride"] = null; //remove old updateData["data.powers.power" + i + ".-=value"] = null;