Quick answer: Schedule timer from a Multicast event or in OnRep_StartTimer RepNotify callback. Each peer schedules its own timer.

Buff timer set on server. Visual effect ticks server-side. Clients see no countdown. Timer state isn’t replicated; clients didn’t schedule.

The Fix

// Server: trigger Multicast
Server-only event StartBuff:
  → Multicast_StartBuff(Duration)

// Multicast (runs on all peers)
Multicast_StartBuff(Duration):
  Set Timer by Event(OnBuffTick, 1.0, looping=true)
  Store handle to clear later

// Or RepNotify approach
[Replicated, RepNotifyFunc="OnRep_BuffActive"]
bool bBuffActive;

OnRep_BuffActive():
  if (bBuffActive) Set Timer by Event(...)
  else Clear Timer by Handle(...)

Multicast is convenient. RepNotify handles late join because the bool replicates on connect, triggering OnRep on the new client.

Verifying

Two clients. Server starts buff. Both clients see ticking. Late-joiner with RepNotify: timer starts on connect.

“Schedule everywhere. State or event. Timer ticks all peers.”

Related Issues

For replication condition, see replication scope. For Set Timer handle, see timer handle.

Multicast or RepNotify. Timer per peer.