That is great advice!
I’ll add a bit onto that:
- Usually I say the golden rule is “Do not trust the client, ever.” in UE4, this rule isn’t entirely true as the network layer is pretty solid and it does have linear prediction - this is not the true name, I can’t remember the bloody word I’m sorry - and lastly, you are likely to run servers locally (as opposed to dedicated) and so, bandwidth and performance are very important concepts. Instead of saying “the client is merely a rendering tool”, we will trust it, up to a certain extent. Fortunately, UE4 allows you to specify which items should be passed in a Reliable (full, syncronized, always), this being the case, you can run checks locally, but again, run it on the server as well. If you use the Unreliable keyword, you are automatically saying that you cannot trust that information (that is, the only version of that variable that is guaranteed to be accurate, is on the server), and so, checks on that variable should only be done on the authoritative side - server. My advice: you shouldn’t ‘tag’ everything as reliable, I mean, you will have to sacrifice something at some point, so, if its accessory and doesn’t have a direct impact on gameplay, make it unreliable, eventually it will be syncronized.
Hope it helps!