Issue with Multicast Event Not Triggering for All Clients in Listen Server Multiplayer Shooter Game

I’m developing a multiplayer shooter game using the Advanced Locomotion System in UE5. When I execute the Shoot event, the Shoot(Fire)_Server event runs on the server, which then triggers the Shoot(Fire)_MultiCast event.

However, I am encountering an issue: when the server (Client0) executes the Shoot event, the Shoot_Server function runs, and subsequently, the Shoot_MultiCast event is executed for all clients, including the server. On the other hand, when a client executes the Shoot event, the Shoot_Server function runs, but the Shoot_MultiCast event only executes on that specific client and does not trigger for any other clients or the server (Client0).

What could be causing this behavior? I would appreciate detailed insights into why this is happening and how I can resolve this issue.

Hi @Ko_Peng ! Welcome to the Unreal dev community!

Did you implement your Shoot_Multicast function in the Player Controller? If so that may be the issue.
Player controllers are only replicated to the client who owns the player controller. That means that if you call a multicast RPC in the player controller it will only reach the owning client, which matches the behavior you’re experiencing. If that’s the case try moving the shoot RPCs to the character instead, which is replicated to every client.

Firing logic should be in the actor that’s doing the shooting… e.g. weapon class. The Controller/Character classes would have the input, but it calls an event on the weapon to fire.

The weapon actor should be a replicated actor that’s spawned on the server and attached to the character.


In a client-fakey model the shooting player fires local shots and RPC’s the server to fire authoritative shots. Shooter handles all of its simulations fx. Muzzle flash, recoil, audio, local hit fx etc.

Server multicasts its shot data to simulated proxies so they can handle the simulation on everyone else’s screen. Animation, Muzzle flash, recoil, audio etc.

Server multicasts hit data to sims (and owner if warranted) so other clients can get hit decals/fx at the authoritative location.


In a pure server model the client inputs fire which rpc’s the server. The server fires its authoritative shot, then Multicasts to Sims and Owning Client to fire a local only, non-damaging shot. This simply handles the FX and Animation side…the audio and visuals. On hit the server multicasts the needed hit data for decals and fx so sims/owner can simulate the hit.

Downside to pure server model is responsiveness. High pings see a drastic delay in input and result.

I implemented Shoot_MultiCast function(event) in my (player) character blueprint class.
Thank you for replying!

I made Shoot_MultiCast function(event) in my player character blueprint class to execute Fire function in weapon class. So actullay, firing logic is in weapon class already!
Thank you for replying!

A MultiCast will never run unless the Authority/Server executes it
You can test whether Authority/Server or Remote/Client is executing it by using the node
“Switch authority” this will give you two output pins and Server/Listen client will execute Authority and all other clients will execute Remote

If your the owner of the actor you can do “Run on server” which executes from the owning client to the Server

As server you can execute “Run on owning client” or “Multicast”

If you’ve Never seen the Multiplayer Compendium it’s 10,000% the best thing you can find out there to help all the advice and tutorials make sense

On to the actual question at hand:
Make sure your weapon component is replicated if anything is happening in there that isn’t called from the character

It sounds like your using an RPC and for whatever reason it’s not passing it threw to the server to run the rest of it

A look at the how in the form of a screenshot would help us give you more specific answers

All of the following is in a Character Bp ( which each client is the Owner of )
Example of testing weather the server or the client is executing the code


The Host/Server will execute the Authority Branch because they are the server
The Clients ( player 2 if you will ) will execute Remote

Now Consider this example


Only the Server will run the multicast event
so if Player 1(Server) hits F “hello world” prints for all
if Player 2(Remote) hits F “Hello world” only prints for them

Now if we change it up a bit and use a Run on Server RPC


All Players print “Hello World” no matter who presses F

Now when we set it up this way using the Run On Owning Client


Whichever Player Presses F will get the message “I own dis”

These are some fairly simple examples here, but a little playing around with these RPCs will help you understand who can do what

Server can run “Multicast” “Run on Owning Client” and “Run on Server”
Clients can run “Run on Server” ( If they own the actor in question )

This page of the Network Compendium will help with understanding who owns what/ can access what

It all get’s a touch more complicated from there when you throw in replicate/RepNotify
And then on top of that NetRelevancy

Bonus

Thank you for your reply!

I’m not sure how I fixed it, but it works now! Strangely, it seems to work when the “replication” option in the weapon class is turned off. I don’t understand why it works like this.

Additionally, I found another issue. Player characters only replicate other actors when those actors are in their view. For example, Player 1 reloaded their weapon out of Player 2’s sight, so Player 2 didn’t see that Player 1 reloaded. However, when Player 1 moves back into Player 2’s view, Player 2 starts to replicate that Player 1 reloaded.

I’m not sure why this happens. Could you help me with it?

Additionally, I apologize for my terrible English.

It’s net Relevancy, when your too far away things don’t always need to replicate
i haven’t quite messed with that part yet myself, but this video kinda explains it

All Actors, including characters, have a Net Cull Distance (NCD). It helps to determine if the replicated actor is relevant. It helps to visualize it as a sphere around the actor. By default its 150m (225000000.0 cm^2).

Large maps need a higher NCD. If I want to be able to snipe out to 1Km I need a NCD of 10000000000.0 cm^2.