From a2de64be91adbeec77887414b5f4c18cfe434edc Mon Sep 17 00:00:00 2001 From: LeFrique Date: Wed, 21 Feb 2024 18:32:01 +0100 Subject: [PATCH] Complete Lasten & Gewichte MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + Fixed Belastung Effekt preventing opening new Actorsheets + Added Höchstlast Effekt (minor bug: Actorname? & doubled messages) + Fixed parsing problem on encumbrance --- source/module/actors/M5Character.ts | 57 +++++++++++++++++------------ 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/source/module/actors/M5Character.ts b/source/module/actors/M5Character.ts index a6335e3..f88da16 100644 --- a/source/module/actors/M5Character.ts +++ b/source/module/actors/M5Character.ts @@ -1,5 +1,5 @@ import { M5Item } from "../items/M5Item"; -import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ItemType, M5ModOperation, M5ModResult, M5ModType, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned } from "../M5Base"; +import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ItemType, M5ModOperation, M5ModResult, M5ModType, M5RollData, M5Skill, M5SkillCalculated } from "../M5Base"; import M5ModAggregate from "./M5ModAggregate"; export class M5Character extends Actor { // constructor( @@ -204,24 +204,7 @@ export class M5Character extends Actor { ret.stats.heavyLoad = M5Character.heavyLoadValue(data.attributes.st); ret.stats.loadMax = M5Character.maxLoadValue(data.attributes.st); ret.stats.thrustLoad = M5Character.thrustLoadValue(data.attributes.st); - ret.stats.encumbrance = parseFloat((0).toPrecision(3)); - - // let loadMessage = false; - - // if (data.info.encumbrance > data.info.loadMax && !loadMessage) { - // let messageContent = `Höchstlast von ${data.info.name} überschritten: [[1d1]] AP Schaden durch Belastung alle 10 Minuten abziehen!`; - // let chatData = { - // speaker: ChatMessage.getSpeaker({actor: Actor.name}), - // content: messageContent, - // }; - // ChatMessage.create(chatData, {}); - // loadMessage = true; - // // ui.notifications.warn(messageContent); - // } - - // if (data.info.encumbrance < data.info.loadMax && loadMessage) { - // loadMessage = false; - // } + ret.stats.encumbrance = parseFloat((0).toPrecision(4)); if (!skip?.mods) { const aggregate = new M5ModAggregate(data, ret); @@ -295,12 +278,12 @@ export class M5Character extends Actor { } if (!!item.system.containerId) { - ret.gear.containers[item.system.containerId].weight += parseFloat((item.system.weight * item.system.quantity).toPrecision(3)); + ret.gear.containers[item.system.containerId].weight += parseFloat((item.system.weight * item.system.quantity).toPrecision(4)); if (ret.gear.containers[item.system.containerId].equipped) { - ret.stats.encumbrance += parseFloat((item.system.weight * item.system.quantity).toPrecision(3)); + ret.stats.encumbrance += (item.system.weight * item.system.quantity); } } else if (item.system.equipped) { - ret.stats.encumbrance += parseFloat((item.system.weight * item.system.quantity).toPrecision(3)); + ret.stats.encumbrance += (item.system.weight * item.system.quantity); } let icon = item.img; @@ -475,7 +458,7 @@ export class M5Character extends Actor { item[1]?.delete(); } } else if (ret.stats.encumbrance <= ret.stats.heavyLoad) { - if (!!item) { + if (item.length === 1) { item[0].update({ data: { equipped: false, @@ -484,6 +467,34 @@ export class M5Character extends Actor { } } } + + if (!skip?.encumbrance) { + const item = context.items.filter((x) => x.name === "Höchstlast"); + if (ret.stats.encumbrance > ret.stats.loadMax) { + if (item.length === 0) { + let messageContent = `Höchstlast von ${M5Character.name} überschritten: 1 AP Schaden durch Belastung alle 10 Minuten abziehen!`; + let chatData = { + speaker: ChatMessage.getSpeaker({actor: M5Character.name}), + content: messageContent, + }; + ChatMessage.create(chatData, {}); + ui.notifications.warn(messageContent); + this.createEffect("Höchstlast", [{ id: "ap", operation: M5ModOperation.SUBTRACT, type: M5ModType.STAT, value: 1 }]); + } else if (item.length === 2) { + item[1]?.delete(); + } else if (item.length === 1) { + item[0].update({ + data: { + equipped: true, + }, + }); + } + } else if (ret.stats.encumbrance < ret.stats.loadMax) { + if (item.length === 1) { + item[0]?.delete(); + } + } + } } if (!skip?.effects) {