Если брать CounterStrike, то там работает следующая логика
Каждый игрок имеет свой latency (сетевая задержка). На каждый момент времени сервер знает вектор движения, координаты, текущее действие игрока, среду, в которой он находится. По каждому из игроков рассчитывается предсказание результата, который был бы через половину времени задержки сигнала. Исходя из этого принимается решение, что игрок передвинется в нужную позицию, получит урон, умрет или еще что. Принятие решение не исполняется, пока не будет подтверждено, что игрок действительно остался в том месте, которое и было предсказано. Поэтому возникает ситуация, когда игрок с более низким latency умирает за углом от выстрела игрока с более высокими задержками.
Ситуация на сервере и в клиенте немного асинхронная, игрок может изменить свое местоположение в клиенте, но сервер узнает про это только через время.