diff --git a/source/module/actors/M5Character.ts b/source/module/actors/M5Character.ts index aacb4e6..7f69661 100644 --- a/source/module/actors/M5Character.ts +++ b/source/module/actors/M5Character.ts @@ -1,5 +1,18 @@ import { M5Item } from "../items/M5Item"; -import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ItemType, M5ModOperation, M5ModResult, M5ModType, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned, M5SkillType } from "../M5Base"; +import { + M5Attribute, + M5CharacterCalculatedData, + M5ItemMod, + M5ItemType, + M5ModOperation, + M5ModResult, + M5ModType, + M5RollData, + M5Skill, + M5SkillCalculated, + M5SkillLearned, + M5SkillType, +} from "../M5Base"; import M5ModAggregate from "./M5ModAggregate"; export class M5Character extends Actor { // constructor( @@ -226,6 +239,7 @@ export class M5Character extends Actor { if (!skip?.containers) { context.items ?.filter((item) => item.type === "container") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); @@ -263,6 +277,7 @@ export class M5Character extends Actor { if (!skip?.items) { context.items ?.filter((item) => item.type === "item") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); @@ -280,10 +295,10 @@ export class M5Character extends Actor { if (!!item.system.containerId) { ret.gear.containers[item.system.containerId].weight += parseFloat((item.system.weight * item.system.quantity).toPrecision(4)); if (ret.gear.containers[item.system.containerId].equipped) { - ret.stats.encumbrance += (item.system.weight * item.system.quantity); + ret.stats.encumbrance += item.system.weight * item.system.quantity; } } else if (item.system.equipped) { - ret.stats.encumbrance += (item.system.weight * item.system.quantity); + ret.stats.encumbrance += item.system.weight * item.system.quantity; } let icon = item.img; @@ -316,6 +331,7 @@ export class M5Character extends Actor { context.items ?.filter((item) => item.type === "weapon") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); @@ -364,6 +380,7 @@ export class M5Character extends Actor { context.items ?.filter((item) => item.type === "defensiveWeapon") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); @@ -404,6 +421,7 @@ export class M5Character extends Actor { context.items ?.filter((item) => item.type === "armor") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); @@ -470,28 +488,28 @@ export class M5Character extends Actor { if (!skip?.encumbrance) { const item = context.items.filter((x) => x.name === "Höchstlast"); - if (ret.stats.encumbrance > ret.stats.loadMax) { - if (item.length === 0) { - let messageContent = `Höchstlast wurde überschritten: 1 AP Schaden durch Belastung alle 10 Minuten abziehen!`; - let chatData = { - speaker: ChatMessage.getSpeaker({actor: Actor.name}), - content: messageContent, - }; - ChatMessage.create(chatData, {}); - ui.notifications.warn(messageContent); - this.createEffect("Höchstlast", [{ id: "ap", operation: M5ModOperation.SUBTRACT, type: M5ModType.STAT, value: 1 }]); - } else if (item.length === 2) { - item[1]?.delete(); - } else if (item.length === 1) { - item[0].update({ - data: { - equipped: true, - }, - }); - } - } else if (ret.stats.encumbrance < ret.stats.loadMax) { - if (item.length === 1) { - item[0]?.delete(); + if (ret.stats.encumbrance > ret.stats.loadMax) { + if (item.length === 0) { + let messageContent = `Höchstlast wurde überschritten: 1 AP Schaden durch Belastung alle 10 Minuten abziehen!`; + let chatData = { + speaker: ChatMessage.getSpeaker({ actor: Actor.name }), + content: messageContent, + }; + ChatMessage.create(chatData, {}); + ui.notifications.warn(messageContent); + this.createEffect("Höchstlast", [{ id: "ap", operation: M5ModOperation.SUBTRACT, type: M5ModType.STAT, value: 1 }]); + } else if (item.length === 2) { + item[1]?.delete(); + } else if (item.length === 1) { + item[0].update({ + data: { + equipped: true, + }, + }); + } + } else if (ret.stats.encumbrance < ret.stats.loadMax) { + if (item.length === 1) { + item[0]?.delete(); } } } @@ -500,6 +518,7 @@ export class M5Character extends Actor { if (!skip?.effects) { context.items ?.filter((item) => item.type === "effect") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); @@ -521,6 +540,7 @@ export class M5Character extends Actor { if (!skip?.skills) { context.items ?.filter((item) => item.type === "skill") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); const skillMap = ret.skills[item.system.type]; @@ -537,6 +557,7 @@ export class M5Character extends Actor { if (!skip?.spells) { context.items ?.filter((item) => item.type === "spell") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); @@ -551,6 +572,7 @@ export class M5Character extends Actor { if (!skip?.kampfkuenste) { context.items ?.filter((item) => item.type === "kampfkunst") + .sort((a, b) => a?.sort - b?.sort) .forEach((item) => { item.prepareDerivedData(); diff --git a/source/module/sheets/M5CharacterSheet.ts b/source/module/sheets/M5CharacterSheet.ts index 1e9af95..adbcc4a 100644 --- a/source/module/sheets/M5CharacterSheet.ts +++ b/source/module/sheets/M5CharacterSheet.ts @@ -11,7 +11,13 @@ export default class M5CharacterSheet extends ActorSheet { width: 1000, height: 800, classes: ["midgard5", "sheet", "character"], - tabs: [{ navSelector: ".sheet-navigation", contentSelector: ".sheet-content", initial: "base_values" }], + tabs: [ + { + navSelector: ".sheet-navigation", + contentSelector: ".sheet-content", + initial: "base_values", + }, + ], }); } @@ -68,28 +74,17 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".roll-attribute-button").on("click", async (event) => { - let elem = event.target; - let attributeStr = elem.dataset["attribute"]; - while (!attributeStr) { - elem = elem.parentElement; - if (!elem) return; - attributeStr = elem.dataset["attribute"]; - } - const attributeValue = parseInt(elem.dataset["value"]); + let target = event.target.closest("[data-attribute]") as HTMLElement; + let attributeValue = target ? parseInt(target.dataset.value) : null; + let attributeStr = target ? target.dataset.attribute : null; const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue); - //console.log("roll-attribute-button", parent, attributeStr, attributeValue, roll) await roll.toMessage(); }); html.find(".edit-item").on("click", async (event) => { - let row = event.target.parentElement; - let itemId = row.dataset["item"]; - while (!itemId) { - row = row.parentElement; - if (!row) return; - itemId = row.dataset["item"]; - } + let target = event.target.closest("[data-item-id]") as HTMLElement; + let itemId = target ? target.dataset.itemId : null; const context = this.actor as any; const item = context.items.get(itemId); @@ -98,13 +93,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".quantity-increase").on("click", async (event) => { - let row = event.target.parentElement; - let itemId = row.dataset["item"]; - while (!itemId) { - row = row.parentElement; - if (!row) return; - itemId = row.dataset["item"]; - } + let target = event.target.closest("[data-item-id]") as HTMLElement; + let itemId = target ? target.dataset.itemId : null; const context = this.actor as any; const item = context.items.get(itemId); @@ -120,13 +110,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".quantity-decrease").on("click", async (event) => { - let row = event.target.parentElement; - let itemId = row.dataset["item"]; - while (!itemId) { - row = row.parentElement; - if (!row) return; - itemId = row.dataset["item"]; - } + let target = event.target.closest("[data-item-id]") as HTMLElement; + let itemId = target ? target.dataset.itemId : null; const context = this.actor as any; const item = context.items.get(itemId); @@ -141,13 +126,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".roll-consumable-item").on("click", async (event) => { - let row = event.target.parentElement; - let itemId = row.dataset["item"]; - while (!itemId) { - row = row.parentElement; - if (!row) return; - itemId = row.dataset["item"]; - } + let target = event.target.closest("[data-item-id]") as HTMLElement; + let itemId = target ? target.dataset.itemId : null; const context = this.actor as any; const item = context.items.get(itemId); @@ -164,13 +144,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".item-delete").on("click", async (event) => { - let row = event.target.parentElement; - let itemId = row.dataset["item"]; - while (!itemId) { - row = row.parentElement; - if (!row) return; - itemId = row.dataset["item"]; - } + let target = event.target.closest("[data-item-id]") as HTMLElement; + let itemId = target ? target.dataset.itemId : null; const context = this.actor as any; const item = context.items.get(itemId); @@ -179,8 +154,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".roll-learned-button").on("click", async (event) => { - const row = event.target.parentElement.parentElement; - let skillId = row.dataset["item"]; + let target = event.target.closest("[data-item-id]") as HTMLElement; + let skillId = target ? target.dataset.itemId : null; const actor = this.actor as any; const item = actor.items.get(skillId) as M5Item; @@ -188,8 +163,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".roll-general-button").on("click", async (event) => { - const row = event.target.parentElement.parentElement; - let skillName = row.dataset["skill"]; + let target = event.target.closest("[data-skill]") as HTMLElement; + let skillName = target ? target.dataset.skill : null; const data = this.actor.system; const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned; @@ -199,8 +174,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".learn-button").on("click", async (event) => { - const row = event.target.parentElement.parentElement; - let skillName = row.dataset["skill"]; + let target = event.target.closest("[data-skill]") as HTMLElement; + let skillName = target ? target.dataset.skill : null; const data = this.actor.system; const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned; @@ -220,8 +195,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".roll-weapon-button").on("click", async (event) => { - const row = event.target.parentElement.parentElement; - let itemId = row.dataset["item"]; + let target = event.target.closest("[data-item-id]") as HTMLElement; + let itemId = target ? target.dataset.itemId : null; const context = this.actor as any; const item = context.items.get(itemId) as M5Item; @@ -260,13 +235,8 @@ export default class M5CharacterSheet extends ActorSheet { }); html.find(".change-equipped").on("click", async (event) => { - let row = event.target.parentElement; - let itemId = row.dataset["item"]; - while (!itemId) { - row = row.parentElement; - if (!row) return; - itemId = row.dataset["item"]; - } + let target = event.target.closest("[data-item-id]") as HTMLElement; + let itemId = target ? target.dataset.itemId : null; const context = this.actor as any; const item = context.items.get(itemId); @@ -275,6 +245,7 @@ export default class M5CharacterSheet extends ActorSheet { equipped: !item.system.equipped, }, }); + this.render(); }); @@ -317,28 +288,36 @@ export default class M5CharacterSheet extends ActorSheet { const data = this.actor.system; const character = this.actor as M5Character; - character.createItem((game as Game).i18n.localize("TYPES.Item.innate-ability"), M5ItemType.SKILL, { type: M5SkillType.INNATE }); + character.createItem((game as Game).i18n.localize("midgard5.innate-ability"), M5ItemType.SKILL, { + type: M5SkillType.INNATE, + }); }); html.find(".add-general-skill").on("click", async (event) => { const data = this.actor.system; const character = this.actor as M5Character; - character.createItem((game as Game).i18n.localize("TYPES.Item.skill"), M5ItemType.SKILL, { type: M5SkillType.GENERAL }); + character.createItem((game as Game).i18n.localize("TYPES.Item.skill"), M5ItemType.SKILL, { + type: M5SkillType.GENERAL, + }); }); html.find(".add-combat-skill").on("click", async (event) => { const data = this.actor.system; const character = this.actor as M5Character; - character.createItem((game as Game).i18n.localize("TYPES.Item.weapon-skill"), M5ItemType.SKILL, { type: M5SkillType.COMBAT }); + character.createItem((game as Game).i18n.localize("midgard5.weapon-skill"), M5ItemType.SKILL, { + type: M5SkillType.COMBAT, + }); }); html.find(".add-language-skill").on("click", async (event) => { const data = this.actor.system; const character = this.actor as M5Character; - character.createItem((game as Game).i18n.localize("TYPES.Item.language"), M5ItemType.SKILL, { type: M5SkillType.LANGUAGE }); + character.createItem((game as Game).i18n.localize("midgard5.language"), M5ItemType.SKILL, { + type: M5SkillType.LANGUAGE, + }); }); html.find(".add-spell").on("click", async (event) => { @@ -419,9 +398,15 @@ export default class M5CharacterSheet extends ActorSheet { // Drag & Drop const dragDrop = new DragDrop({ dragSelector: ".items-list .item", - dropSelector: ".sheet-body", - permissions: { dragstart: this._canDragStart.bind(this), drop: this._canDragDrop.bind(this) }, - callbacks: { dragstart: this._onTransferItemDragStart.bind(this), drop: this._onTransferItemDrop.bind(this) }, + dropSelector: null, + permissions: { + dragstart: this._canDragStart.bind(this), + drop: this._canDragDrop.bind(this), + }, + callbacks: { + dragstart: this._onTransferItemDragStart.bind(this), + drop: this._onTransferItemDrop.bind(this), + }, }); dragDrop.bind(html[0]); } @@ -431,29 +416,24 @@ export default class M5CharacterSheet extends ActorSheet { } _canDragDrop(selector) { - return true; + return this.options.editable; } _onTransferItemDragStart(event) { - const li = event.currentTarget; - $(event.currentTarget).attr("data-item-actorid", this.actor.id); + const li = event.target; + $(event.target).attr("data-item-actorid", this.actor.id); const item = this.actor.items.get(li.dataset.itemId); - // limit transfer on personal weapons/armour/gear - if (["skill", "item", "weapon", "defensiveWeapon", "armor", "spell", "effect", "kampfkunst", "container"].includes(item.type)) { - const dragData = { - type: "Transfer", - actorId: this.actor.id, - data: item.toObject(false), - tokenId: null, - }; + const dragData = { + type: "Transfer", + actorId: this.actor.id, + data: item.toObject(false), + tokenId: null, + }; - if (this.actor.isToken) dragData.tokenId = this.actor.token.id; + if (this.actor.isToken) dragData.tokenId = this.actor.token.id; - event.dataTransfer.setData("text/plain", JSON.stringify(dragData)); - } else { - return false; - } + event.dataTransfer.setData("text/plain", JSON.stringify(dragData)); } async _onTransferItemDrop(event) { @@ -461,6 +441,7 @@ export default class M5CharacterSheet extends ActorSheet { let data = null; try { data = JSON.parse(event.dataTransfer.getData("text/plain")); + data.data.system.containerId = ""; //Clean containerId if (data.type !== "Transfer") return false; } catch (err) { return false; @@ -468,14 +449,22 @@ export default class M5CharacterSheet extends ActorSheet { if (!data.data) return false; - if (data.actorId === this.actor.id) return false; + if (data.actorId === this.actor.id) { + return this._onSortItem(event, data.data); + } - try { - this.actor.createEmbeddedDocuments("Item", [duplicate(data.data)]); // Create a new Item - const actor = (game as any).actors.get(data.actorId); - await actor.items.get(data.data._id)?.delete(); // Delete originating item from other actor - } catch (e) { - console.error("Error transfering item between actors", e); + // limit transfer on personal weapons/armour/gear + if (["item", "weapon", "defensiveWeapon", "armor", "container"].includes(data.data.type)) { + try { + this.actor.createEmbeddedDocuments("Item", [duplicate(data.data)]); // Create a new Item + const actor = (game as any).actors.get(data.actorId); + await actor.items.get(data.data._id)?.delete(); // Delete originating item from other actor + } catch (e) { + console.error("Error transfering item between actors", e); + return false; + } + } else { + ui.notifications.warn("Nur Gegenstände können übertragen werden."); return false; } diff --git a/source/module/sheets/M5ItemSheet.ts b/source/module/sheets/M5ItemSheet.ts index 1a1c073..1274a50 100644 --- a/source/module/sheets/M5ItemSheet.ts +++ b/source/module/sheets/M5ItemSheet.ts @@ -1,195 +1,174 @@ -import { M5Item } from "../items/M5Item" -import { M5Attributes, M5ItemMod, M5ModOperation, M5ModType, M5RollTemplate } from "../M5Base" +import { M5Item } from "../items/M5Item"; +import { M5Attributes, M5ItemMod, M5ModOperation, M5ModType, M5RollTemplate } from "../M5Base"; export class M5ItemSheet extends ItemSheet { - static get defaultOptions() { return mergeObject(super.defaultOptions, { width: 640, height: 480, - classes: ["midgard5", "sheet", "item"] - }) + classes: ["midgard5", "sheet", "item"], + }); } get template() { //console.log("M5ItemSheet", this.item.data.type) - const path = "systems/midgard5/templates/sheets/item" - return `${path}/${this.item.type}.hbs` + const path = "systems/midgard5/templates/sheets/item"; + return `${path}/${this.item.type}.hbs`; } override getData(options?: Partial): ItemSheet.Data | Promise> { - const item = this.item as M5Item - return Promise.resolve(super.getData()).then(value => { - item.prepareDerivedData() - const context = value as any + const item = this.item as M5Item; + return Promise.resolve(super.getData()).then((value) => { + item.prepareDerivedData(); + const context = value as any; // Use a safe clone of the item data for further operations. - const itemData = context.item + const itemData = context.item; // Retrieve the roll data for TinyMCE editors. - context.rollData = {} - let actor = this.object?.parent ?? null + context.rollData = {}; + let actor = this.object?.parent ?? null; if (actor) { - context.rollData = actor.getRollData() + context.rollData = actor.getRollData(); } - - context.data = itemData.system - context.flags = itemData.flags - - return context - }) + + context.data = itemData.system; + context.flags = itemData.flags; + + return context; + }); } override activateListeners(html: JQuery) { - super.activateListeners(html) + super.activateListeners(html); html.find(".add-mod").on("click", async (event) => { - const context = this.object - const mods = context.system.mods - const modIndex = Object.keys(mods).length + const context = this.object; + const mods = context.system.mods; + const modIndex = Object.keys(mods).length; mods[modIndex.toString()] = { type: M5ModType.ATTRIBUTE, id: M5Attributes.ST, operation: M5ModOperation.ADD, - value: 0 - } as M5ItemMod + value: 0, + } as M5ItemMod; this.object.update({ data: { - mods: mods - } - }) - }) + mods: mods, + }, + }); + }); - html.find(".item-delete").on("click", async (event) => { - let row = event.target.parentElement - let itemId = row.dataset["item"] - while (!itemId) { - row = row.parentElement - if (!row) - return - itemId = row.dataset["item"] - } + html.find(".mod-delete").on("click", async (event) => { + let target = event.target.closest("[data-mod-id]") as HTMLElement; + let modId = target ? target.dataset.modId : null; - const context = this.item - const item = context.items.get(itemId) - item.delete() - this.render(false) - }) + const context = this.item; + delete context.system.mods[modId]; + this.render(false); + }); html.find(".roll-delete").on("click", async (event) => { - //console.log("roll-delete", this.item.data.data.rolls.formulas) + let target = event.target.closest("[data-roll]") as HTMLElement; + let rollIndex = target ? target.dataset.roll : null; - let row = event.target.parentElement - let rollIndex = row.dataset["roll"] - while (!rollIndex) { - row = row.parentElement - if (!row) - return - rollIndex = row.dataset["roll"] - } - - const rolls = this.item.system.rolls.formulas - rolls[rollIndex] = null - - this.item.update({ - data: { - rolls: { - formulas: rolls - } - } - }) - this.render(false) - }) + const rolls = this.item.system.rolls.formulas; + delete rolls[rollIndex]; + this.render(false); + }); html.find(".roll-create").on("click", async (event) => { - const rolls = this.item.system.rolls.formulas + const rolls = this.item.system.rolls.formulas; - const indeces = Object.keys(rolls).map(index => parseInt(index)).sort().reverse() - const index = (indeces.find(index => !!rolls[index.toString()]) ?? -1) + 1 - console.log("roll-create", rolls, indeces, index) + const indeces = Object.keys(rolls) + .map((index) => parseInt(index)) + .sort() + .reverse(); + const index = (indeces.find((index) => !!rolls[index.toString()]) ?? -1) + 1; + console.log("roll-create", rolls, indeces, index); rolls[index.toString()] = { formula: "1d6", label: (game as Game).i18n.localize("midgard5.roll"), - enabled: true - } as M5RollTemplate + enabled: true, + } as M5RollTemplate; this.item.update({ data: { rolls: { - formulas: rolls - } - } - }) - this.render(false) - }) + formulas: rolls, + }, + }, + }); + this.render(false); + }); // Drag & Drop if (["item"].includes(this.object.type)) { const itemToItemAssociation = new DragDrop({ dragSelector: ".item", - dropSelector: null, - permissions: { dragstart: this._canDragStart.bind(this), drop: this._canDragDrop.bind(this) }, + dropSelector: ".item-list", + permissions: { + dragstart: this._canDragStart.bind(this), + drop: this._canDragDrop.bind(this), + }, callbacks: { drop: this._onDropItem.bind(this) }, - }) - itemToItemAssociation.bind(html[0]) + }); + itemToItemAssociation.bind(html[0]); } } _canDragStart(selector) { - console.log("M5ItemSheet._canDragStart", selector) - return this.options.editable && this.object.isOwner + console.log("M5ItemSheet._canDragStart", selector); + return this.options.editable && this.object.isOwner; } _canDragDrop(selector) { - console.log("M5ItemSheet._canDragDrop", selector) - return true + console.log("M5ItemSheet._canDragDrop", selector); + return true; } async _onDropItem(event) { - let data - const obj = this.object - const li = event.currentTarget + let data; + const obj = this.object; + const li = event.currentTarget; try { - data = JSON.parse(event.dataTransfer.getData("text/plain")) - if (data.type !== "Item") - return false + data = JSON.parse(event.dataTransfer.getData("text/plain")); + if (data.type !== "Item") return false; } catch (err) { - return false + return false; } // Case 1 - Import from a Compendium pack - let itemObject + let itemObject; if (data.pack) { - const compendiumObject = await (this as any).importItemFromCollection(data.pack, data.id) - itemObject = compendiumObject.data + const compendiumObject = await (this as any).importItemFromCollection(data.pack, data.id); + itemObject = compendiumObject.data; } // Case 2 - Import from World entity else { - const originalItem = await (game as Game).items.get(data.id) - itemObject = duplicate(originalItem) - if (!itemObject) - return + const originalItem = await (game as Game).items.get(data.id); + itemObject = duplicate(originalItem); + if (!itemObject) return; } - if ((itemObject.type === "mod")) { - let mods = obj?.system?.mods - if (!mods) - mods = [] + if (itemObject.type === "mod") { + let mods = obj?.system?.mods; + if (!mods) mods = []; - itemObject.id = randomID() - console.log("M5ItemSheet._onDropItem", itemObject) - mods.push(itemObject) + itemObject.id = randomID(); + console.log("M5ItemSheet._onDropItem", itemObject); + mods.push(itemObject); obj.update({ data: { - mods: mods - } - }) + mods: mods, + }, + }); } } - async _onDragItemStart(event) { } + async _onDragItemStart(event) {} } diff --git a/templates/sheets/character/combat.hbs b/templates/sheets/character/combat.hbs index fc2447d..9231f72 100644 --- a/templates/sheets/character/combat.hbs +++ b/templates/sheets/character/combat.hbs @@ -48,10 +48,10 @@ - + {{#each data.calc.gear.weapons as |item itemId|}} {{#if item.equipped}} - + {{item.label}}{{#if item.special}}(*){{/if}} {{item.calc.ew}} {{item.damageBase}} @@ -67,7 +67,7 @@ {{/if}} {{/each}} - + {{localize "midgard5.brawl"}} {{data.calc.stats.brawlFw}} 1d6 -4 @@ -87,9 +87,9 @@ - + {{#each data.calc.kampfkuenste as |item itemId|}} - + {{item.label}} {{#if item.isKido}} @@ -147,10 +147,10 @@ - + {{#each data.calc.gear.defensiveWeapons as |item itemId|}} {{#if item.equipped}} - + {{item.label}} {{item.calc.ew}} {{item.defenseBonus}} @@ -176,10 +176,10 @@ - + {{#each data.calc.gear.armor as |item itemId|}} {{#if item.equipped}} - + {{item.label}} {{lpProtection}} diff --git a/templates/sheets/character/effects.hbs b/templates/sheets/character/effects.hbs index d87114f..59808f5 100644 --- a/templates/sheets/character/effects.hbs +++ b/templates/sheets/character/effects.hbs @@ -6,9 +6,9 @@ - + {{#each data.calc.gear.effects as |item itemId|}} - + {{item.label}} {{#if item.equipped}} diff --git a/templates/sheets/character/gear.hbs b/templates/sheets/character/gear.hbs index bf39290..a31181e 100644 --- a/templates/sheets/character/gear.hbs +++ b/templates/sheets/character/gear.hbs @@ -77,11 +77,11 @@   - + {{#each ../data.calc.gear.items as |item itemId|}} {{#if (eq item.containerId containerId)}} - + {{item.label}} @@ -114,7 +114,7 @@ {{/each}} {{#each ../data.calc.gear.weapons as |item itemId|}} {{#if (eq item.containerId containerId)}} - + {{item.label}} @@ -143,7 +143,7 @@ {{/each}} {{#each ../data.calc.gear.defensiveWeapons as |item itemId|}} {{#if (eq item.containerId containerId)}} - + {{item.label}} @@ -172,7 +172,7 @@ {{/each}} {{#each ../data.calc.gear.armor as |item itemId|}} {{#if (eq item.containerId containerId)}} - + {{item.label}} @@ -226,10 +226,10 @@ - + {{#each data.calc.gear.containers as |item itemId|}} - + {{item.label}} @@ -274,12 +274,11 @@ - + - {{#each data.calc.gear.items as |item itemId|}} {{#if (or ../data.info.showAllItems (eq item.containerId ""))}} - + {{item.label}} @@ -330,10 +329,10 @@ - + {{#each data.calc.gear.weapons as |item itemId|}} {{#if (or ../data.info.showAllItems (eq item.containerId ""))}} - + {{item.label}} {{#unless (or (eq item.value 0) (eq item.currency ""))}} @@ -374,10 +373,10 @@ - + {{#each data.calc.gear.defensiveWeapons as |item itemId|}} {{#if (or ../data.info.showAllItems (eq item.containerId ""))}} - + {{item.label}} {{#unless (or (eq item.value 0) (eq item.currency ""))}} @@ -418,10 +417,10 @@ - + {{#each data.calc.gear.armor as |item itemId|}} {{#if (or ../data.info.showAllItems (eq item.containerId ""))}} - + {{item.label}} {{#unless (or (eq item.value 0) (eq item.currency ""))}} diff --git a/templates/sheets/character/skills.hbs b/templates/sheets/character/skills.hbs index 15f9c72..5a0bc36 100644 --- a/templates/sheets/character/skills.hbs +++ b/templates/sheets/character/skills.hbs @@ -14,9 +14,9 @@ - + {{#each data.calc.skills.innate as |skill skillId|}} - + {{skill.label}} {{skill.fw}} {{skill.calc.bonus}} @@ -25,7 +25,7 @@ {{/each}} - + {{localize "midgard5.perception"}} {{data.calc.stats.perceptionFW}} {{data.calc.stats.perception.value}} @@ -33,7 +33,7 @@ - + {{localize "midgard5.drinking"}} {{data.calc.stats.drinkingFW}} {{data.calc.stats.drinking.value}} @@ -59,9 +59,9 @@ - + {{#each data.calc.skills.general as |skill skillId|}} - + {{skill.label}} {{skill.fw}} {{skill.calc.bonus}} @@ -89,9 +89,9 @@ - + {{#each data.calc.skills.combat as |skill skillId|}} - + {{skill.label}} {{skill.fw}} {{skill.calc.bonus}} @@ -119,9 +119,9 @@ - + {{#each data.calc.skills.language as |skill skillId|}} - + {{skill.label}} {{skill.fw}} {{skill.calc.bonus}} diff --git a/templates/sheets/character/spells.hbs b/templates/sheets/character/spells.hbs index aef25db..90d636a 100644 --- a/templates/sheets/character/spells.hbs +++ b/templates/sheets/character/spells.hbs @@ -7,9 +7,9 @@ - + {{#each data.calc.spells as |item itemId|}} - + {{item.label}} {{localize item.process}} diff --git a/templates/sheets/partial/mod.hbs b/templates/sheets/partial/mod.hbs index 03701a2..8c101b9 100644 --- a/templates/sheets/partial/mod.hbs +++ b/templates/sheets/partial/mod.hbs @@ -5,11 +5,12 @@ + - + {{#each mods as |mod modId|}} - + + + {{/each}}