diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 0b03b11..12d1935 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -66,10 +66,9 @@ export class BoLActorSheet extends ActorSheet { const incr = parseInt(dataset.incr) const min = parseInt(dataset.min) const max = parseInt(dataset.max) || 10000 - const itemData = item.data; - let value = eval("itemData." + target) + let value = eval("item." + target) value = value || 0 - console.log("IncDec", item, target, value, operator, min, max) + //console.log("IncDec", item, target, value, operator, min, max) if (operator === "minus") { if (value >= min + incr) value -= incr; else value = min; @@ -109,12 +108,12 @@ export class BoLActorSheet extends ActorSheet { /** @override */ getData(options) { - const data = super.getData(options); - const actorData = duplicate(data.data); + const data = super.getData(options) + const actorData = duplicate(data) let formData = duplicate(data) formData.config = game.bol.config - formData.data = actorData.data + formData.data = actorData formData.details = this.actor.details formData.attributes = this.actor.attributes formData.aptitudes = this.actor.aptitudes diff --git a/module/actor/actor.js b/module/actor/actor.js index 57e93d0..a89b220 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -9,15 +9,14 @@ export class BoLActor extends Actor { /** @override */ prepareData() { - const actorData = this.data; - if (actorData.type === 'character') { - actorData.type = 'player'; - actorData.villainy = false; + if (this.type === 'character') { + this.chartype = 'player'; + this.villainy = false; } - if (actorData.type === 'encounter') { - actorData.type = 'tough'; - actorData.villainy = true; + if (this.type === 'encounter') { + this.chartype = 'tough'; + this.villainy = true; } super.prepareData(); } @@ -25,13 +24,13 @@ export class BoLActor extends Actor { /* -------------------------------------------- */ updateResourcesData() { if (this.type == 'character') { - let newVitality = 10 + this.data.data.attributes.vigor.value + this.data.data.resources.hp.bonus - if (this.data.data.resources.hp.max != newVitality) { - this.update({ 'data.resources.hp.max': newVitality }) + let newVitality = 10 + this.system.attributes.vigor.value + this.system.resources.hp.bonus + if (this.system.resources.hp.max != newVitality) { + this.update({ 'system.resources.hp.max': newVitality }) } - let newPower = 10 + this.data.data.attributes.mind.value + this.data.data.resources.power.bonus - if (this.data.data.resources.power.max != newPower) { - this.update({ 'data.resources.power.max': newPower }) + let newPower = 10 + this.system.attributes.mind.value + this.system.resources.power.bonus + if (this.system.resources.power.max != newPower) { + this.update({ 'system.resources.power.max': newPower }) } } } @@ -44,25 +43,22 @@ export class BoLActor extends Actor { } /* -------------------------------------------- */ - get itemData() { - return Array.from(this.data.items.values()).map(i => i.data) - } get details() { - return this.data.data.details + return this.system.details } get attributes() { - return Object.values(this.data.data.attributes) + return Object.values(this.system.attributes) } get aptitudes() { - return Object.values(this.data.data.aptitudes) + return Object.values(this.system.aptitudes) } /* -------------------------------------------- */ clearRoundModifiers() { // Process data/items that are finished at end of a round let foList = this.fightoptions for (let fo of foList) { - if (fo.data.properties.used) { - this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'data.properties.used': false }]) + if (fo.system.properties.used) { + this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'system.properties.used': false }]) } } } @@ -71,28 +67,28 @@ export class BoLActor extends Actor { get defenseValue() { let defMod = 0 let fo = this.getActiveFightOption() - if (fo && fo.data.properties.fightoptiontype == "intrepid") { + if (fo && fo.system.properties.fightoptiontype == "intrepid") { defMod += -2 } - if (fo && fo.data.properties.fightoptiontype == "fulldefense") { + if (fo && fo.system.properties.fightoptiontype == "fulldefense") { defMod += 2 } - if (fo && fo.data.properties.fightoptiontype == "twoweaponsdef" && !fo.data.properties.used) { + if (fo && fo.system.properties.fightoptiontype == "twoweaponsdef" && !fo.system.properties.used) { defMod += 1 - this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'data.properties.used': true }]) + this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'system.properties.used': true }]) } - if (fo && fo.data.properties.fightoptiontype == "defense") { + if (fo && fo.system.properties.fightoptiontype == "defense") { defMod += 1 } - if (fo && fo.data.properties.fightoptiontype == "attack") { + if (fo && fo.system.properties.fightoptiontype == "attack") { defMod += -1 } - return this.data.data.aptitudes.def.value + defMod + return this.system.aptitudes.def.value + defMod } /* -------------------------------------------- */ getActiveFightOption() { - let it = this.itemData.find(i => i.type === "feature" && i.data.subtype === "fightoption" && i.data.properties.activated) + let it = this.items.find(i => i.type === "feature" && i.system.subtype === "fightoption" && i.system.properties.activated) if (it) { return duplicate(it) } @@ -101,14 +97,14 @@ export class BoLActor extends Actor { /* -------------------------------------------- */ incAttributeXP(key) { - let attr = duplicate(this.data.data.attributes[key]) + let attr = duplicate(this.system.attributes[key]) if (attr) { let nextXP = (attr.value == -1) ? 2 : attr.value + (attr.value + 1) - let xp = duplicate(this.data.data.xp) + let xp = duplicate(this.system.xp) if (xp.total - xp.spent >= nextXP) { attr.value += 1 xp.spent += nextXP - this.update({ [`data.attributes.${key}`]: attr, [`data.xp`]: xp }) + this.update({ [`system.attributes.${key}`]: attr, [`system.xp`]: xp }) } else { ui.notifications.warn("Pas assez de points d'expérience !") } @@ -117,14 +113,14 @@ export class BoLActor extends Actor { /* -------------------------------------------- */ incAptitudeXP(key) { - let apt = duplicate(this.data.data.aptitudes[key]) + let apt = duplicate(this.system.aptitudes[key]) if (apt) { let nextXP = (apt.value == -1) ? 1 : apt.value + 2 - let xp = duplicate(this.data.data.xp) + let xp = duplicate(this.system.xp) if (xp.total - xp.spent >= nextXP) { apt.value += 1 xp.spent += nextXP - this.update({ [`data.aptitudes.${key}`]: apt, [`data.xp`]: xp }) + this.update({ [`system.aptitudes.${key}`]: apt, [`system.xp`]: xp }) } else { ui.notifications.warn("Pas assez de points d'expérience !") } @@ -132,15 +128,15 @@ export class BoLActor extends Actor { } /* -------------------------------------------- */ incCareerXP(itemId) { - let career = this.data.items.get(itemId) + let career = this.items.get(itemId) if (career) { career = duplicate(career) - let nextXP = career.data.rank + 1 - let xp = duplicate(this.data.data.xp) + let nextXP = career.system.rank + 1 + let xp = duplicate(this.system.xp) if (xp.total - xp.spent >= nextXP) { xp.spent += nextXP - this.update({ [`data.xp`]: xp }) - this.updateEmbeddedDocuments('Item', [{ _id: career._id, 'data.rank': career.data.rank + 1 }]) + this.update({ [`system.xp`]: xp }) + this.updateEmbeddedDocuments('Item', [{ _id: career._id, 'system.rank': career.system.rank + 1 }]) } else { ui.notifications.warn("Pas assez de points d'expérience !") } @@ -149,18 +145,18 @@ export class BoLActor extends Actor { /* -------------------------------------------- */ async toggleFightOption(itemId) { - let fightOption = this.data.items.get(itemId) + let fightOption = this.items.get(itemId) let state let updates = [] if (fightOption) { fightOption = duplicate(fightOption) - if (fightOption.data.properties.activated) { + if (fightOption.system.properties.activated) { state = false } else { state = true } - updates.push({ _id: fightOption._id, 'data.properties.activated': state }) // Update the selected one + updates.push({ _id: fightOption._id, 'system.properties.activated': state }) // Update the selected one await this.updateEmbeddedDocuments("Item", updates) // Apply all changes // Then notify ChatMessage.create({ @@ -175,13 +171,13 @@ export class BoLActor extends Actor { /*-------------------------------------------- */ get armorMalusValue() { // used for Fight Options for (let armor of this.armors) { - if (armor.data.properties.armorQuality.includes("light")) { + if (armor.system.properties.armorQuality.includes("light")) { return 1 } - if (armor.data.properties.armorQuality.includes("medium")) { + if (armor.system.properties.armorQuality.includes("medium")) { return 2 } - if (armor.data.properties.armorQuality.includes("heavy")) { + if (armor.system.properties.armorQuality.includes("heavy")) { return 3 } } @@ -189,112 +185,112 @@ export class BoLActor extends Actor { } get resources() { - return Object.values(this.data.data.resources) + return Object.values(this.system.resources) } get boons() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "boon"); + return this.items.filter(i => i.type === "feature" && i.system.subtype === "boon"); } get flaws() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "flaw"); + return this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw"); } get careers() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "career"); + return duplicate( this.items.filter(i => i.type === "feature" && i.system.subtype === "career") || []) } get origins() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "origin"); + return this.items.filter(i => i.type === "feature" && i.system.subtype === "origin"); } get races() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "race"); + return this.items.filter(i => i.type === "feature" && i.system.subtype === "race"); } get languages() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "language") + return this.items.filter(i => i.type === "feature" && i.system.subtype === "language") } get fightoptions() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "fightoption") + return this.items.filter(i => i.type === "feature" && i.system.subtype === "fightoption") } get godsfaith() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "godsfaith") + return this.items.filter(i => i.type === "feature" && i.system.subtype === "godsfaith") } get features() { - return this.itemData.filter(i => i.type === "feature") + return this.items.filter(i => i.type === "feature") } get equipment() { - return this.itemData.filter(i => i.type === "item") + return this.items.filter(i => i.type === "item") } get equipmentCreature() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && (( i.data.subtype === "weapon" && i.data.properties.natural === true) || (i.data.subtype === "armor")) ) + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && (( i.system.subtype === "weapon" && i.system.properties.natural === true) || (i.system.subtype === "armor")) ) } get armors() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "armor"); + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "armor"); } get helms() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "helm"); + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "helm"); } get shields() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "shield"); + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "shield"); } get weapons() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "weapon"); + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "weapon"); } get protections() { return this.armors.concat(this.helms).concat(this.shields) } get spells() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "spell"); + return this.items.filter(i => i.type === "item" && i.system.category === "spell"); } get alchemy() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "alchemy"); + return this.items.filter(i => i.type === "item" && i.system.category === "alchemy"); } get melee() { - return this.weapons.filter(i => i.data.properties.melee === true); + return this.weapons.filter(i => i.system.properties.melee === true); } get natural() { - return this.weapons.filter(i => i.data.properties.natural === true); + return this.weapons.filter(i => i.system.properties.natural === true); } get ranged() { - return this.weapons.filter(i => i.data.properties.ranged === true); + return this.weapons.filter(i => i.system.properties.ranged === true); } get containers() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "container"); + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "container"); } get treasure() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "currency"); + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "currency"); } get vehicles() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "vehicle"); + return this.items.filter(i => i.type === "item" && i.system.category === "vehicle"); } get ammos() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "ammunition"); + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "ammunition"); } get misc() { - return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && (i.data.subtype === "other" || i.data.subtype === "container" || i.data.subtype === "scroll" || i.data.subtype === "jewel")); + return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && (i.system.subtype === "other" || i.system.subtype === "container" || i.system.subtype === "scroll" || i.system.subtype === "jewel")); } get bonusBoons() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "boon" && i.data.properties.isbonusdice); + return this.items.filter(i => i.type === "feature" && i.system.subtype === "boon" && i.system.properties.isbonusdice); } get malusFlaws() { - return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "flaw" && i.data.properties.ismalusdice); + return this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw" && i.system.properties.ismalusdice); } isSorcerer() { - if (this.careers.find(item => item.data.properties.sorcerer == true)) + if (this.careers.find(item => item.system.properties.sorcerer == true)) return true return false } isAlchemist() { - if (this.careers.find(item => item.data.properties.alchemist == true)) + if (this.careers.find(item => item.system.properties.alchemist == true)) return true return false } isPriest() { - if (this.careers.find(item => item.data.properties.priest == true)) + if (this.careers.find(item => item.system.properties.priest == true)) return true return false } @@ -304,8 +300,8 @@ export class BoLActor extends Actor { let armors = this.armors let ppCostArmor = 0 for (let armor of armors) { - if (armor.data.worn) { - ppCostArmor += Number(armor.data.properties.modifiers.powercost) || 0 + if (armor.system.worn) { + ppCostArmor += Number(armor.system.properties.modifiers.powercost) || 0 } } return ppCostArmor @@ -314,8 +310,8 @@ export class BoLActor extends Actor { getArmorAgiMalus() { let malusAgi = 0 for (let armor of this.protections) { - if (armor.data.worn) { - malusAgi += Number(armor.data.properties.modifiers.agility) || 0 + if (armor.system.worn) { + malusAgi += Number(armor.system.properties.modifiers.agility) || 0 } } return malusAgi @@ -324,8 +320,8 @@ export class BoLActor extends Actor { getArmorInitMalus() { let malusInit = 0 for (let armor of this.protections) { - if (armor.data.worn) { - malusInit += Number(armor.data.properties.modifiers.init) || 0 + if (armor.system.worn) { + malusInit += Number(armor.system.properties.modifiers.init) || 0 } } return malusInit @@ -333,7 +329,7 @@ export class BoLActor extends Actor { /*-------------------------------------------- */ spendPowerPoint(ppCost) { - let newPP = this.data.data.resources.power.value - ppCost + let newPP = this.system.resources.power.value - ppCost newPP = (newPP < 0) ? 0 : newPP this.update({ 'data.resources.power.value': newPP }) return newPP @@ -341,7 +337,7 @@ export class BoLActor extends Actor { /*-------------------------------------------- */ resetAlchemyStatus(alchemyId) { - let alchemy = this.data.items.get(alchemyId) + let alchemy = this.items.get(alchemyId) if (alchemy) { this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': 0 }]) } @@ -349,14 +345,14 @@ export class BoLActor extends Actor { /*-------------------------------------------- */ async spendAlchemyPoint(alchemyId, pcCost) { - let alchemy = this.data.items.get(alchemyId) + let alchemy = this.items.get(alchemyId) if (alchemy) { pcCost = Number(pcCost) ?? 0 - if (this.data.data.resources.alchemypoints.value >= pcCost) { - let newPC = this.data.data.resources.alchemypoints.value - pcCost + if (this.system.resources.alchemypoints.value >= pcCost) { + let newPC = this.system.resources.alchemypoints.value - pcCost newPC = (newPC < 0) ? 0 : newPC this.update({ 'data.resources.alchemypoints.value': newPC }) - newPC = alchemy.data.data.properties.pccurrent + pcCost + newPC = alchemy.system.properties.pccurrent + pcCost await this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': newPC }]) } else { ui.notifications.warn("Plus assez de Points de Création !") @@ -366,17 +362,17 @@ export class BoLActor extends Actor { /*-------------------------------------------- */ getAlchemistBonus() { - let sorcerer = this.careers.find(item => item.data.properties.alchemist == true) + let sorcerer = this.careers.find(item => item.system.properties.alchemist == true) if (sorcerer) { - return sorcerer.data.rank + return sorcerer.system.rank } return 0; } /*-------------------------------------------- */ getSorcererBonus() { - let sorcerer = this.careers.find(item => item.data.properties.sorcerer == true) + let sorcerer = this.careers.find(item => item.system.properties.sorcerer == true) if (sorcerer) { - return sorcerer.data.rank + return sorcerer.system.rank } return 0; } @@ -384,10 +380,10 @@ export class BoLActor extends Actor { /*-------------------------------------------- */ heroReroll() { if (this.type == 'character') { - return this.data.data.resources.hero.value > 0; + return this.system.resources.hero.value > 0; } else { - if (this.data.data.type == 'adversary') { - return this.data.data.resources.hero.value > 0; + if (this.system.type == 'adversary') { + return this.system.resources.hero.value > 0; } } return false @@ -396,17 +392,17 @@ export class BoLActor extends Actor { getResourcesFromType() { let resources = {}; if (this.type == 'encounter') { - resources['hp'] = this.data.data.resources.hp; - if (this.data.data.type != 'base') { - resources['faith'] = this.data.data.resources.faith - resources['power'] = this.data.data.resources.power + resources['hp'] = this.system.resources.hp; + if (this.system.type != 'base') { + resources['faith'] = this.system.resources.faith + resources['power'] = this.system.resources.power } - if (this.data.data.type == 'adversary') { - resources['hero'] = duplicate(this.data.data.resources.hero) + if (this.system.type == 'adversary') { + resources['hero'] = duplicate(this.system.resources.hero) resources['hero'].label = "BOL.resources.villainy" } } else { - resources = this.data.data.resources; + resources = this.system.resources; } return resources } @@ -532,13 +528,13 @@ export class BoLActor extends Actor { /*-------------------------------------------- */ buildRollList() { let rolls = [] - for (let key in this.data.data.attributes) { - let attr = this.data.data.attributes[key] + for (let key in this.system.attributes) { + let attr = this.system.attributes[key] rolls.push({ key: key, value: attr.value, name: attr.label, type: "attribute" }) } - for (let key in this.data.data.aptitudes) { + for (let key in this.system.aptitudes) { if (key != "def") { - let apt = this.data.data.aptitudes[key] + let apt = this.system.aptitudes[key] rolls.push({ key: key, value: apt.value, name: apt.label, type: "aptitude" }) } } @@ -554,13 +550,13 @@ export class BoLActor extends Actor { async manageHealthState() { let hpID = "lastHP" + this.id let lastHP = await this.getFlag("world", hpID) - if (lastHP != this.data.data.resources.hp.value && game.user.isGM ) { // Only GM sends this - await this.setFlag("world", hpID, this.data.data.resources.hp.value) - if (this.data.data.resources.hp.value <= 0) { + if (lastHP != this.system.resources.hp.value && game.user.isGM ) { // Only GM sends this + await this.setFlag("world", hpID, this.system.resources.hp.value) + if (this.system.resources.hp.value <= 0) { ChatMessage.create({ alias: this.name, whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name), - content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.data.data.resources.hp.value }) + content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.system.resources.hp.value }) }) } } @@ -568,46 +564,46 @@ export class BoLActor extends Actor { /*-------------------------------------------- */ registerInit(initScore, isCritical, isFumble) { - this.update({ 'data.combat.lastinit': initScore, 'data.combat.iscritical': isCritical, 'data.combat.isfumble': isFumble }) + this.update({ 'system.combat.lastinit': initScore, 'system.combat.iscritical': isCritical, 'system.combat.isfumble': isFumble }) } /*-------------------------------------------- */ getLastInitData() { - return this.data.data.combat + return this.system.combat } /*-------------------------------------------- */ async subHeroPoints(nb) { - let newHeroP = this.data.data.resources.hero.value - nb; + let newHeroP = this.system.resources.hero.value - nb; newHeroP = (newHeroP < 0) ? 0 : newHeroP; - await this.update({ 'data.resources.hero.value': newHeroP }); + await this.update({ 'system.resources.hero.value': newHeroP }); } /*-------------------------------------------- */ async sufferDamage(damage) { - let newHP = this.data.data.resources.hp.value - damage - await this.update({ 'data.resources.hp.value': newHP }) + let newHP = this.system.resources.hp.value - damage + await this.update({ 'system.resources.hp.value': newHP }) } /* -------------------------------------------- */ getArmorFormula() { - let protectWorn = this.protections.filter(item => item.data.worn) + let protectWorn = this.protections.filter(item => item.system.worn) let formula = "" for (let protect of protectWorn) { - if (protect.data.subtype == 'helm') { + if (protect.system.subtype == 'helm') { formula += "+1" - } else if (protect.data.subtype == 'armor') { + } else if (protect.system.subtype == 'armor') { if (BoLUtility.getRollArmor()) { - if (!protect.data.properties.soak.formula || protect.data.properties.soak.formula == "") { + if (!protect.system.properties.soak.formula || protect.system.properties.soak.formula == "") { ui.notifications.warn(`L'armure ${protect.name} n'a pas de formule pour la protection !`) } else { - formula += "+" + " max(" + protect.data.properties.soak.formula +",0)" + formula += "+" + " max(" + protect.system.properties.soak.formula +",0)" } } else { - if (protect.data.properties.soak.value == undefined) { + if (protect.system.properties.soak.value == undefined) { ui.notifications.warn(`L'armure ${protect.name} n'a pas de valeur fixe pour la protection !`) } else { - formula += "+ " + protect.data.properties.soak.value + formula += "+ " + protect.system.properties.soak.value } } } @@ -618,9 +614,9 @@ export class BoLActor extends Actor { /* -------------------------------------------- */ rollProtection(itemId) { - let armor = duplicate(this.data.items.get(itemId)) + let armor = duplicate(this.items.get(itemId)) if (armor) { - let armorFormula = "max("+armor.data.properties.soak.formula + ", 0)" + let armorFormula = "max("+armor.system.properties.soak.formula + ", 0)" let rollArmor = new Roll(armorFormula) rollArmor.roll({ async: false }).toMessage() } @@ -628,7 +624,7 @@ export class BoLActor extends Actor { /* -------------------------------------------- */ rollWeaponDamage(itemId) { - let weapon = duplicate(this.data.items.get(itemId)) + let weapon = duplicate(this.system.items.get(itemId)) if (weapon) { let r = new BoLDefaultRoll({ id: randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actorId: this.id, actor: this }) r.setSuccess(true) @@ -638,10 +634,10 @@ export class BoLActor extends Actor { /* -------------------------------------------- */ toggleEquipItem(item) { - const equipable = item.data.data.properties.equipable; + const equipable = item.system.properties.equipable; if (equipable) { - let itemData = duplicate(item.data); - itemData.data.worn = !itemData.data.worn; + let itemData = duplicate(item); + itemData.system.worn = !itemData.system.worn; return item.update(itemData); } } diff --git a/module/bol.js b/module/bol.js index 5774af6..1759b1e 100644 --- a/module/bol.js +++ b/module/bol.js @@ -79,6 +79,7 @@ function registerUsageCount( registerKey ) { name: "Unique world key", scope: "world", config: false, + default: "", type: String }); @@ -88,7 +89,7 @@ function registerUsageCount( registerKey ) { game.settings.set(registerKey, "world-key", worldKey ) } // Simple API counter - let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.data.version}"` + let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"` $.ajax(regURL) } } diff --git a/module/controllers/bol-rolls.js b/module/controllers/bol-rolls.js index e695116..32fd720 100644 --- a/module/controllers/bol-rolls.js +++ b/module/controllers/bol-rolls.js @@ -18,7 +18,7 @@ export class BoLRoll { /* -------------------------------------------- */ static attributeCheck(actor, key) { - let attribute = eval(`actor.data.data.attributes.${key}`) + let attribute = eval(`actor.system.attributes.${key}`) let label = (attribute.label) ? game.i18n.localize(attribute.label) : null let description = game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label) @@ -43,9 +43,9 @@ export class BoLRoll { /* -------------------------------------------- */ static aptitudeCheck(actor, key) { - let aptitude = eval(`actor.data.data.aptitudes.${key}`) + let aptitude = eval(`actor.system.aptitudes.${key}`) let attrKey = this.getDefaultAttribute(key) - let attribute = eval(`actor.data.data.attributes.${attrKey}`) + let attribute = eval(`actor.system.attributes.${attrKey}`) let label = (aptitude.label) ? game.i18n.localize(aptitude.label) : null; let description = game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label); @@ -72,13 +72,13 @@ export class BoLRoll { let target = BoLUtility.getTarget() - let weaponData = weapon.data - let attribute = eval(`actor.data.data.attributes.${weaponData.properties.attackAttribute}`) - let aptitude = eval(`actor.data.data.aptitudes.${weaponData.properties.attackAptitude}`) + let weaponData = weapon.system + let attribute = eval(`actor.system.attributes.${weaponData.properties.attackAttribute}`) + let aptitude = eval(`actor.system.aptitudes.${weaponData.properties.attackAptitude}`) // Manage specific case let fightOption = actor.getActiveFightOption() - if (fightOption && fightOption.data.fightoptiontype == "fulldefense") { + if (fightOption && fightOption.system.fightoptiontype == "fulldefense") { ui.notifications.warn(`{{actor.name}} est en Défense Totale ! Il ne peut pas attaquer ce round.`) return } @@ -138,8 +138,8 @@ export class BoLRoll { actorId: actor.id, img: actor.img, alchemy: alchemy, - attribute: actor.data.data.attributes.mind, - attrValue: actor.data.data.attributes.mind.value, + attribute: actor.system.attributes.mind, + attrValue: actor.system.attributes.mind.value, aptValue: 0, careerBonus: actor.getAlchemistBonus(), pcCost: Number(alchemyData.properties.pccost), @@ -161,14 +161,14 @@ export class BoLRoll { actorId: actor.id, img: actor.img, spell: spell, - attribute: actor.data.data.attributes.mind, - attrValue: actor.data.data.attributes.mind.value, + attribute: actor.system.attributes.mind, + attrValue: actor.system.attributes.mind.value, aptValue: 0, - ppCurrent: Number(actor.data.data.resources.power.value), + ppCurrent: Number(actor.system.resources.power.value), careerBonus: actor.getSorcererBonus(), ppCostArmor: actor.getPPCostArmor(), - ppCost: Number(spell.data.properties.ppcost), - mod: Number(spell.data.properties.difficulty), + ppCost: Number(spell.system.properties.ppcost), + mod: Number(spell.system.properties.difficulty), armorAgiMalus: actor.getArmorAgiMalus(), armorInitMalus: actor.getArmorInitMalus(), label: spell.name, @@ -180,7 +180,7 @@ export class BoLRoll { /* -------------------------------------------- */ static spellCheck(actor, event) { - if (actor.data.data.resources.power.value <= 0) { + if (actor.system.resources.power.value <= 0) { ui.notifications.warn("Plus assez de points de Pouvoir !") return } @@ -209,7 +209,7 @@ export class BoLRoll { $('#roll-nbdice').val("2 + " + String(Math.abs(this.rollData.bmDice)) + letter) } let rollbase = this.rollData.attrValue + "+" + this.rollData.aptValue - if ( this.rollData.weapon && this.rollData.weapon.data.properties.onlymodifier ) { + if ( this.rollData.weapon && this.rollData.weapon.system.properties.onlymodifier ) { rollbase = "" } $('#roll-modifier').val(rollbase + "+" + this.rollData.careerBonus + "+" + this.rollData.mod + "+" + @@ -226,20 +226,20 @@ export class BoLRoll { let fgItem = rollData.fightOption if (fgItem) { console.log(fgItem) - if (fgItem.data.properties.fightoptiontype == "armordefault") { + if (fgItem.system.properties.fightoptiontype == "armordefault") { rollData.modArmorMalus = rollData.armorMalus // Activate the armor malus rollData.damagesIgnoresArmor = true } - if (fgItem.data.properties.fightoptiontype == "intrepid") { + if (fgItem.system.properties.fightoptiontype == "intrepid") { rollData.attackModifier += 2 } - if (fgItem.data.properties.fightoptiontype == "defense") { + if (fgItem.system.properties.fightoptiontype == "defense") { rollData.attackModifier += -1 } - if (fgItem.data.properties.fightoptiontype == "attack") { + if (fgItem.system.properties.fightoptiontype == "attack") { rollData.attackModifier += 1 } - if (fgItem.data.properties.fightoptiontype == "twoweaponsdef" || fgItem.data.properties.fightoptiontype == "twoweaponsatt") { + if (fgItem.system.properties.fightoptiontype == "twoweaponsdef" || fgItem.system.properties.fightoptiontype == "twoweaponsatt") { rollData.attackModifier += -1 } } @@ -289,15 +289,15 @@ export class BoLRoll { html.find('#attr').change((event) => { let attrKey = event.currentTarget.value let actor = game.actors.get( this.rollData.actorId) - this.rollData.attribute = duplicate(actor.data.data.attributes[attrKey]) - this.rollData.attrValue = actor.data.data.attributes[attrKey].value + this.rollData.attribute = duplicate(actor.system.attributes[attrKey]) + this.rollData.attrValue = actor.system.attributes[attrKey].value this.updateTotalDice() }) html.find('#apt').change((event) => { let aptKey = event.currentTarget.value let actor = game.actors.get( this.rollData.actorId) - this.rollData.aptitude = duplicate(actor.data.data.aptitudes[aptKey]) - this.rollData.aptValue = actor.data.data.aptitudes[aptKey].value + this.rollData.aptitude = duplicate(actor.system.aptitudes[aptKey]) + this.rollData.aptValue = actor.system.aptitudes[aptKey].value this.updateTotalDice() }) @@ -339,16 +339,16 @@ export class BoLRoll { /* -------------------------------------------- */ static preProcessWeapon(rollData, defender) { if (rollData.mode == "weapon") { - rollData.weaponModifier = rollData.weapon.data.properties.attackModifiers ?? 0; - rollData.attackBonusDice = rollData.weapon.data.properties.attackBonusDice + rollData.weaponModifier = rollData.weapon.system.properties.attackModifiers ?? 0; + rollData.attackBonusDice = rollData.weapon.system.properties.attackBonusDice if (defender) { // If target is selected rollData.defence = defender.defenseValue rollData.armorMalus = defender.armorMalusValue rollData.shieldBlock = 'none' let shields = defender.shields for (let shield of shields) { - rollData.shieldBlock = (shield.data.properties.blocking.blockingAll) ? 'blockall' : 'blockone'; - rollData.shieldAttackMalus = (shield.data.properties.blocking.malus) ? shield.data.properties.blocking.malus : 1; + rollData.shieldBlock = (shield.system.properties.blocking.blockingAll) ? 'blockall' : 'blockone'; + rollData.shieldAttackMalus = (shield.system.properties.blocking.malus) ? shield.system.properties.blocking.malus : 1; rollData.applyShieldMalus = false } } @@ -431,7 +431,7 @@ export class BoLRoll { rollData.nbDice += (rollData.attackBonusDice) ? 1 : 0 let rollbase = rollData.attrValue + rollData.aptValue - if ( rollData.weapon && rollData.weapon.data.properties.onlymodifier ) { + if ( rollData.weapon && rollData.weapon.system.properties.onlymodifier ) { rollbase = 0 } const modifiers = rollbase + rollData.careerBonus + rollData.mod + rollData.weaponModifier - rollData.defence - rollData.modArmorMalus + rollData.shieldMalus + rollData.attackModifier + rollData.appliedArmorMalus @@ -597,8 +597,8 @@ export class BoLDefaultRoll { if (this.rollData.damageMode == 'damage-plus-12') { bonusDmg = 12 } - let attrDamageValue = this.getDamageAttributeValue(this.rollData.weapon.data.properties.damageAttribute) - let weaponFormula = BoLUtility.getDamageFormula(this.rollData.weapon.data, this.rollData.fightOption) + let attrDamageValue = this.getDamageAttributeValue(this.rollData.weapon.system.properties.damageAttribute) + let weaponFormula = BoLUtility.getDamageFormula(this.rollData.weapon.system, this.rollData.fightOption) let damageFormula = weaponFormula + "+" + bonusDmg + "+" + attrDamageValue console.log("DAMAGE !!!", damageFormula, attrDamageValue, this.rollData) diff --git a/module/item/item-sheet.js b/module/item/item-sheet.js index 0b6b9de..bd1b4c8 100644 --- a/module/item/item-sheet.js +++ b/module/item/item-sheet.js @@ -20,42 +20,40 @@ export class BoLItemSheet extends ItemSheet { /* -------------------------------------------- */ /** @override */ getData(options) { - const data = super.getData(options); - const itemData = data.data; - data.config = game.bol.config; - data.item = itemData; - data.data = itemData.data; - data.category = itemData.category; - data.itemProperties = this.item.itemProperties; + const data = super.getData(options) + let itemData = duplicate(data.document) + data.config = game.bol.config + data.item = itemData + data.category = itemData.system.category data.isGM = game.user.isGM; // Dynamic default data fix/adapt if (itemData.type == "item") { - if (!itemData.data.category) { - itemData.data.category = "equipment" + if (!itemData.system.category) { + itemData.system.category = "equipment" } - if ( itemData.data.category == "equipment" && itemData.data.properties.equipable) { - if (!itemData.data.properties.slot) { - itemData.data.properties.slot = "-" + if ( itemData.system.category == "equipment" && itemData.system.properties.equipable) { + if (!itemData.system.properties.slot) { + itemData.system.properties.slot = "-" } } - if (itemData.data.category == 'spell') { - if(!itemData.data.properties.mandatoryconditions) { - itemData.data.properties.mandatoryconditions = [] + if (itemData.system.category == 'spell') { + if(!itemData.system.properties.mandatoryconditions) { + itemData.system.properties.mandatoryconditions = [] } - if(!itemData.data.properties.optionnalconditions) { - itemData.data.properties.optionnalconditions = [] + if(!itemData.system.properties.optionnalconditions) { + itemData.system.properties.optionnalconditions = [] } for (let i = 0; i < 4; i++) { - itemData.data.properties.mandatoryconditions[i] = itemData.data.properties.mandatoryconditions[i] ?? "" + itemData.system.properties.mandatoryconditions[i] = itemData.system.properties.mandatoryconditions[i] ?? "" } for (let i = 0; i < 8; i++) { - itemData.data.properties.optionnalconditions[i] = itemData.data.properties.optionnalconditions[i] ?? "" + itemData.system.properties.optionnalconditions[i] = itemData.system.properties.optionnalconditions[i] ?? "" } } } else { - if (!itemData.data.subtype) { - itemData.data.category = "origin" + if (!itemData.system.subtype) { + itemData.system.category = "origin" } } diff --git a/module/item/item.js b/module/item/item.js index 073a203..d149d17 100644 --- a/module/item/item.js +++ b/module/item/item.js @@ -7,21 +7,17 @@ export class BoLItem extends Item { * Augment the basic Item data model with additional dynamic data. */ prepareData() { - super.prepareData(); - // console.debug("Item prepareData"); - // Get the Item's data - const itemData = this.data; - // console.log(itemData); - const actorData = this.actor ? this.actor.data : {}; - const data = itemData.data; - } + super.prepareData() - get properties() { - return this.data.properties; + const actorData = this.actor ? this.actor.system : {} } /* -------------------------------------------- */ + get properties() { + return this.system.properties + } + /* -------------------------------------------- */ /** * Get the Array of item properties which are used in the small sidebar of the description tab * @return {Array} @@ -29,11 +25,11 @@ export class BoLItem extends Item { */ get itemProperties() { const props = []; - if ( this.data.type === "item" ) { - const entries = Object.entries(this.data.data.properties); - props.push(...entries.filter(e => e[1] === true).map(e => { return game.bol.config.itemProperties2[e[0]] })); + if ( this.type === "item" ) { + const entries = Object.entries(this.system.properties) + props.push(...entries.filter(e => e[1] === true).map(e => { return game.bol.config.itemProperties2[e[0]] })) } - return props.filter(p => !!p); + return props.filter(p => !!p) } diff --git a/system.json b/system.json index 5c9b5f6..b394d0b 100644 --- a/system.json +++ b/system.json @@ -14,10 +14,10 @@ "url": "https://www.uberwald.me/gitea/public/bol", "license": "LICENSE.txt", "flags": {}, - "version": "1.5.0", + "version": "10.0.0", "templateVersion": 10, - "minimumCoreVersion": "0.8.6", - "compatibleCoreVersion": "9", + "minimumCoreVersion": "10", + "compatibleCoreVersion": "10", "scripts": [], "esmodules": [ "module/bol.js" @@ -182,8 +182,8 @@ "system": [], "dependencies": [], "socket": true, - "manifest": "https://www.uberwald.me/gitea/public/bol/raw/master/system.json", - "download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v1.5.0.zip", + "manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json", + "download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.0.0.zip", "protected": false, "background": "images/map_lemurie.webp", "gridDistance": 1.5, diff --git a/template.json b/template.json index 8d831f3..6e65804 100644 --- a/template.json +++ b/template.json @@ -137,7 +137,7 @@ }, "character": { "templates": [ "base" ], - "type": "player", + "chartype": "player", "villainy": false, "bougette": { "state": "nomoney" @@ -157,7 +157,7 @@ }, "encounter": { "templates": [ "base" ], - "type": "tough", + "chartype": "tough", "villainy": false, "size": "", "environment": "" diff --git a/templates/actor/parts/tabs/actor-actions.hbs b/templates/actor/parts/tabs/actor-actions.hbs index 00ed4c2..80c74ee 100644 --- a/templates/actor/parts/tabs/actor-actions.hbs +++ b/templates/actor/parts/tabs/actor-actions.hbs @@ -12,14 +12,14 @@