From 58c3fbcd429f473e7032481a7f39f8fafc1a976f Mon Sep 17 00:00:00 2001 From: Erebus Date: Mon, 21 Feb 2022 10:12:27 +0100 Subject: [PATCH] v0.1.0 --- module/actors/actor-sheet.js | 133 +++++++++++++++-------------- module/helpers/actor-helper.js | 8 +- module/helpers/dice-helper.js | 32 +++---- module/helpers/item-helpers.js | 4 +- module/items/item-sheet.js | 38 +++++++-- system.json | 8 +- templates/parts/actor/ht-main.html | 2 +- templates/parts/actor/main.html | 2 +- 8 files changed, 131 insertions(+), 96 deletions(-) diff --git a/module/actors/actor-sheet.js b/module/actors/actor-sheet.js index 3825678..4bd732f 100644 --- a/module/actors/actor-sheet.js +++ b/module/actors/actor-sheet.js @@ -157,10 +157,10 @@ export class ActorSheetKH extends ActorSheet { let _item = this.actor.items.find((element) => element.id == itemId); // Retrieve skill based on name - let skill = this.actor.items.find((element) => element.name === _item.data.data.skill.value); + let skill = this.actor.items.find((element) => element.name === _item.data.skill.value); let skillName = skill.name - let skillValue = skill.data.data.value + let skillValue = skill.data.value let showValue = false if(this.actor.data.type === "character") { @@ -189,7 +189,7 @@ export class ActorSheetKH extends ActorSheet { let _item = this.actor.items.find((element) => element.id == itemId); let skillName = _item.name - let skillValue = _item.data.data.value + let skillValue = _item.data.value let showValue = false if(this.actor.data.type === "character") { @@ -233,7 +233,7 @@ export class ActorSheetKH extends ActorSheet { showValue = true } - switch (_item.data.data.difficulty.value) { + switch (_item.data.difficulty.value) { case "simple": difficulty = 5 break; @@ -248,24 +248,24 @@ export class ActorSheetKH extends ActorSheet { break; } - if(_item.data.data.roll.value === "roll" || _item.data.data.roll.value === "attackroll") { + if(_item.data.roll.value === "roll" || _item.data.roll.value === "attackroll") { // Retrieve skill based on name - let skill = this.actor.items.find((element) => element.name === _item.data.data.roll.skill); + let skill = this.actor.items.find((element) => element.name === _item.data.roll.skill); let skillName = _item.name - let skillValue = skill.data.data.value + let skillValue = skill.data.value if(this.actor.data.type === "character") { skillName = _item.name + " (" + skill.name + ")" } this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty) - } else if(_item.data.data.roll.value === "opposite") { + } else if(_item.data.roll.value === "opposite") { // Retrieve skill based on name - let skill = this.actor.items.find((element) => element.name === _item.data.data.roll.skill); + let skill = this.actor.items.find((element) => element.name === _item.data.roll.skill); let skillName = _item.name - let skillValue = skill.data.data.value + let skillValue = skill.data.value if(this.actor.data.type === "character") { skillName = _item.name + " (" + skill.name + ")" @@ -274,62 +274,62 @@ export class ActorSheetKH extends ActorSheet { let opposite = [] // Retrieve skill based on name - if(_item.data.data.roll.oppositeskill !== "") { - let skill1 = this.actor.items.find((element) => element.name === _item.data.data.roll.oppositeskill); + if(_item.data.roll.oppositeskill !== "") { + let skill1 = this.actor.items.find((element) => element.name === _item.data.roll.oppositeskill); opposite.push(skill1.name) } - if(_item.data.data.roll.oppositeskilltwo !== "") { - let skill2 = this.actor.items.find((element) => element.name === _item.data.data.roll.oppositeskilltwo); + if(_item.data.roll.oppositeskilltwo !== "") { + let skill2 = this.actor.items.find((element) => element.name === _item.data.roll.oppositeskilltwo); opposite.push(skill2.name) } this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty, opposite) - } else if(_item.data.data.roll.value === "ritual") { + } else if(_item.data.roll.value === "ritual") { let skills = [] - if(_item.data.data.roll.ritual.skillone !== "") { - let skill1 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillone); + if(_item.data.roll.ritual.skillone !== "") { + let skill1 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillone); skills.push({ name: skill1.name, - value: skill1.data.data.value + value: skill1.data.value }); } - if(_item.data.data.roll.ritual.skilltwo !== "") { - let skill2 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skilltwo); + if(_item.data.roll.ritual.skilltwo !== "") { + let skill2 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skilltwo); skills.push({ name: skill2.name, - value: skill2.data.data.value + value: skill2.data.value }); } - if(_item.data.data.roll.ritual.skillthree !== "") { - let skill3 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillthree); + if(_item.data.roll.ritual.skillthree !== "") { + let skill3 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillthree); skills.push({ name: skill3.name, - value: skill3.data.data.value + value: skill3.data.value }); } - if(_item.data.data.roll.ritual.skillfour !== "") { - let skill4 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillfour); + if(_item.data.roll.ritual.skillfour !== "") { + let skill4 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillfour); skills.push({ name: skill4.name, - value: skill4.data.data.value + value: skill4.data.value }); } - if(_item.data.data.roll.ritual.skillfive !== "") { - let skill5 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillfive); + if(_item.data.roll.ritual.skillfive !== "") { + let skill5 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillfive); skills.push({ name: skill5.name, - value: skill5.data.data.value + value: skill5.data.value }); } @@ -388,6 +388,7 @@ export class ActorSheetKH extends ActorSheet { ]); html.find(".feature").click(async (ev) => { + console.log("feature") const featureName = $(ev.currentTarget).data("feature"); const featureValue = this.actor.data.data.feature[featureName].value; if (featureName === "one") { @@ -417,10 +418,10 @@ export class ActorSheetKH extends ActorSheet { this.actor.items.map((i) => { if (i.type === "armor") { - if (i.id !== item.id && i.data.data.equipable.equipped && i.data?.data?.modifications) { - for (let k of Object.keys(i.data.data.modifications)) { - if (i.data.data.modifications[k].modtype === "init") { - initValue = i.data.data.modifications[k].value; + if (i.id !== item.id && i.data.equipable.equipped && i.data?.data?.modifications) { + for (let k of Object.keys(i.data.modifications)) { + if (i.data.modifications[k].modtype === "init") { + initValue = i.data.modifications[k].value; } } } @@ -434,13 +435,16 @@ export class ActorSheetKH extends ActorSheet { } } - this.actor.deleteOwnedItem(li.data("itemId")); + this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")]); + + //this.actor.deleteOwnedItem(li.data("itemId")); li.slideUp(200, () => this.render(false)); }); // Edit Inventory Item html.find(".item-edit").click(async (ev) => { + console.log("item-edit") let parent = $(ev.currentTarget).data("parent") let li = $(ev.currentTarget).parents(parent); let itemId = li.data("itemId"); @@ -617,11 +621,6 @@ export class ActorSheetKH extends ActorSheet { let itemId = li.data("item-id"); let _item = this.actor.items.find((element) => element.id === itemId); - console.log(li) - console.log(li.data) - console.log(itemId) - console.log(_item) - let skillName = _item.name let skillValue = _item.data.data.value let showValue = false @@ -812,6 +811,12 @@ export class ActorSheetKH extends ActorSheet { // Add or Remove relationship html.find(".learning-control").click(this._onClickLearningControl.bind(this)); + html.find(".learning-delete").click(async (event) => { + event.preventDefault(); + const a = event.currentTarget.closest(".learning"); + const id = a.dataset["attribute"]; + this.object.update({ "data.learning": { ["-=" + id]: null } }); + }); html.find(".learning-click").click(this._onClickLearingLearned.bind(this)); /* Hjältarnas Tid specefic */ @@ -823,6 +828,7 @@ export class ActorSheetKH extends ActorSheet { } async _onClickLearingLearned(event) { + console.log("_onClickLearingLearned") event.stopPropagation(); const li1 = $(event.currentTarget); const li2 = $(event.currentTarget).parents(".learning"); @@ -842,13 +848,11 @@ export class ActorSheetKH extends ActorSheet { async _onClickLearningControl(event) { event.preventDefault(); - const a = event.currentTarget; - const action = a.dataset.action; - const attrs = this.object.data.data.learning; - const form = this.form; + const action = event.currentTarget.dataset.action; // Add new modification if (action === "create") { + const form = this.form; const nk = new Date().getTime(); let newKey = document.createElement("div"); @@ -858,41 +862,43 @@ export class ActorSheetKH extends ActorSheet { await this._onSubmit(event); } + /* // Remove existing modification else if (action === "delete") { - const li = a.closest(".learning"); - li.parentElement.removeChild(li); - await this._onSubmit(event); + const a = event.currentTarget.closest(".learning"); + const id = a.dataset["attribute"]; + this.object.update({ "data.learning": { ["-=" + id]: null } }); } + */ } async _onClickRelationshipControl(event) { + console.log("_onClickRelationshipControl") event.preventDefault(); - const a = event.currentTarget; - const action = a.dataset.action; - const attrs = this.object.data.data.relationships; - const form = this.form; + const action = event.currentTarget.dataset.action; // Add new modification if (action === "create") { + const form = this.form; const nk = new Date().getTime(); let newKey = document.createElement("div"); newKey.innerHTML = ``; form.appendChild(newKey); - await this._onSubmit(event); } // Remove existing modification else if (action === "delete") { - const li = a.closest(".relation"); - li.parentElement.removeChild(li); - await this._onSubmit(event); + const ability = $(event.currentTarget).closest(".relation").data("attribute"); + await this.object.update({ "data.relationships": { ["-=" + ability]: null } }); } + + await this._onSubmit(event); } async _onClickRelationshipUsed(event) { + console.log("_onClickRelationshipUsed") event.stopPropagation(); const li = $(event.currentTarget).parents(".relation"); @@ -910,6 +916,7 @@ export class ActorSheetKH extends ActorSheet { } async _toggleEquippedItem(event) { + console.log("_toggleEquippedItem") const li = $(event.currentTarget); const item = this.actor.items.get(li.data("itemId")); const actor = this.actor; @@ -954,6 +961,7 @@ export class ActorSheetKH extends ActorSheet { } async _increaseQuantity(event) { + console.log("_increaseQuantity") event.stopPropagation(); const li = $(event.currentTarget).parents(".item"); @@ -968,6 +976,7 @@ export class ActorSheetKH extends ActorSheet { } async _decreaseQuantity(event) { + console.log("_decreaseQuantity") event.stopPropagation(); const li = $(event.currentTarget).parents(".item"); @@ -984,6 +993,7 @@ export class ActorSheetKH extends ActorSheet { } async _onChangeSkillValue(event) { + console.log("_decreaseQuantity") event.preventDefault(); const itemId = $(event.currentTarget).data("item-id"); @@ -994,31 +1004,29 @@ export class ActorSheetKH extends ActorSheet { _id: _item.id, data: { value: $(event.currentTarget).val() }, }; - await this.actor.updateEmbeddedEntity("Item", [update]); + await this.actor.updateEmbeddedDocuments("Item", [update]); } } async _onClickSkill(event) { + console.log("_onClickSkill") event.preventDefault(); const itemId = $(event.currentTarget).data("item-id"); let _item = this.actor.items.find((element) => element.id == itemId); - console.log(_item) - console.log(itemId) - if (_item) { let newVal = true; - if(_item.data.used !== undefined) { - newVal = !_item.data.used; + if(_item.data.data.used !== undefined) { + newVal = !_item.data.data.used; } let update = { _id: _item.id, data: { used: newVal }, }; - await this.actor.updateEmbeddedEntity("Item", [update]); + await this.actor.updateEmbeddedDocuments("Item", [update]); } } @@ -1034,6 +1042,7 @@ export class ActorSheetKH extends ActorSheet { * @private */ async _itemDetailsToChat(itemId) { + console.log("_itemDetailsToChat") let item = this.actor.items.get(itemId); if (!item) { diff --git a/module/helpers/actor-helper.js b/module/helpers/actor-helper.js index bd0c454..d214f51 100644 --- a/module/helpers/actor-helper.js +++ b/module/helpers/actor-helper.js @@ -13,8 +13,8 @@ export default class ActorHelpers { }, {}); // Remove modifications which are no longer used - if (this.object.data?.data?.relationships) { - for (let k of Object.keys(this.object.data.data.relationships)) { + if (this.object.data?.relationships) { + for (let k of Object.keys(this.object.data.relationships)) { if (!relationships.hasOwnProperty(k)) relationships[`-=${k}`] = null; } } @@ -36,8 +36,8 @@ export default class ActorHelpers { }, {}); // Remove modifications which are no longer used - if (this.object.data?.data?.learning) { - for (let k of Object.keys(this.object.data.data.learning)) { + if (this.object.data?.learning) { + for (let k of Object.keys(this.object.data.learning)) { if (!learning.hasOwnProperty(k)) learning[`-=${k}`] = null; } } diff --git a/module/helpers/dice-helper.js b/module/helpers/dice-helper.js index 6aec89a..07c2634 100644 --- a/module/helpers/dice-helper.js +++ b/module/helpers/dice-helper.js @@ -4,11 +4,11 @@ export default class KHDiceRoller { const roll = new Roll(formula); - let res = roll.roll(); + await roll.evaluate(); let rollData = { name: "SPELL.COST", - res: res, + res: roll, showFormula: true }; @@ -37,11 +37,11 @@ export default class KHDiceRoller { const roll = new Roll(formula); - let res = roll.roll(); + await roll.evaluate(); let rollData = { name: "ITEM.DAMAGE", - res: res, + res: roll, showFormula: true }; @@ -68,11 +68,11 @@ export default class KHDiceRoller { const roll = new Roll(formula); - let res = roll.roll(); + await roll.evaluate(); let rollData = { name: "ITEM.DEFENCE", - res: res, + res: roll, showFormula: true }; @@ -93,7 +93,7 @@ export default class KHDiceRoller { async rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed, opposite) { const roll = new Roll(`1d100`); - let res = roll.roll(); + await roll.evaluate(); let computedName = skillName @@ -120,13 +120,13 @@ export default class KHDiceRoller { let rollData = { name: computedName, - res: res, + res: roll, opposite: oppositeValue }; if(skillValue > 0) { - let oneRes = Math.floor((res.total / 1) % 10); - let tenRes = Math.floor((res.total / 10) % 10); + let oneRes = Math.floor((roll.total / 1) % 10); + let tenRes = Math.floor((roll.total / 10) % 10); if(openclosed < 0) { rollData.closed = Math.abs(openclosed) @@ -143,7 +143,7 @@ export default class KHDiceRoller { // roll is opened rollData.success = true } else { - if (res.total <= skillValue) { + if (roll.total <= skillValue) { rollData.success = true } else { rollData.failure = true @@ -295,7 +295,7 @@ export default class KHDiceRoller { totalrolls++ const roll = new Roll(`1d100`); - let res = roll.roll(); + await roll.evaluate(); let skillName = skill.name let success = false @@ -307,7 +307,7 @@ export default class KHDiceRoller { let rollData2 = { name: skillName, - res: res, + res: roll, }; if(openclosed < 0) { @@ -319,7 +319,7 @@ export default class KHDiceRoller { } if(skill.value > 0) { - let oneRes = Math.floor((res.total / 1) % 10); + let oneRes = Math.floor((roll.total / 1) % 10); //let tenRes = Math.floor((res.total / 10) % 10); if(openclosed < 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes) { @@ -330,7 +330,7 @@ export default class KHDiceRoller { success = true successes++ } else { - if (res.total <= skill.value) { + if (roll.total <= skill.value) { success = true successes++ } else { @@ -343,7 +343,7 @@ export default class KHDiceRoller { name: skillName, failure: failure, success: success, - result: res, + result: roll, }) rollData2.success = success diff --git a/module/helpers/item-helpers.js b/module/helpers/item-helpers.js index 81e26f0..cd804e3 100644 --- a/module/helpers/item-helpers.js +++ b/module/helpers/item-helpers.js @@ -17,8 +17,8 @@ export default class ItemHelpers { }, {}); // Remove modifications which are no longer used - if (this.object.data?.data?.modifications) { - for (let k of Object.keys(this.object.data.data.modifications)) { + if (this.object.data?.modifications) { + for (let k of Object.keys(this.object.data.modifications)) { if (!modifications.hasOwnProperty(k)) modifications[`-=${k}`] = null; } } diff --git a/module/items/item-sheet.js b/module/items/item-sheet.js index 3853f5e..21512c3 100644 --- a/module/items/item-sheet.js +++ b/module/items/item-sheet.js @@ -28,7 +28,7 @@ export class ItemSheetKH extends ItemSheet { data.dtypes = ["String", "Number", "Boolean"]; if (data?.data?.modifications) { - for (let attr of Object.values(data.data.modifications)) { + for (let attr of Object.values(data.modifications)) { attr.isCheckbox = attr.dtype === "Boolean"; } } @@ -51,11 +51,19 @@ export class ItemSheetKH extends ItemSheet { } // Retrieve any created skills as well - for (let item of game.items.entities) { + game.items.forEach((item) => { if(item.data.type === "skill" && item.data.data.type.value === "combat") { skillList.push(item.data) } + }); + + /* + for (let item of game.items.entities) { + if(item.data.type === "skill" && item.data.type.value === "combat") { + skillList.push(item.data) + } } + */ this.position.width = 530; this.position.height = 750; @@ -89,12 +97,21 @@ export class ItemSheetKH extends ItemSheet { } } + // Retrieve any created skills as well + game.items.forEach((item) => { + if(item.data.type === "skill") { + skillList.push(item.data) + } + }); + + /* // Retrieve any created skills as well for (let item of game.items.entities) { - if(item.data.data.type === "skill") { + if(item.data.type === "skill") { skillList.push(item.data) } } + */ this.position.width = 450; this.position.height = 605; @@ -115,12 +132,21 @@ export class ItemSheetKH extends ItemSheet { } } + // Retrieve any created skills as well + game.items.forEach((item) => { + if(item.data.type === "skill" && item.data.data.type.value === "combat") { + skillList.push(item.data) + } + }); + + /* // Retrieve any created skills as well for (let item of game.items.entities) { if(item.data.type === "skill" && item.data.data.type.value === "combat") { skillList.push(item.data) } } + */ this.position.width = 530; this.position.height = 750; break; @@ -148,11 +174,11 @@ export class ItemSheetKH extends ItemSheet { const clickedName = $(ev.currentTarget).data("name"); if(clickedName === "equipped") { - const equppiedValue = this.item.data.data.equipable.equipped; + const equppiedValue = this.item.data.equipable.equipped; this.item.update({ "data.equipped.equipped": !equppiedValue }); } else { - const clickedValue = (this.item.data.data[clickedName].value == undefined ? false : this.item.data.data[clickedName].value); + const clickedValue = (this.item.data[clickedName].value == undefined ? false : this.item.data[clickedName].value); let dataName = "data." + clickedName + ".value" let tempData = {} @@ -176,7 +202,7 @@ export class ItemSheetKH extends ItemSheet { event.preventDefault(); const a = event.currentTarget; const action = a.dataset.action; - const attrs = this.object.data.data.modifications; + const attrs = this.object.data.modifications; const form = this.form; // Add new modification diff --git a/system.json b/system.json index fbdade1..db75c99 100644 --- a/system.json +++ b/system.json @@ -2,9 +2,9 @@ "name": "kopparhavet", "title": "Kopparhavets Hjältar", "description": "The Molten Sea is a dangerous but exciting place, where pirates, sorcerers and secretive orders of knighthood struggle for power, wealth and ancient lore.", - "version": "0.0.7", - "minimumCoreVersion": "0.8.6", - "compatibleCoreVersion": "0.8.8", + "version": "0.1.0", + "minimumCoreVersion": "9", + "compatibleCoreVersion": "9", "templateVersion": 4, "author": "Erebus", "scripts": [], @@ -95,6 +95,6 @@ "url": "https://pi.rikspolisen.se/foundryvtt/kopparhavet", "socket": true, "manifest": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/raw/branch/master/system.json", - "download": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/archive/v0.0.7.zip", + "download": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/archive/v0.0.8.zip", "license": "LICENCE.txt" } diff --git a/templates/parts/actor/ht-main.html b/templates/parts/actor/ht-main.html index 4cd57a5..d9d204e 100644 --- a/templates/parts/actor/ht-main.html +++ b/templates/parts/actor/ht-main.html @@ -90,7 +90,7 @@ - + {{/each}} diff --git a/templates/parts/actor/main.html b/templates/parts/actor/main.html index 5f466d8..eea8db0 100644 --- a/templates/parts/actor/main.html +++ b/templates/parts/actor/main.html @@ -69,7 +69,7 @@ - + {{/each}}