Как сделать ежедневный вызов в игре со случайно сгенерированными уровнями?
В настоящее время я делаю игру со случайными уровнями, но я заинтересован в том, чтобы все играли на одном уровне в разделе ежедневных испытаний, например, Spelunky.
Сначала я подумал о том, чтобы позволить клиентам выбирать семена на основе их даты, но даты могут быть подделаны локально.
У меня есть доступ к бесплатной учетной записи parse.com, поэтому я могу выполнять код в облаке и ожидать результатов обратно. Итак, я подумал о том, чтобы запросить облачный код для хеширования на основе текущей даты, но это можно было бы подделать, чтобы играть на другом уровне, отправляя серверу счет за уровень TH вместо дневного.
Затем я подумал о том, чтобы зашифровать дату на сервере и расшифровать ее на клиенте, но тогда это может быть проблематично, если я использую симметричное шифрование. Итак... может быть, использовать асимметричное шифрование?
Я пропускаю более простое решение здесь? Такое чувство, что я слишком усложняю себя, но я не уверен. Есть ли общепринятое решение для такого рода проблем? Я давно ничего не нашел после поиска в Google.
PS: я использую unity3d, на случай, если это актуально.
2 ответа
Вместо того, чтобы основывать ежедневный вызов по дате:
- Используйте базу данных mysql для отправки клиенту информации, которая содержит запрос
- Обработать вызов на стороне клиента
- Рассчитать дату и время на стороне сервера
- Отправлять данные с клиента на сервер (содержащие оценку и вызов)
- Проверьте, что вызов все еще на использовании даты и времени на стороне сервера
- Отправить счет, если задача все еще выполняется
Одна из возможных проблем, связанных с использованием этого метода, заключается в том, что может быть высокая пропускная способность из-за загрузки дополнительных данных.
Вместо того, чтобы защищать данные различными методами шифрования, может быть проще просто проверить запросы, отправленные после того, как игроки закончили испытания.
- Игрок отправляет запрос, чтобы начать новый вызов
- сервер проверяет, выполнил ли этот игрок вызов сегодня, продолжите, если это правильный запрос
- связанные с вызовом данные генерируются случайным образом на сервере
- вышеупомянутые данные сохраняются на сервере
- отправить сгенерированные данные клиенту
- по истечении определенного периода времени игрок отправляет запрос на сервер, утверждая, что он или она выполнили вызов
- выполнить проверку полученных данных, например сравнить идентификатор запроса с ранее сохраненным или проверить, доступен ли еще запрос и т. д.
- обновите учетную запись игрока, если запрос действителен, игнорируйте его в противном случае
Предполагая, что данные, обрабатываемые на стороне клиента, всегда могут быть взломаны, всегда лучше проверять содержимое на стороне сервера и упрощать процесс шифрования / дешифрования данных на стороне клиента для повышения производительности игры.