Очень много непонимания у людей, как именно работает клиент и сервер игры. Попробую немного объяснить.
Все действия в игре происходят в 99% на сервере и только на нем, а клиент просто является графическим интерфейсом между сервером и игроком.
Пакеты от клиента почти всегда являются запросами на попытку каких либо действий, а пакеты от сервера почти всегда являются либо ответами на запросы клиента, разрешающие или запрещающие запрошенное клиентом действие, либо являются информирующими пакетами о каких либо изменениях в статусе игрока, в окружающем мире или прочей информации, немедленно отражающейся в клиенте как факт.
Вот, как пример, грубо приближенный 'диалог' сервера с клиентом:
('сервер клиенту:' - это посылается пакет клиенту от сервера)
('клиент серверу:' - это посылается пакет серверу от клиента)
сервер клиенту: в координатах x,z,y появился моб
сервер клиенту: это моб имеющий ID флема
(тут игрок увидел появившегося вдалеке флема и тычет на него мышой)
клиент серверу: я хочу его выделить (это последствие попытки игрока выделить моба)
сервер клиенту: да, моб достаточно близко и он выделябельный. вам разрешается его выделить.
(игрок видит, что цель выделилась и нажимает атаку)
клиент серверу: я хочу атаковать выделенного моба (реакция на попытку игрока атаковать)
сервер клиенту: атаковать запрещаю, так как ты далеко от моба, для этого типа атаки.
клиент серверу: ок, бегу к мобу
сервер клиенту: разрешаю.
(игрок видит что его чар побежал к мобу)
сервер клиенту: ты передвинулся. Теперь ты в координатах рядом с мобом.
(игрок видит, что он прибежал к мобу)
...
...
клиент серверу: я хочу атаковать выделенного моба
сервер клиенту: разрешаю, вы нанесли ему 100 урона.
(здесь и далее игрок видит присланные от сервера цифры урона)
клиент серверу: я опять атакую моба
сервер клиенту: разрешаю, вы нанесли ему еще 120 урона
сервер клиенту: а вот он вам ответил на 50 урона
сервер клиенту: у вас теперь здоровья меньше на 50
(здесь игрок видит как его здоровье уменьшилось)
клиент серверу: и опять я атакую моба
сервер клиенту: а вот фиг тебе, атаку запрещаю.
(здесь игрок увидел, что атака не прошла, урона не было)
сервер клиенту: так как моб умер.
(здесь игрок увидел, что моб упал и сдох)
сервер клиенту: ой, из него выпала шняга
(здесь повяляется дроп)
сервер клиенту: и еще одна шняга
(здесь повяляется еще дроп)
клиент серверу: я хочу поднять шнягу
сервер клиенту: разрешаю. Вы подняли шнягу.
(шняга упала к нам в инвентарь и изчезла с земли)
...
...
..
Дальше все в таком же духе.
Я привел пример очень грубо, без указания аргументов пакетов и какой либо конкретики вообще. (да и логику протокола немного покоробил)
Но, здесь видно главное что я хотел сказать - клиент не управляет сервером, он всего лишь 'запрашивает' разрешение на действия, а сервер уже решает что и сколько и как именно и что за это будет клиенту...
В догонку, возникает вопрос, а как тогда возможно читерить, если за всем следит только сервер, а клиент ничего не решает ?
Мой ответ простой: Сервера пишут не боги, а люди. Следовательно, сервера также часто ошибаются, главное, надо найти как можно обмануть сервер на его ошибках так, чтобы это было выгодно.