Hello everyone currently I’m working on a multiplayer system in UE5 and running into an issue specifically with listen server behavior.
I have a function that should behave differently depending on where it is executed:
-
If called on server → run server logic (e.g. multicast / replication)
-
If called on client → run client-only logic (visuals, local effects)
This works fine in:
-
Dedicated server + clients
-
Standalone
On a listen server host, both of these are true:
HasAuthority() == true
IsLocallyControlled() == true
Because of that, I cannot distinguish whether the function was triggered as:
-
a server execution, or
-
a client/local execution
What I want
I want a single function that:
-
Runs only server logic if triggered from server
-
Runs only client logic if triggered from client
-
Does NOT run both on listen server host
-
Works consistently across:
-
dedicated server
-
listen server clients
-
clients
-
What I’ve tried
-
HasAuthority()→ always true on listen server -
IsLocallyControlled()→ also true on listen server -
GetNetMode()→ only tells environment, not execution origin -
Multicast / Client RPC combinations → still don’t solve execution origin ambiguity
Constraint
I’d prefer not to pass extra parameters (like a “bFromServer” flag) into the function if possible.
