Switch has authority to call for remote machines and not for the proprietary client

I’m trying to make an event inside the character be called on the server by the proprietary client but I don’t want the event to be seen by me, only by the other players.(Set World Rotation)
Help?


Thank you for your attention, if you have an answer please comment here. I had used https://www.deepl.com/ to translate my text

But going back to the question, does anyone know how I call the client event to the server seen by everyone but not by me (proprietary client)?

You can use PlayerState.PlayerID to pass it on server RPC then from server multicast it to clients passing the same PlayerID. Inside the multicast event, check the PlayerID and don’t perform if the PlayerID is the same with the receiver’s PlayerState.PlayerID.

UPDATE: Here’s an example:

Here’s what I would do:

  1. Remove the SwitchHasAuthority node you have in the image.
  2. Remove the MulticastTick event
  3. Check Replicates on your Actor
  4. Uncheck ReplicateMovement on your ArrowComponent
  5. Just call the Server event passing the Rotation params and it will happen to everyone

Now if you don’t want that to happen on the proprietary client, just do what I said above about using PlayerState.PlayerID.

Here’s what I did on mine:

  1. Add GetState (PlayerState) function in my PlayerController

266936-e1-getstate-function.png

  1. Add GetPlayerID function in my PlayerController

  1. Add IsCurrentPlayer function in my PlayerController

  1. I used all of the above in my other Actor to only play sound on the proprietary client and not on other clients and server. You can do the same but use the False to make it happen to every server and clients but NOT on the proprietary client. NOTE: I forgot to set the event to Run on Server event but it should have been to replicate it to everyone and then filter out which client should run it and which should not.

Addendum:

To use that on your events, just add the PlayerController input on your TickOnServer event and add the IsCurrentPlayer checks so you can make it run on every clients but not on the proprietary client (the one that passed his PlayerController).

Now that you know how to do it the hard way, here’s the magic way of doing it:

  1. Pass the Client’s PlayerController that called the event via ServerRPC. Inside the event, drag the connector from the passed PlayerController input and then use the IsLocalController or IsLocalPlayerController node. True means that the current player evaluating the event is the same as the one who called it via Server RPC call.

Disable the ReplicateMovement property on the object so that the server wont override the proprietary client’s movement or rotation.

Yes, but the problem is that when I call the event remotely, it can also be seen in the proprietary client, because the object has its motion replicated, even restricting the event to be called in the specific id player, it is as if the other machines were calling the motion update event back to the proprietary client.

(that’s the engine that does it)

nothing has changed :frowning:

If I disable movement replication, nothing happens, the event is not called, not even to the client.

I have updated my answer above. Please see if it works on you.

Thanks!, worked.