Compare commits

..

32 Commits

Author SHA1 Message Date
Erebus cde8feb3c0 v0.0.9 2021-08-21 15:02:34 +02:00
Erebus 9e7255b556 Merge branch 'dev' 2021-08-21 15:00:54 +02:00
Erebus 8992bba8e1 Fix 2021-08-21 14:58:51 +02:00
Erebus 3589587f84 . 2021-08-21 14:58:32 +02:00
erebus d268e2f6ac v0.0.9 (#9)
Bug fix
Co-Authored-By: erebus <erebus@rikspolisen.se>
Co-Committed-By: erebus <erebus@rikspolisen.se>
2021-08-21 14:55:33 +02:00
Erebus bc09aec49c Bug fix 2021-08-21 14:54:39 +02:00
Erebus 162ff881fc Merge v0.0.8 2021-08-20 08:08:14 +02:00
Erebus e0b4d96fea Bug fixes 2021-08-20 08:03:17 +02:00
Erebus 662d015afd merge conflicts 2021-07-28 13:07:29 +02:00
Erebus 03362e7a38 0.0.7 2021-07-28 12:51:13 +02:00
Erebus 376a3e37d7 merge fixes 2021-03-19 05:20:15 +01:00
Erebus d83570f261 Finished up for version 0.0.6 2021-03-19 05:09:29 +01:00
Erebus 20565d8409 Finished up for version 0.0.6 2021-03-19 05:08:28 +01:00
Erebus 5c74186066 finishing for version 0.0.5 2021-03-03 19:11:18 +01:00
Erebus 7e332af709 Merge branch 'master' into dev 2020-12-04 21:18:46 +01:00
Erebus 43d4634e97 v0.0.4 merge fixes 2020-12-04 21:05:06 +01:00
Erebus e631883a44 v0.0.4 fixes 2020-12-04 21:01:28 +01:00
Erebus a496eca37f Merge conflict fix 2020-12-04 20:49:58 +01:00
Erebus 1a24e7facf Added weapons packs, ship sheet 2020-12-04 20:34:13 +01:00
Erebus c6cc01bb25 added armor pack, updated skills pack, initial work on ship sheet, minor fixes, added options for spell cost to be drawn on roll 2020-12-04 03:45:09 +01:00
Erebus 4cb6c390a4 Finishing v0.0.3 2020-12-01 17:20:38 +01:00
Erebus ce1e29aefb layout fixes 2020-12-01 09:22:41 +01:00
Erebus 374cc522f3 layout fixes 2020-12-01 09:21:58 +01:00
Erebus 836875459c Added support for rolling skill on spells 2020-12-01 09:04:03 +01:00
Erebus cbafeede44 Fixed typo 2020-12-01 08:18:19 +01:00
Erebus 14a77c37b9 Fixed migration 2020-12-01 06:43:25 +01:00
Erebus d94636bbe6 Fixed migration, Spell Skill 2020-12-01 06:30:17 +01:00
Erebus 6f6a1e7e2d Cleaned up the code 2020-12-01 05:42:12 +01:00
Erebus 54ac488e73 Fixed Hjältarnas Tid skill error, updated layout, fixed buttons not working 2020-12-01 05:11:08 +01:00
Erebus 6f8200c82a Fixed right click menu for weapons 2020-12-01 04:22:57 +01:00
Erebus bec12184da Added roll dialog and exceptional rolls 2020-12-01 04:12:47 +01:00
Erebus 86192d0a3e Updated skills styling 2020-12-01 02:09:48 +01:00
8 changed files with 94 additions and 129 deletions

View File

@ -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.skill.value);
let skill = this.actor.items.find((element) => element.name === _item.data.data.skill.value);
let skillName = skill.name
let skillValue = skill.data.value
let skillValue = skill.data.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.value
let skillValue = _item.data.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.difficulty.value) {
switch (_item.data.data.difficulty.value) {
case "simple":
difficulty = 5
break;
@ -248,24 +248,24 @@ export class ActorSheetKH extends ActorSheet {
break;
}
if(_item.data.roll.value === "roll" || _item.data.roll.value === "attackroll") {
if(_item.data.data.roll.value === "roll" || _item.data.data.roll.value === "attackroll") {
// Retrieve skill based on name
let skill = this.actor.items.find((element) => element.name === _item.data.roll.skill);
let skill = this.actor.items.find((element) => element.name === _item.data.data.roll.skill);
let skillName = _item.name
let skillValue = skill.data.value
let skillValue = skill.data.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.roll.value === "opposite") {
} else if(_item.data.data.roll.value === "opposite") {
// Retrieve skill based on name
let skill = this.actor.items.find((element) => element.name === _item.data.roll.skill);
let skill = this.actor.items.find((element) => element.name === _item.data.data.roll.skill);
let skillName = _item.name
let skillValue = skill.data.value
let skillValue = skill.data.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.roll.oppositeskill !== "") {
let skill1 = this.actor.items.find((element) => element.name === _item.data.roll.oppositeskill);
if(_item.data.data.roll.oppositeskill !== "") {
let skill1 = this.actor.items.find((element) => element.name === _item.data.data.roll.oppositeskill);
opposite.push(skill1.name)
}
if(_item.data.roll.oppositeskilltwo !== "") {
let skill2 = this.actor.items.find((element) => element.name === _item.data.roll.oppositeskilltwo);
if(_item.data.data.roll.oppositeskilltwo !== "") {
let skill2 = this.actor.items.find((element) => element.name === _item.data.data.roll.oppositeskilltwo);
opposite.push(skill2.name)
}
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty, opposite)
} else if(_item.data.roll.value === "ritual") {
} else if(_item.data.data.roll.value === "ritual") {
let skills = []
if(_item.data.roll.ritual.skillone !== "") {
let skill1 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillone);
if(_item.data.data.roll.ritual.skillone !== "") {
let skill1 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillone);
skills.push({
name: skill1.name,
value: skill1.data.value
value: skill1.data.data.value
});
}
if(_item.data.roll.ritual.skilltwo !== "") {
let skill2 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skilltwo);
if(_item.data.data.roll.ritual.skilltwo !== "") {
let skill2 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skilltwo);
skills.push({
name: skill2.name,
value: skill2.data.value
value: skill2.data.data.value
});
}
if(_item.data.roll.ritual.skillthree !== "") {
let skill3 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillthree);
if(_item.data.data.roll.ritual.skillthree !== "") {
let skill3 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillthree);
skills.push({
name: skill3.name,
value: skill3.data.value
value: skill3.data.data.value
});
}
if(_item.data.roll.ritual.skillfour !== "") {
let skill4 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillfour);
if(_item.data.data.roll.ritual.skillfour !== "") {
let skill4 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillfour);
skills.push({
name: skill4.name,
value: skill4.data.value
value: skill4.data.data.value
});
}
if(_item.data.roll.ritual.skillfive !== "") {
let skill5 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillfive);
if(_item.data.data.roll.ritual.skillfive !== "") {
let skill5 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillfive);
skills.push({
name: skill5.name,
value: skill5.data.value
value: skill5.data.data.value
});
}
@ -388,7 +388,6 @@ 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") {
@ -418,10 +417,10 @@ export class ActorSheetKH extends ActorSheet {
this.actor.items.map((i) => {
if (i.type === "armor") {
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;
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;
}
}
}
@ -435,16 +434,13 @@ export class ActorSheetKH extends ActorSheet {
}
}
this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")]);
//this.actor.deleteOwnedItem(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");
@ -621,6 +617,11 @@ 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
@ -811,12 +812,6 @@ 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 */
@ -828,7 +823,6 @@ export class ActorSheetKH extends ActorSheet {
}
async _onClickLearingLearned(event) {
console.log("_onClickLearingLearned")
event.stopPropagation();
const li1 = $(event.currentTarget);
const li2 = $(event.currentTarget).parents(".learning");
@ -848,11 +842,13 @@ export class ActorSheetKH extends ActorSheet {
async _onClickLearningControl(event) {
event.preventDefault();
const action = event.currentTarget.dataset.action;
const a = event.currentTarget;
const action = a.dataset.action;
const attrs = this.object.data.data.learning;
const form = this.form;
// Add new modification
if (action === "create") {
const form = this.form;
const nk = new Date().getTime();
let newKey = document.createElement("div");
@ -862,43 +858,41 @@ export class ActorSheetKH extends ActorSheet {
await this._onSubmit(event);
}
/*
// Remove existing modification
else if (action === "delete") {
const a = event.currentTarget.closest(".learning");
const id = a.dataset["attribute"];
this.object.update({ "data.learning": { ["-=" + id]: null } });
const li = a.closest(".learning");
li.parentElement.removeChild(li);
await this._onSubmit(event);
}
*/
}
async _onClickRelationshipControl(event) {
console.log("_onClickRelationshipControl")
event.preventDefault();
const action = event.currentTarget.dataset.action;
const a = event.currentTarget;
const action = a.dataset.action;
const attrs = this.object.data.data.relationships;
const form = this.form;
// Add new modification
if (action === "create") {
const form = this.form;
const nk = new Date().getTime();
let newKey = document.createElement("div");
newKey.innerHTML = `<input class="relation-key" type="text" name="data.relationships.attr${nk}.key" value="attr${nk}" style="display: none;" /><input class="relation-key" type="text" name="data.relationships.attr${nk}.value" value="" style="display: none;" />`;
form.appendChild(newKey);
await this._onSubmit(event);
}
// Remove existing modification
else if (action === "delete") {
const ability = $(event.currentTarget).closest(".relation").data("attribute");
await this.object.update({ "data.relationships": { ["-=" + ability]: null } });
const li = a.closest(".relation");
li.parentElement.removeChild(li);
await this._onSubmit(event);
}
await this._onSubmit(event);
}
async _onClickRelationshipUsed(event) {
console.log("_onClickRelationshipUsed")
event.stopPropagation();
const li = $(event.currentTarget).parents(".relation");
@ -916,7 +910,6 @@ 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;
@ -961,7 +954,6 @@ export class ActorSheetKH extends ActorSheet {
}
async _increaseQuantity(event) {
console.log("_increaseQuantity")
event.stopPropagation();
const li = $(event.currentTarget).parents(".item");
@ -976,7 +968,6 @@ export class ActorSheetKH extends ActorSheet {
}
async _decreaseQuantity(event) {
console.log("_decreaseQuantity")
event.stopPropagation();
const li = $(event.currentTarget).parents(".item");
@ -993,7 +984,6 @@ export class ActorSheetKH extends ActorSheet {
}
async _onChangeSkillValue(event) {
console.log("_decreaseQuantity")
event.preventDefault();
const itemId = $(event.currentTarget).data("item-id");
@ -1004,17 +994,19 @@ export class ActorSheetKH extends ActorSheet {
_id: _item.id,
data: { value: $(event.currentTarget).val() },
};
await this.actor.updateEmbeddedDocuments("Item", [update]);
await this.actor.updateEmbeddedEntity("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;
@ -1026,7 +1018,7 @@ export class ActorSheetKH extends ActorSheet {
_id: _item.id,
data: { used: newVal },
};
await this.actor.updateEmbeddedDocuments("Item", [update]);
await this.actor.updateEmbeddedEntity("Item", [update]);
}
}
@ -1042,7 +1034,6 @@ export class ActorSheetKH extends ActorSheet {
* @private
*/
async _itemDetailsToChat(itemId) {
console.log("_itemDetailsToChat")
let item = this.actor.items.get(itemId);
if (!item) {

View File

@ -13,8 +13,8 @@ export default class ActorHelpers {
}, {});
// Remove modifications which are no longer used
if (this.object.data?.relationships) {
for (let k of Object.keys(this.object.data.relationships)) {
if (this.object.data?.data?.relationships) {
for (let k of Object.keys(this.object.data.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?.learning) {
for (let k of Object.keys(this.object.data.learning)) {
if (this.object.data?.data?.learning) {
for (let k of Object.keys(this.object.data.data.learning)) {
if (!learning.hasOwnProperty(k)) learning[`-=${k}`] = null;
}
}

View File

@ -4,11 +4,11 @@ export default class KHDiceRoller {
const roll = new Roll(formula);
await roll.evaluate();
let res = roll.roll();
let rollData = {
name: "SPELL.COST",
res: roll,
res: res,
showFormula: true
};
@ -37,11 +37,11 @@ export default class KHDiceRoller {
const roll = new Roll(formula);
await roll.evaluate();
let res = roll.roll();
let rollData = {
name: "ITEM.DAMAGE",
res: roll,
res: res,
showFormula: true
};
@ -68,11 +68,11 @@ export default class KHDiceRoller {
const roll = new Roll(formula);
await roll.evaluate();
let res = roll.roll();
let rollData = {
name: "ITEM.DEFENCE",
res: roll,
res: res,
showFormula: true
};
@ -93,7 +93,7 @@ export default class KHDiceRoller {
async rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed, opposite) {
const roll = new Roll(`1d100`);
await roll.evaluate();
let res = roll.roll();
let computedName = skillName
@ -120,13 +120,13 @@ export default class KHDiceRoller {
let rollData = {
name: computedName,
res: roll,
res: res,
opposite: oppositeValue
};
if(skillValue > 0) {
let oneRes = Math.floor((roll.total / 1) % 10);
let tenRes = Math.floor((roll.total / 10) % 10);
let oneRes = Math.floor((res.total / 1) % 10);
let tenRes = Math.floor((res.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 (roll.total <= skillValue) {
if (res.total <= skillValue) {
rollData.success = true
} else {
rollData.failure = true
@ -295,7 +295,7 @@ export default class KHDiceRoller {
totalrolls++
const roll = new Roll(`1d100`);
await roll.evaluate();
let res = roll.roll();
let skillName = skill.name
let success = false
@ -307,7 +307,7 @@ export default class KHDiceRoller {
let rollData2 = {
name: skillName,
res: roll,
res: res,
};
if(openclosed < 0) {
@ -319,7 +319,7 @@ export default class KHDiceRoller {
}
if(skill.value > 0) {
let oneRes = Math.floor((roll.total / 1) % 10);
let oneRes = Math.floor((res.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 (roll.total <= skill.value) {
if (res.total <= skill.value) {
success = true
successes++
} else {
@ -343,7 +343,7 @@ export default class KHDiceRoller {
name: skillName,
failure: failure,
success: success,
result: roll,
result: res,
})
rollData2.success = success

View File

@ -17,8 +17,8 @@ export default class ItemHelpers {
}, {});
// Remove modifications which are no longer used
if (this.object.data?.modifications) {
for (let k of Object.keys(this.object.data.modifications)) {
if (this.object.data?.data?.modifications) {
for (let k of Object.keys(this.object.data.data.modifications)) {
if (!modifications.hasOwnProperty(k)) modifications[`-=${k}`] = null;
}
}

View File

@ -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.modifications)) {
for (let attr of Object.values(data.data.modifications)) {
attr.isCheckbox = attr.dtype === "Boolean";
}
}
@ -51,19 +51,11 @@ export class ItemSheetKH extends ItemSheet {
}
// Retrieve any created skills as well
game.items.forEach((item) => {
for (let item of game.items.entities) {
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;
@ -97,21 +89,12 @@ 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.type === "skill") {
if(item.data.data.type === "skill") {
skillList.push(item.data)
}
}
*/
this.position.width = 450;
this.position.height = 605;
@ -132,21 +115,12 @@ 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;
@ -174,11 +148,11 @@ export class ItemSheetKH extends ItemSheet {
const clickedName = $(ev.currentTarget).data("name");
if(clickedName === "equipped") {
const equppiedValue = this.item.data.equipable.equipped;
const equppiedValue = this.item.data.data.equipable.equipped;
this.item.update({ "data.equipped.equipped": !equppiedValue });
} else {
const clickedValue = (this.item.data[clickedName].value == undefined ? false : this.item.data[clickedName].value);
const clickedValue = (this.item.data.data[clickedName].value == undefined ? false : this.item.data.data[clickedName].value);
let dataName = "data." + clickedName + ".value"
let tempData = {}
@ -202,7 +176,7 @@ export class ItemSheetKH extends ItemSheet {
event.preventDefault();
const a = event.currentTarget;
const action = a.dataset.action;
const attrs = this.object.data.modifications;
const attrs = this.object.data.data.modifications;
const form = this.form;
// Add new modification

View File

@ -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.1.0",
"minimumCoreVersion": "9",
"compatibleCoreVersion": "9",
"version": "0.0.9",
"minimumCoreVersion": "0.8.6",
"compatibleCoreVersion": "0.8.8",
"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.8.zip",
"download": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/archive/v0.0.9.zip",
"license": "LICENCE.txt"
}

View File

@ -90,7 +90,7 @@
</a>
</div>
<a style="margin: auto;" class="learning-delete" data-action="delete"><i class="fas fa-trash"></i></a>
<a style="margin: auto;" class="learning-control" data-action="delete"><i class="fas fa-trash"></i></a>
</li>
{{/each}}
</ol>

View File

@ -69,7 +69,7 @@
</a>
</div>
<a style="margin: auto;" class="learning-delete" data-action="delete"><i class="fas fa-trash"></i></a>
<a style="margin: auto;" class="learning-control" data-action="delete"><i class="fas fa-trash"></i></a>
</li>
{{/each}}
</ol>