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
This commit is contained in:
supervj 2021-02-22 16:43:41 -05:00
parent c829f2b7b1
commit e43444bc48
2 changed files with 58 additions and 5 deletions

View file

@ -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));

View file

@ -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;