Hi all,
I am a begginer on working with network and replication, and i have a question that i think is simple. I created a simple third person in which a player collides with a block and an INT variable is incremented. After 15 seconds the server prints both player scores on the screen. Problem is that only one of the players score is updated. I will add some screenshots of my blueprints.
This is what happens when a player overlaps a cube.
This is what is printed. Both players had a score of 3, but only one is printed correct. Ignore the 0, is work in progress UI, it does not have it’s functions yet.
(2) don’t use “GetPlayerPawn” to check whether the “OtherActor” is a player but rather add a tag e. g. “player” to each player pawn and then use “ActorHasTag” to check whether the “OtherActor” is a player
Cause your current logic will work fine on the server but fail for the clients. “GetPlayerPawn” with index 0 will return the server player pawn when called on the server and the client player pawn when called on a client. OnComponentBeginOverlap will be called on both server and client since it is happening on both of them. But you want to execute the “Col” event on the server. Now if the clients pawn overlaps the box, then the client will execute the “Col” event (therefore making it a RunOnServer event will solve the issue) but the server will not since the “OtherActor” which is the client pawn is not equal to “GetPlayerPawn” with index 0 which is the server pawn (since the server is currently executing this). If you would use a tag instead to check whether the “OtherActor” is a player pawn, then it will also return true on the server and the server will execute the “Col” event.
By the way, I would prefer the solution with the tag, since the server is already executing this and therefore there should be no need for an RPC.