From f5c4213a8ff3a9320ff5add63419f6ca29d8c8e0 Mon Sep 17 00:00:00 2001 From: sladecraven Date: Sun, 4 Sep 2022 09:58:51 +0200 Subject: [PATCH] v10 Migration --- images/icons/icon_ability.webp | Bin 0 -> 28016 bytes images/icons/icon_armor.webp | Bin 0 -> 28430 bytes images/icons/icon_weapon.webp | Bin 0 -> 29218 bytes modules/pegasus-actor-sheet.js | 14 +- modules/pegasus-actor.js | 716 +++++++++--------- modules/pegasus-item-sheet.js | 379 +++++---- modules/pegasus-roll-dialog.js | 16 +- modules/pegasus-utility.js | 29 +- system.json | 18 +- templates/actor-sheet.html | 238 +++--- templates/item-armor-sheet.html | 14 +- templates/item-combatmodule-sheet.html | 8 +- templates/item-effect-sheet.html | 50 +- templates/item-equipment-sheet.html | 28 +- templates/item-mobilitymodule-sheet.html | 20 +- templates/item-money-sheet.html | 6 +- templates/item-perk-sheet.html | 30 +- templates/item-power-sheet.html | 34 +- templates/item-powercoremodule-sheet.html | 10 +- templates/item-propulsionmodule-sheet.html | 10 +- templates/item-race-sheet.html | 28 +- templates/item-role-sheet.html | 14 +- templates/item-shield-sheet.html | 12 +- templates/item-specialisation-sheet.html | 12 +- templates/item-vehiclehull-sheet.html | 12 +- templates/item-vehiclemodule-sheet.html | 24 +- templates/item-vehicleweaponmodule-sheet.html | 26 +- templates/item-vice-sheet.html | 8 +- templates/item-virtue-sheet.html | 8 +- templates/item-weapon-sheet.html | 42 +- templates/npc-sheet.html | 8 +- templates/partial-actor-stat-block.html | 4 +- templates/partial-actor-status.html | 20 +- templates/partial-equipment-effects.html | 2 +- templates/partial-item-description.html | 2 +- 35 files changed, 901 insertions(+), 941 deletions(-) create mode 100644 images/icons/icon_ability.webp create mode 100644 images/icons/icon_armor.webp create mode 100644 images/icons/icon_weapon.webp diff --git a/images/icons/icon_ability.webp b/images/icons/icon_ability.webp new file mode 100644 index 0000000000000000000000000000000000000000..1986d5ca242b438b1afca3b9f9454c90fffa2694 GIT binary patch literal 28016 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�aFEwl~A{m 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 literal 0 HcmV?d00001 diff --git a/images/icons/icon_weapon.webp b/images/icons/icon_weapon.webp new file mode 100644 index 0000000000000000000000000000000000000000..cefdebd2328361b0284fb83688fe2f4c6d635407 GIT binary patch literal 29218 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 B(8vG) literal 0 HcmV?d00001 diff --git a/modules/pegasus-actor-sheet.js b/modules/pegasus-actor-sheet.js index a5f2840..aea5c22 100644 --- a/modules/pegasus-actor-sheet.js +++ b/modules/pegasus-actor-sheet.js @@ -25,9 +25,8 @@ export class PegasusActorSheet extends ActorSheet { /* -------------------------------------------- */ async getData() { - const objectData = PegasusUtility.data(this.object); - - let actorData = duplicate(PegasusUtility.templateData(this.object)); + const objectData = this.object + let actorData = duplicate(this.object) let formData = { title: this.title, @@ -37,7 +36,7 @@ export class PegasusActorSheet extends ActorSheet { name: objectData.name, editable: this.isEditable, cssClass: this.isEditable ? "editable" : "locked", - data: actorData, + data: actorData.system, traumaState: this.actor.getTraumaState(), effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)), limited: this.object.limited, @@ -87,7 +86,7 @@ export class PegasusActorSheet extends ActorSheet { /* -------------------------------------------- */ async rollIDR( itemId, diceValue) { - let item = this.actor.data.items.get( itemId) ?? {name: "Unknown"} + let item = this.actor.items.get( itemId) ?? {name: "Unknown"} let myRoll = new Roll(diceValue+"x").roll({ async: false }) await PegasusUtility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) let chatData = { @@ -362,10 +361,9 @@ export class PegasusActorSheet extends ActorSheet { /* -------------------------------------------- */ async _onDropItem(event, dragData) { - console.log(">>>>>> DROPPED!!!!") - let item = await PegasusUtility.searchItem( dragData) + const item = fromUuidSync(dragData.uuid) if (item == undefined) { - item = this.actor.items.get( dragData.data._id ) + item = this.actor.items.get( dragData.uuid ) } let ret = await this.actor.preprocessItem( event, item, true ) if ( ret ) { diff --git a/modules/pegasus-actor.js b/modules/pegasus-actor.js index 524c986..794ebe4 100644 --- a/modules/pegasus-actor.js +++ b/modules/pegasus-actor.js @@ -68,7 +68,7 @@ export class PegasusActor extends Actor { if (this.type == 'character') { this.computeNRGHealth(); - this.data.data.encCapacity = this.getEncumbranceCapacity() + this.system.encCapacity = this.getEncumbranceCapacity() this.buildContainerTree() } @@ -83,80 +83,80 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getEncumbranceCapacity() { - return this.data.data.statistics.str.value * 25 + return this.system.statistics.str.value * 25 } /* -------------------------------------------- */ getActivePerks() { - let perks = this.data.items.filter(item => item.type == 'perk' && item.data.data.active); + let perks = this.items.filter(item => item.type == 'perk' && item.system.active); return perks; } /* -------------------------------------------- */ getAbilities() { - let ab = this.data.items.filter(item => item.type == 'ability'); + let ab = this.items.filter(item => item.type == 'ability'); return ab; } /* -------------------------------------------- */ getPerks() { - let comp = this.data.items.filter(item => item.type == 'perk'); + let comp = this.items.filter(item => item.type == 'perk'); return comp; } /* -------------------------------------------- */ getEffects() { - let comp = this.data.items.filter(item => item.type == 'effect'); + let comp = this.items.filter(item => item.type == 'effect'); return comp; } /* -------------------------------------------- */ getPowers() { - let comp = this.data.items.filter(item => item.type == 'power'); + let comp = this.items.filter(item => item.type == 'power'); return comp; } /* -------------------------------------------- */ getMoneys() { - let comp = this.data.items.filter(item => item.type == 'money'); + let comp = this.items.filter(item => item.type == 'money'); return comp; } /* -------------------------------------------- */ getVirtues() { - let comp = this.data.items.filter(item => item.type == 'virtue'); + let comp = this.items.filter(item => item.type == 'virtue'); return comp; } /* -------------------------------------------- */ getVices() { - let comp = this.data.items.filter(item => item.type == 'vice'); + let comp = this.items.filter(item => item.type == 'vice'); return comp; } /* -------------------------------------------- */ getArmors() { - let comp = duplicate(this.data.items.filter(item => item.type == 'armor') || []); + let comp = duplicate(this.items.filter(item => item.type == 'armor') || []); return comp; } /* -------------------------------------------- */ getShields() { - let comp = this.data.items.filter(item => item.type == 'shield') + let comp = this.items.filter(item => item.type == 'shield') return comp; } getRace() { - let race = this.data.items.filter(item => item.type == 'race') + let race = this.items.filter(item => item.type == 'race') return race[0] ?? []; } getRole() { - let role = this.data.items.filter(item => item.type == 'role') + let role = this.items.filter(item => item.type == 'role') return role[0] ?? []; } /* -------------------------------------------- */ checkAndPrepareEquipment(item) { - if (item.data.resistance) { - item.data.resistanceDice = PegasusUtility.getDiceFromLevel(item.data.resistance) + if (item.system.resistance) { + item.system.resistanceDice = PegasusUtility.getDiceFromLevel(item.system.resistance) } - if (item.data.idr) { - item.data.idrDice = PegasusUtility.getDiceFromLevel(item.data.idr) + if (item.system.idr) { + item.system.idrDice = PegasusUtility.getDiceFromLevel(item.system.idr) } - if (item.data.damage) { - item.data.damageDice = PegasusUtility.getDiceFromLevel(item.data.damage) + if (item.system.damage) { + item.system.damageDice = PegasusUtility.getDiceFromLevel(item.system.damage) } - if (item.data.level) { - item.data.levelDice = PegasusUtility.getDiceFromLevel(item.data.level) + if (item.system.level) { + item.system.levelDice = PegasusUtility.getDiceFromLevel(item.system.level) } } @@ -170,16 +170,16 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getWeapons() { - let comp = duplicate(this.data.items.filter(item => item.type == 'weapon') || []); + let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []); return comp; } /* -------------------------------------------- */ getItemById(id) { - let item = this.data.items.find(item => item.id == id); + let item = this.items.find(item => item.id == id); if (item) { item = duplicate(item) if (item.type == 'specialisation') { - item.data.dice = PegasusUtility.getDiceFromLevel(item.data.level); + item.system.dice = PegasusUtility.getDiceFromLevel(item.system.level); } } return item; @@ -187,9 +187,9 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getSpecs() { - let comp = duplicate(this.data.items.filter(item => item.type == 'specialisation') || []); + let comp = duplicate(this.items.filter(item => item.type == 'specialisation') || []); for (let c of comp) { - c.data.dice = PegasusUtility.getDiceFromLevel(c.data.level); + c.system.dice = PegasusUtility.getDiceFromLevel(c.system.level); } return comp; } @@ -198,10 +198,10 @@ export class PegasusActor extends Actor { async manageWorstFear(flag) { if (flag) { let effect = await PegasusUtility.getEffectFromCompendium("Worst Fear") - effect.data.worstfear = true + effect.system.worstfear = true this.createEmbeddedDocuments('Item', [effect]) } else { - let effect = this.data.items.find(item => item.type == "effect" && item.data.data.worstfear) + let effect = this.items.find(item => item.type == "effect" && item.system.worstfear) if (effect) { this.deleteEmbeddedDocuments('Item', [effect.id]) } @@ -211,10 +211,10 @@ export class PegasusActor extends Actor { async manageDesires(flag) { if (flag) { let effect = await PegasusUtility.getEffectFromCompendium("Desires") - effect.data.desires = true + effect.system.desires = true this.createEmbeddedDocuments('Item', [effect]) } else { - let effect = this.data.items.find(item => item.type == "effect" && item.data.data.desires) + let effect = this.items.find(item => item.type == "effect" && item.system.desires) if (effect) { this.deleteEmbeddedDocuments('Item', [effect.id]) } @@ -223,32 +223,32 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getRelevantSpec(statKey) { - let comp = duplicate(this.data.items.filter(item => item.type == 'specialisation' && item.data.data.statistic == statKey) || []); + let comp = duplicate(this.items.filter(item => item.type == 'specialisation' && item.system.statistic == statKey) || []); for (let c of comp) { - c.data.dice = PegasusUtility.getDiceFromLevel(c.data.level); + c.system.dice = PegasusUtility.getDiceFromLevel(c.system.level); } return comp; } /* -------------------------------------------- */ async activatePerk(perkId) { - let item = this.data.items.find(item => item.id == perkId); - if (item && item.data.data) { - let update = { _id: item.id, "data.active": !item.data.data.active }; + let item = this.items.find(item => item.id == perkId); + if (item && item.system) { + let update = { _id: item.id, "data.active": !item.system.active }; await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity } } /* -------------------------------------------- */ async activateViceOrVirtue(itemId) { - let item = this.data.items.find(item => item.id == itemId) - if (item && item.data.data) { - let nrg = duplicate(this.data.data.nrg) - if (!item.data.data.activated) { // Current value + let item = this.items.find(item => item.id == itemId) + if (item && item.system) { + let nrg = duplicate(this.system.nrg) + if (!item.system.activated) { // Current value let effects = [] - for (let effect of item.data.data.effectsgained) { - effect.data.powerId = itemId // Link to the perk, in order to dynamically remove them + for (let effect of item.system.effectsgained) { + effect.system.powerId = itemId // Link to the perk, in order to dynamically remove them effects.push(effect) } if (effects.length) { @@ -256,8 +256,8 @@ export class PegasusActor extends Actor { } } else { let toRem = [] - for (let item of this.data.items) { - if (item.type == 'effect' && item.data.data.powerId == itemId) { + for (let item of this.items) { + if (item.type == 'effect' && item.system.powerId == itemId) { toRem.push(item.id) } } @@ -265,67 +265,67 @@ export class PegasusActor extends Actor { await this.deleteEmbeddedDocuments('Item', toRem) } } - let update = { _id: item.id, "data.activated": !item.data.data.activated } + let update = { _id: item.id, "data.activated": !item.system.activated } await this.updateEmbeddedDocuments('Item', [update]) // Updates one EmbeddedEntity } } /* -------------------------------------------- */ async activatePower(itemId) { - let item = this.data.items.find(item => item.id == itemId) - if (item && item.data.data) { + let item = this.items.find(item => item.id == itemId) + if (item && item.system) { - let nrg = duplicate(this.data.data.nrg) - if (!item.data.data.activated) { // Current value + let nrg = duplicate(this.system.nrg) + if (!item.system.activated) { // Current value - if (item.data.data.costspent > nrg.value || item.data.data.costspent > nrg.max) { + if (item.system.costspent > nrg.value || item.system.costspent > nrg.max) { return ui.notifications.warn("Not enough NRG to activate the Power " + item.name) } - nrg.activated += item.data.data.costspent - nrg.value -= item.data.data.costspent - nrg.max -= item.data.data.costspent + nrg.activated += item.system.costspent + nrg.value -= item.system.costspent + nrg.max -= item.system.costspent await this.update({ 'data.nrg': nrg }) let effects = [] - for (let effect of item.data.data.effectsgained) { - effect.data.powerId = itemId // Link to the perk, in order to dynamically remove them + for (let effect of item.system.effectsgained) { + effect.system.powerId = itemId // Link to the perk, in order to dynamically remove them effects.push(effect) } if (effects.length) { await this.createEmbeddedDocuments('Item', effects) } - if (item.data.data.activatedtext.length > 0) { - ChatMessage.create({ content: `Power ${item.name} activated : ${item.data.data.activatedtext}` }) + if (item.system.activatedtext.length > 0) { + ChatMessage.create({ content: `Power ${item.name} activated : ${item.system.activatedtext}` }) } } else { - nrg.activated -= item.data.data.costspent - nrg.max += item.data.data.costspent + nrg.activated -= item.system.costspent + nrg.max += item.system.costspent await this.update({ 'data.nrg': nrg }) let toRem = [] - for (let item of this.data.items) { - if (item.type == 'effect' && item.data.data.powerId == itemId) { + for (let item of this.items) { + if (item.type == 'effect' && item.system.powerId == itemId) { toRem.push(item.id) } } if (toRem.length) { await this.deleteEmbeddedDocuments('Item', toRem) } - if (item.data.data.deactivatedtext.length > 0) { - ChatMessage.create({ content: `Power ${item.name} deactivated : ${item.data.data.deactivatedtext}` }) + if (item.system.deactivatedtext.length > 0) { + ChatMessage.create({ content: `Power ${item.name} deactivated : ${item.system.deactivatedtext}` }) } } - let update = { _id: item.id, "data.activated": !item.data.data.activated } + let update = { _id: item.id, "data.activated": !item.system.activated } await this.updateEmbeddedDocuments('Item', [update]) // Updates one EmbeddedEntity } } /* -------------------------------------------- */ async equipItem(itemId) { - let item = this.data.items.find(item => item.id == itemId); - if (item && item.data.data) { - let update = { _id: item.id, "data.equipped": !item.data.data.equipped }; + let item = this.items.find(item => item.id == itemId); + if (item && item.system) { + let update = { _id: item.id, "data.equipped": !item.system.equipped }; await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity } } @@ -343,69 +343,69 @@ export class PegasusActor extends Actor { /* ------------------------------------------- */ getEquipments() { - return this.data.items.filter(item => item.type == 'shield' || item.type == 'armor' || item.type == "weapon" || item.type == "equipment"); + return this.items.filter(item => item.type == 'shield' || item.type == 'armor' || item.type == "weapon" || item.type == "equipment"); } /* ------------------------------------------- */ getEquipmentsOnly() { - return duplicate(this.data.items.filter(item => item.type == "equipment") || []) + return duplicate(this.items.filter(item => item.type == "equipment") || []) } /* ------------------------------------------- */ computeThreatLevel() { let tl = 0 for (let key of statThreatLevel) { // Init with concerned stats - tl += PegasusUtility.getDiceValue(this.data.data.statistics[key].value) + tl += PegasusUtility.getDiceValue(this.system.statistics[key].value) } let powers = duplicate(this.getPowers() || []) if (powers.length > 0) { // Then add some mental ones of powers - tl += PegasusUtility.getDiceValue(this.data.data.statistics.foc.value) - tl += PegasusUtility.getDiceValue(this.data.data.statistics.mnd.value) + tl += PegasusUtility.getDiceValue(this.system.statistics.foc.value) + tl += PegasusUtility.getDiceValue(this.system.statistics.mnd.value) } - tl += PegasusUtility.getDiceValue(this.data.data.mr.value) - let specThreat = this.data.items.filter(it => it.type == "specialisation" && it.data.data.isthreatlevel) || [] + tl += PegasusUtility.getDiceValue(this.system.mr.value) + let specThreat = this.items.filter(it => it.type == "specialisation" && it.system.isthreatlevel) || [] for (let spec of specThreat) { - tl += PegasusUtility.getDiceValue(spec.data.data.level) + tl += PegasusUtility.getDiceValue(spec.system.level) } - tl += this.data.data.nrg.absolutemax + this.data.data.secondary.health.max + this.data.data.secondary.delirium.max + tl += this.system.nrg.absolutemax + this.system.secondary.health.max + this.system.secondary.delirium.max tl += this.getPerks().length * 5 let weapons = this.getWeapons() for (let weapon of weapons) { - tl += PegasusUtility.getDiceValue(weapon.data.damage) + tl += PegasusUtility.getDiceValue(weapon.system.damage) } let armors = this.getArmors() for (let armor of armors) { - tl += PegasusUtility.getDiceValue(armor.data.resistance) + tl += PegasusUtility.getDiceValue(armor.system.resistance) } let shields = duplicate(this.getShields()) for (let shield of shields) { - tl += PegasusUtility.getDiceValue(shield.data.level) + tl += PegasusUtility.getDiceValue(shield.system.level) } let abilities = duplicate(this.getAbilities()) for (let ability of abilities) { - tl += ability.data.threatlevel + tl += ability.system.threatlevel } let equipments = this.getEquipmentsOnly() for (let equip of equipments) { - tl += equip.data.threatlevel + tl += equip.system.threatlevel } - if (tl != this.data.data.biodata.threatlevel) { + if (tl != this.system.biodata.threatlevel) { this.update({ 'data.biodata.threatlevel': tl }) } } /* ------------------------------------------- */ async buildContainerTree() { - let equipments = duplicate(this.data.items.filter(item => item.type == "equipment") || []) + let equipments = duplicate(this.items.filter(item => item.type == "equipment") || []) for (let equip1 of equipments) { - if (equip1.data.iscontainer) { - equip1.data.contents = [] - equip1.data.contentsEnc = 0 + if (equip1.system.iscontainer) { + equip1.system.contents = [] + equip1.system.contentsEnc = 0 for (let equip2 of equipments) { - if (equip1._id != equip2._id && equip2.data.containerid == equip1._id) { - equip1.data.contents.push(equip2) - let q = equip2.data.quantity ?? 1 - equip1.data.contentsEnc += q * equip2.data.weight + if (equip1._id != equip2._id && equip2.system.containerid == equip1._id) { + equip1.system.contents.push(equip2) + let q = equip2.system.quantity ?? 1 + equip1.system.contentsEnc += q * equip2.system.weight } } } @@ -414,37 +414,37 @@ export class PegasusActor extends Actor { // Compute whole enc let enc = 0 for (let item of equipments) { - item.data.idrDice = PegasusUtility.getDiceFromLevel(Number(item.data.idr)) - if (item.data.equipped) { - if (item.data.iscontainer) { - enc += item.data.contentsEnc - } else if (item.data.containerid == "") { - let q = item.data.quantity ?? 1 - enc += q * item.data.weight + item.system.idrDice = PegasusUtility.getDiceFromLevel(Number(item.system.idr)) + if (item.system.equipped) { + if (item.system.iscontainer) { + enc += item.system.contentsEnc + } else if (item.system.containerid == "") { + let q = item.system.quantity ?? 1 + enc += q * item.system.weight } } } - for (let item of this.data.items) { // Process items/shields/armors - if ((item.type == "weapon" || item.type == "shield" || item.type == "armor") && item.data.data.equipped) { - let q = item.data.data.quantity ?? 1 - enc += q * item.data.data.weight + for (let item of this.items) { // Process items/shields/armors + if ((item.type == "weapon" || item.type == "shield" || item.type == "armor") && item.system.equipped) { + let q = item.system.quantity ?? 1 + enc += q * item.system.weight } } // Store local values this.encCurrent = enc - this.containersTree = equipments.filter(item => item.data.containerid == "") // Returns the root of equipements without container + this.containersTree = equipments.filter(item => item.system.containerid == "") // Returns the root of equipements without container // Manages slow effect let overCapacity = Math.floor(this.encCurrent / this.getEncumbranceCapacity()) this.encHindrance = Math.floor(this.encCurrent / this.getEncumbranceCapacity()) //console.log("Capacity", overCapacity, this.encCurrent / this.getEncumbranceCapacity() ) - let effect = this.data.items.find(item => item.type == "effect" && item.data.data.slow) + let effect = this.items.find(item => item.type == "effect" && item.system.slow) if (overCapacity >= 4) { if (!effect) { effect = await PegasusUtility.getEffectFromCompendium("Slowed") - effect.data.slow = true + effect.system.slow = true this.createEmbeddedDocuments('Item', [effect]) } } else { @@ -456,7 +456,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ modifyStun(incDec) { - let combat = duplicate(this.data.data.combat) + let combat = duplicate(this.system.combat) combat.stunlevel += incDec if (combat.stunlevel >= 0) { this.update({ 'data.combat': combat }) @@ -479,7 +479,7 @@ export class PegasusActor extends Actor { ChatMessage.create({ content: `${this.name} Stun threshold has been exceeded.` }) } if (incDec > 0 && stunAbove > 0) { - let delirium = duplicate(this.data.data.secondary.delirium) + let delirium = duplicate(this.system.secondary.delirium) delirium.value -= incDec this.update({ 'data.secondary.delirium': delirium }) } @@ -487,7 +487,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ modifyMomentum(incDec) { - let momentum = duplicate(this.data.data.momentum) + let momentum = duplicate(this.system.momentum) momentum.value += incDec this.update({ 'data.momentum': momentum }) let chatData = { @@ -513,7 +513,7 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ getEffectByLabel(label) { - return this.getActiveEffects().find(it => it.data.label == label); + return this.getActiveEffects().find(it => it.system.label == label); } /* -------------------------------------------- */ getEffectById(id) { @@ -522,26 +522,26 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getAttribute(attrKey) { - return this.data.data.attributes[attrKey]; + return this.system.attributes[attrKey]; } /* -------------------------------------------- */ async addObjectToContainer(itemId, containerId) { - let container = this.data.items.find(item => item.id == containerId && item.data.data.iscontainer) - let object = this.data.items.find(item => item.id == itemId) + let container = this.items.find(item => item.id == containerId && item.system.iscontainer) + let object = this.items.find(item => item.id == itemId) if (container) { - if (object.data.data.iscontainer) { + if (object.system.iscontainer) { ui.notifications.warn("Only 1 level of container allowed") return } - let alreadyInside = this.data.items.filter(item => item.data.data.containerid && item.data.data.containerid == containerId); - if (alreadyInside.length >= container.data.data.containercapacity) { + let alreadyInside = this.items.filter(item => item.system.containerid && item.system.containerid == containerId); + if (alreadyInside.length >= container.system.containercapacity) { ui.notifications.warn("Container is already full !") return } else { await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'data.containerid': containerId }]) } - } else if (object && object.data.data.containerid) { // remove from container + } else if (object && object.system.containerid) { // remove from container console.log("Removeing: ", object) await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'data.containerid': "" }]); } @@ -550,7 +550,7 @@ export class PegasusActor extends Actor { checkVirtue(virtue) { let vices = this.getVices() for (let vice of vices) { - let nonVirtues = vice.data.data.unavailablevirtue + let nonVirtues = vice.system.unavailablevirtue for (let blockedVirtue of nonVirtues) { if (blockedVirtue.name.toLowerCase() == virtue.name.toLowerCase()) { return false @@ -563,7 +563,7 @@ export class PegasusActor extends Actor { checkVice(vice) { let virtues = this.getVirtues() for (let virtue of virtues) { - let nonVices = virtue.data.data.unavailablevice + let nonVices = virtue.system.unavailablevice for (let blockedVice of nonVices) { if (blockedVice.name.toLowerCase() == vice.name.toLowerCase()) { return false @@ -577,54 +577,54 @@ export class PegasusActor extends Actor { async preprocessItem(event, item, onDrop = false) { // Pre-filter effects - if (item.data.type == 'effect') { - if (this.checkMentalDisruption() && item.data.data.type == "mental" && item.data.data.genre == "positive") { + if (item.type == 'effect') { + if (this.checkMentalDisruption() && item.system.type == "mental" && item.system.genre == "positive") { ChatMessage.create({ content: "Effects of this type cannot be applied while Disruption is applied, Use a Soft Action to remove Disruption" }) return } - if (this.checkPhysicalDisruption() && item.data.data.type == "physical" && item.data.data.genre == "positive") { + if (this.checkPhysicalDisruption() && item.system.type == "physical" && item.system.genre == "positive") { ChatMessage.create({ content: "Effects of this type cannot be applied while Disruption is applied, Use a Soft Action to remove Disruption" }) return } - if (this.checkMentalImmunity() && item.data.data.type == "mental" && item.data.data.genre == "negative") { + if (this.checkMentalImmunity() && item.system.type == "mental" && item.system.genre == "negative") { ChatMessage.create({ content: "Effects of this type cannot be applied while Immunity is applied" }) return } - if (this.checkPhysicalImmunity() && item.data.data.type == "physical" && item.data.data.genre == "negative") { + if (this.checkPhysicalImmunity() && item.system.type == "physical" && item.system.genre == "negative") { ChatMessage.create({ content: "Effects of this type cannot be applied while Immunity is applied" }) return } } - if (item.data.type == 'race') { - this.applyRace(item.data) - } else if (item.data.type == 'role') { - this.applyRole(item.data) - } else if (item.data.type == 'ability') { - this.applyAbility(item.data, [], true) + if (item.type == 'race') { + this.applyRace(item.system) + } else if (item.type == 'role') { + this.applyRole(item.system) + } else if (item.type == 'ability') { + this.applyAbility(item.system, [], true) if (!onDrop) { - await this.createEmbeddedDocuments('Item', [item.data]) + await this.createEmbeddedDocuments('Item', [item]) } } else { if (!onDrop) { - await this.createEmbeddedDocuments('Item', [item.data]) + await this.createEmbeddedDocuments('Item', [item]) } } // Check virtue/vice validity - if (item.data.type == "virtue") { + if (item.type == "virtue") { if (!this.checkVirtue(item)) { ui.notifications.info("Virtue is not allowed due to Vice.") return false } } - if (item.data.type == "vice") { + if (item.type == "vice") { if (!this.checkVice(item)) { ui.notifications.info("Vice is not allowed due to Virtue.") return false } } - if (item.data.type == "power" && item.data.data.purchasedtext.length > 0 ) { - ChatMessage.create({ content: `Power ${item.name} puchased : ${item.data.data.purchasedtext}` }) + if (item.type == "power" && item.system.purchasedtext.length > 0 ) { + ChatMessage.create({ content: `Power ${item.name} puchased : ${item.system.purchasedtext}` }) } let dropID = $(event.target).parents(".item").attr("data-item-id") // Only relevant if container drop let objectID = item.id || item._id @@ -634,9 +634,9 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async equipGear(equipmentId) { - let item = this.data.items.find(item => item.id == equipmentId); - if (item && item.data.data) { - let update = { _id: item.id, "data.equipped": !item.data.data.equipped }; + let item = this.items.find(item => item.id == equipmentId); + if (item && item.system) { + let update = { _id: item.id, "data.equipped": !item.system.equipped }; await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity } } @@ -652,21 +652,21 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getSubActors() { let subActors = []; - for (let id of this.data.data.subactors) { + for (let id of this.system.subactors) { subActors.push(duplicate(game.actors.get(id))) } return subActors; } /* -------------------------------------------- */ async addSubActor(subActorId) { - let subActors = duplicate(this.data.data.subactors); + let subActors = duplicate(this.system.subactors); subActors.push(subActorId); await this.update({ 'data.subactors': subActors }); } /* -------------------------------------------- */ async delSubActor(subActorId) { let newArray = []; - for (let id of this.data.data.subactors) { + for (let id of this.system.subactors) { if (id != subActorId) { newArray.push(id); } @@ -688,9 +688,9 @@ export class PegasusActor extends Actor { getStat(statKey) { let stat if (statKey == 'mr') { - stat = duplicate(this.data.data.mr); + stat = duplicate(this.system.mr); } else { - stat = duplicate(this.data.data.statistics[statKey]); + stat = duplicate(this.system.statistics[statKey]); } stat.dice = PegasusUtility.getDiceFromLevel(stat.value); return stat; @@ -698,10 +698,10 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getOneSpec(specId) { - let spec = this.data.items.find(item => item.type == 'specialisation' && item.id == specId) + let spec = this.items.find(item => item.type == 'specialisation' && item.id == specId) if (spec) { spec = duplicate(spec); - spec.data.dice = PegasusUtility.getDiceFromLevel(spec.data.level); + spec.system.dice = PegasusUtility.getDiceFromLevel(spec.system.level); } return spec; } @@ -711,8 +711,11 @@ export class PegasusActor extends Actor { let spec = this.getOneSpec(specId) if (spec) { let powers = [] - for (let power of spec.data.powers) { - power.data.specId = specId + for (let power of spec.system.powers) { + if ( power.data ) { + power.system = power.data + } + power.system.specId = specId powers.push(power) } if (powers.length > 0) { @@ -725,8 +728,8 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ specPowerDeactivate(specId) { let toRem = [] - for (let power of this.data.items) { - if (power.type == "power" && power.data.data.specId && power.data.data.specId == specId) { + for (let power of this.items) { + if (power.type == "power" && power.system.specId && power.system.specId == specId) { toRem.push(power.id) } } @@ -741,8 +744,8 @@ export class PegasusActor extends Actor { let item = this.items.get(itemId) if (item) { let effects = [] - for (let effect of item.data.data.effects) { - effect.data.itemId = itemId // Keep link + for (let effect of item.system.effects) { + effect.system.itemId = itemId // Keep link effects.push(effect) } if (effects.length > 0) { @@ -755,8 +758,8 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ equipDeactivate(itemId) { let toRem = [] - for (let item of this.data.items) { - if (item.data.data.itemId && item.data.data.itemId == itemId) { + for (let item of this.items) { + if (item.system.itemId && item.system.itemId == itemId) { toRem.push(item.id) } } @@ -780,9 +783,9 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ disableWeaverPerk(perk) { - if (perk.data.data.isweaver) { - for (let spec of this.data.items) { - if (spec.type == 'specialisation' && spec.data.data.ispowergroup) { + if (perk.system.isweaver) { + for (let spec of this.items) { + if (spec.type == 'specialisation' && spec.system.ispowergroup) { this.specPowerDeactivate(spec.id) } } @@ -791,9 +794,9 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ enableWeaverPerk(perk) { - if (perk.data.data.isweaver) { - for (let spec of this.data.items) { - if (spec.type == 'specialisation' && spec.data.data.ispowergroup) { + if (perk.system.isweaver) { + for (let spec of this.items) { + if (spec.type == 'specialisation' && spec.system.ispowergroup) { this.specPowerActivate(spec.id) } } @@ -803,8 +806,8 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async cleanPerkEffects(itemId) { let effects = [] - for (let item of this.data.items) { - if (item.type == "effect" && item.data.data.perkId == itemId) { + for (let item of this.items) { + if (item.type == "effect" && item.system.perkId == itemId) { effects.push(item.id) } } @@ -821,13 +824,13 @@ export class PegasusActor extends Actor { let key = "data.used" + index await this.updateEmbeddedDocuments('Item', [{ _id: itemId, [`${key}`]: checked }]) item = this.items.get(itemId) // Refresh - if (item.data.data.nbuse == "next1action" && item.data.data.used1) { + if (item.system.nbuse == "next1action" && item.system.used1) { this.cleanPerkEffects(itemId) } - if (item.data.data.nbuse == "next2action" && item.data.data.used1 && item.data.data.used2) { + if (item.system.nbuse == "next2action" && item.system.used1 && item.system.used2) { this.cleanPerkEffects(itemId) } - if (item.data.data.nbuse == "next3action" && item.data.data.used1 && item.data.data.used2 && item.data.data.used3) { + if (item.system.nbuse == "next3action" && item.system.used1 && item.system.used2 && item.system.used3) { this.cleanPerkEffects(itemId) } } @@ -845,7 +848,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async cleanupPerksIfTrauma() { if (this.getTraumaState() == "severetrauma") { - for (let perk of this.data.items) { + for (let perk of this.items) { if (perk.type == "perk") { this.cleanPerkEffects(perk.id) this.updateEmbeddedDocuments('Item', [{ _id: perk.id, 'data.status': "ready", 'data.used1': false, 'data.used2': false, 'data.used3': false }]) @@ -857,7 +860,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ incDecNRG(value) { - let nrg = duplicate(this.data.data.nrg) + let nrg = duplicate(this.system.nrg) nrg.value += value if (nrg.value >= 0 && nrg.value <= nrg.max) { this.update({ 'data.nrg': nrg }) @@ -869,9 +872,9 @@ export class PegasusActor extends Actor { let item = this.items.get(itemId) if (item) { - if (item.data.data.status == status) return;// Ensure we are really changing the status + if (item.system.status == status) return;// Ensure we are really changing the status if (this.checkNoPerksAllowed()) { - await this.updateEmbeddedDocuments('Item', [{ _id: item.id, 'data.status': "ready" }]) + await this.updateEmbeddedDocuments('Item', [{ _id: item.id, 'system.status': "ready" }]) ChatMessage.create({ content: "No perks activation allowed due to effect !" }) return } @@ -888,37 +891,37 @@ export class PegasusActor extends Actor { ChatMessage.create(chatData) this.severeTraumaMessage = true } - this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'data.status': "ready", 'data.used1': false, 'data.used2': false, 'data.used3': false }]) + this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'system.status': "ready", 'system.used1': false, 'system.used2': false, 'system.used3': false }]) return } let updateOK = true if (status == "ready") { await this.cleanPerkEffects(itemId) - await this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'data.used1': false, 'data.used2': false, 'data.used3': false }]) - if (item.data.data.features.nrgcost.flag) { - let nrg = duplicate(this.data.data.nrg) - nrg.activated -= item.data.data.features.nrgcost.value - nrg.max += item.data.data.features.nrgcost.value - await this.update({ 'data.nrg': nrg }) + await this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'system.used1': false, 'system.used2': false, 'system.used3': false }]) + if (item.system.features.nrgcost.flag) { + let nrg = duplicate(this.system.nrg) + nrg.activated -= item.system.features.nrgcost.value + nrg.max += item.system.features.nrgcost.value + await this.update({ 'system.nrg': nrg }) } - if (item.data.data.features.bonushealth.flag) { - let health = duplicate(this.data.data.secondary.health) - health.value -= Number(item.data.data.features.bonushealth.value) || 0 - health.max -= Number(item.data.data.features.bonushealth.value) || 0 - await this.update({ 'data.secondary.health': health }) + if (item.system.features.bonushealth.flag) { + let health = duplicate(this.system.secondary.health) + health.value -= Number(item.system.features.bonushealth.value) || 0 + health.max -= Number(item.system.features.bonushealth.value) || 0 + await this.update({ 'system.secondary.health': health }) } - if (item.data.data.features.bonusdelirium.flag) { - let delirium = duplicate(this.data.data.secondary.delirium) - delirium.value -= Number(item.data.data.features.bonusdelirium.value) || 0 - delirium.max -= Number(item.data.data.features.bonusdelirium.value) || 0 - await this.update({ 'data.secondary.delirium': delirium }) + if (item.system.features.bonusdelirium.flag) { + let delirium = duplicate(this.system.secondary.delirium) + delirium.value -= Number(item.system.features.bonusdelirium.value) || 0 + delirium.max -= Number(item.system.features.bonusdelirium.value) || 0 + await this.update({ 'system.secondary.delirium': delirium }) } - if (item.data.data.features.bonusnrg.flag) { - let nrg = duplicate(this.data.data.nrg) - nrg.value -= Number(item.data.data.features.bonusnrg.value) || 0 - nrg.max -= Number(item.data.data.features.bonusnrg.value) || 0 - await this.update({ 'data.nrg': nrg }) + if (item.system.features.bonusnrg.flag) { + let nrg = duplicate(this.system.nrg) + nrg.value -= Number(item.system.features.bonusnrg.value) || 0 + nrg.max -= Number(item.system.features.bonusnrg.value) || 0 + await this.update({ 'system.nrg': nrg }) } this.disableWeaverPerk(item) PegasusUtility.createChatWithRollMode(item.name, { @@ -928,44 +931,47 @@ export class PegasusActor extends Actor { if (status == "activated") { // Add effects linked to the perk let effects = [] - for (let effect of item.data.data.effectsgained) { - effect.data.perkId = itemId // Link to the perk, in order to dynamically remove them - effect.data.isUsed = false // Flag to indicate removal when used in a roll window + for (let effect of item.system.effectsgained) { + if (effect.data) { + effect.system = effect.data + } + effect.system.perkId = itemId // Link to the perk, in order to dynamically remove them + effect.system.isUsed = false // Flag to indicate removal when used in a roll window effects.push(effect) } if (effects.length) { await this.createEmbeddedDocuments('Item', effects) } // Manage additional flags - if (item.data.data.features.nrgcost.flag) { - if ((this.data.data.nrg.value >= item.data.data.features.nrgcost.value) && (this.data.data.nrg.max >= item.data.data.features.nrgcost.value)) { - let nrg = duplicate(this.data.data.nrg) - nrg.activated += item.data.data.features.nrgcost.value - nrg.value -= item.data.data.features.nrgcost.value - nrg.max -= item.data.data.features.nrgcost.value - await this.update({ 'data.nrg': nrg }) + if (item.system.features.nrgcost.flag) { + if ((this.system.nrg.value >= item.system.features.nrgcost.value) && (this.system.nrg.max >= item.system.features.nrgcost.value)) { + let nrg = duplicate(this.system.nrg) + nrg.activated += item.system.features.nrgcost.value + nrg.value -= item.system.features.nrgcost.value + nrg.max -= item.system.features.nrgcost.value + await this.update({ 'system.nrg': nrg }) } else { updateOK = false ui.notifications.warn("Not enough NRG to activate the Perk " + item.name) } } - if (item.data.data.features.bonushealth.flag) { - let health = duplicate(this.data.data.secondary.health) - health.value += Number(item.data.data.features.bonushealth.value) || 0 - health.max += Number(item.data.data.features.bonushealth.value) || 0 - await this.update({ 'data.secondary.health': health }) + if (item.system.features.bonushealth.flag) { + let health = duplicate(this.system.secondary.health) + health.value += Number(item.system.features.bonushealth.value) || 0 + health.max += Number(item.system.features.bonushealth.value) || 0 + await this.update({ 'system.secondary.health': health }) } - if (item.data.data.features.bonusdelirium.flag) { - let delirium = duplicate(this.data.data.secondary.delirium) - delirium.value += Number(item.data.data.features.bonusdelirium.value) || 0 - delirium.max += Number(item.data.data.features.bonusdelirium.value) || 0 - await this.update({ 'data.secondary.delirium': delirium }) + if (item.system.features.bonusdelirium.flag) { + let delirium = duplicate(this.system.secondary.delirium) + delirium.value += Number(item.system.features.bonusdelirium.value) || 0 + delirium.max += Number(item.system.features.bonusdelirium.value) || 0 + await this.update({ 'system.secondary.delirium': delirium }) } - if (item.data.data.features.bonusnrg.flag) { - let nrg = duplicate(this.data.data.nrg) - nrg.value += Number(item.data.data.features.bonusnrg.value) || 0 - nrg.max += Number(item.data.data.features.bonusnrg.value) || 0 - await this.update({ 'data.nrg': nrg }) + if (item.system.features.bonusnrg.flag) { + let nrg = duplicate(this.system.nrg) + nrg.value += Number(item.system.features.bonusnrg.value) || 0 + nrg.max += Number(item.system.features.bonusnrg.value) || 0 + await this.update({ 'system.nrg': nrg }) } PegasusUtility.createChatWithRollMode(item.name, { content: await renderTemplate(`systems/fvtt-pegasus-rpg/templates/chat-perk-activated.html`, { name: this.name, perk: duplicate(item) }) @@ -973,20 +979,20 @@ export class PegasusActor extends Actor { this.enableWeaverPerk(item) } if (updateOK) { - await this.updateEmbeddedDocuments('Item', [{ _id: item.id, 'data.status': status }]) + await this.updateEmbeddedDocuments('Item', [{ _id: item.id, 'system.status': status }]) } } } /* -------------------------------------------- */ async deleteAllItemsByType(itemType) { - let items = this.data.items.filter(item => item.type == itemType); + let items = this.items.filter(item => item.type == itemType); await this.deleteEmbeddedDocuments('Item', items); } /* -------------------------------------------- */ async addItemWithoutDuplicate(newItem) { - let item = this.data.items.find(item => item.type == newItem.type && item.name.toLowerCase() == newItem.name.toLowerCase()) + let item = this.items.find(item => item.type == newItem.type && item.name.toLowerCase() == newItem.name.toLowerCase()) if (!item) { await this.createEmbeddedDocuments('Item', [newItem]); } @@ -995,12 +1001,12 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getTraumaState() { this.traumaState = "none" - let negDelirium = -Math.floor((this.data.data.secondary.delirium.max + 1) / 2) + let negDelirium = -Math.floor((this.system.secondary.delirium.max + 1) / 2) if (this.type == "character") { - if (this.data.data.secondary.delirium.value <= 0 && this.data.data.secondary.delirium.value >= negDelirium) { + if (this.system.secondary.delirium.value <= 0 && this.system.secondary.delirium.value >= negDelirium) { this.traumaState = "trauma" } - if (this.data.data.secondary.delirium.value < negDelirium) { + if (this.system.secondary.delirium.value < negDelirium) { this.traumaState = "severetrauma" } } @@ -1009,11 +1015,11 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getLevelRemaining() { - return this.data.data.biodata.currentlevelremaining + return this.system.biodata.currentlevelremaining } /* -------------------------------------------- */ modifyHeroLevelRemaining(incDec) { - let biodata = duplicate(this.data.data.biodata) + let biodata = duplicate(this.system.biodata) biodata.currentlevelremaining = Math.max(biodata.currentlevelremaining + incDec, 0) this.update({ "data.biodata": biodata }) ChatMessage.create({ content: `${this.name} has used a Hero Level to reroll !` }) @@ -1022,8 +1028,8 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ checkIgnoreHealth() { - for (let effect of this.data.items) { - if (effect.type == "effect" && effect.data.data.ignorehealthpenalty) { + for (let effect of this.items) { + if (effect.type == "effect" && effect.system.ignorehealthpenalty) { return true } } @@ -1031,8 +1037,8 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ checkMentalDisruption() { - for (let effect of this.data.items) { - if (effect.type == "effect" && effect.data.data.mentaldisruption) { + for (let effect of this.items) { + if (effect.type == "effect" && effect.system.mentaldisruption) { return true } } @@ -1040,8 +1046,8 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ checkPhysicalDisruption() { - for (let effect of this.data.items) { - if (effect.type == "effect" && effect.data.data.physicaldisruption) { + for (let effect of this.items) { + if (effect.type == "effect" && effect.system.physicaldisruption) { return true } } @@ -1049,8 +1055,8 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ checkMentalImmunity() { - for (let effect of this.data.items) { - if (effect.type == "effect" && effect.data.data.mentalimmunity) { + for (let effect of this.items) { + if (effect.type == "effect" && effect.system.mentalimmunity) { return true } } @@ -1058,8 +1064,8 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ checkPhysicalImmunity() { - for (let effect of this.data.items) { - if (effect.type == "effect" && effect.data.data.physicalimmunity) { + for (let effect of this.items) { + if (effect.type == "effect" && effect.system.physicalimmunity) { return true } } @@ -1067,8 +1073,8 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ checkNoBonusDice() { - for (let effect of this.data.items) { - if (effect.type == "effect" && effect.data.data.nobonusdice) { + for (let effect of this.items) { + if (effect.type == "effect" && effect.system.nobonusdice) { return true } } @@ -1076,8 +1082,8 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ checkNoPerksAllowed() { - for (let effect of this.data.items) { - if (effect.type == "effect" && effect.data.data.noperksallowed) { + for (let effect of this.items) { + if (effect.type == "effect" && effect.system.noperksallowed) { return true } } @@ -1085,9 +1091,9 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ checkIfPossible() { - for (let effect of this.data.items) { - if (effect.type == "effect" && effect.data.data.isthispossible.length > 0) { - ChatMessage.create({ content: effect.data.data.isthispossible }) + for (let effect of this.items) { + if (effect.type == "effect" && effect.system.isthispossible.length > 0) { + ChatMessage.create({ content: effect.system.isthispossible }) } } } @@ -1096,38 +1102,38 @@ export class PegasusActor extends Actor { async computeNRGHealth() { if (this.isOwner || game.user.isGM) { let updates = {} - let phyDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.phy.value) + this.data.data.secondary.health.bonus + this.data.data.statistics.phy.mod; - if (phyDiceValue != this.data.data.secondary.health.max) { + let phyDiceValue = PegasusUtility.getDiceValue(this.system.statistics.phy.value) + this.system.secondary.health.bonus + this.system.statistics.phy.mod; + if (phyDiceValue != this.system.secondary.health.max) { updates['data.secondary.health.max'] = phyDiceValue } if (this.computeValue) { updates['data.secondary.health.value'] = phyDiceValue } - let mndDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.mnd.value) + this.data.data.secondary.delirium.bonus + this.data.data.statistics.mnd.mod; - if (mndDiceValue != this.data.data.secondary.delirium.max) { + let mndDiceValue = PegasusUtility.getDiceValue(this.system.statistics.mnd.value) + this.system.secondary.delirium.bonus + this.system.statistics.mnd.mod; + if (mndDiceValue != this.system.secondary.delirium.max) { updates['data.secondary.delirium.max'] = mndDiceValue } if (this.computeValue) { updates['data.secondary.delirium.value'] = mndDiceValue } - let stlDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.stl.value) + this.data.data.secondary.stealthhealth.bonus + this.data.data.statistics.stl.mod; - if (stlDiceValue != this.data.data.secondary.stealthhealth.max) { + let stlDiceValue = PegasusUtility.getDiceValue(this.system.statistics.stl.value) + this.system.secondary.stealthhealth.bonus + this.system.statistics.stl.mod; + if (stlDiceValue != this.system.secondary.stealthhealth.max) { updates['data.secondary.stealthhealth.max'] = stlDiceValue } if (this.computeValue) { updates['data.secondary.stealthhealth.value'] = stlDiceValue } - let socDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.soc.value) + this.data.data.secondary.socialhealth.bonus + this.data.data.statistics.soc.mod; - if (socDiceValue != this.data.data.secondary.socialhealth.max) { + let socDiceValue = PegasusUtility.getDiceValue(this.system.statistics.soc.value) + this.system.secondary.socialhealth.bonus + this.system.statistics.soc.mod; + if (socDiceValue != this.system.secondary.socialhealth.max) { updates['data.secondary.socialhealth.max'] = socDiceValue } if (this.computeValue) { updates['data.secondary.socialhealth.value'] = socDiceValue } - let nrgValue = PegasusUtility.getDiceValue(this.data.data.statistics.foc.value) + this.data.data.nrg.mod + this.data.data.statistics.foc.mod - if (nrgValue != this.data.data.nrg.absolutemax) { + let nrgValue = PegasusUtility.getDiceValue(this.system.statistics.foc.value) + this.system.nrg.mod + this.system.statistics.foc.mod + if (nrgValue != this.system.nrg.absolutemax) { updates['data.nrg.absolutemax'] = nrgValue } if (this.computeValue) { @@ -1135,44 +1141,44 @@ export class PegasusActor extends Actor { updates['data.nrg.value'] = nrgValue } - let stunth = PegasusUtility.getDiceValue(this.data.data.statistics.phy.value) + PegasusUtility.getDiceValue(this.data.data.statistics.mnd.value) + PegasusUtility.getDiceValue(this.data.data.statistics.foc.value) - + this.data.data.statistics.mnd.mod + this.data.data.statistics.phy.mod + this.data.data.statistics.foc.mod - if (stunth != this.data.data.combat.stunthreshold) { + let stunth = PegasusUtility.getDiceValue(this.system.statistics.phy.value) + PegasusUtility.getDiceValue(this.system.statistics.mnd.value) + PegasusUtility.getDiceValue(this.system.statistics.foc.value) + + this.system.statistics.mnd.mod + this.system.statistics.phy.mod + this.system.statistics.foc.mod + if (stunth != this.system.combat.stunthreshold) { updates['data.combat.stunthreshold'] = stunth } - let momentum = this.data.data.statistics.foc.value + this.data.data.statistics.foc.mod - if (momentum != this.data.data.momentum.max) { + let momentum = this.system.statistics.foc.value + this.system.statistics.foc.mod + if (momentum != this.system.momentum.max) { updates['data.momentum.value'] = 0 updates['data.momentum.max'] = momentum } - let mrLevel = (this.data.data.statistics.agi.value + this.data.data.statistics.str.value) - this.data.data.statistics.phy.value + let mrLevel = (this.system.statistics.agi.value + this.system.statistics.str.value) - this.system.statistics.phy.value mrLevel = (mrLevel < 1) ? 1 : mrLevel; - if (mrLevel != this.data.data.mr.value) { + if (mrLevel != this.system.mr.value) { updates['data.mr.value'] = mrLevel } - let moralitythreshold = - (Number(PegasusUtility.getDiceValue(this.data.data.statistics.foc.value)) + Number(this.data.data.statistics.foc.mod)) - if (moralitythreshold != this.data.data.biodata.moralitythreshold) { + let moralitythreshold = - (Number(PegasusUtility.getDiceValue(this.system.statistics.foc.value)) + Number(this.system.statistics.foc.mod)) + if (moralitythreshold != this.system.biodata.moralitythreshold) { updates['data.biodata.moralitythreshold'] = moralitythreshold } if (!this.isToken) { - if (this.warnMorality != this.data.data.biodata.morality && this.data.data.biodata.morality < 0) { + if (this.warnMorality != this.system.biodata.morality && this.system.biodata.morality < 0) { console.log("CHAR", this) ChatMessage.create({ content: "WARNING: Your character is dangerously close to becoming corrupted and defeated. Start on a path of redemption!" }) } - if (this.warnMorality != this.data.data.biodata.morality) { - this.warnMorality = this.data.data.biodata.morality + if (this.warnMorality != this.system.biodata.morality) { + this.warnMorality = this.system.biodata.morality } } let race = this.getRace() - if (race && race.name && (race.name != this.data.data.biodata.racename)) { + if (race && race.name && (race.name != this.system.biodata.racename)) { updates['data.biodata.racename'] = race.name } let role = this.getRole() - if (role && role.name && (role.name != this.data.data.biodata.rolename)) { + if (role && role.name && (role.name != this.system.biodata.rolename)) { updates['data.biodata.rolename'] = role.name } if (Object.entries(updates).length > 0) { @@ -1183,17 +1189,17 @@ export class PegasusActor extends Actor { if (this.isOwner || game.user.isGM) { // Update current hindrance level - let hindrance = this.data.data.combat.hindrancedice + let hindrance = this.system.combat.hindrancedice if (!this.checkIgnoreHealth()) { - if (this.data.data.secondary.health.value < 0) { - if (this.data.data.secondary.health.value < -Math.floor((this.data.data.secondary.health.max + 1) / 2)) { // Severe wounded + if (this.system.secondary.health.value < 0) { + if (this.system.secondary.health.value < -Math.floor((this.system.secondary.health.max + 1) / 2)) { // Severe wounded hindrance += 3 } else { hindrance += 1 } } } - this.data.data.combat.hindrancedice = hindrance + this.system.combat.hindrancedice = hindrance this.getTraumaState() this.cleanupPerksIfTrauma() } @@ -1201,7 +1207,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async modStat(key, inc = 1) { - let stat = duplicate(this.data.data.statistics[key]) + let stat = duplicate(this.system.statistics[key]) stat.mod += parseInt(inc) await this.update({ [`data.statistics.${key}`]: stat }) } @@ -1209,7 +1215,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async valueStat(key, inc = 1) { key = key.toLowerCase() - let stat = duplicate(this.data.data.statistics[key]) + let stat = duplicate(this.system.statistics[key]) stat.value += parseInt(inc) await this.update({ [`data.statistics.${key}`]: stat }) } @@ -1217,23 +1223,23 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async addIncSpec(spec, inc = 1) { console.log("Using spec : ", spec, inc) - let specExist = this.data.items.find(item => item.type == 'specialisation' && item.name.toLowerCase() == spec.name.toLowerCase()) + let specExist = this.items.find(item => item.type == 'specialisation' && item.name.toLowerCase() == spec.name.toLowerCase()) if (specExist) { specExist = duplicate(specExist) - specExist.data.level += inc; - let update = { _id: specExist._id, "data.level": specExist.data.level }; + specExist.system.level += inc; + let update = { _id: specExist._id, "data.level": specExist.system.level }; await this.updateEmbeddedDocuments('Item', [update]); } else { - spec.data.level += inc; + spec.system.level += inc; await this.createEmbeddedDocuments('Item', [spec]); } } /* -------------------------------------------- */ async incDecQuantity(objetId, incDec = 0) { - let objetQ = this.data.items.get(objetId) + let objetQ = this.items.get(objetId) if (objetQ) { - let newQ = objetQ.data.data.quantity + incDec + let newQ = objetQ.system.quantity + incDec if (newQ >= 0) { const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'data.quantity': newQ }]) // pdates one EmbeddedEntity } @@ -1241,10 +1247,10 @@ export class PegasusActor extends Actor { } /* -------------------------------------------- */ async incDecAmmo(objetId, incDec = 0) { - let objetQ = this.data.items.get(objetId) + let objetQ = this.items.get(objetId) if (objetQ) { - let newQ = objetQ.data.data.ammocurrent + incDec; - if (newQ >= 0 && newQ <= objetQ.data.data.ammomax) { + let newQ = objetQ.system.ammocurrent + incDec; + if (newQ >= 0 && newQ <= objetQ.system.ammomax) { const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'data.ammocurrent': newQ }]); // pdates one EmbeddedEntity } } @@ -1253,26 +1259,26 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async applyAbility(ability, updates = [], directUpdate = false) { // manage stat bonus - if (ability.data.affectedstat != "notapplicable") { - let stat = duplicate(this.data.data.statistics[ability.data.affectedstat]) - stat.mod += Number(ability.data.statmodifier) - updates[`data.statistics.${ability.data.affectedstat}`] = stat + if (ability.system.affectedstat != "notapplicable") { + let stat = duplicate(this.system.statistics[ability.system.affectedstat]) + stat.mod += Number(ability.system.statmodifier) + updates[`data.statistics.${ability.system.affectedstat}`] = stat } // manage status bonus - if (ability.data.statusaffected != "notapplicable") { - if (ability.data.statusaffected == 'nrg') { - let nrg = duplicate(this.data.data.nrg) - nrg.mod += Number(ability.data.statusmodifier) + if (ability.system.statusaffected != "notapplicable") { + if (ability.system.statusaffected == 'nrg') { + let nrg = duplicate(this.system.nrg) + nrg.mod += Number(ability.system.statusmodifier) updates[`data.nrg`] = nrg } - if (ability.data.statusaffected == 'health') { - let health = duplicate(this.data.data.secondary.health) - health.bonus += Number(ability.data.statusmodifier) + if (ability.system.statusaffected == 'health') { + let health = duplicate(this.system.secondary.health) + health.bonus += Number(ability.system.statusmodifier) updates[`data.secondary.health`] = health } - if (ability.data.statusaffected == 'delirium') { - let delirium = duplicate(this.data.data.secondary.delirium) - delirium.bonus += Number(ability.data.statusmodifier) + if (ability.system.statusaffected == 'delirium') { + let delirium = duplicate(this.system.secondary.delirium) + delirium.bonus += Number(ability.system.statusmodifier) updates[`data.secondary.delirium`] = delirium } } @@ -1280,28 +1286,28 @@ export class PegasusActor extends Actor { await this.update(updates) } let newItems = [] - if (ability.data.effectsgained) { - for (let effect of ability.data.effectsgained) { + if (ability.system.effectsgained) { + for (let effect of ability.system.effectsgained) { newItems.push(effect); } } - if (ability.data.powersgained) { - for (let power of ability.data.powersgained) { + if (ability.system.powersgained) { + for (let power of ability.system.powersgained) { newItems.push(power); } } - if (ability.data.specialisations) { - for (let spec of ability.data.specialisations) { + if (ability.system.specialisations) { + for (let spec of ability.system.specialisations) { newItems.push(spec); } } - if (ability.data.attackgained) { - for (let weapon of ability.data.attackgained) { + if (ability.system.attackgained) { + for (let weapon of ability.system.attackgained) { newItems.push(weapon); } } - if (ability.data.armorgained) { - for (let armor of ability.data.armorgained) { + if (ability.system.armorgained) { + for (let armor of ability.system.armorgained) { newItems.push(armor); } } @@ -1316,12 +1322,12 @@ export class PegasusActor extends Actor { await this.deleteAllItemsByType('race') newItems.push(race); - for (let ability of race.data.abilities) { + for (let ability of race.system.abilities) { newItems.push(ability) this.applyAbility(ability, updates) } - if (race.data.perksgained) { - for (let power of race.data.perks) { + if (race.system.perksgained) { + for (let power of race.system.perks) { newItems.push(power); } } @@ -1334,7 +1340,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getIncreaseStatValue(updates, statKey) { - let stat = duplicate(this.data.data.statistics[statKey]) + let stat = duplicate(this.system.statistics[statKey]) stat.value += 1; updates[`data.statistics.${statKey}`] = stat } @@ -1348,13 +1354,13 @@ export class PegasusActor extends Actor { await this.deleteAllItemsByType('role') newItems.push(role) - this.getIncreaseStatValue(updates, role.data.statincrease1) - this.getIncreaseStatValue(updates, role.data.statincrease2) + this.getIncreaseStatValue(updates, role.system.statincrease1) + this.getIncreaseStatValue(updates, role.system.statincrease2) - if (role.data.specialability.length > 0) { - console.log("Adding ability", role.data.specialability) - newItems = newItems.concat(duplicate(role.data.specialability)) // Add new ability - this.applyAbility(role.data.specialability[0], newItems) + if (role.system.specialability.length > 0) { + console.log("Adding ability", role.system.specialability) + newItems = newItems.concat(duplicate(role.system.specialability)) // Add new ability + this.applyAbility(role.system.specialability[0], newItems) } await this.update(updates) await this.createEmbeddedDocuments('Item', newItems) @@ -1364,24 +1370,24 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ addHindrancesList(effectsList) { - if (this.data.data.combat.stunlevel > 0) { - effectsList.push({ label: "Stun Hindrance", type: "hindrance", foreign: true, actorId: this.id, applied: false, value: this.data.data.combat.stunlevel }) + if (this.system.combat.stunlevel > 0) { + effectsList.push({ label: "Stun Hindrance", type: "hindrance", foreign: true, actorId: this.id, applied: false, value: this.system.combat.stunlevel }) } - if (this.data.data.combat.hindrancedice > 0) { - effectsList.push({ label: "Wounds Hindrance", type: "hindrance", foreign: true, actorId: this.id, applied: false, value: this.data.data.combat.hindrancedice }) + if (this.system.combat.hindrancedice > 0) { + effectsList.push({ label: "Wounds Hindrance", type: "hindrance", foreign: true, actorId: this.id, applied: false, value: this.system.combat.hindrancedice }) } let overCapacity = Math.floor(this.encCurrent / this.getEncumbranceCapacity()) if (overCapacity > 0) { effectsList.push({ label: "Encumbrance Hindrance", type: "hindrance", foreign: true, actorId: this.id, applied: false, value: overCapacity }) } - if (this.data.data.biodata.morality <= 0) { + if (this.system.biodata.morality <= 0) { effectsList.push({ label: "Morality Hindrance", type: "hindrance", foreign: true, actorId: this.id, applied: false, value: 3 }) } - let effects = this.data.items.filter(item => item.type == 'effect') + let effects = this.items.filter(item => item.type == 'effect') for (let effect of effects) { effect = duplicate(effect) - if (effect.data.hindrance) { - effectsList.push({ label: effect.name, type: "effect", foreign: true, actorId: this.id, applied: false, effect: effect, value: effect.data.effectlevel }) + if (effect.system.hindrance) { + effectsList.push({ label: effect.name, type: "effect", foreign: true, actorId: this.id, applied: false, effect: effect, value: effect.system.effectlevel }) } } } @@ -1392,33 +1398,33 @@ export class PegasusActor extends Actor { pushEffect(rollData, effect) { if (this.getTraumaState() == "none" && !this.checkNoBonusDice()) { - rollData.effectsList.push({ label: effect.name, type: "effect", applied: false, effect: effect, value: effect.data.effectlevel }) + rollData.effectsList.push({ label: effect.name, type: "effect", applied: false, effect: effect, value: effect.system.effectlevel }) } else { - if (!effect.data.bonusdice) { // Do not push bonus dice effect when TraumaState is activated - rollData.effectsList.push({ label: effect.name, type: "effect", applied: false, effect: effect, value: effect.data.effectlevel }) + if (!effect.system.bonusdice) { // Do not push bonus dice effect when TraumaState is activated + rollData.effectsList.push({ label: effect.name, type: "effect", applied: false, effect: effect, value: effect.system.effectlevel }) } } } /* -------------------------------------------- */ addEffects(rollData, isInit = false, isPower = false, isPowerDmg = false) { - let effects = this.data.items.filter(item => item.type == 'effect') + let effects = this.items.filter(item => item.type == 'effect') for (let effect of effects) { effect = duplicate(effect) - if (!effect.data.hindrance - && (effect.data.stataffected != "notapplicable" || effect.data.specaffected.length > 0) - && effect.data.stataffected != "special" - && effect.data.stataffected != "powerroll" - && effect.data.stataffected != "powerdmgroll") { - if (effect.data.effectstatlevel) { - effect.data.effectlevel = this.data.data.statistics[effect.data.effectstat].value + if (!effect.system.hindrance + && (effect.system.stataffected != "notapplicable" || effect.system.specaffected.length > 0) + && effect.system.stataffected != "special" + && effect.system.stataffected != "powerroll" + && effect.system.stataffected != "powerdmgroll") { + if (effect.system.effectstatlevel) { + effect.system.effectlevel = this.system.statistics[effect.system.effectstat].value } this.pushEffect(rollData, effect) } - if (isPower && effect.data.stataffected == "powerroll") { + if (isPower && effect.system.stataffected == "powerroll") { this.pushEffect(rollData, effect) } - if (isPowerDmg && effect.data.stataffected == "powerdmgroll") { + if (isPowerDmg && effect.system.stataffected == "powerdmgroll") { this.pushEffect(rollData, effect) } @@ -1430,38 +1436,38 @@ export class PegasusActor extends Actor { if (statKey == 'phy') { let armors = this.getArmors() for (let armor of armors) { - rollData.armorsList.push({ label: `Armor ${armor.name}`, type: "armor", applied: false, value: armor.data.resistance }) + rollData.armorsList.push({ label: `Armor ${armor.name}`, type: "armor", applied: false, value: armor.system.resistance }) } } if (useShield) { - let shields = this.data.items.filter(item => item.type == "shield" && item.data.data.equipped) + let shields = this.items.filter(item => item.type == "shield" && item.system.equipped) for (let sh of shields) { - rollData.armorsList.push({ label: `Shield ${sh.name}`, type: "shield", applied: false, value: sh.data.data.level }) + rollData.armorsList.push({ label: `Shield ${sh.name}`, type: "shield", applied: false, value: sh.system.level }) } } } addWeapons(rollData, statKey) { let weapons = this.getWeapons() for (let weapon of weapons) { - if (weapon.data.equipped && weapon.data.statistic == statKey) { + if (weapon.system.equipped && weapon.system.statistic == statKey) { rollData.weaponsList.push({ label: `Attack ${weapon.name}`, type: "attack", applied: false, weapon: weapon, value: 0, damageDice: PegasusUtility.getDiceFromLevel(0) }) } - if (weapon.data.equipped && weapon.data.canbethrown && statKey == "agi") { + if (weapon.system.equipped && weapon.system.canbethrown && statKey == "agi") { rollData.weaponsList.push({ label: `Attack ${weapon.name}`, type: "attack", applied: false, weapon: weapon, value: 0, damageDice: PegasusUtility.getDiceFromLevel(0) }) } - if (weapon.data.equipped && weapon.data.enhanced && weapon.data.enhancedstat == statKey) { - rollData.weaponsList.push({ label: `Enhanced Attack ${weapon.name}`, type: "enhanced", applied: false, weapon: weapon, value: weapon.data.enhancedlevel, damageDice: PegasusUtility.getDiceFromLevel(weapon.data.enhancedlevel) }) + if (weapon.system.equipped && weapon.system.enhanced && weapon.system.enhancedstat == statKey) { + rollData.weaponsList.push({ label: `Enhanced Attack ${weapon.name}`, type: "enhanced", applied: false, weapon: weapon, value: weapon.system.enhancedlevel, damageDice: PegasusUtility.getDiceFromLevel(weapon.system.enhancedlevel) }) } - if (weapon.data.equipped && weapon.data.damagestatistic == statKey) { - rollData.weaponsList.push({ label: `Damage ${weapon.name}`, type: "damage", applied: false, weapon: weapon, value: weapon.data.damage, damageDice: PegasusUtility.getDiceFromLevel(weapon.data.damage) }) + if (weapon.system.equipped && weapon.system.damagestatistic == statKey) { + rollData.weaponsList.push({ label: `Damage ${weapon.name}`, type: "damage", applied: false, weapon: weapon, value: weapon.system.damage, damageDice: PegasusUtility.getDiceFromLevel(weapon.system.damage) }) } } } addEquipments(rollData, statKey) { let equipments = this.getEquipmentsOnly() for (let equip of equipments) { - if (equip.data.equipped && equip.data.stataffected == statKey) { - rollData.equipmentsList.push({ label: `Item ${equip.name}`, type: "item", applied: false, equip: equip, value: equip.data.level }) + if (equip.system.equipped && equip.system.stataffected == statKey) { + rollData.equipmentsList.push({ label: `Item ${equip.name}`, type: "item", applied: false, equip: equip, value: equip.system.level }) } } } @@ -1518,7 +1524,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getLevelRemainingList() { let options = [] - for (let i = 0; i <= this.data.data.biodata.maxlevelremaining; i++) { + for (let i = 0; i <= this.system.biodata.maxlevelremaining; i++) { options.push(``) } return options.join("\n") @@ -1544,10 +1550,10 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ powerDmgRoll(itemId) { - let power = this.data.items.get(itemId) + let power = this.items.get(itemId) if (power) { power = duplicate(power) - this.rollPool(power.data.dmgstatistic, false, "power-dmg") + this.rollPool(power.system.dmgstatistic, false, "power-dmg") } } @@ -1606,14 +1612,14 @@ export class PegasusActor extends Actor { async rollSpec(specId) { let spec = this.getOneSpec(specId) if (spec) { - let rollData = this.getCommonRollData(spec.data.statistic) + let rollData = this.getCommonRollData(spec.system.statistic) rollData.mode = "spec" rollData.title = `Spec. : ${spec.name} ` rollData.specList = [spec] rollData.selectedSpec = spec._id rollData.specName = spec.name rollData.img = spec.img - rollData.specDicesLevel = spec.data.level + rollData.specDicesLevel = spec.system.level PegasusUtility.updateSpecDicePool(rollData) this.startRoll(rollData) } else { @@ -1623,7 +1629,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async rollMR(isInit = false, combatId = 0, combatantId = 0) { - let mr = duplicate(this.data.data.mr) + let mr = duplicate(this.system.mr) if (mr) { mr.dice = PegasusUtility.getDiceFromLevel(mr.value); @@ -1645,10 +1651,10 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async rollArmor(armorId) { - let armor = this.data.items.get(armorId) + let armor = this.items.get(armorId) if (armor) { - let rollData = this.getCommonRollData(armor.data.statistic) + let rollData = this.getCommonRollData(armor.system.statistic) armor = duplicate(armor); this.checkAndPrepareEquipment(armor); @@ -1658,7 +1664,7 @@ export class PegasusActor extends Actor { rollData.title = `Armor : ${armor.name}` rollData.isResistance = true; rollData.img = armor.img - rollData.damageDiceLevel = armor.data.resistance + rollData.damageDiceLevel = armor.system.resistance this.startRoll(rollData); } else { @@ -1668,11 +1674,11 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async rollPower(powerId) { - let power = this.data.items.get(powerId) + let power = this.items.get(powerId) if (power) { power = duplicate(power) - let rollData = this.getCommonRollData(power.data.statistic, false, false, true, false) + let rollData = this.getCommonRollData(power.system.statistic, false, false, true, false) rollData.mode = "power" rollData.power = power diff --git a/modules/pegasus-item-sheet.js b/modules/pegasus-item-sheet.js index 87a76e9..f3ab9b4 100644 --- a/modules/pegasus-item-sheet.js +++ b/modules/pegasus-item-sheet.js @@ -48,9 +48,9 @@ export class PegasusItemSheet extends ItemSheet { /* -------------------------------------------- */ async getData() { - const objectData = PegasusUtility.data(this.object); + const objectData = this.object - let itemData = foundry.utils.deepClone(PegasusUtility.templateData(this.object)); + let itemData = foundry.utils.deepClone(objectData) let formData = { title: this.title, id: this.id, @@ -61,7 +61,7 @@ export class PegasusItemSheet extends ItemSheet { cssClass: this.isEditable ? "editable" : "locked", optionsDiceList: PegasusUtility.getOptionsDiceList(), optionsStatusList: PegasusUtility.getOptionsStatusList(), - data: itemData, + data: itemData.system, limited: this.object.limited, options: this.options, owner: this.document.isOwner, @@ -69,7 +69,7 @@ export class PegasusItemSheet extends ItemSheet { isGM: game.user.isGM } - this.options.editable = !(this.object.data.origin == "embeddedItem"); + this.options.editable = true //!(this.object.isEmbedded) console.log("ITEM DATA", formData, this); return formData; } @@ -88,7 +88,7 @@ export class PegasusItemSheet extends ItemSheet { /* -------------------------------------------- */ postItem() { - let chatData = duplicate(PegasusUtility.data(this.item)); + let chatData = this.item.system if (this.actor) { chatData.actor = { id: this.actor.id }; } @@ -113,10 +113,10 @@ export class PegasusItemSheet extends ItemSheet { async viewSubitem(ev) { let field = $(ev.currentTarget).data('type'); let idx = Number($(ev.currentTarget).data('index')); - let itemData = this.object.data.data[field][idx]; + let itemData = this.object.system[field][idx]; if (itemData.name != 'None') { let spec = await Item.create(itemData, { temporary: true }); - spec.data.origin = "embeddedItem"; + spec.system.origin = "embeddedItem"; new PegasusItemSheet(spec).render(true); } } @@ -125,8 +125,8 @@ export class PegasusItemSheet extends ItemSheet { async deleteSubitem(ev) { let field = $(ev.currentTarget).data('type'); let idx = Number($(ev.currentTarget).data('index')); - let oldArray = this.object.data.data[field]; - let itemData = this.object.data.data[field][idx]; + let oldArray = this.object.system[field]; + let itemData = this.object.system[field][idx]; if (itemData.name != 'None') { let newArray = []; for (var i = 0; i < oldArray.length; i++) { @@ -134,16 +134,16 @@ export class PegasusItemSheet extends ItemSheet { newArray.push(oldArray[i]); } } - this.object.update({ [`data.${field}`]: newArray }); + this.object.update({ [`system.${field}`]: newArray }); } } /* -------------------------------------------- */ async manageSpec() { - let itemData = this.object.data.data.specialisation[0]; + let itemData = this.object.system.specialisation[0]; if (itemData.name != 'None') { let spec = await Item.create(itemData, { temporary: true }); - spec.data.origin = "embeddedItem"; + spec.system.origin = "embeddedItem"; new PegasusItemSheet(spec).render(true); } } @@ -165,7 +165,7 @@ export class PegasusItemSheet extends ItemSheet { }); html.find('.delete-spec').click(ev => { - this.object.update({ "data.specialisation": [{ name: 'None' }] }); + this.object.update({ "system.specialisation": [{ name: 'None' }] }); }); html.find('.delete-subitem').click(ev => { @@ -174,9 +174,9 @@ export class PegasusItemSheet extends ItemSheet { html.find('.stat-choice-flag').click(ev => { let idx = $(ev.currentTarget).data("stat-idx"); - let array = duplicate(this.object.data.data.statincreasechoice); + let array = duplicate(this.object.system.statincreasechoice); array[Number(idx)].flag = !array[Number(idx)].flag; - this.object.update({ "data.statincreasechoice": array }); + this.object.update({ "system.statincreasechoice": array }); }); // Update Inventory Item @@ -197,225 +197,225 @@ export class PegasusItemSheet extends ItemSheet { } /* -------------------------------------------- */ - async addAbility(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); - console.log("ABB", event, item, dataItem) + async addAbility(event, item) { + let newItem = duplicate(item) + newItem._id = randomID(item.id.length); + console.log("ABB", event, item) if (event.toElement.className == 'drop-abilities') { - let abilityArray = duplicate(this.object.data.data.abilities); + let abilityArray = duplicate(this.object.system.abilities); abilityArray.push(newItem); - await this.object.update({ 'data.abilities': abilityArray }); + await this.object.update({ 'system.abilities': abilityArray }); } if (event.toElement.className == 'drop-optionnal-abilities') { - let abilityArray = duplicate(this.object.data.data.optionnalabilities); + let abilityArray = duplicate(this.object.system.optionnalabilities); abilityArray.push(newItem); - await this.object.update({ 'data.optionnalabilities': abilityArray }); + await this.object.update({ 'system.optionnalabilities': abilityArray }); } } /* -------------------------------------------- */ - async addRacePerk(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addRacePerk(event, item) { + let newItem = duplicate(item); + newItem._id = randomID(item.id); if (event.toElement.className == 'drop-race-perk') { - let perkArray = duplicate(this.object.data.data.perks); + let perkArray = duplicate(this.object.system.perks); perkArray.push(newItem); - await this.object.update({ 'data.perks': perkArray }); + await this.object.update({ 'system.perks': perkArray }); } } /* -------------------------------------------- */ - async addSpecialisation(item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addSpecialisation(item) { + let newItem = duplicate(item) + newItem._id = randomID(item.id.length) let specArray = [newItem]; - await this.object.update({ 'data.specialisation': specArray }); + await this.object.update({ 'system.specialisation': specArray }); } /* -------------------------------------------- */ - async addRoleSpecialisation(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addRoleSpecialisation(event, item) { + let newItem = duplicate(item); + newItem._id = randomID(item.id.length); console.log("Add spec", event, newItem); if (event.toElement.className == 'drop-spec1') { - let specArray = duplicate(this.object.data.data.specialisationsplus1); + let specArray = duplicate(this.object.system.specialisationsplus1); specArray.push(newItem); - await this.object.update({ 'data.specialisationsplus1': specArray }); + await this.object.update({ 'system.specialisationsplus1': specArray }); } if (event.toElement.className == 'drop-spec2') { - let specArray = duplicate(this.object.data.data.specincrease); + let specArray = duplicate(this.object.system.specincrease); specArray.push(newItem); - await this.object.update({ 'data.specincrease': specArray }); + await this.object.update({ 'system.specincrease': specArray }); } } /* -------------------------------------------- */ - async addRolePerk(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addRolePerk(event, item) { + let newItem = duplicate(item); + newItem._id = randomID(item.id.length); if (event.toElement.className == 'drop-perk2') { - let perkArray = duplicate(this.object.data.data.perks); + let perkArray = duplicate(this.object.system.perks); perkArray.push(newItem); - await this.object.update({ 'data.perks': perkArray }); + await this.object.update({ 'system.perks': perkArray }); } if (event.toElement.className == 'drop-specialperk1') { - let perkArray = duplicate(this.object.data.data.specialperk); + let perkArray = duplicate(this.object.system.specialperk); perkArray.push(newItem); - await this.object.update({ 'data.specialperk': perkArray }); + await this.object.update({ 'system.specialperk': perkArray }); } } /* -------------------------------------------- */ - async addRoleAbility(event, item, dataItem) { - let newItem = duplicate(item.data) - newItem._id = randomID(dataItem.id.length) + async addRoleAbility(event, item) { + let newItem = duplicate(item) + newItem._id = randomID(item.id.length) if (event.toElement.className == 'drop-specialability') { - let abiArray = duplicate(this.object.data.data.specialability) + let abiArray = duplicate(this.object.system.specialability) abiArray.push(newItem) - await this.object.update({ 'data.specialability': abiArray }) + await this.object.update({ 'system.specialability': abiArray }) } } /* -------------------------------------------- */ - async addPower(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addPower(event, item) { + let newItem = duplicate(item); + newItem._id = randomID(item.id.length); if (event.toElement.className == 'drop-spec-power') { - let powArray = duplicate(this.object.data.data.powers); + let powArray = duplicate(this.object.system.powers); powArray.push(newItem); - await this.object.update({ 'data.powers': powArray }); + await this.object.update({ 'system.powers': powArray }); } } /* -------------------------------------------- */ - async addAbilityPower(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addAbilityPower(event, item) { + let newItem = duplicate(item); + newItem._id = randomID(item.id.length); if (event.toElement.className == 'drop-ability-power') { - let powArray = duplicate(this.object.data.data.powersgained); + let powArray = duplicate(this.object.system.powersgained); powArray.push(newItem); - await this.object.update({ 'data.powersgained': powArray }); + await this.object.update({ 'system.powersgained': powArray }); } } /* -------------------------------------------- */ - async addAbilityEffect(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addAbilityEffect(event, item) { + let newItem = duplicate(item); + newItem._id = randomID(item.id.length); if (event.toElement.className == 'drop-ability-effect') { - let powArray = duplicate(this.object.data.data.effectsgained); + let powArray = duplicate(this.object.system.effectsgained); powArray.push(newItem); - await this.object.update({ 'data.effectsgained': powArray }); + await this.object.update({ 'system.effectsgained': powArray }); } } /* -------------------------------------------- */ - async addAbilitySpec(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addAbilitySpec(event, item) { + let newItem = duplicate(item); + newItem._id = randomID(item.id.length); if (event.toElement.className == 'drop-ability-spec') { - let powArray = duplicate(this.object.data.data.specialisations); + let powArray = duplicate(this.object.system.specialisations); powArray.push(newItem); - await this.object.update({ 'data.specialisations': powArray }); + await this.object.update({ 'system.specialisations': powArray }); } } /* -------------------------------------------- */ - async addAbilityWeaponArmor(event, item, dataItem) { - let newItem = duplicate(item.data); - newItem._id = randomID(dataItem.id.length); + async addAbilityWeaponArmor(event, item) { + let newItem = duplicate(item); + newItem._id = randomID(item.id.length); if (event.toElement.className == 'drop-ability-weapon') { - let weaponArray = duplicate(this.object.data.data.attackgained); + let weaponArray = duplicate(this.object.system.attackgained); weaponArray.push(newItem); - await this.object.update({ 'data.attackgained': weaponArray }); + await this.object.update({ 'system.attackgained': weaponArray }); } if (event.toElement.className == 'drop-ability-armor') { - let armorArray = duplicate(this.object.data.data.armorgained); + let armorArray = duplicate(this.object.system.armorgained); armorArray.push(newItem); - await this.object.update({ 'data.armorgained': armorArray }); + await this.object.update({ 'system.armorgained': armorArray }); } } /* -------------------------------------------- */ - async addPerkSpecialisation(event, item, dataItem) { - let newItem = duplicate(item.data); + async addPerkSpecialisation(event, item) { + let newItem = duplicate(item); if (event.toElement.className == 'drop-spec-perk') { //console.log("PER SPEC", event) let key = event.toElement.dataset["key"]; if (key == 'affectedspec') { - await this.object.update({ 'data.features.affectedspec.value': newItem.name }); + await this.object.update({ 'system.features.affectedspec.value': newItem.name }); } else { - await this.object.update({ 'data.features.gainspecdice.value': newItem.name }); + await this.object.update({ 'system.features.gainspecdice.value': newItem.name }); } } } /* -------------------------------------------- */ - async addPerkEffect(event, item, dataItem) { - let newItem = duplicate(item.data) + async addPerkEffect(event, item) { + let newItem = duplicate(item) if (event.toElement.className == 'drop-perk-effect') { - let effectArray = duplicate(this.object.data.data.effectsgained) + let effectArray = duplicate(this.object.system.effectsgained) effectArray.push(newItem) - await this.object.update({ 'data.effectsgained': effectArray }) + await this.object.update({ 'system.effectsgained': effectArray }) } } /* -------------------------------------------- */ - async addEffectPower(event, item, dataItem) { - let newItem = duplicate(item.data) + async addEffectPower(event, item) { + let newItem = duplicate(item) if (event.toElement.className == 'drop-power-effect') { - let effectArray = duplicate(this.object.data.data.effectsgained) + let effectArray = duplicate(this.object.system.effectsgained) effectArray.push(newItem); - await this.object.update({ 'data.effectsgained': effectArray }) + await this.object.update({ 'system.effectsgained': effectArray }) } } /* -------------------------------------------- */ - async addEffectSpec(event, item, dataItem) { - let newItem = duplicate(item.data); + async addEffectSpec(event, item) { + let newItem = duplicate(item); if (event.toElement.className == 'drop-effect-spec') { - let specArray = duplicate(this.object.data.data.recoveryrollspec); + let specArray = duplicate(this.object.system.recoveryrollspec); specArray.push(newItem); - await this.object.update({ 'data.recoveryrollspec': specArray }); + await this.object.update({ 'system.recoveryrollspec': specArray }); } if (event.toElement.className == 'drop-effect-specaffected') { - let specArray = duplicate(this.object.data.data.specaffected); + let specArray = duplicate(this.object.system.specaffected); specArray.push(newItem); - await this.object.update({ 'data.specaffected': specArray }); + await this.object.update({ 'system.specaffected': specArray }); } } /* -------------------------------------------- */ - async addEffectItem(event, item, dataItem) { - let newItem = duplicate(item.data); + async addEffectItem(event, item) { + let newItem = duplicate(item); if (event.toElement.className == 'drop-equipment-effect') { - let effectArray = duplicate(this.object.data.data.effects); + let effectArray = duplicate(this.object.system.effects); effectArray.push(newItem); - await this.object.update({ 'data.effects': effectArray }); + await this.object.update({ 'system.effects': effectArray }); } } /* -------------------------------------------- */ - async addEffectVirtueVice(event, item, dataItem) { - let newItem = duplicate(item.data); + async addEffectVirtueVice(event, item) { + let newItem = duplicate(item); if (event.toElement.className == 'drop-virtue-vice-effect') { - let effectArray = duplicate(this.object.data.data.effectsgained); + let effectArray = duplicate(this.object.system.effectsgained); effectArray.push(newItem); - await this.object.update({ 'data.effectsgained': effectArray }); + await this.object.update({ 'system.effectsgained': effectArray }); } } /* -------------------------------------------- */ - async addViceToVirtue(event, item, dataItem) { - let newItem = duplicate(item.data); + async addViceToVirtue(event, item) { + let newItem = duplicate(item); if (event.toElement.className == 'drop-virtue-vice') { - let viceArray = duplicate(this.object.data.data.unavailablevice); + let viceArray = duplicate(this.object.system.unavailablevice); viceArray.push(newItem); - await this.object.update({ 'data.unavailablevice': viceArray }); + await this.object.update({ 'system.unavailablevice': viceArray }); } } /* -------------------------------------------- */ - async addVirtueToVice(event, item, dataItem) { - let newItem = duplicate(item.data); + async addVirtueToVice(event, item) { + let newItem = duplicate(item); if (event.toElement.className == 'drop-vice-virtue') { - let virtueArray = duplicate(this.object.data.data.unavailablevirtue); + let virtueArray = duplicate(this.object.system.unavailablevirtue); virtueArray.push(newItem); - await this.object.update({ 'data.unavailablevirtue': virtueArray }); + await this.object.update({ 'system.unavailablevirtue': virtueArray }); } } @@ -423,140 +423,101 @@ export class PegasusItemSheet extends ItemSheet { /* -------------------------------------------- */ async _onDrop(event) { + let data = event.dataTransfer.getData('text/plain') + let dataItem = JSON.parse( data) + console.log("DROP", event, dataItem ) + const item = fromUuidSync(dataItem.uuid) + if (!item) { + ui.notifications.warn("Unable to find relevant item - Aborting drag&drop " + data.uuid) + return + } + if (this.object.type == 'virtue' ) { - let data = event.dataTransfer.getData('text/plain'); - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem); - if (item.data.type == 'effect') { - return this.addEffectVirtueVice(event, item, dataItem); - } - if (item.data.type == 'vice') { - return this.addViceToVirtue(event, item, dataItem); - } + if (item.type == 'effect') { + return this.addEffectVirtueVice(event, item); + } + if (item.type == 'vice') { + return this.addViceToVirtue(event, item); } } + if (this.object.type == 'vice' ) { - let data = event.dataTransfer.getData('text/plain'); - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem); - if (item.data.type == 'effect') { - return this.addEffectVirtueVice(event, item, dataItem); - } - if (item.data.type == 'virtue') { - return this.addVirtueToVice(event, item, dataItem); - } + if (item.type == 'effect') { + return this.addEffectVirtueVice(event, item); + } + if (item.type == 'virtue') { + return this.addVirtueToVice(event, item); } } if (this.object.type == 'weapon' || this.object.type == 'armor' || this.object.type == 'shield' || this.object.type == 'equipment' || this.object.type == 'vehiclemodule' || this.object.type == 'vehicleweaponmodule') { - let data = event.dataTransfer.getData('text/plain'); - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem); - if (item.data.type == 'effect') { - return this.addEffectItem(event, item, dataItem); - } + if (item.type == 'effect') { + return this.addEffectItem(event, item); } } if (this.object.type == 'power') { - let data = event.dataTransfer.getData('text/plain'); - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem); - if (item.data.type == 'effect') { - return this.addEffectPower(event, item, dataItem); - } + if (item.type == 'effect') { + return this.addEffectPower(event, item); } } if (this.object.type == 'effect') { - let data = event.dataTransfer.getData('text/plain'); - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem); - if (item.data.type == 'specialisation') { - return this.addEffectSpec(event, item, dataItem); - } + if (item.type == 'specialisation') { + return this.addEffectSpec(event, item); } } if (this.object.type == 'race') { - let data = event.dataTransfer.getData('text/plain'); - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem); - if (item.data.type == 'ability') { - return this.addAbility(event, item, dataItem); - } - if (item.data.type == 'perk') { - return this.addRacePerk(event, item, dataItem); - } + if (item.type == 'ability') { + return this.addAbility(event, item); + } + if (item.type == 'perk') { + return this.addRacePerk(event, item); } } if (this.object.type == 'perk') { - let data = event.dataTransfer.getData('text/plain') - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem) - if (item.data.type == 'specialisation') { - return this.addPerkSpecialisation(event, item, dataItem) - } - if (item.data.type == 'effect') { - return this.addPerkEffect(event, item, dataItem); - } + if (item.type == 'specialisation') { + return this.addPerkSpecialisation(event, item) + } + if (item.type == 'effect') { + return this.addPerkEffect(event, item); } } if (this.object.type == 'specialisation') { - let data = event.dataTransfer.getData('text/plain'); - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem); - if (item.data.type == 'power') { - return this.addPower(event, item, dataItem); - } + if (item.type == 'power') { + return this.addPower(event, item); } } + if (this.object.type == 'ability') { - let data = event.dataTransfer.getData('text/plain'); - if (data) { - let dataItem = JSON.parse(data); - let item = await PegasusUtility.searchItem(dataItem); - if (item.data.type == 'effect') { - return this.addAbilityEffect(event, item, dataItem); - } - if (item.data.type == 'power') { - return this.addAbilityPower(event, item, dataItem); - } - if (item.data.type == 'specialisation') { - return this.addAbilitySpec(event, item, dataItem); - } - if (item.data.type == 'weapon' || item.data.type == 'armor') { - return this.addAbilityWeaponArmor(event, item, dataItem); - } + if (item.type == 'effect') { + return this.addAbilityEffect(event, item); + } + if (item.type == 'power') { + return this.addAbilityPower(event, item); + } + if (item.type == 'specialisation') { + return this.addAbilitySpec(event, item); + } + if (item.type == 'weapon' || item.type == 'armor') { + return this.addAbilityWeaponArmor(event, item); } } if (this.object.type == 'role') { - let data = event.dataTransfer.getData('text/plain') - if (data) { - let dataItem = JSON.parse(data) - let item = await PegasusUtility.searchItem(dataItem) - if (item.data.type == 'specialisation') { - return this.addRoleSpecialisation(event, item, dataItem) - } - if (item.data.type == 'perk') { - return this.addRolePerk(event, item, dataItem) - } - if (item.data.type == 'ability') { - return this.addRoleAbility(event, item, dataItem) - } + if (item.type == 'specialisation') { + return this.addRoleSpecialisation(event, item) + } + if (item.type == 'perk') { + return this.addRolePerk(event, item) + } + if (item.type == 'ability') { + return this.addRoleAbility(event, item) } } ui.notifications.warn("This item can not be dropped over another item") diff --git a/modules/pegasus-roll-dialog.js b/modules/pegasus-roll-dialog.js index a609326..e695ca3 100644 --- a/modules/pegasus-roll-dialog.js +++ b/modules/pegasus-roll-dialog.js @@ -51,10 +51,10 @@ export class PegasusRollDialog extends Dialog { let level, genre, idVal, key if (effect.type == 'effect') { let effectData = effect.effect - level = effectData.data.effectlevel - genre = effectData.data.genre - effectData.data.isUsed = toggled - if (effectData.data.reducedicevalue || effectData.data.statdice) { + level = effectData.system.effectlevel + genre = effectData.system.genre + effectData.system.isUsed = toggled + if (effectData.system.reducedicevalue || effectData.system.statdice) { idVal = "#statDicesLevel" key = "statLevelBonus" } @@ -124,13 +124,13 @@ export class PegasusRollDialog extends Dialog { if (equip) { equip.applied = toggled let idVal = "#damageDiceLevel" // Default - if (equip.equip.data.bonusdice) { + if (equip.equip.system.bonusdice) { idVal = "#bonusDicesLevel" } - if (equip.equip.data.statdice) { + if (equip.equip.system.statdice) { idVal = "#statDicesLevel" } - if (equip.equip.data.otherdice) { + if (equip.equip.system.otherdice) { idVal = "#damageDiceLevel" } let newLevel = Number($(idVal).val()) @@ -170,7 +170,7 @@ export class PegasusRollDialog extends Dialog { this.rollData.selectedSpec = event.currentTarget.value let spec = this.rollData.specList.find(item => item._id == this.rollData.selectedSpec) if (spec) { - this.rollData.specDicesLevel = spec.data.level + this.rollData.specDicesLevel = spec.system.level this.rollData.specName = spec.name $('#specDicesLevel').val(this.rollData.specDicesLevel) } else { diff --git a/modules/pegasus-utility.js b/modules/pegasus-utility.js index d780116..4926d32 100644 --- a/modules/pegasus-utility.js +++ b/modules/pegasus-utility.js @@ -109,12 +109,12 @@ export class PegasusUtility { static updateEffectsBonusDice(rollData) { let newDicePool = rollData.dicePool.filter(dice => dice.name != "effect-bonus-dice") for (let effect of rollData.effectsList) { - if (effect && effect.applied && effect.type == "effect" && effect.effect.data.bonusdice) { - let diceKey = PegasusUtility.getDiceFromLevel(effect.effect.data.effectlevel) + if (effect && effect.applied && effect.type == "effect" && effect.effect.system.bonusdice) { + let diceKey = PegasusUtility.getDiceFromLevel(effect.effect.system.effectlevel) let diceList = diceKey.split(" ") for (let myDice of diceList) { let newDice = { - name: "effect-bonus-dice", key: myDice, level: effect.effect.data.effectlevel, effect: effect.effect.name, + name: "effect-bonus-dice", key: myDice, level: effect.effect.system.effectlevel, effect: effect.effect.name, img: `systems/fvtt-pegasus-rpg/images/dice/${myDice}.webp` } newDicePool.push(newDice) @@ -128,8 +128,8 @@ export class PegasusUtility { static updateHindranceBonusDice(rollData) { let newDicePool = rollData.dicePool.filter(dice => dice.name != "effect-hindrance") for (let hindrance of rollData.effectsList) { - if (hindrance && hindrance.applied && (hindrance.type == "hindrance" || (hindrance.type == "effect" && hindrance.effect?.data?.hindrance) ) ) { - let diceKey = PegasusUtility.getDiceFromLevel( (hindrance.value) ? hindrance.value : hindrance.effect.data.effectlevel) + if (hindrance && hindrance.applied && (hindrance.type == "hindrance" || (hindrance.type == "effect" && hindrance.effect?.system?.hindrance) ) ) { + let diceKey = PegasusUtility.getDiceFromLevel( (hindrance.value) ? hindrance.value : hindrance.effect.system.effectlevel) let diceList = diceKey.split(" ") for (let myDice of diceList) { let newDice = { @@ -500,19 +500,6 @@ export class PegasusUtility { return undefined; } - /* -------------------------------------------- */ - static templateData(it) { - return PegasusUtility.data(it)?.data ?? {} - } - - /* -------------------------------------------- */ - static data(it) { - if (it instanceof Actor || it instanceof Item || it instanceof Combatant) { - return it.data; - } - return it; - } - /* -------------------------------------------- */ static getDiceValue(level = 0) { let diceString = this.diceList[level] @@ -716,7 +703,7 @@ export class PegasusUtility { // De-actived used effects from perks let toRem = [] for (let effect of rollData.effectsList) { - if (effect.effect.data.perkId && effect.effect.data.isUsed) { + if (effect.effect.system.perkId && effect.effect.system.isUsed) { toRem.push(effect.effect._id) } } @@ -731,7 +718,7 @@ export class PegasusUtility { // De-actived used effects from perks let toRem = [] for (let effect of rollData.effectsList) { - if (effect.effect && effect.effect.data.isUsed && effect.effect.data.oneuse) { + if (effect.effect && effect.effect.system.isUsed && effect.effect.system.oneuse) { effect.defenderTokenId = rollData.defenderTokenId if (effect.foreign) { if (game.user.isGM) { @@ -896,7 +883,7 @@ export class PegasusUtility { /* -------------------------------------------- */ static getUsers(filter) { - return game.users.filter(filter).map(user => user.data._id); + return game.users.filter(filter).map(user => user.id); } /* -------------------------------------------- */ static getWhisperRecipients(rollMode, name) { diff --git a/system.json b/system.json index e120c2d..8ea277c 100644 --- a/system.json +++ b/system.json @@ -1,6 +1,4 @@ { - "author": "Uberwald", - "compatibleCoreVersion": "9", "description": "Pegasus RPG system for FoundryVTT", "download": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg/fvtt-pegasus-rpg.zip", "esmodules": [ @@ -15,13 +13,23 @@ "path": "lang/en.json" } ], + "authors": [ + { + "name": "Uberwald", + "flags": {} + } + ], "library": false, "license": "LICENSE.txt", "manifest": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg/system.json", "manifestPlusVersion": "1.0.0", "media": [], - "minimumCoreVersion": "0.8.0", - "name": "fvtt-pegasus-rpg", + "compatibility": { + "minimum": "10", + "verified": "10.284", + "maximum": "10" + }, + "id": "fvtt-pegasus-rpg", "packs": [ { "type": "Item", @@ -273,6 +281,6 @@ "templateVersion": 109, "title": "Pegasus RPG", "url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg", - "version": "0.6.27", + "version": "10.0.0", "background" : "./images/ui/pegasus_welcome_page.webp" } diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index e2b3392..1c092b5 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -43,14 +43,14 @@

MR

- @@ -62,7 +62,7 @@ @@ -158,10 +158,10 @@
  • Current - Threshold -
@@ -205,16 +205,16 @@ src="{{perk.img}}" /> {{perk.name}} - {{perk.data.level}} + {{perk.system.level}} - {{#if perk.data.features.range.flag}} - {{perk.data.features.range.value}} + {{#if perk.system.features.range.flag}} + {{perk.system.features.range.value}} {{else}}  -  {{/if}} - {{#if perk.data.features.nbtargets.flag}} - {{perk.data.features.nbtargets.value}} + {{#if perk.system.features.nbtargets.flag}} + {{perk.system.features.nbtargets.value}} {{else}}  -  {{/if}} @@ -224,8 +224,8 @@ {{#if (eq @root.traumaState "severetrauma")}} Disabled {{else}} - + {{#select perk.system.status}} @@ -235,38 +235,38 @@ {{/if}} - {{#if (ne perk.data.status "ready")}} - {{#if (eq perk.data.nbuse "next1action")}} + {{#if (ne perk.system.status "ready")}} + {{#if (eq perk.system.nbuse "next1action")}} + data-use-index="1" name="perk.system.used1" {{checked perk.system.used1}} />     {{/if}} - {{#if (eq perk.data.nbuse "next2action")}} + {{#if (eq perk.system.nbuse "next2action")}} + class="perk-used" data-use-index="1" name="perk.system.used1" {{checked + perk.system.used1}} /> + class="perk-used" data-use-index="2" name="perk.system.used2" {{checked + perk.system.used2}} />   {{/if}} - {{#if (eq perk.data.nbuse "next3action")}} + {{#if (eq perk.system.nbuse "next3action")}} + class="perk-used" data-use-index="1" name="perk.system.used1" {{checked + perk.system.used1}} /> + class="perk-used" data-use-index="2" name="perk.system.used2" {{checked + perk.system.used2}} /> + class="perk-used" data-use-index="3" name="perk.system.used3" {{checked + perk.system.used3}} /> {{/if}} {{else}} @@ -307,10 +307,10 @@ {{effect.name}} - {{effect.data.effectlevel}} - {{upperFirst effect.data.type}} - {{upperFirst effect.data.genre}} - {{upper effect.data.stataffected}} + {{effect.system.effectlevel}} + {{upperFirst effect.system.type}} + {{upperFirst effect.datsystema.genre}} + {{upper effect.system.stataffected}}
 
@@ -344,10 +344,10 @@ {{spec.name}} - {{upper spec.data.statistic}} - {{spec.data.dice}} - {{#if spec.data.ispowergroup}} - {{#if spec.data.powersactivated}} + {{upper spec.system.statistic}} + {{spec.system.dice}} + {{#if spec.system.ispowergroup}} + {{#if spec.system.powersactivated}} Deactivate {{else}} Activate @@ -379,17 +379,17 @@

{{data.nrg.label}}

Activated  Current +/ -  Mod  Max / {{data.nrg.absolutemax}} @@ -398,11 +398,11 @@

Power Purchase Points (PPP)

Available PPP    Spent PPP @@ -440,16 +440,16 @@ - {{#if power.data.rollneeded}} + {{#if power.system.rollneeded}} {{power.name}} {{else}} {{power.name}} {{/if}} - {{upperFirst power.data.type}} + {{upperFirst power.system.type}} - {{upperFirst power.data.action}} + {{upperFirst power.system.action}} - {{#if power.data.dmgroll}} - {{upper power.data.dmgstatistic}} + {{#if power.system.dmgroll}} + {{upper power.system.dmgstatistic}} {{else}}  -  {{/if}} - {{power.data.cost}} + {{power.system.cost}} + value="{{power.system.costspent}}" data-dtype="Number" /> - {{power.data.powerlevel}} + {{power.system.powerlevel}}
 
@@ -509,10 +509,10 @@ src="{{ability.img}}" /> {{ability.name}} - {{upper ability.data.affectedstat}} - {{ability.data.statmodifier}} - {{upperFirst ability.data.statusaffected}} - {{ability.data.statusmodifier}} + {{upper ability.system.affectedstat}} + {{ability.system.statmodifier}} + {{upperFirst ability.system.statusaffected}} + {{ability.system.statusmodifier}}
 
@@ -561,16 +561,16 @@ {{money.name}} - + - {{#if money.data.idrDice}} - {{money.data.idrDice}} + {{#if money.system.idrDice}} + {{money.system.idrDice}} {{else}}  -  {{/if}} @@ -623,13 +623,13 @@ {{weapon.name}} - - - - + + + + - {{#if (gt weapon.data.ammomax 0)}} -
@@ -865,22 +865,22 @@
  • -
  • - +
  • -
  • -
    @@ -889,7 +889,7 @@
  • -
    @@ -914,7 +914,7 @@ src="{{virtue.img}}" /> {{virtue.name}}
     
    @@ -947,7 +947,7 @@ src="{{vice.img}}" /> {{vice.name}}
  • - + name="system.biodata.worstfearactive" {{checked data.biodata.worstfearactive}} /> Active ?
  • - + name="system.biodata.desiresactive" {{checked data.biodata.desiresactive}} /> Active ?
@@ -992,17 +992,17 @@
  • -
  • -
  • -
@@ -1015,28 +1015,28 @@
  • -
  • - +
  • - +
  • - +
  • - +
  • - {{#select data.biodata.maxlevelremaining}} {{{@root.maxLevelRemainingList}}} {{/select}} @@ -1044,7 +1044,7 @@
  • - {{#select data.biodata.currentlevelremaining}} {{{@root.levelRemainingList}}} {{/select}} @@ -1052,7 +1052,7 @@
  • -
  • @@ -1060,13 +1060,13 @@

    Background :

    - {{editor content=data.biodata.description target="data.biodata.description" button=true owner=owner + {{editor data.biodata.description target="system.biodata.description" button=true owner=owner editable=editable}}

    Notes :

    - {{editor content=data.biodata.notes target="data.biodata.notes" button=true owner=owner editable=editable}} + {{editor data.biodata.notes target="system.biodata.notes" button=true owner=owner editable=editable}}

    diff --git a/templates/item-armor-sheet.html b/templates/item-armor-sheet.html index 33b6de1..79b019e 100644 --- a/templates/item-armor-sheet.html +++ b/templates/item-armor-sheet.html @@ -19,7 +19,7 @@
    • - {{#select data.statistic}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-statistics.html}} {{/select}} @@ -27,29 +27,29 @@
    • - {{#select data.resistance}} {{{optionsDiceList}}} {{/select}}
    • - +
    • {{> systems/fvtt-pegasus-rpg/templates/partial-equipment-effects.html}}
    • - +
    • - +
    • - +
    • - {{#select data.idr}} {{{optionsDiceList}}} {{/select}} diff --git a/templates/item-combatmodule-sheet.html b/templates/item-combatmodule-sheet.html index a1d47c5..5bfcffe 100644 --- a/templates/item-combatmodule-sheet.html +++ b/templates/item-combatmodule-sheet.html @@ -15,7 +15,7 @@
      • - {{#select data.combattype}} @@ -28,7 +28,7 @@
      • - {{#select data.fc}} {{{optionsDiceList}}} {{/select}} @@ -36,11 +36,11 @@
      • - +
      • - +
      diff --git a/templates/item-effect-sheet.html b/templates/item-effect-sheet.html index 2594e66..9163822 100644 --- a/templates/item-effect-sheet.html +++ b/templates/item-effect-sheet.html @@ -17,7 +17,7 @@
      • - {{#select data.type}} @@ -26,7 +26,7 @@
      • - {{#select data.genre}} @@ -35,40 +35,40 @@
      • - +
      • - +
      • - +
      • - +
      • - +
      • - +
      • - +
      • - +
      • - +
      • - +
      • {{#if data.effectstatlevel}}
      • - {{#select data.effectstat}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-statistics.html notapplicable=false mr=true all=false}} {{/select}} @@ -76,7 +76,7 @@
      • {{else}}
      • - +
      • {{/if}} @@ -87,7 +87,7 @@ {{#each data.specaffected as |spec idx|}}
      • - +
        @@ -97,7 +97,7 @@
      • - {{#select data.stataffected}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-statistics.html notapplicable=true mr=true all=true combat=true vehicle=true power=true}} {{/select}} @@ -108,29 +108,29 @@
      • - +
      • - +
      • - +
      • {{else}}
      • - +
      • - +
      • - {{#select data.resistedby}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-statistics.html notapplicable=true mr=false all=false}} {{/select}} @@ -138,12 +138,12 @@
      • - +
      • {{#if data.recoveryroll}}
      • - {{#select data.recoveryrollstat}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-statistics.html notapplicable=true mr=false all=false}} {{/select}} @@ -158,7 +158,7 @@
      • {{#each data.recoveryrollspec as |spec idx|}}
      • - +
        diff --git a/templates/item-equipment-sheet.html b/templates/item-equipment-sheet.html index 0d66d2d..7213418 100644 --- a/templates/item-equipment-sheet.html +++ b/templates/item-equipment-sheet.html @@ -16,7 +16,7 @@
        • - {{#select data.type}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-equipment-types.html}} {{/select}} @@ -24,7 +24,7 @@
        • - {{#select data.stataffected}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-statistics.html notapplicable=true mr=true}} {{/select}} @@ -32,48 +32,48 @@
        • - +
        • - +
        • - +
        • - +
        • {{> systems/fvtt-pegasus-rpg/templates/partial-equipment-effects.html}}
        • - +
        • - +
        • - +
        • - +
        • {{#if data.iscontainer}}
        • - +
        • {{/if}}
        • - +
        • - +
        • - {{#select data.idr}} {{{optionsDiceList}}} {{/select}} diff --git a/templates/item-mobilitymodule-sheet.html b/templates/item-mobilitymodule-sheet.html index 98678d9..9f5a733 100644 --- a/templates/item-mobilitymodule-sheet.html +++ b/templates/item-mobilitymodule-sheet.html @@ -15,7 +15,7 @@
          • - {{#select data.vehiclecategory}} @@ -30,7 +30,7 @@
          • - {{#select data.quality}} @@ -46,7 +46,7 @@
          • - {{#select data.mr}} {{{optionsDiceList}}} {{/select}} @@ -54,11 +54,11 @@
          • - +
          • - {{#select data.man}} {{{optionsDiceList}}} {{/select}} @@ -66,7 +66,7 @@
          • - {{#select data.ts_f}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-vehicle-speed.html notapplicable=true}} {{/select}} @@ -74,7 +74,7 @@
          • - {{#select data.ts_s}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-vehicle-speed.html notapplicable=true}} {{/select}} @@ -82,18 +82,18 @@
          • - {{#select data.ts_r}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-vehicle-speed.html notapplicable=true}} {{/select}}
          • - +
          • - +
          • diff --git a/templates/item-money-sheet.html b/templates/item-money-sheet.html index da8430c..49d5147 100644 --- a/templates/item-money-sheet.html +++ b/templates/item-money-sheet.html @@ -14,13 +14,13 @@