Протокол движений MMORPG на основе плитки - PullRequest
3 голосов
/ 03 марта 2010

Я работаю в MMORPG на основе тайлов и у меня проблема.

Каждый пользователь все время имеет фиксированную позицию (одну плитку), поэтому остальные пользователи могут видеть его там и не могут перейти к этой плитке. Таким образом, в каждой плитке есть только один объект или пользователь.

Если пользователь становится невидимым, остальные пользователи не видят его, но все равно не могут перейти к его плитке.

Мой вопрос: должен ли клиент знать позицию всех пользователей (даже невидимых)? Проблема этого подхода в том, что некоторым пользователям удалось взломать клиент и увидеть невидимых пользователей.

Одна идея, которая у меня возникла, заключается в том, что клиент не должен знать о положении пользователей, и перед перемещением спросите сервер, доступен ли тайл, в который он хочет перейти, но проблема в том, что у нас задержка. 1009 *

К вашему сведению, протокол клиент / сервер строится с использованием TCP / IP.

1 Ответ

4 голосов
/ 03 марта 2010

Вы должны обязательно следовать второму подходу, чтобы иметь безопасную MMORPG.

На самом деле логика должна быть полностью разделена между клиентом и сервером. Пока клиент должен быть просто

  • "визуальная вещь", способная визуализировать мир
  • интерфейс ввода, позволяющий игрокам выполнять действия

сервер должен позаботиться обо всем остальном ..

Так, например, вы должны обрабатывать движение следующим образом:

  • пользователь пытается переместить игрока в клиент
  • клиент отправляет пакет с «запросом на перемещение» на сервер
  • сервер проверяет, разрешено ли перемещение, и обновляет свою внутреннюю карту в соответствии с ним
  • если перемещение было законным, просто отправьте всем клиентам обновленное состояние (с новой позицией)
  • если перемещение было незаконным, просто предупредите клиента, который пытался это сделать

Более важным аспектом этого подхода является то, что: клиент не несет ответственности за фактическое перемещение игрока в новую позицию, он просто получает новое состояние карты .

Забудьте об этом:

  • клиент спрашивает, законно ли движение
  • если сервер говорит ДА, клиент обновляет позицию
...