Что делать при несовпадении координат на клиенте и сервере?
Всегда доводим интерполяционно торможение персонажа на клиенте, используя координаты сервера.
1. Вправо отпустили
2. На сервер отправили и получили координаты остановки
3. Клиента медленно, в течение 10-15мс (если он двигается в этот момент) и 250-300мс (если замер на месте и не поворачивается) ставим на эту позицию.
Если Вы держите полностью игровой мир на сервере, значит сервер всегда главный.UPD: Добавлю, что можно также позже проверить на сервере через расчёт координат с клиента и сделать реверс-тесты по контрольным точкам событий на сервере, чтобы дать заключение о корректности события, рассчитанного клиентом.
Например, чтобы попадание было распознано как засчитанное с именно этих координат и именно из этого оружия, нужно проверить в обратную сторону (по временной линии событий) точку выстрела и возможность выстрела, путь перемещения и время между предыдущей проверкой и текущей. 
Т.е., восстановить на основе ряда факторов предыдущее состояние игрока, которое не было отправлено (или не успело ещё доставиться) на сервер между пакетами из-за длительности пинга.
Координаты использовать "диапазонные" с поправкой на пинг.
К примеру, выясняем задержку между клиентом и сервером в 100 мс, знаем, что за это время игрок может переместиться, максимум на 5, поэтому на сервере имеем ввиду, что клиент может в этот момент быть от текущей присланной координаты в сфере на +-5. В некоторых случаях вообще лучше задавать общение сразу клиент<=>клиент, но тут Вам решать.