Как предотвратить читерство времени в офлайн-игре на основе Cocos2dx?

Недавно я работаю над мобильной офлайн-игрой на основе Cocos2dx-lua.

Я нашел в Google Play приложение под названием GameGuardian, которое может устанавливать скорость времени. Приложение может изменить метод gettimeofday() в libc.so. Я пробовал много API, таких как os.time(), SystemClock.elapsedRealtime(), но все потерпели неудачу.

Может ли кто-нибудь дать мне способ избежать эффекта приложения?


person Eric Wang    schedule 06.12.2016    source источник


Ответы (1)


Единственный надежный способ — заставить ваше приложение связываться с сервером вашей игры, чтобы гарантировать время. Многие игры для Android делают это. Одним из примеров является «Боевые кошки».
Скажем, вы можете проверить действительность времени, как только запустится приложение, а если нет доступного подключения, вы можете разрешить создание ресурсов на определенное время. Например, не более 1 часа с момента последнего подтвержденного времени.

Другой идеей может быть проверка текущего fps. Аппаратное обеспечение не может ускориться, поэтому кадр будет отображаться примерно в то же время, когда включена VSync. Если вы обнаружите, что рендеринг одного кадра занимает значительно больше времени, чем должно быть, и если это происходит для многих кадров, это может указывать на возможность мошенничества. Но это не стабильное решение, так как вы должны быть уверены, что ваш fps обычно не падает на слабых устройствах, и это ничего не говорит вам о времени, проведенном, пока игра не запущена.

Крайний случай может включать полное стирание состояния приложения, если вы обнаружите, что время перескочило назад с момента последнего сохраненного неподтвержденного времени более чем на 1 час (в случае, если пользователь настраивает летнее время и т. д.).

Но, как правило, вы не можете защитить полностью офлайн-игру от манипуляций со временем.

person Vlad    schedule 06.12.2016
comment
Я согласна с твоим мнением. Проверка текущего fps — возможный, но не идеальный способ решить эту проблему. Спасибо. - person Eric Wang; 06.12.2016