Войти
ПрограммированиеФорумИгровая логика и ИИ

Добыча предметов с синхронизацией на сервере при локальной игре, есть идеи как?

#0
11:11, 15 фев. 2017

Приветствую,  думаю над тем как можно организовать добычу предметов с синхронизацией на сервере при локальной игре. Т.е. игрок играет локально, бьется с ботами итд, но лут который он находит на карте каким то образом подтверждается с централизованного сервера.
Думал над следующими вариантами:
1. При открытии контейнера делается запрос на сервер, в ответе получается список лута. Но так можно легко просниферить запросы и запросить кучу вещей.
2. Выгружать при старте уровня весь лут в контейнерах с сервера на клиент и при его получении отправлять запросы о том что игрок поднял такой то предмет. Тут так же можно написать простенького бота который будет запрашивать список и отсылать запросы на получение всех предметов из списка

Подскажите, может я изобретаю велосипед и какая то система с должным уровнем защищенности от читеров уже придумана, либо у кого то есть идеи как ее реализовать?


#1
11:26, 15 фев. 2017

Dragon rideR
Привет. Ты хочешь сделать синхронизацию с сервером при локальной игре.
В чем тогда смысл локальной игры, если в нее нельзя играть без подключения к интернету?
Если же ты хочешь обезопасить сетевую игру от читеров, то сделай два вида персонажей: для локальной игры и для сетевой игры.
И пусть читеры делают, что хотят со своими оффлайн персонажами, но при этом персонажи для сетевой игры всегда будут "проверены" сервером.
Такое было в диабло 2 при игре через баттл.нет.

#2
11:27, 15 фев. 2017

А в чем принципиальное отличие бота от клиента? Как отличить, то ли бот быстро-быстро убивает врагов и чистит сундуки (подменил таймер на клиенте), то ли сразу запрашивает лут. Так что "чистое решение" - монстров и карту тоже с сервером синхронизировать.
Остальное всё костыли которые при желании взломщик обойдет. Ну, из идей для костылей - проверять скорость зачистки карт, чтоб ограничить преимущество ботов над честным игроком одним-двумя порядками. Реплеи записывать и потом в сомнительных случаях проверять. Делать иногда недосягаемые сундуки и банить если все-таки умудрился их собрать (правда сработает только один раз, потом будут проверять на достижимость).

#3
11:39, 15 фев. 2017

mutcher
Смысл в том чтобы не грузить сервер расчетами, что то вроде несинхронного геймплея.
kipar
Согласен что отличия практически нет. Разница в том что например на клиенте можно заложить какой нить ключ дешифрования входящих и исходящих пакетов. Хорошенько его обфуцировать и при каждом патче менять, это конечно не решит проблему но может усложнить жизнь.
Собственно для поиска како гонить интересного решения данной проблемы я и создал это обсуждение )

#4
11:40, 15 фев. 2017

Задача не имеет решения.
К примеру ты написал какой-то сервер, клиент и способ получения предметов. Хакер снифает пакеты, вычисляет способ получения предметов, вычисляет сигнатуру пакета, который должен быть отправлен клиентом к серверу для получения лута. Вычисляет какой должен быть ответ на этот пакет. Пишет свой сервер, который в ответ на запрос о получении лута выдает всё что нужно хакеру.

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

Чтобы такого не происходило, надо каждый чих игрока контролировать на сервере.

#5
11:41, 15 фев. 2017

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

#6
7:08, 16 фев. 2017

В развитие варианта MANAB: для каждого предмета хранить уникальный ключ, совмещающий в себе условия, при которых предмет был сгенерирован: где дропул, класс и ИД моба, какой был ключ рандома, какой дамаг был нанесён мобу и сколько у героя было ХП, кто был предыдущим владельцем и многое другое. С одной стороны, это достаточно большой объём данных, а с другой - их же не каждые 5 секунд передавать.
При несовпадении отмечать предмет как читерский и освобождать игрока от его обладания и всей полученной от его владения прибыли, как это делали в одном из патчей третьего ведьмака. Желательно делать это не сразу, а через некоторое время, чтобы читерам было сложнее понять взаимосвязь.

#7
9:58, 16 фев. 2017

iCpu
спасибо, хороший вариант

ПрограммированиеФорумИгровая логика и ИИ

Тема в архиве.