When AbilitySystem.Fix.ReplicateTagCountContainerWithIris is enabled, any delegates registered in GameplayTagCountContainer.GameplayTagEventMap on the client are silently cleared every time Iris replicates the GameplayTagCountContainer from the server. As a result, tag change events stop firing on the client after the first replication, even though the tag counts themselves are replicated correctly.
Environment
- Unreal Engine 5.7 - 5.8 with Iris Replication System enabled
- GameplayAbilities Plugin in use
- CVar net.Iris.Enable = 1
- CVar AbilitySystem.Fix.ReplicateTagCountContainerWithIris = true
Prerequisites
- A server-client session with an Actor owning a UAbilitySystemComponent being replicated via Iris
Steps to Reproduce
1. On the client, register a tag event delegate on the UAbilitySystemComponent’s GameplayTagCountContainer:
AbilitySystemComponent->RegisterGameplayTagEvent(FGameplayTag::RequestGameplayTag("MyTag"), EGameplayTagEventType::NewOrRemoved).AddUObject(this, &UMyClass::OnTagChanged);2. On the server, modify the tag state of that Actor (add or remove a tag).
3. Iris replicates the GameplayTagCountContainer to the client.
4. Inspect GameplayTagCountContainer.GameplayTagEventMap on the client.
Expected Result
- The delegate registered in GameplayTagEventMap is preserved and fires correctly on subsequent tag changes.
Actual Result
- GameplayTagEventMap is completely cleared (becomes empty).
- All previously registered delegates are lost, and tag change events no longer fire on the client.
Additional Notes
- When AbilitySystem.Fix.ReplicateTagCountContainerWithIris = false, tag presence (whether a tag is active or not) is
replicated, but the exact tag count is not.
TagContainerWithIris.zip(64.6 MB)
Hi,
Thank you for the detailed report and repro project! I’ve opened a new issue for this, UE-381939, which should be visible in the public tracker in a day or so.
Thanks,
Alex