Hi there, welcome to the community.
Short answer, yes: Send Gameplay Event to Actor would do the job. You don’t need to multicast it to every client.
So when you execute the TryKnockBack_ABP ability, which should run on the server, and confirm that it is a valid knockback:
ValidKnockBack
→ Build Gameplay Event Data
Target = Victim
Event Magnitude = Strength
Additional Data = The data you need
→ Send Gameplay Event to Actor(Victim)
This runs on the server and triggers the victim’s ability, which then handles its internal logic such as LaunchCharacter(), root motion force, etc. Since that movement logic is server-authoritative, it will replicate through the normal movement system.
This is the proper way of doing it. Gameplay events don’t have to be replicated; you need to send the event on the server.
Another possible method is having the victim read the data from the attacker. For example:
AttackerAbility -> Hit Confirmed -> Apply Effect(Victim)
The attacker stores the knockback data, and the victim’s knockback ability reads it from the instigator through an interface such as GetLastValidKnockbackData() .
This can work for a most cases, but it has a more fragile lifecycle. When the victim’s ability activates, it is reading shared data stored on the attacker rather than data belonging directly to that specific hit. If multiple hits or victims are processed close together, the previous data can be overwritten or the wrong hit data may be read. So managing lifecycle on this method becomes more important.
Because of that, passing the parameters directly through the Gameplay Event payload is generally the safer approach. So you just need to Send Gameplay Event to Actor() on Server
Edit : If your ability is crafted and somehow you cannot make it ServerAuthorative but LocalPredicted then ability activation can stay local but you can make an RPC Remote Procedure Call as you mentioned to workaround the problem to send event of Send Gameplay Event to Actor on Server.
Basically when you are sending data →
CustomEventServer [Replicated, Server] (Data) → SendGameplayEvent
Normally LocalPredicted executes on both server and local so you should check if the data exist on server 1st then send event, cause it won’t work otherwise better option is to make ability Server Authorative.