Steps to Reproduce

From my UDN response:

That looks like a bug, but is actually a design decision that was made back in 2016. The changelist description:

GameplayEffects - still invoke the OnStackChange delegates even if stack count doesn't change (e.g, we are at max stack count and refresh). However, don't call UpdateAttributeAggregators in this case since this can cause wrong values to be calculated if there are attribute mods that are dependent on its owning attribute (E.g, +MaxHealth magnitude = 10% MaxHealth).

So I've tried to reproduce this, and there's certainly a bug here right now. But the correct behavior isn't obvious to me. Steps below assume you're on UE5.4 (right now the only way to get there is to use ue-main as your branch).

  1. Load Lyra
  2. Create a GE_TestStack
  3. Add a Modifier to GE_TestStack. Have it modify LyraHealthSet.MaxHealth. Make it Attribute Based, and also as LyraHealthSet.MaxHealth as its Backing Attribute.
  4. Play L_Expanse in Client NetMode.
  5. Use console command: "AbilitySystem.Effect.Apply -Server GE_TestStack" a few times.


Right now, the Client and Server go out of sync (can verify with the Gameplay Debugger using shift-').

However, if I remove the StackCount Changed check, the variables will remain in sync, but the MaxHealth will grow indefinitely.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-209218 in the post.

Login to Vote

ComponentUE - Gameplay - Gameplay Ability System
Affects Versions5.4
Target Fix5.5
CreatedMar 7, 2024
UpdatedMar 11, 2024
View Jira Issue