Как сделать ежедневный вызов в игре со случайно сгенерированными уровнями?

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

Сначала я подумал о том, чтобы позволить клиентам выбирать семена на основе их даты, но даты могут быть подделаны локально.

У меня есть доступ к бесплатной учетной записи parse.com, поэтому я могу выполнять код в облаке и ожидать результатов обратно. Итак, я подумал о том, чтобы запросить облачный код для хеширования на основе текущей даты, но это можно было бы подделать, чтобы играть на другом уровне, отправляя серверу счет за уровень TH вместо дневного.

Затем я подумал о том, чтобы зашифровать дату на сервере и расшифровать ее на клиенте, но тогда это может быть проблематично, если я использую симметричное шифрование. Итак... может быть, использовать асимметричное шифрование?

Я пропускаю более простое решение здесь? Такое чувство, что я слишком усложняю себя, но я не уверен. Есть ли общепринятое решение для такого рода проблем? Я давно ничего не нашел после поиска в Google.

PS: я использую unity3d, на случай, если это актуально.

2 ответа

Вместо того, чтобы основывать ежедневный вызов по дате:

  • Используйте базу данных mysql для отправки клиенту информации, которая содержит запрос
  • Обработать вызов на стороне клиента
  • Рассчитать дату и время на стороне сервера
  • Отправлять данные с клиента на сервер (содержащие оценку и вызов)
  • Проверьте, что вызов все еще на использовании даты и времени на стороне сервера
  • Отправить счет, если задача все еще выполняется

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

Вместо того, чтобы защищать данные различными методами шифрования, может быть проще просто проверить запросы, отправленные после того, как игроки закончили испытания.

  • Игрок отправляет запрос, чтобы начать новый вызов
  • сервер проверяет, выполнил ли этот игрок вызов сегодня, продолжите, если это правильный запрос
  • связанные с вызовом данные генерируются случайным образом на сервере
  • вышеупомянутые данные сохраняются на сервере
  • отправить сгенерированные данные клиенту
  • по истечении определенного периода времени игрок отправляет запрос на сервер, утверждая, что он или она выполнили вызов
  • выполнить проверку полученных данных, например сравнить идентификатор запроса с ранее сохраненным или проверить, доступен ли еще запрос и т. д.
  • обновите учетную запись игрока, если запрос действителен, игнорируйте его в противном случае

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

Другие вопросы по тегам