Quick answer: The cooldown is a GameplayEffect — it must be applied on the server and the ASC replication mode must propagate it. Use Mixed mode and apply the cooldown GE server-side.
A GAS ability’s cooldown ticks correctly on the server but the client’s HUD cooldown ring never updates. The cooldown GameplayEffect isn’t reaching the client.
Cooldowns Are GameplayEffects
A GAS cooldown is a duration GameplayEffect granting a cooldown tag. The HUD reads the remaining duration of that GE. For the client to see it, the GE must replicate to the client’s ASC.
ASC Replication Mode
AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
- Full: all GEs replicate to everyone — heavy.
- Mixed: GEs replicate to the owning client; tags/cues to others. Best for player characters.
- Minimal: only tags/cues; the owning client won’t see GE details — this is the bug if your player ASC uses it.
For a player character whose own HUD needs cooldown timers, use Mixed.
Apply on Server
The cooldown GE must be applied by the server (the ability’s CommitAbility / ApplyCooldown runs server-authoritatively). If your ability is client-predicted, ensure the cooldown commit happens in the server path.
HUD Reads the GE
float Remaining, Duration;
ASC->GetCooldownRemainingForTag(CooldownTag, Remaining, Duration);
Bind the HUD to this. On a client with Mixed mode, the replicated GE makes these values correct.
Verifying
Cast the ability on a client. Its HUD cooldown ring fills and ticks down, matching the server. Other players don’t need the GE — only the tag.
“Cooldown is a replicated GameplayEffect. Mixed replication mode + server-side apply makes the client HUD work.”
If you must use Minimal mode for perf, replicate a custom cooldown-remaining float separately for the HUD — or accept server-only cooldown UI.