From b8e873537c9bf1c4b34e87a998cede6e022146a6 Mon Sep 17 00:00:00 2001 From: LeFrique Date: Sun, 7 Jan 2024 14:31:20 +0100 Subject: [PATCH] Zwergenhort (#4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mein Geschenk zu Weihnachten: Implementierung des Zwergenhort gem. KOD S. 167 mit Angabe aktueller Mindesthort für aktuellen Grad und benötigtem Hort für nächsten Grad bei Zwergen. Der Hort erscheint nur bei ausgewählter Rasse Zwerg und wird bei allen anderen Rassen versteckt. Die Anrechnung von Gold oder Gegenständen wie auch im KOD erwähnt erfordert die Implementierung eines Goldmanagements und am besten auch eine Neustrukturierung des Charakterbogens (s. weitere Issues). Frohe Weihnachten ;) Co-authored-by: Byroks Reviewed-on: https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/pulls/4 Co-authored-by: LeFrique Co-committed-by: LeFrique --- foundryconfig.json | 3 +- lang/de.json | 8 +++ source/PreloadTemplates.ts | 1 + source/module/M5Base.ts | 8 +++ source/module/actors/M5Character.ts | 59 +++++++++++++++++++--- source/system.json | 34 +++++++++---- source/template.json | 22 ++++++-- templates/sheets/character/base_values.hbs | 20 +++++--- templates/sheets/character/gear.hbs | 8 +++ templates/sheets/character/main.hbs | 2 +- templates/sheets/item/armor.hbs | 28 ++++++++++ templates/sheets/item/defensiveWeapon.hbs | 30 ++++++++++- templates/sheets/item/item.hbs | 15 +++++- templates/sheets/item/weapon.hbs | 30 ++++++++++- 14 files changed, 234 insertions(+), 34 deletions(-) diff --git a/foundryconfig.json b/foundryconfig.json index 709c890..0b75816 100644 --- a/foundryconfig.json +++ b/foundryconfig.json @@ -1,4 +1,5 @@ { "moduleName": "Midgard 5. Edition", - "repository": "https://git.byroks.de/Byroks/foundry-vtt-system-midgard5" + "repository": "https://github.com/Byroks/foundry-vtt-system-midgard5", + "rawURL": "https://raw.githubusercontent.com/Byroks/foundry-vtt-system-midgard5" } diff --git a/lang/de.json b/lang/de.json index a9d1480..efc50fd 100644 --- a/lang/de.json +++ b/lang/de.json @@ -42,6 +42,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", @@ -97,6 +98,12 @@ "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", @@ -221,6 +228,7 @@ "midgard5.defensive-weapon": "Verteidigungswaffe", "midgard5.no-skill": "Keine Fertigkeit", "midgard5.magic": "magisch", + "midgard5.valuable": "Vermögen", "midgard5.equipped": "Ausgerüstet", "midgard5.active": "Aktiv", "midgard5.rangedWeapon": "Schusswaffe", diff --git a/source/PreloadTemplates.ts b/source/PreloadTemplates.ts index 7f5fa17..bbd4ae9 100644 --- a/source/PreloadTemplates.ts +++ b/source/PreloadTemplates.ts @@ -8,6 +8,7 @@ const preloadTemplates = async (): Promise[]> = const templates: Array = [ "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", diff --git a/source/module/M5Base.ts b/source/module/M5Base.ts index 6e68710..1ab5161 100644 --- a/source/module/M5Base.ts +++ b/source/module/M5Base.ts @@ -86,6 +86,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 +177,10 @@ export interface M5CharacterCalculatedData { perceptionFW: number; drinking: M5ModResult; drinkingFW: number; + hoard: number; + hoardNext: number; + hoardMin: number; + wealth: number; }; skillMods: {}; skills: { diff --git a/source/module/actors/M5Character.ts b/source/module/actors/M5Character.ts index 13595b4..be1be10 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 M5ModAggregate from "./M5ModAggregate"; - export class M5Character extends Actor { // constructor( // data: ConstructorParameters[0], @@ -72,6 +71,7 @@ export class M5Character extends Actor { perceptionFW: 0, drinking: { value: 0, mods: [] }, drinkingFW: 0, + hoard: 0, }, skillMods: {}, skills: { @@ -99,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); @@ -145,6 +145,11 @@ 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 = data.info.gold + data.info.silver/10 + data.info.copper/100; + ret.stats.hoard = 0; + if (!skip?.mods) { const aggregate = new M5ModAggregate(data, ret); @@ -172,7 +177,14 @@ export class M5Character extends Actor { let label = item.name; if (item.system.magic) { label += "*"; + }; + if (item.system.valuable) { + ret.stats.wealth += item.system.value || 0; + }; + if (item.system.hoarded) { + ret.stats.hoard += item.system.value || 0; } + let icon = item.img; let rollable = false; @@ -183,12 +195,15 @@ 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, @@ -223,6 +238,8 @@ export class M5Character extends Actor { 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, @@ -232,6 +249,7 @@ export class M5Character extends Actor { quantity: item.system.quantity || 0, rollExist: rollable, }; + }); } @@ -244,8 +262,8 @@ export class M5Character extends Actor { let label = item.name; if (item.system.magic) { label += "*"; - } - + }; + ret.gear.effects[item.id] = { label: label, magic: item.system.magic, @@ -288,12 +306,21 @@ export class M5Character extends Actor { (item.system.stats.damageBonus < 0 ? "" : "+") + item.system.stats.damageBonus + ")"; + }; + if (item.system.valuable) { + ret.stats.wealth += item.system.value || 0; + }; + 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, }; }); @@ -308,12 +335,21 @@ export class M5Character extends Actor { let label = item.name; if (item.system.magic) { label += "*(" + (item.system.stats.defenseBonus < 0 ? "" : "+") + item.system.stats.defenseBonus + ")"; + }; + if (item.system.valuable) { + ret.stats.wealth += item.system.value || 0; + }; + 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, calc: item.system.calc, }; }); @@ -328,11 +364,20 @@ export class M5Character extends Actor { let label = item.name; if (item.system.magic) { label += "*"; + }; + if (item.system.valuable) { + ret.stats.wealth += item.system.value || 0; + }; + 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, calc: item.system.calc, equipped: item.system?.equipped, }; diff --git a/source/system.json b/source/system.json index 94fdfb1..27c4125 100644 --- a/source/system.json +++ b/source/system.json @@ -9,7 +9,7 @@ "verified": "11", "maximum": "11" }, - "authors": [{ "name": "Byroks" }], + "authors": [{"name": "Byroks"}], "scripts": ["bundle.js"], "styles": ["bundle.css"], "packs": [ @@ -103,25 +103,41 @@ "name": "Midgard 5", "sorting": "a", "color": "#0000FF", - "packs": ["blaupause-spielfiguren", "tabellen-kritische-ereignisse", "makros-kritische-ereignisse", "makros-standardwurfel"], + "packs": [ + "blaupause-spielfiguren", + "tabellen-kritische-ereignisse", + "makros-kritische-ereignisse", + "makros-standardwurfel" + ], "folders": [ { "name": "Ausrüstung", "sorting": "a", "color": "#008000", - "packs": ["ausruestung", "ruestkammer", "waffenkammer"] + "packs": [ + "ausruestung", + "ruestkammer", + "waffenkammer" + ] }, { "name": "Effekte", "sorting": "a", "color": "#800080", - "packs": ["kampfzustaende", "verletzungen", "zauberwirkungen"] + "packs": [ + "kampfzustaende", + "verletzungen", + "zauberwirkungen" + ] }, { "name": "Fähigkeiten", "sorting": "a", "color": "#800000", - "packs": ["fertigkeiten", "kampf"] + "packs": [ + "fertigkeiten", + "kampf" + ] } ] } @@ -137,9 +153,9 @@ "gridUnits": "m", "primaryTokenAttribute": "lp", "secondaryTokenAttribute": "ap", - "url": "https://git.byroks.de/Byroks/foundry-vtt-system-midgard5", - "manifest": "https://git.byroks.de/Byroks/foundry-vtt-system-midgard5/releases/download/v2.3.1/system.json", - "download": "https://git.byroks.de/Byroks/foundry-vtt-system-midgard5/releases/download/v2.3.1/midgard5-v2.3.1.zip", + "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", "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 1c9ef75..454e250 100644 --- a/source/template.json +++ b/source/template.json @@ -204,6 +204,14 @@ "equippable": false, "equipped": true }, + "valuable": { + "valuable": false, + "item-wealth": true + }, + "hoarded": { + "hoarded": false, + "inHoard": true + }, "physical": { "value": 0, "weight": 0, @@ -303,7 +311,7 @@ "calc": {} }, "item": { - "templates": ["itemDescription", "equippable", "physical"], + "templates": ["itemDescription", "equippable", "physical","valuable","hoarded"], "rolls": { "formulas": {}, "output": "" @@ -330,9 +338,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": { @@ -353,8 +363,10 @@ "calc": {} }, "defensiveWeapon": { - "templates": ["itemDescription", "stats", "equippable", "physical"], + "templates": ["itemDescription", "stats", "equippable", "physical","valuable","hoarded"], "special": false, + "valuable": false, + "hoarded": false, "skillId": "", "rolls": { "formulas": { @@ -369,9 +381,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..ad10c13 100644 --- a/templates/sheets/character/base_values.hbs +++ b/templates/sheets/character/base_values.hbs @@ -109,17 +109,21 @@ {{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}} + {{#if (eq data.info.race "Zwerg")}} + {{localize "midgard5.hoard"}} + {{data.calc.stats.hoard}} + {{/if}} + + + {{#if (eq data.info.race "Zwerg")}} + {{localize "midgard5.hoardMin"}} + {{data.calc.stats.hoardMin}} + {{localize "midgard5.hoard-next"}} + {{data.calc.stats.hoardNext}} + {{/if}} diff --git a/templates/sheets/character/gear.hbs b/templates/sheets/character/gear.hbs index 62ab4d2..e50a55e 100644 --- a/templates/sheets/character/gear.hbs +++ b/templates/sheets/character/gear.hbs @@ -6,17 +6,25 @@ + + {{#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"}}
diff --git a/templates/sheets/character/main.hbs b/templates/sheets/character/main.hbs index a250aaa..bfd17bf 100644 --- a/templates/sheets/character/main.hbs +++ b/templates/sheets/character/main.hbs @@ -7,7 +7,7 @@
{{data.calc.level}}
- + Name diff --git a/templates/sheets/item/armor.hbs b/templates/sheets/item/armor.hbs index 26eeb21..1c1c8ea 100644 --- a/templates/sheets/item/armor.hbs +++ b/templates/sheets/item/armor.hbs @@ -18,6 +18,34 @@ + + + + + + + {{#if (eq item.parent.system.info.race "Zwerg")}} + + + + + {{/if}} + + + + + +
+ {{localize "midgard5.item-value"}} + +
diff --git a/templates/sheets/item/defensiveWeapon.hbs b/templates/sheets/item/defensiveWeapon.hbs index 3bbca1c..80ead44 100644 --- a/templates/sheets/item/defensiveWeapon.hbs +++ b/templates/sheets/item/defensiveWeapon.hbs @@ -7,7 +7,7 @@ - + + + diff --git a/templates/sheets/item/item.hbs b/templates/sheets/item/item.hbs index f91f011..c55afeb 100644 --- a/templates/sheets/item/item.hbs +++ b/templates/sheets/item/item.hbs @@ -6,7 +6,7 @@
+
@@ -18,6 +18,34 @@ + + + + + + + {{#if (eq item.parent.system.info.race "Zwerg")}} + + + + + {{/if}} +
+
+
+ {{localize "midgard5.item-value"}} + +
- @@ -28,7 +39,7 @@ -
+
@@ -16,6 +16,17 @@ + + + + + + {{#if (eq item.parent.system.info.race "Zwerg")}} + + + + + {{/if}}
+
{{localize "midgard5.item-value"}} diff --git a/templates/sheets/item/weapon.hbs b/templates/sheets/item/weapon.hbs index 09e6f2b..dbd69b7 100644 --- a/templates/sheets/item/weapon.hbs +++ b/templates/sheets/item/weapon.hbs @@ -7,7 +7,7 @@ - + + +
+
@@ -23,6 +23,34 @@ + + + + + + + {{#if (eq item.parent.system.info.race "Zwerg")}} + + + + + {{/if}} +
+
+
+ {{localize "midgard5.item-value"}} + +