diff --git a/.gitea/workflows/add-issue-to-project.yaml b/.gitea/workflows/add-issue-to-project.yaml new file mode 100644 index 0000000..e8af0bb --- /dev/null +++ b/.gitea/workflows/add-issue-to-project.yaml @@ -0,0 +1,15 @@ +name: Move new issues into To Do + +on: + issues: + types: [opened] +jobs: + createCard: + runs-on: ubuntu-latest + steps: + - name: Close Issue + run: > + curl -X PATCH -H "Content-Type: application/xml" + -H "Authorization: token ${{ secrets.GITEA_TOKEN }} + -d '{ "state": "To Do" }' + "${{ gitea.event.issue.url }}" \ No newline at end of file diff --git a/assets/icons/backgrounds/bg1.webp b/assets/icons/backgrounds/bg1.webp new file mode 100644 index 0000000..a911203 Binary files /dev/null and b/assets/icons/backgrounds/bg1.webp differ diff --git a/assets/icons/icon/battle-gear.svg b/assets/icons/icon/battle-gear.svg new file mode 100644 index 0000000..7160628 --- /dev/null +++ b/assets/icons/icon/battle-gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/icon/confirmed.svg b/assets/icons/icon/confirmed.svg new file mode 100644 index 0000000..e43f621 --- /dev/null +++ b/assets/icons/icon/confirmed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/logo/banner01.webp b/assets/icons/logo/banner01.webp new file mode 100644 index 0000000..deae56f Binary files /dev/null and b/assets/icons/logo/banner01.webp differ diff --git a/assets/icons/logo/banner02.webp b/assets/icons/logo/banner02.webp new file mode 100644 index 0000000..0cc9f58 Binary files /dev/null and b/assets/icons/logo/banner02.webp differ diff --git a/assets/icons/logo/banner03.webp b/assets/icons/logo/banner03.webp new file mode 100644 index 0000000..b809c85 Binary files /dev/null and b/assets/icons/logo/banner03.webp differ diff --git a/assets/icons/logo/banner04.webp b/assets/icons/logo/banner04.webp new file mode 100644 index 0000000..29ce03b Binary files /dev/null and b/assets/icons/logo/banner04.webp differ diff --git a/assets/icons/logo/midgard.webp b/assets/icons/logo/midgard.webp old mode 100755 new mode 100644 index ce6ec38..207d53f Binary files a/assets/icons/logo/midgard.webp and b/assets/icons/logo/midgard.webp differ diff --git a/docs/de.md b/docs/de.md index 95a8efa..a1a54ce 100644 --- a/docs/de.md +++ b/docs/de.md @@ -6,7 +6,7 @@ _**Warnung:** Das System befindet sich noch in der Entwicklung._ Gehe auf die Setup-Seite deiner Foundry VTT Instanz. Klicke im Reiter **Game Systems** auf den Button **Install System**. In dem dann geöffneten Dialog, unten in der Zeile **Manifest URL** den Link zur aktuellen (oder gewünschten) Version der _system.json_ eintragen und auf **Install** klicken: -https://github.com/byroks/foundry-vtt-system-midgard5/releases/download/v1.3.0/system.json +https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v1.3.0/system.json Danach kann eine Spielwelt mit dem System erstellt werden. @@ -32,7 +32,7 @@ Dieser Reiter enthält (mit Ausname von Zaubern) alle zu erlernenden Dinge des C ![Blaupausen für Gegenstände](compendium-items.de.png) -Es kann einfach per Drag'n'Drop die entsprechende Blaupause auf den Charakterbogen gezogen werden, um eine Fertigkeit/Fähigkeit/Sprache zu *lernen.* Alternativ kann auch der **Lernen** Button bei den **ungelernten Fertigkeiten** geklickt werden. +Es kann einfach per Drag'n'Drop die entsprechende Blaupause auf den Charakterbogen gezogen werden, um eine Fertigkeit/Fähigkeit/Sprache zu _lernen._ Alternativ kann auch der **Lernen** Button bei den **ungelernten Fertigkeiten** geklickt werden. Um den **Fertigkeitswert** und die **Leiteigenschaft** einer Fertigkeit anzupassen, kann man auf die Fertigkeit klicken. Dann geht folgender Dialog auf: diff --git a/foundryconfig.json b/foundryconfig.json index 0b75816..1386868 100644 --- a/foundryconfig.json +++ b/foundryconfig.json @@ -1,5 +1,4 @@ { "moduleName": "Midgard 5. Edition", - "repository": "https://github.com/Byroks/foundry-vtt-system-midgard5", - "rawURL": "https://raw.githubusercontent.com/Byroks/foundry-vtt-system-midgard5" + "repository": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5" } diff --git a/gulpfile.ts b/gulpfile.ts index d17b9ea..73b2ee5 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -423,7 +423,7 @@ const updateManifest = (cb: any) => { cb(Error("Manifest JSON not found")); return; } - if (!rawURL || !repoURL) cb(Error("Repository URLs not configured in foundryconfig.json")); + if (!repoURL) cb(Error("Repository URLs not configured in foundryconfig.json")); try { const version = argv.update || argv.u; diff --git a/lang/de.json b/lang/de.json index 4109c79..6e39d06 100644 --- a/lang/de.json +++ b/lang/de.json @@ -4,12 +4,14 @@ "ACTOR.TypeVehicle": "Transportmittel / Pferd etc.", "TYPES.Item.item": "Gegenstand", + "TYPES.Item.skill": "Fertigkeit", "TYPES.Item.weapon": "Waffe", "TYPES.Item.defensiveWeapon": "Verteidigungswaffe", "TYPES.Item.armor": "Rüstung", "TYPES.Item.spell": "Zauber", - "TYPES.Item.effect": "Aktive Effekte", - "TYPES.Item.kampfkunst": "Kampfkünste", + "TYPES.Item.effect": "Aktiver Effekt", + "TYPES.Item.kampfkunst": "Kampfkunst", + "TYPES.Item.container": "Aufbewahrung", "midgard5.phase-action": "Handlungsphase", "midgard5.phase-movement": "Bewegungsphase", @@ -27,11 +29,20 @@ "midgard5.label": "Bezeichnung", "midgard5.description": "Beschreibung", - "midgard5.attribute": "Leiteigenschaft", + "midgard5.Characteristic": "Merkmal", + "midgard5.characteristics": "Merkmale", + "midgard5.background": "Hintergrund", + "midgard5.attribute": "Eigenschaft", + "midgard5.attributes": "Eigenschaften", + "midgard5.points": "Punkte", + "midgard5.calculated-value": "Berechneter Wert", + "midgard5.calculated-values": "Sonstige Werte", + "midgard5.skill": "Fertigkeit", "midgard5.skill-value": "Fertigkeitswert", "midgard5.fw": "FW", "midgard5.bonus": "Bonus", + "midgard5.bonuses": "Boni", "midgard5.ew": "EW", "midgard5.pp-short": "PP", "midgard5.pp": "Praxispunkte", @@ -40,6 +51,7 @@ "midgard5.item-quantity": "Menge", "midgard5.item-onbody": "Am Körper", "midgard5.item-ismagic": "Ist Magisch", + "midgard5.item-wealth": "Vermögenswert", "midgard5.actor-lp": "Lebenspunkte", "midgard5.actor-lp-short": "LP", @@ -77,8 +89,12 @@ "midgard5.spells": "Zauber", "midgard5.effects": "Aktive Effekte", "midgard5.kampfkuenste": "Kampfkünste", + "midgard5.combat": "Kampf", - "midgard5.class": "Klasse", + + "midgard5.actor-name": "Figur", + "midgard5.level": "Grad", + "midgard5.class": "Typ", "midgard5.race": "Rasse", "midgard5.magicUsing": "Zauberkundig", "midgard5.gender": "Geschlecht", @@ -91,9 +107,18 @@ "midgard5.origin": "Heimat", "midgard5.faith": "Glaube", + "midgard5.currency": "Geld", "midgard5.currency-gold": "Gold", "midgard5.currency-silver": "Silber", "midgard5.currency-copper": "Kupfer", + "midgard5.currency-wealth": "Vermögen in GS", + "midgard5.currency-available": "verfügbares Vermögen", + "midgard5.hoard": "aktueller Hort", + "midgard5.hoardMin": "benötigter Mindesthort", + "midgard5.hoard-next": "Hort für nächsten Grad", + "midgard5.hoarded": "Hort", + + "midgard5.no-container": "Ohne", "midgard5.exp-overall": "Erfahrungsschatz", "midgard5.exp-available": "Erfahrungspunkte", @@ -207,19 +232,28 @@ "midgard5.new-skill": "Neue Fertigkeit", "midgard5.special": "Spezial", "midgard5.learned-skill": "Gelernte Fertigkeit", + "midgard5.learned-skills": "Gelernte Fertigkeiten", "midgard5.language": "Sprache", + "midgard5.languages": "Sprachen", "midgard5.weapon-skill": "Waffenfertigkeit", + "midgard5.weapon-skills": "Waffenfertigkeiten", "midgard5.unlearned-skill": "Ungelernte Fertigkeit", - "midgard5.innate-ability": "Angeborene Fähigkeit", + "midgard5.unlearned-skills": "Ungelernte Fertigkeiten", + "midgard5.innate-ability": "Angeborene/Besondere Fertigkeit", + "midgard5.innate-abilities": "Angeborene/Besondere Fertigkeit", "midgard5.base-damage": "Grundschaden", + "midgard5.weapon": "Waffe", + "midgard5.weapons": "Waffen", "midgard5.defensive-weapon": "Verteidigungswaffe", + "midgard5.defensive-weapons": "Verteidigungswaffen", "midgard5.no-skill": "Keine Fertigkeit", "midgard5.magic": "magisch", + "midgard5.valuable": "Vermögen", "midgard5.equipped": "Ausgerüstet", "midgard5.active": "Aktiv", "midgard5.rangedWeapon": "Schusswaffe", - "midgard5.assignItemToCharacter": "Füge Gegenstand einem Charakter hinzu, um Fähigkeit auwählen zu können", + "midgard5.assignItemToCharacter": "Füge Gegenstand einem Charakter hinzu, um hier etwas auswählen zu können", "midgard5.pw": "Prüfwurf", "midgard5.attack": "Angriff", @@ -263,6 +297,7 @@ "midgard5.kampfkunst-type": "Kampfkunst Art", "midgard5.kampfkunst-variante": "Kampfkunst Variante", + "midgard5.kampfkunst-variante-short": "Var", "midgard5.kido-type": "Kido Art", "midgard5.kido-variante": "Kido Variante", diff --git a/package.json b/package.json index 949eb7f..efe783e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "foundry-system-midgard5", - "version": "2.3.1", + "version": "2.4.0", "description": "", "main": "index.js", "scripts": { diff --git a/source/PreloadTemplates.ts b/source/PreloadTemplates.ts index 7f5fa17..b2f2d19 100644 --- a/source/PreloadTemplates.ts +++ b/source/PreloadTemplates.ts @@ -6,12 +6,14 @@ const preloadTemplates = async (): Promise[]> = // const templates = [ rootPath + "actor/actor-sheet.hbs" ] // This would map to our local folder of /Assets/Templates/Actor/actor-sheet.hbs const templates: Array = [ + "sheets/character/description.hbs", "sheets/character/attribute.hbs", "sheets/character/base_values.hbs", + "sheets/character/main.hbs", "sheets/character/skills.hbs", "sheets/character/gear.hbs", "sheets/character/spells.hbs", - "sheets/character/kampfkuenste.hbs", + "sheets/character/combat.hbs", "sheets/character/effects.hbs", "sheets/partial/mod.hbs", "sheets/item/rolls.hbs", diff --git a/source/module/M5Base.ts b/source/module/M5Base.ts index 0562cce..72e3358 100644 --- a/source/module/M5Base.ts +++ b/source/module/M5Base.ts @@ -49,6 +49,18 @@ export interface M5RollResult extends M5RollTemplate { css: string; } +export enum M5ItemType { + SKILL = "skill", + ITEM = "item", + WEAPON = "weapon", + DEFENSIVE_WEAPON = "defensiveWeapon", + ARMOR = "armor", + CONTAINER = "container", + SPELL = "spell", + KAMPFKUNST = "kampfkunst", + EFFECT = "effect", +} + export enum M5EwResult { TBD = "", FUMBLE = "roll-ew-result-fumble", @@ -86,6 +98,10 @@ export enum M5Stats { PROTECTION_AP = "apProtection", PERCEPTION = "perception", DRINKING = "drinking", + HOARD = "hoard", + HOARD_NEXT = "hoardNext", + HOARD_MIN = "hoardMin", + WEALTH = "wealth", } export enum M5ModType { @@ -173,6 +189,10 @@ export interface M5CharacterCalculatedData { perceptionFW: number; drinking: M5ModResult; drinkingFW: number; + hoard: number; + hoardNext: number; + hoardMin: number; + wealth: number; }; skillMods: {}; skills: { @@ -187,6 +207,7 @@ export interface M5CharacterCalculatedData { defensiveWeapons: {}; armor: {}; items: {}; + containers: {}; effects: {}; }; spells: {}; diff --git a/source/module/actors/M5Character.ts b/source/module/actors/M5Character.ts index e067c62..0ce24d6 100644 --- a/source/module/actors/M5Character.ts +++ b/source/module/actors/M5Character.ts @@ -1,7 +1,6 @@ import { M5Item } from "../items/M5Item"; -import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned } from "../M5Base"; +import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ItemType, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned } from "../M5Base"; import M5ModAggregate from "./M5ModAggregate"; - export class M5Character extends Actor { // constructor( // data: ConstructorParameters[0], @@ -32,6 +31,7 @@ export class M5Character extends Actor { defensiveWeapons?: boolean; armor?: boolean; items?: boolean; + containers?: boolean; spells?: boolean; effects?: boolean; kampfkuenste?: boolean; @@ -71,6 +71,7 @@ export class M5Character extends Actor { perceptionFW: 0, drinking: { value: 0, mods: [] }, drinkingFW: 0, + hoard: 0, }, skillMods: {}, skills: { @@ -85,6 +86,7 @@ export class M5Character extends Actor { defensiveWeapons: {}, armor: {}, items: {}, + containers: {}, effects: {}, }, spells: {}, @@ -97,7 +99,7 @@ export class M5Character extends Actor { const data = (this as any).system; if (!data) return null; - ret.level = M5Character.levelFromExp(data.es); + ret.level = M5Character.levelFromExp(data.info.race === "Zwerg" ? Math.min(data.calc.stats?.hoard * 2 || 0, data.es) : data.es); ret.attributes.st.value = M5Character.attributeMinMax(data.attributes.st); // TODO item effects ret.attributes.gs.value = M5Character.attributeMinMax(data.attributes.gs); @@ -143,12 +145,16 @@ export class M5Character extends Actor { ret.stats.perceptionFW = 6; ret.stats.drinking = this.modResult(0); ret.stats.drinkingFW = Math.floor(ret.attributes.ko.value / 10); + ret.stats.hoardMin = M5Character.levelThreshold.at(ret.level - 1) / 2; + ret.stats.hoardNext = M5Character.levelThreshold.at(ret.level) / 2; + ret.stats.wealth = parseFloat((data.info.gold + data.info.silver / 10 + data.info.copper / 100).toPrecision(3)); + ret.stats.hoard = 0; if (!skip?.mods) { const aggregate = new M5ModAggregate(data, ret); context.items - ?.filter((item) => (item.type === "item" || item.type === "effect" || item.type === "armor") && item.system.equipped) + ?.filter((item) => (item.type === "item" || item.type === "effect" || item.type === "armor" || item.type === "container") && item.system.equipped) .forEach((item) => { const mods = item.system.mods; //console.log("Actor item mods", mods) @@ -171,6 +177,14 @@ export class M5Character extends Actor { if (item.system.magic) { label += "*"; } + if (item.system.valuable) { + ret.stats.wealth += this.calculateValue(item.system.value, item.system.currency); + } + if (item.system.hoarded) { + ret.stats.hoard += item.system.value || 0; + } + + let icon = item.img; let rollable = false; // console.log(item.system.rolls.formulas.map((p) => p.enabled)); @@ -180,11 +194,54 @@ export class M5Character extends Actor { break; } } + ret.gear.items[item.id] = { label: label, + icon: icon, magic: item.system.magic, calc: item.system.calc, equipped: item.system?.equipped, + valuable: item.system?.valuable, + hoarded: item.system?.hoarded, + weight: item.system.weight || 0, + containerId: item.system.containerId || "", + value: item.system.value || 0, + currency: item.system.currency || "", + quantity: item.system.quantity || 0, + rollExist: rollable, + }; + }); + } + + if (!skip?.containers) { + context.items + ?.filter((item) => item.type === "container") + .forEach((item) => { + item.prepareDerivedData(); + + let label = item.name; + if (item.system.magic) { + label += "*"; + } + let icon = item.img; + let rollable = false; + + // console.log(item.system.rolls.formulas.map((p) => p.enabled)); + for (let key in item.system.rolls.formulas) { + rollable = item.system.rolls.formulas[key].enabled; + if (rollable) { + break; + } + } + ret.gear.containers[item.id] = { + label: label, + icon: icon, + magic: item.system.magic, + valuable: item.system?.valuable, + hoarded: item.system?.hoarded, + calc: item.system.calc, + equipped: item.system?.equipped, + weight: item.system.weight || 0, value: item.system.value || 0, currency: item.system.currency || "", quantity: item.system.quantity || 0, @@ -247,12 +304,25 @@ export class M5Character extends Actor { item.system.stats.damageBonus + ")"; } + if (item.system.valuable) { + ret.stats.wealth += this.calculateValue(item.system.value, item.system.currency); + } + if (item.system.hoarded) { + ret.stats.hoard += item.system.value || 0; + } ret.gear.weapons[item.id] = { label: label, skillId: item.system.skillId, magic: item.system.magic, + valuable: item.system?.valuable, + hoarded: item.system?.hoarded, + value: item.system.value || 0, calc: item.system.calc, + special: item.system.special, + damageBase: item.system.damageBase, + equipped: item.system?.equipped, + containerId: item.system.containerId || "", }; }); } @@ -267,12 +337,24 @@ export class M5Character extends Actor { if (item.system.magic) { label += "*(" + (item.system.stats.defenseBonus < 0 ? "" : "+") + item.system.stats.defenseBonus + ")"; } + if (item.system.valuable) { + ret.stats.wealth += this.calculateValue(item.system.value, item.system.currency); + } + if (item.system.hoarded) { + ret.stats.hoard += item.system.value || 0; + } ret.gear.defensiveWeapons[item.id] = { label: label, skillId: item.system.skillId, magic: item.system.magic, + valuable: item.system?.valuable, + hoarded: item.system?.hoarded, + value: item.system.value || 0, + defenseBonus: item.system.stats.defenseBonus, calc: item.system.calc, + equipped: item.system?.equipped, + containerId: item.system.containerId || "", }; }); } @@ -287,12 +369,23 @@ export class M5Character extends Actor { if (item.system.magic) { label += "*"; } + if (item.system.valuable) { + ret.stats.wealth += this.calculateValue(item.system.value, item.system.currency); + } + if (item.system.hoarded) { + ret.stats.hoard += item.system.value || 0; + } ret.gear.armor[item.id] = { label: label, magic: item.system.magic, + valuable: item.system?.valuable, + hoarded: item.system?.hoarded, + value: item.system.value || 0, + lpProtection: item.system.lpProtection, calc: item.system.calc, equipped: item.system?.equipped, + containerId: item.system.containerId || "", }; }); } @@ -429,11 +522,36 @@ export class M5Character extends Actor { }); } + createItem(itemName: string, itemType: M5ItemType): Promise { + const itemData = { + name: itemName, + type: itemType, + }; + + return (this as any).createEmbeddedDocuments("Item", [itemData]).then((docs) => { + const item = docs[0]; + return item; + }); + } + getItem(itemId: string): any { if (!(this as any).items) return null; return (this as any).getEmbeddedDocument("Item", itemId); } + private calculateValue(value: number, currency: string): number { + switch (currency) { + case "gold": + return value; + case "silver": + return parseFloat((value / 10).toPrecision(3)); + case "copper": + return parseFloat((value / 100).toPrecision(3)); + default: + return 0; + } + } + private modResult(value: number): M5ModResult { return { value: value, diff --git a/source/module/items/M5Item.ts b/source/module/items/M5Item.ts index 037a5e1..74bd118 100644 --- a/source/module/items/M5Item.ts +++ b/source/module/items/M5Item.ts @@ -14,7 +14,22 @@ export class M5Item extends Item { const itemData = (this as any).system; const calc = itemData.calc; - if (itemType === "skill") { + if (itemType === "item") { + calc.containers = null; + + if (actor) { + const actorCalc = actor.derivedData({ weapons: true, defensiveWeapons: true, armor: true, items: true, spells: true, effects: true, kampfkuenste: true }); + if (actorCalc) { + calc.containers = actorCalc.gear.containers; + } + const container = character.getItem(itemData.containerId); + //console.log("M5Item.prepareDerivedData:containers", itemData, container?.system) + if (container) { + container.prepareDerivedData(); + const containerData = container.system; + } + } + } else if (itemType === "skill") { calc.fw = itemData.fw; calc.bonus = 0; @@ -64,14 +79,23 @@ export class M5Item extends Item { calc.special = itemData.special ? 2 : 0; calc.ew = calc.special + itemData.stats.attackBonus; calc.combatSkills = null; + calc.containers = null; + if (actor) { const actorCalc = character.derivedData({ weapons: true, defensiveWeapons: true, armor: true, items: true, spells: true, effects: true, kampfkuenste: true }); if (actorCalc) { calc.ew += actorCalc.stats.attackBonus.value; calc.combatSkills = actorCalc.skills.combat; + calc.containers = actorCalc.gear.containers; } - + const container = character.getItem(itemData.containerId); + //console.log("M5Item.prepareDerivedData:containers", itemData, container?.system) + if (container) { + container.prepareDerivedData(); + const containerData = container.system; + } + const skill = character.getItem(itemData.skillId); //console.log("M5Item.prepareDerivedData:weapon", itemData, skill?.system) if (skill) { @@ -88,14 +112,23 @@ export class M5Item extends Item { calc.special = itemData.special ? 2 : 0; calc.ew = calc.special + itemData.stats.defenseBonus; calc.combatSkills = null; + calc.containers = null; if (actor) { const actorCalc = character.derivedData({ weapons: true, defensiveWeapons: true, armor: true, items: true, spells: true, effects: true, kampfkuenste: true }); if (actorCalc) { calc.ew += actorCalc.stats.defense.value + actorCalc.stats.defenseBonus.value; calc.combatSkills = actorCalc.skills.combat; + calc.containers = actorCalc.gear.containers; } + const container = character.getItem(itemData.containerId); + //console.log("M5Item.prepareDerivedData:containers", itemData, container?.system) + if (container) { + container.prepareDerivedData(); + const containerData = container.system; + } + const skill = character.getItem(itemData.skillId); //console.log("M5Item.prepareDerivedData:weapon", itemData, skill?.system) if (skill) { @@ -113,6 +146,19 @@ export class M5Item extends Item { itemData.mods[3] = { type: "attribute", id: "gw", operation: "add100", value: itemData.attributeMod.gw }; itemData.mods[4] = { type: "stat", id: "lpProtection", operation: "set", value: itemData.lpProtection }; itemData.mods[5] = { type: "stat", id: "apProtection", operation: "set", value: itemData.apProtection }; + calc.containers = null; + if (actor) { + const actorCalc = actor.derivedData({ weapons: true, defensiveWeapons: true, armor: true, items: true, spells: true, effects: true, kampfkuenste: true }); + if (actorCalc) { + calc.containers = actorCalc.gear.containers; + } + const container = character.getItem(itemData.containerId); + //console.log("M5Item.prepareDerivedData:containers", itemData, container?.system) + if (container) { + container.prepareDerivedData(); + const containerData = container.system; + } + } } else if (itemType === "spell") { calc.fw = 0; if (actor) { diff --git a/source/module/sheets/M5CharacterSheet.ts b/source/module/sheets/M5CharacterSheet.ts index e98a1ae..d2ffa4c 100644 --- a/source/module/sheets/M5CharacterSheet.ts +++ b/source/module/sheets/M5CharacterSheet.ts @@ -1,14 +1,14 @@ import Logger from "../../utils/Logger"; import { M5Character } from "../actors/M5Character"; import { M5Item } from "../items/M5Item"; -import { M5SkillLearned, M5SkillUnlearned } from "../M5Base"; +import { M5ItemType, M5SkillLearned, M5SkillUnlearned } from "../M5Base"; import { M5Roll } from "../rolls/M5Roll"; export default class M5CharacterSheet extends ActorSheet { static get defaultOptions() { return mergeObject(super.defaultOptions, { template: "systems/midgard5/templates/sheets/character/main.hbs", - width: 800, + width: 1000, height: 800, classes: ["midgard5", "sheet", "character"], tabs: [{ navSelector: ".sheet-navigation", contentSelector: ".sheet-content", initial: "base_values" }], @@ -111,7 +111,11 @@ export default class M5CharacterSheet extends ActorSheet { if (!item.system.quantity) { item.system.quantity = 0; } - item.system.quantity += 1; + item.update({ + data: { + quantity: item.system.quantity + 1, + }, + }); this.render(); }); @@ -127,7 +131,11 @@ export default class M5CharacterSheet extends ActorSheet { const context = this.actor as any; const item = context.items.get(itemId); if (item.system.quantity > 0) { - item.system.quantity -= 1; + item.update({ + data: { + quantity: item.system.quantity - 1, + }, + }); } this.render(); }); @@ -144,7 +152,11 @@ export default class M5CharacterSheet extends ActorSheet { const context = this.actor as any; const item = context.items.get(itemId); if (item.system.quantity > 0) { - item.system.quantity -= 1; + item.update({ + data: { + quantity: item.system.quantity - 1, + }, + }); } await item.roll(); @@ -246,6 +258,111 @@ export default class M5CharacterSheet extends ActorSheet { const roll = M5Roll.resistanceBody(this.actor); await roll.toMessage(); }); + + 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"]; + } + + const context = this.actor as any; + const item = context.items.get(itemId); + if (item.system.equipped === true) { + item.system.equipped = false; + } else { + item.system.equipped = true; + } + this.render(); + }); + + html.find(".add-item").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.item"), M5ItemType.ITEM).then((i) => { + const item = i as any; + item.update({ + data: { + quantity: 1, + }, + }); + }); + }); + + html.find(".add-weapon").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"), M5ItemType.WEAPON); + }); + + html.find(".add-defensiveWeapon").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.defensiveWeapon"), M5ItemType.DEFENSIVE_WEAPON); + }); + + html.find(".add-armor").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.armor"), M5ItemType.ARMOR); + }); + + html.find(".add-container").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.container"), M5ItemType.CONTAINER).then((i) => { + const item = i as any; + item.update({ + data: { + quantity: 1, + }, + }); + }); + }); + + html.find(".add-spell").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.spell"), M5ItemType.SPELL).then((i) => { + const item = i as any; + item.update({ + data: { + process: "none", + }, + }); + }); + }); + + html.find(".add-kampfkunst").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.kampfkunst"), M5ItemType.KAMPFKUNST).then((i) => { + const item = i as any; + item.update({ + data: { + type: "angriff", + variante: "anstuermen", + }, + }); + }); + }); + + html.find(".add-effect").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.effect"), M5ItemType.EFFECT); + }); + // Drag & Drop const dragDrop = new DragDrop({ dragSelector: ".items-list .item", @@ -270,7 +387,7 @@ export default class M5CharacterSheet extends ActorSheet { 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"].includes(item.type)) { + if (["skill", "item", "weapon", "defensiveWeapon", "armor", "spell", "effect", "kampfkunst", "container"].includes(item.type)) { const dragData = { type: "Transfer", actorId: this.actor.id, diff --git a/source/module/sheets/M5ItemSheet.ts b/source/module/sheets/M5ItemSheet.ts index d930a22..1a1c073 100644 --- a/source/module/sheets/M5ItemSheet.ts +++ b/source/module/sheets/M5ItemSheet.ts @@ -30,7 +30,7 @@ export class M5ItemSheet extends ItemSheet { context.rollData = {} let actor = this.object?.parent ?? null if (actor) { - context.rollData = actor.getRollData() + context.rollData = actor.getRollData() } context.data = itemData.system diff --git a/source/style/Character-sheet.less b/source/style/Character-sheet.less index c1a8895..75a86bb 100644 --- a/source/style/Character-sheet.less +++ b/source/style/Character-sheet.less @@ -3,6 +3,62 @@ @attributeBorderColor: rgba(0, 0, 0, 0.5); .midgard5 { + .flexbox { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + .flexcolumn { + flex-wrap: wrap; + } + + .flexcolumn-1 { + flex: 100%; + flex-wrap: wrap; + } + + .flexcolumn-2 { + flex: 50%; + flex-wrap: wrap; + } + + .flexcolumn-3 { + flex: 33%; + flex-wrap: wrap; + } + + .flexcolumn-4 { + flex: 25%; + flex-wrap: wrap; + } + + .flexcolumn-5 { + flex: 20%; + flex-wrap: wrap; + } + + .flexpart { + gap: 0; + padding: 0; + margin: 5px; + background-color: beige; + border: 2px solid black; + } + + .flexpart-header { + font-weight: bold; + font-size: large; + text-align: center; + color: black; + } + + .flexpart-icon { + height: 2rem; + float: left; + border: 0px solid transparent; + } + .flexrow { align-items: center; } @@ -15,6 +71,15 @@ color: white; } + .profile-img { + display: block; + margin-left: auto; + margin-right: auto; + height: 100%; + width: auto; + border: 0px solid black; + } + .sheet.character { form { display: flex; @@ -31,12 +96,6 @@ } } - .profile-img { - max-width: 128px; - height: 160px; - border: 0px solid black; - } - .description { flex: 0 0 100%; margin: 0; @@ -68,6 +127,14 @@ table { background-color: beige; + border: 0px solid transparent; + &.bordered { + border-collapse: separate; + border: 2px solid black; + border-radius: 10px; + font-size: larger; + font-weight: bolder; + } } td, @@ -104,8 +171,23 @@ padding: 0.5rem 0.5rem 0.5rem 0.5rem; text-align: left; font-weight: bold; - background-color: dimgray; } + + &.highlight { + font-weight: bold; + font-style: italic; + } + } + + .table-icon { + height: 1rem; + width: 1rem; + float: left; + border: 0px solid transparent; + } + + input { + border: 0px solid black; } input.skill { @@ -116,22 +198,34 @@ width: 5rem; } + input.checkbox { + width: 1rem; + height: 1rem; + } + .new-skill { font-style: italic; background: rgba(0, 0, 0, 0.3); color: rgba(255, 255, 255); - - button { - background: rgba(255, 255, 255, 0.5); - } } - button.roll-button { + .roll-button { background: url(/icons/svg/d20-black.svg) no-repeat; - background-size: 24px 24px; + background-size: 1rem 1rem; border: #000000 solid 0px; - width: 26px; - height: 26px; + width: 1rem; + height: 1rem; + } + + .learn-button { + padding: 0; + margin: 0; + height: 1rem; + width: 4rem; + background: rgba(255, 255, 255, 0.5); + font-size: smaller; + text-align: center; + line-height: 0.8rem; } span.spell-process { @@ -184,15 +278,27 @@ } } + .biography { + margin: 0.5rem 0.5rem 0.5rem 0.5rem; + height: 180px; + background-color: #eaead7; + .editor { + height: 100%; + width: 100%; + } + } + .attributes { padding: 0.5rem 0.5rem 0.5rem 0.5rem; display: flex; flex-direction: row; margin-bottom: 0.5rem; background-color: beige; + flex-wrap: wrap; + justify-content: center; .attribute { - flex: 0 0 7rem; + flex: 0 0 6rem; margin: 0; border: 1px solid @attributeBorderColor; //border-bottom: none; diff --git a/source/system.json b/source/system.json index 27c4125..829b8ca 100644 --- a/source/system.json +++ b/source/system.json @@ -3,13 +3,17 @@ "name": "midgard5", "title": "Midgard 5. Edition", "description": "The German RPG Midgard 5. Edition", - "version": "2.3.1", + "version": "2.4.0", "compatibility": { "minimum": "10", "verified": "11", "maximum": "11" }, - "authors": [{"name": "Byroks"}], + "authors": [ + {"name": "Byroks"}, + {"name": "Le-Frique"}, + {"name": "Oskaloq"} + ], "scripts": ["bundle.js"], "styles": ["bundle.css"], "packs": [ @@ -153,9 +157,9 @@ "gridUnits": "m", "primaryTokenAttribute": "lp", "secondaryTokenAttribute": "ap", - "url": "https://github.com/Byroks/foundry-vtt-system-midgard5", - "manifest": "https://github.com/Byroks/foundry-vtt-system-midgard5/releases/download/v2.3.1/system.json", - "download": "https://github.com/Byroks/foundry-vtt-system-midgard5/releases/download/v2.3.1/midgard5-v2.3.1.zip", + "url": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5", + "manifest": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v2.4.0/system.json", + "download": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v2.4.0/midgard5-v2.4.0.zip", "initiative": "@c.calc.attributes.gw.value", "license": "LICENSE.txt" } \ No newline at end of file diff --git a/source/template.json b/source/template.json index f1665f5..5dd1d3b 100644 --- a/source/template.json +++ b/source/template.json @@ -5,9 +5,11 @@ "characterDescription": { "info": { "description": "", + "background": "", "class": "", "race": "", "magicUsing": false, + "showAllItems": false, "gender": "", "weight": "", "height": "", @@ -138,17 +140,21 @@ "wahrsagen": { "fw": 0, "attribute": "zt", "initial": 8, "pp": 0 }, "wasserkampf": { "fw": 0, "attribute": "gw", "initial": 8, "pp": 0 }, "zauberkunde": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 } - } + } + } + }, + "gear": { + "gear": { } } }, "character": { - "templates": ["characterBars", "attributes", "characterDescription", "characterHeader", "skills"], + "templates": ["characterBars", "attributes", "characterDescription", "characterHeader", "skills", "gear"], "calc": {} } }, "Item": { - "types": ["skill", "weapon", "defensiveWeapon", "armor", "spell", "kampfkunst", "item", "effect"], + "types": ["skill", "weapon", "defensiveWeapon", "armor", "spell", "kampfkunst", "item", "effect", "container"], "templates": { "itemDescription": { "description": "" @@ -198,10 +204,20 @@ }, "equippable": { "equippable": false, - "equipped": true + "equipped": false + }, + "valuable": { + "valuable": false, + "item-wealth": true + }, + "hoarded": { + "hoarded": false, + "inHoard": true }, "physical": { "value": 0, + "weight": 0, + "containerId": "", "magic": false }, "durationSelection": { @@ -297,6 +313,15 @@ "calc": {} }, "item": { + "templates": ["itemDescription", "equippable", "physical","valuable","hoarded"], + "rolls": { + "formulas": {}, + "output": "" + }, + "mods": {}, + "calc": {} + }, + "container": { "templates": ["itemDescription", "equippable", "physical"], "rolls": { "formulas": {}, @@ -315,9 +340,11 @@ "calc": {} }, "weapon": { - "templates": ["itemDescription", "stats", "equippable", "physical"], + "templates": ["itemDescription", "stats", "equippable", "physical","valuable","hoarded"], "special": false, "ranged": false, + "valuable": false, + "hoarded": false, "skillId": "", "damageBase": "1d6", "rolls": { @@ -338,8 +365,10 @@ "calc": {} }, "defensiveWeapon": { - "templates": ["itemDescription", "stats", "equippable", "physical"], + "templates": ["itemDescription", "stats", "equippable", "physical","valuable","hoarded"], "special": false, + "valuable": false, + "hoarded": false, "skillId": "", "rolls": { "formulas": { @@ -354,9 +383,11 @@ "calc": {} }, "armor": { - "templates": ["itemDescription", "stats", "equippable", "attributeMod", "physical"], + "templates": ["itemDescription", "stats", "equippable", "attributeMod", "physical","valuable","hoarded"], "lpProtection": 0, "apProtection": 0, + "valuable": false, + "hoarded": false, "rolls": { "formulas": {}, "output": "" diff --git a/templates/sheets/character/base_values.hbs b/templates/sheets/character/base_values.hbs index a199a50..6ac423c 100644 --- a/templates/sheets/character/base_values.hbs +++ b/templates/sheets/character/base_values.hbs @@ -1,164 +1,120 @@ +
+ +
+
{{localize "midgard5.attributes"}}
+
+
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="st" attribute=data.attributes.st calc=data.calc.attributes.st}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="gs" attribute=data.attributes.gs calc=data.calc.attributes.gs}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="gw" attribute=data.attributes.gw calc=data.calc.attributes.gw}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="ko" attribute=data.attributes.ko calc=data.calc.attributes.ko}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="in" attribute=data.attributes.in calc=data.calc.attributes.in}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="zt" attribute=data.attributes.zt calc=data.calc.attributes.zt}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="au" attribute=data.attributes.au calc=data.calc.attributes.au}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="pa" attribute=data.attributes.pa calc=data.calc.attributes.pa}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="wk" attribute=data.attributes.wk calc=data.calc.attributes.wk}} +
+
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Eigenschaften
{{localize "midgard5.magicUsing"}}  
{{localize "midgard5.grace"}}{{localize "midgard5.exp-overall"}}
{{localize "midgard5.destiny"}}{{localize "midgard5.exp-available"}}
{{localize "midgard5.luckPoints"}}{{localize "midgard5.movementRange"}}
+
+
+
{{localize "midgard5.points"}}
+ + + + + + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.grace"}}{{localize "midgard5.exp-overall"}}
{{localize "midgard5.destiny"}}{{localize "midgard5.exp-available"}}
{{localize "midgard5.luckPoints"}}
+
+
- - - - - - - - - - - - - - -
Leiteigenschaften
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="st" attribute=data.attributes.st calc=data.calc.attributes.st}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="gs" attribute=data.attributes.gs calc=data.calc.attributes.gs}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="gw" attribute=data.attributes.gw calc=data.calc.attributes.gw}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="ko" attribute=data.attributes.ko calc=data.calc.attributes.ko}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="in" attribute=data.attributes.in calc=data.calc.attributes.in}} -
-
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="zt" attribute=data.attributes.zt calc=data.calc.attributes.zt}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="au" attribute=data.attributes.au calc=data.calc.attributes.au}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="pa" attribute=data.attributes.pa calc=data.calc.attributes.pa}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="wk" attribute=data.attributes.wk calc=data.calc.attributes.wk}} -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Berechnete Werte
{{localize "midgard5.brawl"}}{{data.calc.stats.brawl.value}}{{localize "midgard5.enduranceBonus"}}{{data.calc.stats.enduranceBonus}}
{{localize "midgard5.defense"}}{{data.calc.stats.defense.value}}{{localize "midgard5.defenseBonus"}}{{data.calc.stats.defenseBonus.value}}
{{localize "midgard5.damageBonus"}}{{data.calc.stats.damageBonus.value}}{{localize "midgard5.attackBonus"}}{{data.calc.stats.attackBonus.value}}
{{localize "midgard5.spellCasting"}}{{data.calc.stats.spellCasting.value}}{{localize "midgard5.poisonResistance"}}{{data.calc.stats.poisonResistance.value}}
{{localize "midgard5.resistanceMind"}}{{data.calc.stats.resistanceMind.value}}{{localize "midgard5.resistanceBody"}}{{data.calc.stats.resistanceBody.value}}
{{localize "midgard5.resistanceMind"}}{{data.calc.stats.resistanceMind.value}}{{localize "midgard5.resistanceBody"}}{{data.calc.stats.resistanceBody.value}}
{{localize "midgard5.movementRange"}}{{data.calc.stats.movement.value}}{{localize "midgard5.actor-git-long"}}{{data.calc.stats.poisonResistance.value}}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Beschreibung
{{localize "midgard5.origin"}}{{localize "midgard5.gender"}}
{{localize "midgard5.weight"}}{{localize "midgard5.height"}}
{{localize "midgard5.shape"}}{{localize "midgard5.age"}}
{{localize "midgard5.caste"}}{{localize "midgard5.faith"}}
- -{{editor content=data.description target="data.description" button=true owner=owner editable=editable}} +
+
+
{{localize "midgard5.calculated-values"}}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{#if (eq data.info.race "Zwerg")}} + + + + + + + + + + + + + {{/if}} + + + +
{{localize "midgard5.magicUsing"}}{{localize "midgard5.movementRange"}}
{{localize "midgard5.brawl"}}{{data.calc.stats.brawl.value}}{{localize "midgard5.enduranceBonus"}}{{data.calc.stats.enduranceBonus}}
{{localize "midgard5.defense"}}{{data.calc.stats.defense.value}}{{localize "midgard5.defenseBonus"}}{{data.calc.stats.defenseBonus.value}}
{{localize "midgard5.damageBonus"}}{{data.calc.stats.damageBonus.value}}{{localize "midgard5.attackBonus"}}{{data.calc.stats.attackBonus.value}}
{{localize "midgard5.spellCasting"}}{{data.calc.stats.spellCasting.value}}{{localize "midgard5.poisonResistance"}}{{data.calc.stats.poisonResistance.value}}
{{localize "midgard5.resistanceMind"}}{{data.calc.stats.resistanceMind.value}}{{localize "midgard5.resistanceBody"}}{{data.calc.stats.resistanceBody.value}}
{{localize "midgard5.hoard"}}{{data.calc.stats.hoard}}
{{localize "midgard5.hoardMin"}}{{data.calc.stats.hoardMin}}{{localize "midgard5.hoard-next"}}{{data.calc.stats.hoardNext}}
+
+
+
\ No newline at end of file diff --git a/templates/sheets/character/combat.hbs b/templates/sheets/character/combat.hbs new file mode 100644 index 0000000..e26b12a --- /dev/null +++ b/templates/sheets/character/combat.hbs @@ -0,0 +1,189 @@ +
+
+
+
{{localize "midgard5.attack"}}
+ + + + + + + + + + + + {{#each data.calc.gear.weapons as |item itemId|}} + {{#if item.equipped}} + + + + + + + + {{/if}} + {{/each}} + + + + + + + + + +
{{localize "TYPES.Item.weapon"}}{{localize "midgard5.ew"}}{{localize "midgard5.damage"}}
{{item.label}}{{#if item.special}}(*){{/if}}{{item.calc.ew}}{{item.damageBase}} + {{#if item.equipped}} + + {{else}} + + {{/if}} +
{{localize "midgard5.brawl"}}{{data.calc.stats.brawlFw}}1d6 -4 
+ + + + + + + + + + + + + {{#each data.calc.kampfkuenste as |item itemId|}} + + + + + + + + {{/each}} + +
{{localize "TYPES.Item.kampfkunst"}}{{localize "midgard5.kampfkunst-variante-short"}}{{localize "midgard5.ew"}}
{{item.label}} + {{#if item.isKido}} + {{localize (m5concat "midgard5.kido-type-" item.type)}} + {{#unless (eq item.type "finte")}} + ({{localize (m5concat "midgard5.kido-variante-" item.variante)}}) + {{/unless}} + {{else}} + {{localize (m5concat "midgard5.kampfkunst-type-" item.type)}} + {{#if (eq item.type "angriff")}} + ({{localize (m5concat "midgard5.kampfkunst-variante-" item.variante)}}) + {{/if}} + {{/if}} + {{item.calc.ew}}
+
+
+ +
+
+
{{localize "midgard5.calculated-values"}}
+ + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.movementRange"}}{{data.calc.stats.movement.value}}  
{{localize "midgard5.defense"}}{{data.calc.stats.defense.value}}{{localize "midgard5.defenseBonus"}}{{data.calc.stats.defenseBonus.value}}
{{localize "midgard5.damageBonus"}}{{data.calc.stats.damageBonus.value}}{{localize "midgard5.attackBonus"}}{{data.calc.stats.attackBonus.value}}
+
+
+ +
+
+
{{localize "midgard5.defense"}}
+ + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.defense"}}{{add data.calc.stats.defense.value data.calc.stats.defenseBonus.value}}
{{localize "midgard5.resistanceMind"}}{{data.calc.stats.resistanceMind.value}}
{{localize "midgard5.resistanceBody"}}{{data.calc.stats.resistanceBody.value}}
+ + + + + + + + + + + + {{#each data.calc.gear.defensiveWeapons as |item itemId|}} + {{#if item.equipped}} + + + + + + + + {{/if}} + {{/each}} + +
{{localize "TYPES.Item.defensiveWeapon"}}{{localize "midgard5.ew"}}{{localize "midgard5.defenseBonus-short"}}
{{item.label}}{{item.calc.ew}}{{item.defenseBonus}} + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+ + + + + + + + + + + {{#each data.calc.gear.armor as |item itemId|}} + {{#if item.equipped}} + + + + + + {{/if}} + {{/each}} + +
{{localize "TYPES.Item.armor"}}{{localize "midgard5.actor-lp-short"}}
{{item.label}}{{lpProtection}} + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+
+
+
diff --git a/templates/sheets/character/description.hbs b/templates/sheets/character/description.hbs new file mode 100644 index 0000000..b8dd005 --- /dev/null +++ b/templates/sheets/character/description.hbs @@ -0,0 +1,50 @@ +
+
+
+
{{localize "midgard5.characteristics"}}
+ + + + + + + + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.origin"}}{{localize "midgard5.gender"}}{{localize "midgard5.shape"}}{{localize "midgard5.age"}}
{{localize "midgard5.weight"}}{{localize "midgard5.height"}}{{localize "midgard5.caste"}}{{localize "midgard5.faith"}}
+
+
+ +
+
+
{{localize "midgard5.description"}}
+
+
{{editor content=data.info.description target="data.info.description" button=true owner=owner editable=editable}}
+
+
+ +
+
+
{{localize "midgard5.background"}}
+
+
{{editor content=data.info.background target="data.info.background" button=true owner=owner editable=editable}}
+
+
+ +
\ No newline at end of file diff --git a/templates/sheets/character/effects.hbs b/templates/sheets/character/effects.hbs index 986629d..7af454d 100644 --- a/templates/sheets/character/effects.hbs +++ b/templates/sheets/character/effects.hbs @@ -2,7 +2,8 @@ {{localize "TYPES.Item.effect"}} - + + diff --git a/templates/sheets/character/gear.hbs b/templates/sheets/character/gear.hbs index e2dc767..6f88e2a 100644 --- a/templates/sheets/character/gear.hbs +++ b/templates/sheets/character/gear.hbs @@ -1,157 +1,279 @@ - - - - - - - - - - - - - - - -
{{localize "midgard5.currency-gold"}}{{localize "midgard5.currency-silver"}}{{localize "midgard5.currency-copper"}}
+
+
- - - - - - - - - - - {{#each data.calc.gear.weapons as |item itemId|}} - - - - - - - {{/each}} +
+
{{localize "midgard5.currency"}}
+
{{localize "TYPES.Item.weapon"}}{{localize "midgard5.ew"}}
{{item.label}}{{item.calc.ew}}
+ + + + + + + {{#if (eq data.info.race "Zwerg")}} + + {{/if}} + + + + + + + + + + {{#if (eq data.info.race "Zwerg")}} + + {{/if}} + + +
{{localize "midgard5.currency-wealth"}}{{localize "midgard5.currency-gold"}}{{localize "midgard5.currency-silver"}}{{localize "midgard5.currency-copper"}}{{localize "midgard5.hoard"}}
+
- - {{localize "midgard5.brawl"}} - {{data.calc.stats.brawlFw}} - - - - - +
+
+ + {{localize "midgard5.gear"}} + (alle ) +
+ + + + + + + + + + + + + + + {{#each data.calc.gear.items as |item itemId|}} + {{#if (or ../data.info.showAllItems (eq item.containerId ""))}} + + + + + + + + + {{/if}} + {{/each}} + +
{{localize "TYPES.Item.item"}}{{localize "midgard5.item-quantity"}}{{localize "midgard5.item-value"}}
+ {{item.label}} + + + {{item.quantity}} + + + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} + {{#if item.rollExist}}{{/if}}
+
- - - - - - - - - - - {{#each data.calc.gear.defensiveWeapons as |item itemId|}} - - - - - - - {{/each}} +
+
{{localize "midgard5.weapons"}}
+
{{localize "TYPES.Item.defensiveWeapon"}}{{localize "midgard5.ew"}}
{{item.label}}{{item.calc.ew}}
+ + + + + + - - - - - - + + + + {{#each data.calc.gear.weapons as |item itemId|}} + + + + + + + {{/each}} + +
{{localize "TYPES.Item.weapon"}}{{localize "midgard5.item-value"}}
{{localize "midgard5.defense"}}{{add data.calc.stats.defense.value data.calc.stats.defenseBonus.value}}
{{item.label}} + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+
- - {{localize "midgard5.resistanceMind"}} - {{data.calc.stats.resistanceMind.value}} - - - +
+
{{localize "midgard5.defensive-weapons"}}
+ + + + + + + + + + + {{#each data.calc.gear.defensiveWeapons as |item itemId|}} + + + + + + + {{/each}} + +
{{localize "TYPES.Item.defensiveWeapon"}}{{localize "midgard5.item-value"}}
{{item.label}} + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+
- - {{localize "midgard5.resistanceBody"}} - {{data.calc.stats.resistanceBody.value}} - - - - - +
+
{{localize "midgard5.armor"}}
+ + + + + + + + + + + {{#each data.calc.gear.armor as |item itemId|}} + + + + + + + {{/each}} + +
{{localize "TYPES.Item.armor"}}{{localize "midgard5.item-value"}}
{{item.label}} + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+
+ - - - - - - - - - - - - - - - {{#each data.calc.gear.armor as |item itemId|}} - - - - - - - - - - - {{/each}} - -
{{localize "TYPES.Item.armor"}}{{localize "midgard5.actor-lp-short"}}{{localize "midgard5.actor-ap-short"}}{{localize "midgard5.attackBonus-short"}}{{localize "midgard5.defenseBonus-short"}}BGw
- {{item.label}} - {{#if item.equipped}} - {{localize "midgard5.equipped"}} - {{/if}} - {{actorItemValue ../actor._id itemId "lpProtection" ../actor.isToken}}{{actorItemValue ../actor._id itemId "apProtection"}}{{actorItemValue ../actor._id itemId "stats.attackBonus"}}{{actorItemValue ../actor._id itemId "stats.defenseBonus"}}{{actorItemValue ../actor._id itemId "stats.movementBonus"}}{{actorItemValue ../actor._id itemId "attributeMod.gw"}}
+
- - - - - - - - - - - - - {{#each data.calc.gear.items as |item itemId|}} - - - - - - - - {{/each}} - -
{{localize "TYPES.Item.item"}}{{localize "midgard5.item-quantity"}}{{localize "midgard5.item-value"}}
- {{item.label}} - {{#if item.equipped}} - {{localize "midgard5.equipped"}} - {{/if}} - - - {{item.quantity}} - - - {{#unless (or (eq item.value 0) (eq item.currency ""))}} - {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} - {{/unless}} - {{#if item.rollExist}}{{/if}}
+
+
{{localize "TYPES.Item.container"}}
+ + + + + + + + + + + + + {{#each data.calc.gear.containers as |item itemId|}} + + + + + + + + {{/each}} + +
{{localize "TYPES.Item.container"}}{{localize "midgard5.item-value"}}
+ {{item.label}} + + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} + {{#if item.rollExist}}{{/if}}
+
+ + {{#each data.calc.gear.containers as |container containerId|}} +
+
{{container.label}}
+ + + + + + + + + + + + + + {{#each ../data.calc.gear.items as |item itemId|}} + {{#if (eq item.containerId containerId)}} + + + + + + + + + {{/if}} + {{/each}} + +
{{localize "TYPES.Item.item"}}{{localize "midgard5.item-quantity"}}{{localize "midgard5.item-value"}} 
+ {{item.label}} + + + {{item.quantity}} + + + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} + {{#if item.rollExist}}{{/if}}
+
+ {{/each}} +
+ \ No newline at end of file diff --git a/templates/sheets/character/kampfkuenste.hbs b/templates/sheets/character/kampfkuenste.hbs deleted file mode 100644 index 4662b34..0000000 --- a/templates/sheets/character/kampfkuenste.hbs +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - {{#each data.calc.kampfkuenste as |item itemId|}} - - - - - - - {{/each}} - -
{{localize "TYPES.Item.kampfkunst"}}{{localize "midgard5.ew"}}
- {{item.label}} - {{#if item.isKido}} - {{localize (m5concat "midgard5.kido-type-" item.type)}} - {{#unless (eq item.type "finte")}} - ({{localize (m5concat "midgard5.kido-variante-" item.variante)}}) - {{/unless}} - {{else}} - {{localize (m5concat "midgard5.kampfkunst-type-" item.type)}} - {{#if (eq item.type "angriff")}} - ({{localize (m5concat "midgard5.kampfkunst-variante-" item.variante)}}) - {{/if}} - {{/if}} - {{item.calc.ew}}
\ No newline at end of file diff --git a/templates/sheets/character/main.hbs b/templates/sheets/character/main.hbs index 1a46ce5..7ca7632 100644 --- a/templates/sheets/character/main.hbs +++ b/templates/sheets/character/main.hbs @@ -1,101 +1,116 @@
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Midgard
{{data.calc.level}}
NameGrad
- - - -
{{localize "midgard5.race"}}{{localize "midgard5.class"}}{{localize "midgard5.occupation"}}
{{localize "midgard5.actor-lp-short"}} -
- - {{#times data.lp.max}} - {{#if (lt this ../data.lp.value)}} -
- {{else}} -
- {{/if}} - {{/times}} - -
-
{{localize "midgard5.actor-ap-short"}} -
- - {{#times data.ap.max}} - {{#if (lt this ../data.ap.value)}} -
- {{else}} -
- {{/if}} - {{/times}} - -
-
{{localize "midgard5.actor-st"}}{{localize "midgard5.actor-gs"}}{{localize "midgard5.actor-gw"}}{{localize "midgard5.actor-ko"}}{{localize "midgard5.actor-in"}}{{localize "midgard5.actor-zt"}}{{localize "midgard5.actor-au"}}{{localize "midgard5.actor-pa"}}{{localize "midgard5.actor-wk"}}{{localize "midgard5.actor-git"}}
{{data.calc.attributes.st.value}}{{data.calc.attributes.gs.value}}{{data.calc.attributes.gw.value}}{{data.calc.attributes.ko.value}}{{data.calc.attributes.in.value}}{{data.calc.attributes.zt.value}}{{data.calc.attributes.au.value}}{{data.calc.attributes.pa.value}}{{data.calc.attributes.wk.value}}{{data.calc.stats.poisonResistance.value}}
+
+ + +
+ Midgard +
+ + +
+ + + + + + + + + + +
{{localize "midgard5.actor-name"}}
{{localize "midgard5.class"}}{{localize "midgard5.level"}}{{data.calc.level}}
+ + + + + + + + + + + +
+ + + +
{{localize "midgard5.race"}}{{localize "midgard5.occupation"}}
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.actor-st"}}{{localize "midgard5.actor-gs"}}{{localize "midgard5.actor-gw"}}{{localize "midgard5.actor-ko"}}{{localize "midgard5.actor-in"}}{{localize "midgard5.actor-zt"}}{{localize "midgard5.actor-au"}}{{localize "midgard5.actor-pa"}}{{localize "midgard5.actor-wk"}}{{localize "midgard5.actor-git"}}
{{data.calc.attributes.st.value}}{{data.calc.attributes.gs.value}}{{data.calc.attributes.gw.value}}{{data.calc.attributes.ko.value}}{{data.calc.attributes.in.value}}{{data.calc.attributes.zt.value}}{{data.calc.attributes.au.value}}{{data.calc.attributes.pa.value}}{{data.calc.attributes.wk.value}}{{data.calc.stats.poisonResistance.value}}
+
+ + +
+ +
+ + +
+ + + + + + + + + +
{{localize "midgard5.actor-lp-short"}} +
+ + {{#times data.lp.max}} + {{#if (lt this ../data.lp.value)}} +
+ {{else}} +
+ {{/if}} + {{/times}} + +
+
{{localize "midgard5.actor-ap-short"}} +
+ + {{#times data.ap.max}} + {{#if (lt this ../data.ap.value)}} +
+ {{else}} +
+ {{/if}} + {{/times}} + +
+
+
{{!-- Character Sheet Navigation --}} @@ -103,11 +118,12 @@ {{ localize "midgard5.base_values" }} {{ localize "midgard5.skills" }} {{ localize "midgard5.gear" }} + {{ localize "midgard5.combat" }} {{#if actor.system.info.magicUsing }} {{ localize "midgard5.spells" }} {{/if}} - {{ localize "midgard5.kampfkuenste" }} {{ localize "midgard5.effects" }} + {{ localize "midgard5.description" }}
@@ -124,16 +140,20 @@ {{> "systems/midgard5/templates/sheets/character/gear.hbs"}} -
- {{> "systems/midgard5/templates/sheets/character/spells.hbs"}} +
+ {{> "systems/midgard5/templates/sheets/character/combat.hbs"}}
-
- {{> "systems/midgard5/templates/sheets/character/kampfkuenste.hbs"}} +
+ {{> "systems/midgard5/templates/sheets/character/spells.hbs"}}
{{> "systems/midgard5/templates/sheets/character/effects.hbs"}}
+
+ {{> "systems/midgard5/templates/sheets/character/description.hbs"}} +
+
\ No newline at end of file diff --git a/templates/sheets/character/skills.hbs b/templates/sheets/character/skills.hbs index 9ca501e..b666208 100644 --- a/templates/sheets/character/skills.hbs +++ b/templates/sheets/character/skills.hbs @@ -1,153 +1,171 @@ - - - - - - - - - - - - - - {{#each data.calc.skills.general as |skill skillId|}} - - - - - - - - - - {{/each}} - -
{{localize "midgard5.learned-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
+
- - - - - - - - - - - - - - {{#each data.calc.skills.language as |skill skillId|}} - - - - - - - - - - {{/each}} - -
{{localize "midgard5.language"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
+
{{localize "midgard5.innate-abilities"}}
+ + + + + + + + + + + + + {{#each data.calc.skills.innate as |skill skillId|}} + + + + + + + + + {{/each}} + + + + + + + + + + + + + + + + + +
{{localize "midgard5.innate-ability"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}
{{localize "midgard5.perception"}}{{data.calc.stats.perceptionFW}}{{data.calc.stats.perception.value}}{{add data.calc.stats.perception.value data.calc.stats.perceptionFW}}
{{localize "midgard5.drinking"}}{{data.calc.stats.drinkingFW}}{{data.calc.stats.drinking.value}}{{add data.calc.stats.drinking.value data.calc.stats.drinkingFW}}
+
- - - - - - - - - - - - - {{#each data.calc.skills.innate as |skill skillId|}} - - - - - - - - - {{/each}} - - - - - - - - +
+
{{localize "midgard5.learned-skills"}}
+
{{localize "midgard5.innate-ability"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}
{{localize "midgard5.perception"}}{{data.calc.stats.perceptionFW}}{{data.calc.stats.perception.value}}{{add data.calc.stats.perception.value data.calc.stats.perceptionFW}}
+ + + + + + + + + + + + + {{#each data.calc.skills.general as |skill skillId|}} + + + + + + + + + + {{/each}} + +
{{localize "midgard5.learned-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}
+
- - {{localize "midgard5.drinking"}} - {{data.calc.stats.drinkingFW}} - {{data.calc.stats.drinking.value}} - {{add data.calc.stats.drinking.value data.calc.stats.drinkingFW}} - - - - - +
+
{{localize "midgard5.weapon-skills"}}
+ + + + + + + + + + + + + + {{#each data.calc.skills.combat as |skill skillId|}} + + + + + + + + + + {{/each}} + +
{{localize "midgard5.weapon-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
- - - - - - - - - - - - - - {{#each data.calc.skills.combat as |skill skillId|}} - - - - - - - - - - {{/each}} - -
{{localize "midgard5.weapon-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
+
{{localize "midgard5.languages"}}
+ + + + + + + + + + + + + + {{#each data.calc.skills.language as |skill skillId|}} + + + + + + + + + + {{/each}} + +
{{localize "midgard5.language"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
+
- - - - - - - - - - - - - - - {{#each data.skills.general as |skill key|}} - {{#unless (isSkillInList (localizeMidgard key) ../actor.system.calc.skills.general) }} - - - - - - - - - - - {{/unless}} - {{/each}} - -
{{localize "midgard5.unlearned-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{localizeMidgard key}}{{skill.fw}}{{skillBonus ../actor._id skill}}{{skillEw ../actor._id skill}}
\ No newline at end of file +
+ +
+
{{localize "midgard5.unlearned-skills"}}
+ + + + + + + + + + + + + {{#each data.skills.general as |skill key|}} + {{#unless (isSkillInList (localizeMidgard key) ../actor.system.calc.skills.general) }} + + + + + + + + + {{/unless}} + {{/each}} + +
{{localize "midgard5.unlearned-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}
{{localizeMidgard key}}{{skill.fw}}{{skillBonus ../actor._id skill}}{{skillEw ../actor._id skill}}
+
+
+ \ No newline at end of file diff --git a/templates/sheets/character/spells.hbs b/templates/sheets/character/spells.hbs index 2bf55a7..ff5db64 100644 --- a/templates/sheets/character/spells.hbs +++ b/templates/sheets/character/spells.hbs @@ -4,7 +4,7 @@ {{localize "TYPES.Item.spell"}} {{localize "midgard5.ew"}} - + diff --git a/templates/sheets/item/armor.hbs b/templates/sheets/item/armor.hbs index 26eeb21..090136f 100644 --- a/templates/sheets/item/armor.hbs +++ b/templates/sheets/item/armor.hbs @@ -18,6 +18,53 @@ + + + + + + + {{#if (eq item.parent.system.info.race "Zwerg")}} + + + + + {{/if}} + + + + + +
+ {{localize "midgard5.item-value"}} + + +
+ + + + +
+ {{localize "TYPES.Item.container"}} + {{#if data.calc.containers}} + + {{else}} + {{localize "midgard5.assignItemToCharacter"}} + {{/if}}
diff --git a/templates/sheets/item/container.hbs b/templates/sheets/item/container.hbs new file mode 100644 index 0000000..2add63f --- /dev/null +++ b/templates/sheets/item/container.hbs @@ -0,0 +1,55 @@ +
+
+ +

+
+
+ + + + + + + + + + +
+
+ + + + + + + + +
+
+
+ {{localize "midgard5.item-quantity"}} + +
+
+
+ {{localize "midgard5.item-value"}} + + +
+
+ + {{> "systems/midgard5/templates/sheets/item/rolls.hbs"}} + + {{> "systems/midgard5/templates/sheets/partial/mod.hbs" mods=data.mods calc=data.calc}} + + + {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} +
+
\ No newline at end of file diff --git a/templates/sheets/item/defensiveWeapon.hbs b/templates/sheets/item/defensiveWeapon.hbs index 3bbca1c..9839c72 100644 --- a/templates/sheets/item/defensiveWeapon.hbs +++ b/templates/sheets/item/defensiveWeapon.hbs @@ -7,8 +7,12 @@ - + + + + + + diff --git a/templates/sheets/item/item.hbs b/templates/sheets/item/item.hbs index 2add63f..c55afeb 100644 --- a/templates/sheets/item/item.hbs +++ b/templates/sheets/item/item.hbs @@ -6,7 +6,7 @@
+
+ + + + @@ -18,6 +22,53 @@ + + + + + + + {{#if (eq item.parent.system.info.race "Zwerg")}} + + + + + {{/if}} +
+
+
+ {{localize "midgard5.item-value"}} + + +
+
+
+ {{localize "TYPES.Item.container"}} + {{#if data.calc.containers}} + + {{else}} + {{localize "midgard5.assignItemToCharacter"}} + {{/if}}
- @@ -28,7 +39,7 @@ - + + + +
+
@@ -16,6 +16,17 @@ + + + + + + {{#if (eq item.parent.system.info.race "Zwerg")}} + + + + + {{/if}}
+
{{localize "midgard5.item-value"}} @@ -43,6 +54,26 @@
+
+ {{localize "TYPES.Item.container"}} + {{#if data.calc.containers}} + + {{else}} + {{localize "midgard5.assignItemToCharacter"}} + {{/if}} +
+
{{> "systems/midgard5/templates/sheets/item/rolls.hbs"}} diff --git a/templates/sheets/item/kampfkunst.hbs b/templates/sheets/item/kampfkunst.hbs index 0a8f566..d97e4ba 100644 --- a/templates/sheets/item/kampfkunst.hbs +++ b/templates/sheets/item/kampfkunst.hbs @@ -76,7 +76,7 @@ {{localize "midgard5.skill"}} - {{!-- {{#if data.calc.skills.general}} --}} + {{#if data.calc.generalSkills}} + + @@ -23,6 +27,53 @@ + + + + + + + {{#if (eq item.parent.system.info.race "Zwerg")}} + + + + + {{/if}} + + + + + +
+ {{localize "midgard5.item-value"}} + + +
+ + + + +
+ {{localize "TYPES.Item.container"}} + {{#if data.calc.containers}} + + {{else}} + {{localize "midgard5.assignItemToCharacter"}} + {{/if}}