diff --git a/module/applications/ui/effectsDisplay.mjs b/module/applications/ui/effectsDisplay.mjs
index 4df42479..500ec39d 100644
--- a/module/applications/ui/effectsDisplay.mjs
+++ b/module/applications/ui/effectsDisplay.mjs
@@ -95,7 +95,10 @@ export default class DhEffectsDisplay extends HandlebarsApplicationMixin(Applica
if (!effect.system.stacking?.enabled) return;
- const newValue = Math.min(effect.system.stacking.value + 1, effect.system.stacking.max);
+ const incrementedValue = effect.system.stacking.value + 1;
+ const newValue = effect.system.stacking.max
+ ? Math.min(incrementedValue, effect.system.stacking.max)
+ : incrementedValue;
await effect.update({ 'system.stacking.value': newValue });
this.render();
}
diff --git a/module/canvas/placeables/token.mjs b/module/canvas/placeables/token.mjs
index ad60b931..26c96683 100644
--- a/module/canvas/placeables/token.mjs
+++ b/module/canvas/placeables/token.mjs
@@ -52,7 +52,7 @@ export default class DhTokenPlaceable extends foundry.canvas.placeables.Token {
const icon = new PIXI.Sprite(tex);
icon.tint = tint ?? 0xffffff;
- if (effect?.system?.stacking?.enabled) {
+ if (effect?.system?.stacking?.enabled && effect.system.stacking.value > 1) {
const stackOverlay = new PIXI.Text(effect.system.stacking.value, {
fill: '#f3c267',
stroke: '#000000',
diff --git a/module/data/activeEffect/baseEffect.mjs b/module/data/activeEffect/baseEffect.mjs
index 3867fa23..c0ed1b36 100644
--- a/module/data/activeEffect/baseEffect.mjs
+++ b/module/data/activeEffect/baseEffect.mjs
@@ -75,8 +75,7 @@ export default class BaseEffect extends foundry.data.ActiveEffectTypeDataModel {
nullable: false,
label: 'DAGGERHEART.GENERAL.value'
}),
- max: new fields.NumberField({ label: 'DAGGERHEART.GENERAL.max' })
- // max: new fields.StringField({ required: true, nullable: false }),
+ max: new fields.NumberField({ integer: true, label: 'DAGGERHEART.GENERAL.max' })
})
};
}
diff --git a/module/data/fields/action/effectsField.mjs b/module/data/fields/action/effectsField.mjs
index 6afd470b..df0c0b09 100644
--- a/module/data/fields/action/effectsField.mjs
+++ b/module/data/fields/action/effectsField.mjs
@@ -106,22 +106,11 @@ export default class EffectsField extends fields.ArrayField {
}
/**
- * Apply an Effect to a target or enable it if already on it
+ * Apply an Effect to a target
* @param {object} effect Effect object containing ActiveEffect UUID
* @param {object} actor Actor Document
*/
static async applyEffect(effect, actor) {
- const existingEffect = actor.effects.find(e => e.origin === effect.uuid);
- if (existingEffect) {
- return effect.update(
- foundry.utils.mergeObject({
- ...effect.constructor.getInitialDuration(),
- disabled: false
- })
- );
- }
-
- // Otherwise, create a new effect on the target
const effectData = foundry.utils.mergeObject({
...(effect.toObject?.() ?? effect),
disabled: false,
diff --git a/module/documents/activeEffect.mjs b/module/documents/activeEffect.mjs
index 8c7f0668..2869ab98 100644
--- a/module/documents/activeEffect.mjs
+++ b/module/documents/activeEffect.mjs
@@ -106,6 +106,20 @@ export default class DhActiveEffect extends foundry.documents.ActiveEffect {
update.img = 'icons/magic/life/heart-cross-blue.webp';
}
+ const existingEffect = this.actor.effects.find(x => x.origin === data.origin);
+ const stacks = data.system?.stacking?.enabled;
+ if (existingEffect && !stacks) return false;
+
+ if (existingEffect && stacks) {
+ const incrementedValue = existingEffect.system.stacking.value + 1;
+ await existingEffect.update({
+ 'system.stacking.value': existingEffect.system.stacking.max
+ ? Math.min(incrementedValue, existingEffect.system.stacking.max)
+ : incrementedValue
+ });
+ return false;
+ }
+
const statuses = Object.keys(data.statuses ?? {});
const immuneStatuses =
statuses.filter(
diff --git a/templates/ui/effects-display.hbs b/templates/ui/effects-display.hbs
index 13daa4de..bdbd9fbe 100644
--- a/templates/ui/effects-display.hbs
+++ b/templates/ui/effects-display.hbs
@@ -8,7 +8,7 @@
- {{#if effect.system.stacking.enabled}}
+ {{#if (and effect.system.stacking.enabled (gt effect.system.stacking.value 1))}}
{{effect.system.stacking.value}}
{{/if}}
{{#if effect.condition}}{{/if}}
diff --git a/templates/ui/tooltip/effect-display.hbs b/templates/ui/tooltip/effect-display.hbs
index 52419193..3dc6d9c3 100644
--- a/templates/ui/tooltip/effect-display.hbs
+++ b/templates/ui/tooltip/effect-display.hbs
@@ -24,8 +24,8 @@
{{/if}}
-
- {{#if effect.system.stacking.enabled}}
+
+ {{#if (and effect.system.stacking.enabled effect.system.stacking.max)}}
{{localize "DAGGERHEART.UI.EffectsDisplay.increaseStacks"}}
-- {{localize "DAGGERHEART.UI.EffectsDisplay.decreaseStacks"}} -
+ {{#if (gt effect.system.stacking.value 1)}} ++ {{localize "DAGGERHEART.UI.EffectsDisplay.decreaseStacks"}} +
+ {{else}} ++ {{localize "DAGGERHEART.UI.EffectsDisplay.removeThing" thing=(localize "DAGGERHEART.GENERAL.Effect.single")}} +
+ {{/if}} {{else}}{{localize "DAGGERHEART.UI.EffectsDisplay.removeThing" thing=(localize "DAGGERHEART.GENERAL.Effect.single")}}