From a5c5b6c9e7023e938875c7be62209cfdb2fc57e3 Mon Sep 17 00:00:00 2001 From: Byroks Date: Mon, 8 Jan 2024 13:54:11 +0100 Subject: [PATCH 1/2] #33 Wrong wealth calculation Changes: + add function to adjust item value depending on currency --- source/module/actors/M5Character.ts | 63 +++++++++++++++++------------ 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/source/module/actors/M5Character.ts b/source/module/actors/M5Character.ts index be1be10..a3bb7cf 100644 --- a/source/module/actors/M5Character.ts +++ b/source/module/actors/M5Character.ts @@ -145,11 +145,10 @@ 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.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); @@ -177,14 +176,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.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; @@ -195,7 +194,7 @@ export class M5Character extends Actor { break; } } - + ret.gear.items[item.id] = { label: label, icon: icon, @@ -249,7 +248,6 @@ export class M5Character extends Actor { quantity: item.system.quantity || 0, rollExist: rollable, }; - }); } @@ -262,8 +260,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, @@ -306,21 +304,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; - }; + 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, + value: item.system.value || 0, calc: item.system.calc, }; }); @@ -335,14 +333,14 @@ 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; - }; + 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, @@ -364,14 +362,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; - }; + 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, @@ -521,6 +519,19 @@ export class M5Character extends Actor { return (this as any).getEmbeddedDocument("Item", itemId); } + private calculateValue(value: number, currency: string): number { + switch (currency) { + case "gold": + return value; + case "silver": + return value / 10; + case "copper": + return value / 100; + default: + return 0; + } + } + private modResult(value: number): M5ModResult { return { value: value, -- 2.40.1 From f3f13fa2f948c396a21aff11c3f19052bd62abc9 Mon Sep 17 00:00:00 2001 From: Simon Gustavs Date: Mon, 15 Jan 2024 15:35:02 +0100 Subject: [PATCH 2/2] Floating rounding error Changes: + add precision --- source/module/actors/M5Character.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/module/actors/M5Character.ts b/source/module/actors/M5Character.ts index 218864e..c2b4958 100644 --- a/source/module/actors/M5Character.ts +++ b/source/module/actors/M5Character.ts @@ -147,7 +147,7 @@ export class M5Character extends Actor { 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.wealth = parseFloat((data.info.gold + data.info.silver / 10 + data.info.copper / 100).toPrecision(3)); ret.stats.hoard = 0; if (!skip?.mods) { @@ -523,9 +523,9 @@ export class M5Character extends Actor { case "gold": return value; case "silver": - return value / 10; + return parseFloat((value / 10).toPrecision(3)); case "copper": - return value / 100; + return parseFloat((value / 100).toPrecision(3)); default: return 0; } -- 2.40.1