diff --git a/module/actor/entity.js b/module/actor/entity.js index 4c24956a..2cfe2a58 100644 --- a/module/actor/entity.js +++ b/module/actor/entity.js @@ -544,10 +544,28 @@ export default class Actor5e extends Actor { actorData.data.attributes.tech.level = techProgression.levels; } - /** - * ? should I tally number of powers known here? - */ - + // Tally Powers Known + const knownPowers = this.data.items.filter(i => i.type === "power"); + let knownForcePowers = 0; + let knownTechPowers = 0; + for ( let knownPower of knownPowers ) { + const d = knownPower.data; + switch (knownPower.data.school){ + case "lgt": + case "uni": + case "drk":{ + knownForcePowers++; + break; + } + case "tec":{ + knownTechPowers++; + break; + } + } + continue; + } + actorData.data.attributes.force.known.value = knownForcePowers; + actorData.data.attributes.tech.known.value = knownTechPowers; } @@ -1249,9 +1267,11 @@ export default class Actor5e extends Actor { // Recover power slots for ( let [k, v] of Object.entries(data.powers) ) { - updateData[`data.powers.${k}.value`] = Number.isNumeric(v.override) ? v.override : (v.max ?? 0); + updateData[`data.powers.${k}.fvalue`] = Number.isNumeric(v.foverride) ? v.foverride : (v.fmax ?? 0); + } + for ( let [k, v] of Object.entries(data.powers) ) { + updateData[`data.powers.${k}.tvalue`] = Number.isNumeric(v.toverride) ? v.toverride : (v.tmax ?? 0); } - // Determine the number of hit dice which may be recovered let recoverHD = Math.max(Math.floor(data.details.level / 2), 1); let dhd = 0; diff --git a/module/item/entity.js b/module/item/entity.js index 479edb49..00c34a34 100644 --- a/module/item/entity.js +++ b/module/item/entity.js @@ -526,12 +526,12 @@ export default class Item5e extends Item { if ( canConsume === false ) return false; } - // Consume Power Slots + // Consume Power Slots and Force/Tech Points if ( consumePowerSlot ) { const level = this.actor?.data.data.powers[consumePowerSlot]; const fp = this.actor.data.data.attributes.force.points; const tp = this.actor.data.data.attributes.tech.points; - const powerCost = level + 1; + const powerCost = id.level + 1; switch (id.school){ case "lgt": case "uni": @@ -560,10 +560,10 @@ export default class Item5e extends Item { } actorUpdates[`data.powers.${consumePowerSlot}.tvalue`] = Math.max(powers - 1, 0); if (tp.temp >= powerCost) { - actorUpdates["data.attributes.force.points.temp"] = tp.temp - powerCost; + actorUpdates["data.attributes.tech.points.temp"] = tp.temp - powerCost; }else{ - actorUpdates["data.attributes.force.points.value"] = tp.value + tp.temp - powerCost; - actorUpdates["data.attributes.force.points.temp"] = 0; + actorUpdates["data.attributes.tech.points.value"] = tp.value + tp.temp - powerCost; + actorUpdates["data.attributes.tech.points.temp"] = 0; } break; } diff --git a/module/migration.js b/module/migration.js index 8b03812f..1998c524 100644 --- a/module/migration.js +++ b/module/migration.js @@ -265,7 +265,7 @@ function _migrateActorPowers(actorData, updateData) { const ad = actorData.data; // If new Force & Tech data is not present, create it - const hasNewAttrib = ad?.attributes?.force?.level !== undefined; + let hasNewAttrib = ad?.attributes?.force?.level !== undefined; if ( !hasNewAttrib ) { updateData["data.attributes.force.known.value"] = 0; updateData["data.attributes.force.known.min"] = 0; @@ -288,8 +288,8 @@ function _migrateActorPowers(actorData, updateData) { } // If new Power F/T split data is not present, create it - let hasNewBonus = ad?.powers?.power1?.fvalue !== undefined; - if ( !hasNewBonus ) { + const hasNewLimit = ad?.powers?.power1?.fvalue !== undefined; + if ( !hasNewLimit ) { for (let i = 1; i <= 9; i++) { // add new updateData["data.powers.power" + i + ".fvalue"] = 0; @@ -302,7 +302,7 @@ function _migrateActorPowers(actorData, updateData) { } } // If new Bonus Power DC data is not present, create it - hasNewBonus = ad?.bonuses?.power?.forceLightDC !== undefined; + const hasNewBonus = ad?.bonuses?.power?.forceLightDC !== undefined; if ( !hasNewBonus ) { updateData["data.bonuses.power.forceLightDC"] = ""; updateData["data.bonuses.power.forceDarkDC"] = "";