diff --git a/images/icons/icon_ability.webp b/images/icons/icon_ability.webp new file mode 100644 index 0000000..1986d5c Binary files /dev/null and b/images/icons/icon_ability.webp differ diff --git a/images/icons/icon_armor.webp b/images/icons/icon_armor.webp new file mode 100644 index 0000000..f9651dc Binary files /dev/null and b/images/icons/icon_armor.webp differ diff --git a/images/icons/icon_weapon.webp b/images/icons/icon_weapon.webp new file mode 100644 index 0000000..cefdebd Binary files /dev/null and b/images/icons/icon_weapon.webp differ 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 @@ @@ -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}}
 
- {{#if power.data.activated}}{{#if power.system.activated}}{{else}}{{/if}}
@@ -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 @@