Pull to refresh

Comments 6

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

Это получается у вас "обсервер" в каждой комнате который крутит "кастомные" проверки? Т.е. читерить можно, но скромно?

Или вы сделали корректную синхронизацию действий на клиенте и на сервере? Или у вас авторитарный сервер?

Да, изначально вводили по сути обсервер. В каких-то вещах получилось полностью закрыть лазейки для взломов, в каких-то — скромно осталась мизерная возможность. Главное, мы достигли цели: честные игроки перестали страдать от читеров.

Сейчас при проектировании новых фичей мы сразу учитываем возможности плагина, и он уже больше мастер-клиент, чем обсервер.

Это всё конечно прекрасно, но что вы будете делать, когда пойдёт распространение читов другого уровня(aimbot, wallhack, etc)?

>Отсутствует возможность просчета 3D-мира, что накладывает ограничения при реализации некоторых функционалов (например, нельзя управлять ботами или валидировать пути игроков и так далее);

Как разработчик команды Photon долго размышлял по этому поводу. Пришёл к выводу, что надо поделиться соображениями.

Я бы сказал, что это утверждение не верно. У нас есть разработчики, которые это реализовали. Вот как можно действовать.

Для этого можно либо использовать файбер либо выделенный поток. В версии 4 не было API для создания файберов. Поэтому можно подключить ExitGamesLibs.dll напрямую и их создавать по необходимости. В sdk 5 (beta) у фабрики есть доступ к созданию файберов.

Если вы используете файбер, то нужно создавать свой на каждую комнату. Далее всё "просто". вы ставите циклический таймер с нужной вам частотой и он работает и результаты вы передаёте в комнату используя метод IPluginHost.Enqueue. Когда комната закрывается нужно обязательно прибить таймер.

Таймер не даёт абсолютную точность. Но мне кажется, что для несложных вещей очень даже может подойти.

Второй вариант это использование потока.

Фабрика плагина создаёт поток при создании первого плагина и ведёт список открытых комнат. Где как в классике дёргается метод Quant/Stop/Tick (dt). Делаются просчёты, результаты отправляются в комнату используя метод IPluginHost.Enqueue

Поток нужно закрыть, как только все комнаты закрылись. Если эта фабрика создаёт плагин опять, она вновь запускает поток.

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

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

да, как в юнити не получится. Если только как-то headless server использовать. Но тут сразу масштабируемость решения страдает.

Sign up to leave a comment.