Хотя я сделал первый комментарий, ставя под сомнение точку зрения ухудшения восприятия части вашей аудитории без видимой выгоды, я все же нахожу это интересным вопросом с технической точки зрения.
У меня просто возникла идея: обманщики находят изменяющие ценности и замораживают их. Поиск будет происходить только между смертями или событиями, которые изменили здоровье игрока. Более того, мошенник мог уточнить поиск, отфильтровывая то, что изменилось, когда он «не умирал».
Что если счетчик «здоровья» постоянно меняется? Сделайте его указателем и перераспределите его каждый кадр или каждый N кадров, если производительность слишком велика. Или XOR это со случайным значением, которое изменяет каждый кадр (снова XOR против того же значения для дешифрования перед шифрованием с новым случайным значением).
Если у вас есть другие внутриигровые данные, которые также меняются все время (включая x и y позиции персонажа игрока или счетчик времени), это может затруднить определение того, какие из изменяющихся данных являются состоянием здоровья. А замораживание всего игрового состояния - мошенник.
Чтобы еще больше ввести в заблуждение, вы можете хранить состояние в простой переменной, доступной только для записи, в качестве медового банка.
Редактировать :
Тем не менее, мошенник может попытаться найти, какая из переменных, которая меняется все время, является той, которая замораживается методом проб и ошибок. Возможное решение было бы соединить переменные вместе.
Пример:
Вместо сохранения здоровья (h) и позиции (x) вы сохраняете их в двух переменных a и b, из которых вы можете получить значения позже:
a = x+h; b = x-h
x = (a+b)/2; h = (a-b)/2
Таким образом, если мошенник замораживает только одного из них, а затем перемещает персонажа, позиция изменяется и, в зависимости от того, какой из них был заморожен, h становится отрицательным (мгновенная смерть). Вы можете переключаться между приведенными выше формулами и:
a = x-h; b = x+h
x = (a+b)/2; h = (b-a)/2
В последовательных кадрах, и вы гарантируете, что не более чем через 2 кадра после того, как одна из переменных была заморожена, здоровье станет равным 0 в момент изменения x. Помните, что вы храните только a и b. Объедините это с непрерывным XOR, как упомянуто выше. В результате получается набор переменных, которые меняют каждый кадр на кажущиеся случайными значения, а замораживание любого отдельного или его подмножества приводит только к нежелательным побочным эффектам в игре, одним из которых является мгновенная смерть.
Почему вы не позволяете игрокам обманывать себя (что равно обману в одиночной игре)? В многопользовательской среде задачей сервера является обнаружение неестественных изменений и противодействие им (как правило, либо игнорируя ввод, либо полностью блокируя преступника с сервера), но в среде с одним игроком ничего не происходит, кроме мошенника, который делает сам вред.
Итак, если вы не создаете многопользовательскую игру, это пустая трата денег, а если вы думаете, то ужесточаете не то место.
источник
Исследуйте известные инструменты мошенничества - и часто проверяйте, работает ли какой-либо из наиболее распространенных инструментов (проверьте имена процессов?)
Если таковые обнаружены, пусть игрок обманывает (если он не в сети, это безвредно), но убедитесь, что никакие результаты / достижения не будут опубликованы ни в одной онлайн-таблице лидеров / системе достижений - просто заставить его молча провалиться?
Не остановит более решительных хакеров, но уменьшит вероятность того, что более простые читы испортят ваши таблицы лидеров.
(Возможно, раздражают кодеров, которые открыли и свернули инструменты разработчика для законных целей и делают перерыв в игре, хотя ...)
источник
Я думаю, что самое простое решение для этого - реализовать чит-опцию. Отключить подсчет очков в режиме читов.
Еще одна хорошая идея, что я понятия не имею, как бы вы реализовали. Это отключить игру, когда есть замороженная переменная памяти или что-то в этом роде :)
Удачи)
источник