From e43444bc482e18d4c0f5707ec9e3dcf85d49285c Mon Sep 17 00:00:00 2001 From: supervj <64861570+supervj@users.noreply.github.com> Date: Mon, 22 Feb 2021 16:43:41 -0500 Subject: [PATCH] Adding flag to config.js for dataVersion control Adding flag for dataVersion control ** added shell of migration.js for updating NPC Data. This is only being pushed for visibility by people other than me and is by no means done or tested and probably very broken. Line 159 commented out to keep from running broken function. Uncomment for testing. Broken _updateNPCData from lines 242 to 289 --- module/config.js | 2 +- module/migration.js | 61 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 58 insertions(+), 5 deletions(-) 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;