From 3ecd2c6c1edba9ff7a9d8cd65328792af6580b22 Mon Sep 17 00:00:00 2001 From: oskaloq Date: Tue, 14 May 2024 11:38:20 +0200 Subject: [PATCH] Vereinfachter-NPC/Kreaturen-Bogen (#107) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ich habe mal den ersten Entwurf eines NPC Bogens fertiggestellt. Ist jetzt ein eigener Actor Type geworden und nicht nur ein alternativer Char Bogen: Einfach beim Erstellen eines neuen Actors NPC wählen. Co-authored-by: Ender Co-authored-by: LeFrique Co-authored-by: Byroks Reviewed-on: https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/pulls/107 Reviewed-by: Le-Frique --- lang/de.json | 1 + source/PreloadTemplates.ts | 5 + source/module/M5Base.ts | 1 + source/module/items/M5Item.ts | 24 +-- source/module/rolls/M5Roll.ts | 20 +- source/module/sheets/M5CharacterSheet.ts | 50 +++-- source/settings.ts | 9 + source/style/npc-sheet.less | 23 +++ source/template.json | 22 ++- templates/sheets/character/gear.hbs | 10 +- templates/sheets/character/main.hbs | 24 +-- templates/sheets/character/spells.hbs | 2 + templates/sheets/npc/attribute.hbs | 4 + templates/sheets/npc/combat.hbs | 233 +++++++++++++++++++++++ templates/sheets/npc/description.hbs | 18 ++ templates/sheets/npc/main.hbs | 127 ++++++++++++ templates/sheets/npc/properties.hbs | 117 ++++++++++++ 17 files changed, 636 insertions(+), 54 deletions(-) create mode 100644 source/style/npc-sheet.less create mode 100644 templates/sheets/npc/attribute.hbs create mode 100644 templates/sheets/npc/combat.hbs create mode 100644 templates/sheets/npc/description.hbs create mode 100644 templates/sheets/npc/main.hbs create mode 100644 templates/sheets/npc/properties.hbs diff --git a/lang/de.json b/lang/de.json index a12db20..21443eb 100644 --- a/lang/de.json +++ b/lang/de.json @@ -283,6 +283,7 @@ "rangedWeapon": "Schusswaffe", "assignItemToCharacter": "Füge Gegenstand einem Charakter hinzu, um hier etwas auswählen zu können", "showAll": "Alle anzeigen", + "showUnlearned": "Ungelernte Fertigkeiten", "wealthAndWeight": "Vermögen und Lasten", "itemsInContainers": "Gegenstände in Aufbewahrung", "allItems": "Alle Gegenstände", diff --git a/source/PreloadTemplates.ts b/source/PreloadTemplates.ts index b2f2d19..a126db5 100644 --- a/source/PreloadTemplates.ts +++ b/source/PreloadTemplates.ts @@ -15,6 +15,11 @@ const preloadTemplates = async (): Promise[]> = "sheets/character/spells.hbs", "sheets/character/combat.hbs", "sheets/character/effects.hbs", + "sheets/npc/main.hbs", + "sheets/npc/combat.hbs", + "sheets/npc/properties.hbs", + "sheets/npc/description.hbs", + "sheets/npc/attribute.hbs", "sheets/partial/mod.hbs", "sheets/item/rolls.hbs", "chat/roll-m5.hbs", diff --git a/source/module/M5Base.ts b/source/module/M5Base.ts index e890123..fdc1b26 100644 --- a/source/module/M5Base.ts +++ b/source/module/M5Base.ts @@ -162,6 +162,7 @@ export interface M5AttributeCalculated extends M5ModResult { export interface M5CharacterCalculatedData { level: number; + movement: number; attributes: { st: M5AttributeCalculated; gs: M5AttributeCalculated; diff --git a/source/module/items/M5Item.ts b/source/module/items/M5Item.ts index 786d868..183e70d 100644 --- a/source/module/items/M5Item.ts +++ b/source/module/items/M5Item.ts @@ -314,7 +314,7 @@ export class M5Item extends Item { return ret; } - async roll() { + async roll(toggleAutomatedRoll = false) { const item = this as any; // Initialize chat data. @@ -341,20 +341,20 @@ export class M5Item extends Item { } }); - if (item.type === "spell" || item.type === "kampfkunst") { - if (this.actor["system"].ap.value >= item.system.ap) { - this.actor["update"]({ - data: { - ap: { - value: this.actor["system"].ap.value - item.system.ap, + const roll = new M5Roll(rollData, this.actor, item.name, item.id); + if (await roll.toMessage(toggleAutomatedRoll)) { + if (item.type === "spell" || item.type === "kampfkunst") { + if (this.actor["system"].ap.value >= item.system.ap) { + this.actor["update"]({ + data: { + ap: { + value: this.actor["system"].ap.value - item.system.ap, + }, }, - }, - }); + }); + } } } - - const roll = new M5Roll(rollData, this.actor, item.name, item.id); - return roll.toMessage(); } else { ChatMessage.create({ speaker: speaker, diff --git a/source/module/rolls/M5Roll.ts b/source/module/rolls/M5Roll.ts index 81f49fb..d47b4f4 100644 --- a/source/module/rolls/M5Roll.ts +++ b/source/module/rolls/M5Roll.ts @@ -142,18 +142,26 @@ export class M5Roll { return renderTemplate(M5Roll.TEMPLATE_PATH, this.data); } - async toMessage() { - let checkOptions = await this.popUp({ isPW: this.data.rolls[0].label === (game as Game).i18n.localize("midgard5.pw") }); - if (checkOptions["cancelled"]) { - return; + async toMessage(toggleAutomatedRoll = false) { + let automatedRoll = (game as Game).settings.get("midgard5", "automatedRoll"); + automatedRoll = toggleAutomatedRoll ? !automatedRoll : automatedRoll; + const rMode = (game as Game).settings.get("core", "rollMode"); + + if (!automatedRoll) { + let checkOptions = await this.popUp({ isPW: this.data.rolls[0].label === (game as Game).i18n.localize("midgard5.pw") }); + if (checkOptions["cancelled"]) { + return; + } else { + const rMode = checkOptions["rollMode"]; + this.data.b = checkOptions; + } } else { - this.data.b = checkOptions; + this.data.b = { difficulty: 20, modifier: 0 }; } if (!this._evaluated) await this.evaluate(); const faces = this.pool.dice.map((x) => x.faces); - const rMode = checkOptions["rollMode"] || (game as Game).settings.get("core", "rollMode"); const chatData = { type: CONST.CHAT_MESSAGE_TYPES.ROLL, content: await this.render(), diff --git a/source/module/sheets/M5CharacterSheet.ts b/source/module/sheets/M5CharacterSheet.ts index c61c7bb..6160ad0 100644 --- a/source/module/sheets/M5CharacterSheet.ts +++ b/source/module/sheets/M5CharacterSheet.ts @@ -7,7 +7,6 @@ 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: 1000, height: 800, classes: ["midgard5", "sheet", "character"], @@ -21,7 +20,15 @@ export default class M5CharacterSheet extends ActorSheet { }); } - // get template() { + get template() { + //console.log("M5CharacterSheet", this.actor.data.type) + if (this.actor.type === "npc") { + return "systems/midgard5/templates/sheets/npc/main.hbs"; + } + else { + return "systems/midgard5/templates/sheets/character/main.hbs"; + } + } // return "systems/midgard5/templates/character_sheet/main.hbs" // }Options extends ActorSheet.Options = ActorSheet.Options, Data extends object = ActorSheet.Data @@ -78,7 +85,8 @@ export default class M5CharacterSheet extends ActorSheet { let attributeValue = target ? parseInt(target.dataset.value) : null; let attributeStr = target ? target.dataset.attribute : null; const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".edit-item").on("click", async (event) => { @@ -138,7 +146,8 @@ export default class M5CharacterSheet extends ActorSheet { }); } - await item.roll(); + let toggleAutomatedRoll = (event.shiftKey) + await item.roll(toggleAutomatedRoll); this.render(); }); @@ -158,7 +167,8 @@ export default class M5CharacterSheet extends ActorSheet { const actor = this.actor as any; const item = actor.items.get(skillId) as M5Item; - await item.roll(); + let toggleAutomatedRoll = (event.shiftKey) + await item.roll(toggleAutomatedRoll); }); html.find(".roll-general-button").on("click", async (event) => { @@ -169,7 +179,8 @@ export default class M5CharacterSheet extends ActorSheet { const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned; const roll = M5Roll.fromUnlearnedSkill(this.actor, unlearnedSkill, skillName); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".learn-button").on("click", async (event) => { @@ -267,48 +278,57 @@ export default class M5CharacterSheet extends ActorSheet { const context = this.actor as any; const item = context.items.get(itemId) as M5Item; - await item.roll(); + let toggleAutomatedRoll = (event.shiftKey) + await item.roll(toggleAutomatedRoll); this.render(); }); html.find(".roll-brawl-button").on("click", async (event) => { const roll = M5Roll.brawl(this.actor); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".roll-cleanSpell-button").on("click", async (event) => { const roll = M5Roll.cleanSpell(this.actor); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".roll-deprivationCold-button").on("click", async (event) => { const roll = M5Roll.deprivationCold(this.actor); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".roll-deprivationHeat-button").on("click", async (event) => { const roll = M5Roll.deprivationHeat(this.actor); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".roll-deprivationFood-button").on("click", async (event) => { const roll = M5Roll.deprivationFood(this.actor); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".roll-defense-button").on("click", async (event) => { const roll = M5Roll.defense(this.actor); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".roll-resistanceMind-button").on("click", async (event) => { const roll = M5Roll.resistanceMind(this.actor); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".roll-resistanceBody-button").on("click", async (event) => { const roll = M5Roll.resistanceBody(this.actor); - await roll.toMessage(); + let toggleAutomatedRoll = (event.shiftKey) + await roll.toMessage(toggleAutomatedRoll); }); html.find(".change-equipped").on("click", async (event) => { diff --git a/source/settings.ts b/source/settings.ts index d9ba705..8705f00 100644 --- a/source/settings.ts +++ b/source/settings.ts @@ -13,4 +13,13 @@ export const loadSettings = async function () { default: true, type: Boolean, }); + (game as Game).settings.register("midgard5", "automatedRoll", { + name: "Automatische Würfelwürfe", + hint: "Falls aktiv, wird bei Würfelwürfen kein Dialog gezeigt. Das Verhalten kann mit gleichzeitig gedrückter Shift Taste umgekehrt werden.", + scope: "world", + config: true, + default: false, + type: Boolean, + }); + }; diff --git a/source/style/npc-sheet.less b/source/style/npc-sheet.less new file mode 100644 index 0000000..408202f --- /dev/null +++ b/source/style/npc-sheet.less @@ -0,0 +1,23 @@ +// main: midgard5.less +@borderGroove: 2px groove #eeede0; +@attributeBorderColor: rgba(0, 0, 0, 0.5); + +.midgard5 { + .sheet-npc { + .attribute-header { + align-items: center; + text-align: center; + font-weight: bold; + border: 0px solid transparent; + } + .attribute-value { + align-items: center; + text-align: center; + border: 0px solid transparent; + } + .fixed-value { + width: 3rem; + text-align: center; + } + } +} \ No newline at end of file diff --git a/source/template.json b/source/template.json index cd2fc5d..b337148 100644 --- a/source/template.json +++ b/source/template.json @@ -1,15 +1,18 @@ { "Actor": { - "types": ["character"], + "types": [ + "character", + "npc" + ], "templates": { "characterDescription": { "info": { "description": "", "background": "", "class": {}, + "npc-class": "", "race": "", "magicUsing": false, - "showAllItems": false, "gender": "", "weight": "", "height": "", @@ -19,9 +22,12 @@ "occupation": "", "origin": "", "faith": "", + "level": 1, "gold": 0, "silver": 0, - "copper": 0 + "copper": 0, + "showAllItems": false, + "showUnlearned": false } }, "characterBars": { @@ -44,6 +50,8 @@ "gp": 0 }, "attributes": { + "level": 1, + "movement": 24, "attributes": { "st": { "value": 50, "bonus": 0 }, "gs": { "value": 50, "bonus": 0 }, @@ -53,7 +61,8 @@ "zt": { "value": 50, "bonus": 0 }, "au": { "value": 50, "bonus": 0 }, "pa": { "value": 50, "bonus": 0 }, - "wk": { "value": 50, "bonus": 0 } + "wk": { "value": 50, "bonus": 0 }, + "git": { "value": 50, "bonus": 0 } } }, "skills": { @@ -156,6 +165,10 @@ "character": { "templates": ["characterBars", "attributes", "characterDescription", "characterHeader", "skills", "gear"], "calc": {} + }, + "npc": { + "templates": ["characterBars", "attributes", "characterDescription", "skills", "gear"], + "calc": {} } }, "Item": { @@ -376,6 +389,7 @@ "hoarded": false, "skillId": "", "damageBase": "1d6", + "ew": 5, "rolls": { "formulas": { "0": { diff --git a/templates/sheets/character/gear.hbs b/templates/sheets/character/gear.hbs index faf4de1..ec53822 100644 --- a/templates/sheets/character/gear.hbs +++ b/templates/sheets/character/gear.hbs @@ -234,7 +234,7 @@ {{localize "midgard5.capacity"}} - + @@ -289,7 +289,7 @@ {{localize "midgard5.item-weight"}} - + @@ -345,7 +345,7 @@ {{localize "midgard5.item-value"}} {{localize "midgard5.item-weight"}} - + @@ -392,7 +392,7 @@ {{localize "midgard5.item-value"}} {{localize "midgard5.item-weight"}} - + @@ -438,7 +438,7 @@ {{localize "midgard5.item-value"}} {{localize "midgard5.item-weight"}} - + diff --git a/templates/sheets/character/main.hbs b/templates/sheets/character/main.hbs index d5cef81..27af546 100644 --- a/templates/sheets/character/main.hbs +++ b/templates/sheets/character/main.hbs @@ -49,18 +49,6 @@ - - - - - - - - - - - - @@ -73,6 +61,18 @@ + + + + + + + + + + + +
{{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.wk.value}} {{data.calc.stats.poisonResistance.value}}
{{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"}}
diff --git a/templates/sheets/character/spells.hbs b/templates/sheets/character/spells.hbs index 6884d0a..fc21a24 100644 --- a/templates/sheets/character/spells.hbs +++ b/templates/sheets/character/spells.hbs @@ -77,6 +77,7 @@ + {{#if (eq data.types.actor)}}
{{localize "midgard5.pp"}} {{localize "midgard5.spells"}}
@@ -103,4 +104,5 @@
+ {{/if}} diff --git a/templates/sheets/npc/attribute.hbs b/templates/sheets/npc/attribute.hbs new file mode 100644 index 0000000..6d6f4e6 --- /dev/null +++ b/templates/sheets/npc/attribute.hbs @@ -0,0 +1,4 @@ +
+
{{localize (m5concat "midgard5.actor-" attributeId "-long")}}
+
+
\ No newline at end of file diff --git a/templates/sheets/npc/combat.hbs b/templates/sheets/npc/combat.hbs new file mode 100644 index 0000000..91164f5 --- /dev/null +++ b/templates/sheets/npc/combat.hbs @@ -0,0 +1,233 @@ + +
+ +
+
+
{{localize "midgard5.calculated-values"}}
+ + + + + + + + + + + + + + +
{{localize "midgard5.movementRange"}}{{data.calc.stats.movement.value}}
{{localize "midgard5.initiative"}} + {{#if (isSkillInList (localizeMidgard "anfuehren") data.calc.skills.general)}} + {{skillEwInList (localizeMidgard "anfuehren") data.calc.skills.general}} + {{else}} + {{skillEw actor._id data.skills.general.anfuehren}} + {{/if}} + {{localize "midgard5.actionrank"}}{{data.calc.attributes.gw.value}}
+
+
+ +
+
+
{{localize "midgard5.actionrank"}}
+ + + +
+
+ +
+
+
{{localize "TYPES.Item.effect"}}
+ + + + + + + + + {{#each data.calc.gear.effects as |item itemId|}} + + + + {{!--{{#unless (eq item.label "Belastung")}}--}} + + {{!--{{/unless}}--}} + + {{/each}} + +
{{localize "TYPES.Item.effect"}} + +
+ {{item.label}} + {{#if item.equipped}} + {{localize "midgard5.active"}} + {{#unless (or (eq item.duration.unit "") (eq item.duration.unit "limitless"))}} + {{item.duration.time}} {{localize (concat "midgard5.time-" item.duration.unit)}} + {{/unless}} + {{/if}} +
+
+
+ + +
+
+
{{localize "midgard5.attack"}}
+ + + + + + + + + + + + {{#each data.calc.gear.weapons as |item itemId|}} + + + + + + + + + {{/each}} + +
{{localize "TYPES.Item.weapon"}}{{localize "midgard5.ew"}}{{localize "midgard5.damage"}} +
{{item.label}}{{#if item.special}}(*){{/if}}{{item.calc.ew}}{{item.damageBase}}
+ + + + + + + + + + + + {{#each data.calc.skills.combat as |skill skillId|}} + + + + + + + + {{/each}} + +
{{localize "midgard5.weapon-skill"}}{{localize "midgard5.ew"}}
{{skill.label}}{{skill.calc.ew}}
+
+
+ +
+
+
{{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|}} + + + + + + + + {{/each}} + +
{{localize "TYPES.Item.defensiveWeapon"}}{{localize "midgard5.ew"}}
{{item.label}}{{item.calc.ew}}
+ + + + + + + + + + + + {{#each data.calc.gear.armor as |item itemId|}} + + + + + + + {{/each}} + +
{{localize "TYPES.Item.armor"}}{{localize "midgard5.actor-lp-short"}}
{{item.label}}{{lpProtection}}
+
+
+ + {{#if actor.system.info.magicUsing }} +
+
+
{{localize "TYPES.Item.spell"}}
+ + + + + + + +
{{localize "midgard5.spellCasting"}}{{data.calc.stats.spellCasting.value}}
+ + + + + + + + + + + + {{#each data.calc.spells as |item itemId|}} + + + + + + + + {{/each}} + +
{{localize "TYPES.Item.spell"}}{{localize "midgard5.ew"}}
{{item.label}}{{#if item.special}}(*){{/if}}{{item.calc.ew}}
+
+
+ {{/if}} +
diff --git a/templates/sheets/npc/description.hbs b/templates/sheets/npc/description.hbs new file mode 100644 index 0000000..d1b9e9f --- /dev/null +++ b/templates/sheets/npc/description.hbs @@ -0,0 +1,18 @@ +
+
+
+
{{localize "midgard5.description"}}
+
+
{{editor data.info.description target="data.info.description" button=true owner=owner editable=editable}}
+
+
+ +
+
+
{{localize "midgard5.background"}}
+
+
{{editor data.info.background target="data.info.background" button=true owner=owner editable=editable}}
+
+
+ +
\ No newline at end of file diff --git a/templates/sheets/npc/main.hbs b/templates/sheets/npc/main.hbs new file mode 100644 index 0000000..610f929 --- /dev/null +++ b/templates/sheets/npc/main.hbs @@ -0,0 +1,127 @@ +
+
+ + +
+ Midgard +
+ + +
+ + + + + + + + + + +
{{localize "midgard5.actor-name"}}
{{localize "midgard5.class"}}{{localize "midgard5.level"}}{{data.calc.level}}
+ + + + + + + + + + + +
{{localize "midgard5.race"}}{{localize "midgard5.occupation"}}
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{{data.attributes.st.value}}{{data.attributes.gs.value}}{{data.attributes.gw.value}}{{data.attributes.ko.value}}{{data.attributes.in.value}}{{data.attributes.zt.value}}{{data.attributes.au.value}}{{data.attributes.pa.value}}{{data.attributes.wk.value}}{{data.attributes.git.value}}
{{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"}}
+
+ + +
+ +
+ + +
+ + + + + + + + + +
{{localize "midgard5.actor-lp-short"}} +
+ + {{#times data.lp.max}} + {{#if (lt this ../data.lp.value)}} +
+ {{else}} +
+ {{/if}} + {{/times}} +
{{data.lp.max}}
+
+
{{localize "midgard5.actor-ap-short"}} +
+ + {{#times data.ap.max}} + {{#if (lt this ../data.ap.value)}} +
+ {{else}} +
+ {{/if}} + {{/times}} +
{{data.ap.max}}
+
+
+
+
+ + {{!-- Character Sheet Navigation --}} + + +
+ +
+ {{> "systems/midgard5/templates/sheets/npc/combat.hbs"}} +
+
+ {{> "systems/midgard5/templates/sheets/npc/properties.hbs"}} +
+
+ {{> "systems/midgard5/templates/sheets/npc/description.hbs"}} +
+ +
+
\ No newline at end of file diff --git a/templates/sheets/npc/properties.hbs b/templates/sheets/npc/properties.hbs new file mode 100644 index 0000000..08439b4 --- /dev/null +++ b/templates/sheets/npc/properties.hbs @@ -0,0 +1,117 @@ +
+
+
{{localize "midgard5.attributes"}}
+
+
+ {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="st" attribute=data.attributes.st}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="gs" attribute=data.attributes.gs}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="gw" attribute=data.attributes.gw}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="ko" attribute=data.attributes.ko}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="in" attribute=data.attributes.in}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="zt" attribute=data.attributes.zt}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="au" attribute=data.attributes.au}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="pa" attribute=data.attributes.pa}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="wk" attribute=data.attributes.wk}} + {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="git" attribute=data.attributes.git}} +
+
{{localize "midgard5.movementRange"}}
+
+
+
+
{{localize "midgard5.exp-overall"}}
+
+
+
+
{{localize "midgard5.actor-lp-short"}} {{localize "midgard5.maximum"}}
+
+
+
+
{{localize "midgard5.actor-ap-short"}} {{localize "midgard5.maximum"}}
+
+
+
+
{{localize "midgard5.magicUsing"}}
+
+
+
+
+
+
+ +
+
{{localize "midgard5.skills"}}
+ + + + + + + + + + + + + {{#each data.calc.skills.general as |skill skillId|}} + + + + + + + {{/each}} + {{#unless (not data.info.showUnlearned)}} + {{#each data.skills.general as |skill key|}} + {{#unless (isSkillInList (localizeMidgard key) ../actor.system.calc.skills.general) }} + + + + + + + {{/unless}} + {{/each}} + {{/unless}} + +
{{localize "midgard5.skills"}}{{localize "midgard5.ew"}}
{{skill.label}}
{{localizeMidgard key}}
+
+
+
+
+
{{localize "midgard5.gear"}}
+ + + + + + + + + + + + {{#each data.calc.gear.items as |item itemId|}} + + + + + + + + {{/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}} +
+
+
+
\ No newline at end of file