Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Защита online html5 игры от читеров


Автор: DeLuxis 4.12.2012, 13:23
Тут для опыта делаю небольшую игрушку. 
Для игры в офисе.
И планирую сделать мультиплеер. 

Игрок может перемещаться и стрелять. Соответственно если попал в противника, то противник погибает. 

Собственно хотел бы почитать, кто как решал такие проблемы.

Сам рассматриваю такие способы (все через сокеты само собой):

1. При перемещении и стрельбе отправлять данные на сервер, после чего ждать ответ сервера и производить действие в зависимости от ответа.
Тут проблема. Отправлять запрос для каждой пули? Но сервер тогда нагнется. 

2. Просто отправлять нажатия клавиш, а сервер сам вышлет пакет перемещения и выстрелов, по которому уже рисуем действия. Тогда будет задержка в анимации, и заметные лаги. 

3. Парралельно на сервере проверять попадания и координаты. Если идет рассинхронизация, то синхранизировать всех клиентов согласно данным на сервере. 

4. Вести два лога - на сервере и клиенте. По завершении игры сверять. У кого нарушен лог, тот читер. Тут минус в том, что читерство проверяется только по окнчанию игры.

Может я не правильно высказался, или еще что-то не понятно. Задайте уточнающие вопросы. 
Мне важно обменяться опытом и узнать как правильнее решить эту задачу. Не обязательно на js. 

Автор: Aliance 5.12.2012, 14:28
Цитата(DeLuxis @  4.12.2012,  14:23 Найти цитируемый пост)
3. Парралельно на сервере проверять попадания и координаты. Если идет рассинхронизация, то синхранизировать всех клиентов согласно данным на сервере. 

Может будет полезно: http://habrahabr.ru/post/135306/

Автор: DeLuxis 6.12.2012, 07:48
Цитата(Aliance @ 5.12.2012,  14:28)
Цитата(DeLuxis @  4.12.2012,  14:23 Найти цитируемый пост)
3. Парралельно на сервере проверять попадания и координаты. Если идет рассинхронизация, то синхранизировать всех клиентов согласно данным на сервере. 

Может будет полезно: http://habrahabr.ru/post/135306/

Спасибо за ссылку.

Цитата

 Для того, чтобы определить, что игрок задел что-то выстрелом, клиент передает на сервер саму цель и намерение игрока выстрелить. Сервер считает разницу во времени, «возвращается в прошлое» на уже посчитанное время и проверяет – попал ли стрелок во что-нибудь. Если попал, то к цели «применяется» урон.


Собственно это наблюдаю когда играю в urban terror. Забавно видеть, как игрок падает спустя полсекунды после попадания. Так же если ты выстрелил, и точно попал в кого-то, но тебя во время выстреля убила, то твое попадание не засчитывается. 

До этого на хабре читал статью про бомбермена.
http://habrahabr.ru/post/143699/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)