diff --git a/module/data/activeEffect/baseEffect.mjs b/module/data/activeEffect/baseEffect.mjs index d67607e1..5127d437 100644 --- a/module/data/activeEffect/baseEffect.mjs +++ b/module/data/activeEffect/baseEffect.mjs @@ -12,6 +12,7 @@ * "Anything that uses another data model value as its value": +1 - Effects that increase traits have to be calculated first at Base priority. (EX: Raise evasion by half your agility) */ +import { getScrollTextData } from '../../helpers/utils.mjs'; import { changeTypes } from './_module.mjs'; export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel { @@ -130,4 +131,27 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel { } }; } + + async _preUpdate(changed, options, userId) { + const allowed = await super._preUpdate(changed, options, userId); + if (allowed === false) return false; + + const autoSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation); + if (autoSettings.resourceScrollTexts && this.parent.actor?.type === 'character') { + const newArmorTotal = (changed.system?.changes ?? []).reduce((acc, change) => { + if (change.type === 'armor') acc += change.value.current; + return acc; + }, 0); + + const armorData = getScrollTextData(this.parent.actor, { value: newArmorTotal }, 'armor'); + options.scrollingTextData = [armorData]; + } + } + + _onUpdate(changed, options, userId) { + super._onUpdate(changed, options, userId); + + if (this.parent.actor && options.scrollingTextData) + this.parent.actor.queueScrollText(options.scrollingTextData); + } } diff --git a/module/data/activeEffect/changeTypes/armor.mjs b/module/data/activeEffect/changeTypes/armor.mjs index cf18c0b8..06c60403 100644 --- a/module/data/activeEffect/changeTypes/armor.mjs +++ b/module/data/activeEffect/changeTypes/armor.mjs @@ -68,14 +68,12 @@ export default class ArmorChange extends foundry.abstract.DataModel { } } - static getInitialValue(locked) { + static getInitialValue() { return { - key: 'Armor', type: CONFIG.DH.GENERAL.activeEffectModes.armor.id, value: { current: 0, - max: 0, - locked + max: 0 }, phase: 'initial', priority: 20 @@ -87,7 +85,7 @@ export default class ArmorChange extends foundry.abstract.DataModel { name: game.i18n.localize('DAGGERHEART.EFFECTS.ChangeTypes.armor.newArmorEffect'), img: 'icons/equipment/chest/breastplate-helmet-metal.webp', system: { - changes: [ArmorChange.getInitialValue(true)] + changes: [ArmorChange.getInitialValue()] } }; } diff --git a/module/data/item/base.mjs b/module/data/item/base.mjs index 5a16927a..25986afe 100644 --- a/module/data/item/base.mjs +++ b/module/data/item/base.mjs @@ -220,14 +220,6 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel { addLinkedItemsDiff(changed.system?.features, this.features, options); - const autoSettings = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation); - const armorChanged = - changed.system?.marks?.value !== undefined && changed.system.marks.value !== this.marks.value; - if (armorChanged && autoSettings.resourceScrollTexts && this.parent.parent?.type === 'character') { - const armorData = getScrollTextData(this.parent.parent, changed.system.marks, 'armor'); - options.scrollingTextData = [armorData]; - } - if (changed.system?.actions) { const triggersToRemove = Object.keys(changed.system.actions).reduce((acc, key) => { const action = changed.system.actions[key]; diff --git a/templates/sheets/items/armor/header.hbs b/templates/sheets/items/armor/header.hbs index d4306131..6d3bc0fb 100644 --- a/templates/sheets/items/armor/header.hbs +++ b/templates/sheets/items/armor/header.hbs @@ -9,7 +9,7 @@