@s2sk

Синхронизация автомобиля в игре?

Всем привет. Пишу мультиплеер (C++) и хотел посоветоваться как лучше сделать синхронизацию автомобилей между клиентами не считая физику на сервере.

Мне доступны функции на клиенте:

Создать автомобиль
Установить позицию
Узнать позицию

Так вот... Каждый из игроков может автомобиль толкать, тем самым меняя его местоположение. Конечно если двое игроков в зоне стриминга друг друга, то боты на противоположных клиентах будут точно так же толкать автомобиль и поэтому все нормально. А если один игрок выйдет из зоны стриминга? Тогда получается второй клиент будет толкать автомобиль, а сервер будет думать что автомобиль стоит на месте и второму игроку когда тот зайдет в зону стриминга заспавнит автомобиль именно в том месте, где он был изначально. Получается рассинхрон. И что делать? Брать позицию автомобиля у клиента который толкает автомобиль? А как я узнаю что именно он толкает автомобиль? Может вместе с тем клиентом еще в зоне стриминга игроков 10. У какого из этих 10 игроков получать из клиента новую позицию автомобиля? Еще нужно брать в условие что игрок может использовать чит и телепорнуть автомобиль непонятно куда. И если собирать у всех игроков в зоне стрима позицию автомобиля, а у одного она не совпадет? Если даже сделать проверку что у кого-то из одного позиция автомобиля не совпадает банить его, то что если все 10 игроков сговорятся и телепорнут автомобиль куда-то? И как сделать синхронизацию позиции? Такая же проблема с ХП автомобиля.
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
а сервер будет думать
серверу не нужно думать, он должен знать. Клиент сдвинул автомобиль - обязательно должен сообщить серверу. Более того, сервер должен еще и проверять что там куда сдвинули. А вдруг это читеры, хотят сдвинуть автомобиль сквозь стену, или слишком быстро двигают, или вообще решили вместо автомобиля сдвинуть соседний пивзавод.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Можно сделать через проверку физики ближайших автомобилей самим клиентом.
И если есть отклонение (чит) - сообщать серверу.
Если такое сообщение придёт сразу от нескольких клиентов относительно какого-то одного - это указывает на возможный чит и нужно дополнительно проверить это на сервере для наиболее точного подтверждения факта обмана.
Однако, при отсутствии ближайших автомобилей, нужно скорость перемещения (длину вектора смещения и время, и другие параметры) контролировать исключительно на сервере.

заспавнит автомобиль именно в том месте, где он был изначально
ну так нужен тайм-аут по которому объект убирается из игрового мира.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы