Комментарии 111
Да, все знакомо до боли)
Добавили подсчет хеша всех библиотек и начали сравнивать его с разрешенными при авторизации на сервере, куда они добавляются при сборке релизных билдов
В нашей игре MadOut2 тоже есть подсчет хеша, но старшеклассники его подделывают) правда у нас нет обфускации кода.
А по поводу обфускации, если у пользователей будут ошибки, можно ли будет понять где это произошло, или в callstak будет белеберда? И как быть с публичными переменными в Юнити, они же присваиваются по имени?
Интересно будет узнать, на чем вы написали backend для обработки данных, все таки ccu 70k это приличная нагрузка.
А по поводу обфускации, если у пользователей будут ошибки, можно ли будет понять где это произошло, или в callstak будет белеберда?
При обфусцировнии плагин сохраняют в файл соответствия исходных имен и обфусцированных. Мы эти файлы сохраняем и в дальнейшем используем для восстановления коллстеков.
И как быть с публичными переменными в Юнити, они же присваиваются по имени?
Публичные переменные не обфусцируются, их используем только для интерфейсов, интерфейсы, как правило, не представляют интереса для взлома
А как это происходит, плагины или ручками по файлу ищите название методов?
Интересно будет узнать, на чем вы написали backend для обработки данных, все таки ccu 70k это приличная нагрузка.
Он написан на Python, в скором времени планируем рассказать про серверную архитектуру в отдельной статье
К примеру я добавляю вывод внутриигровой информации там, где его не должно быть.(к примеру рисую прицел) Как это защитить со стороны сервера?
Да, но в статье речь не про рисование прицелов, а про "валюту, время до конца матча, здоровье и так далее".
В общем случае юзер выкидывает нафиг ваш суперзащищённый клиент и пишет свой.
Вы, если хотите, конечно можете отрицать, но эти лишь вопрос времени и/или популярности игры.
Чтобы вас не съел тигр не обязательно бежать быстрее тигра. Достаточно бежать быстрее соседа.
В один день вы можете оказаться перед фактом: читеров сегодня х1000 и делают что хотят и хорошо еще что сервак не шатают. Пока разберетесь пока найдете ваши репутационные потери будут чудовищные, и это если еще потом чистить не нужно будет пол сервака, если вообще сможете.
Я вот очень внимательно читал и так и не увидел: а почему вы пытаетесь защитить клиент?
Защита клиента это только часть глобальной задачи по защите приложения. Мы перенесли на наш сервер хранение прогресса и добавили валидацию всех операций его изменения. Сейчас продолжаем работу по переносу с клиента на сервер логики начислений
Соответственно, в этом случае становится важной не неотвратимость наказания, а его суровость — например, пожизненный бан в игре со всякими интеллектуальными системами предовращения повторных регистраций. В итоге большинство читерить побоятся, а меньшинство не сможет испортить геймплей. Разумеется, базовые античиты всё равно нужны, так как самые глупые из читеров не способны подумать о последствиях. Но с фанатизмом требовать полного доступа к системе, установки драйвера и т. д. — не нужно.
Эдакое участие во взрослении читеров, это по-своему даже мило)
Хранение прогресса локально на девайсе
Да, на начальных этапах это было реализовано в рамках прототипа, в дальнейшем перевели хранение на наш сервер
Как в итоге выглядит сохранение прогресса?
Прогресс хранится на сервере, при запуске клиент берет с сервера текущее состояние. Далее при каждом изменении сравниваются итоговые значения, и если они отличаются, то операция отменяется — клиент снова берет с сервера последнее валидное состояние. Думаю, еще напишем о хранении прогресса отдельно
Хотя, возможно, я в меньшинстве.
Т.е. если какая-то часть (например фарм) кажется мне скучной — я могу получить необходимые ресурсы через читерство. Если какая-то часть (например необходимость быстрой реакции в синхронном нажатии клавиш и мышки) по возрасту мне тяжела, я могу стать бессмертным и избежать однообразных движений пальцами. В результате я играю только в то, во что мне интересно играть.
Но таким образом я сам регулирую игровой процесс.
Подобная логика применима только к однопользовательским играм «для себя».
К соревновательным играм такое оправдание не применимо.
Но часто возникает подмена понятий.
Например однопользовательская игра в Steam имеет соревновательный элемент — «достижения». Из-за этого в однопользовательской игре старательно шифруют значения.
Мы же как бы тут все играем в игры.
И отлично знаем, что во множестве именно что онлайн игр, где заявлена борьба с читерами — в топе как раз читеры и сидят. И это абсолютно всем понятно, и люди пишут жалобы упомянутым выше «модераторам» (которые, якобы, должны быть одним из инструментов борьбы). Но ничего не меняется. Всё те же читеры, нередко даже явственно бессмертные, спокойно играют на множестве серверов множества онлайн-игр.
Потому что, как совершенно верно заметили другие комментаторы, «читы у вас в игре всё равно будут».
Мне это всё напоминает классическую ситуацию с «законами об оружии». У преступников всё равно оружие всегда есть — а страдают всегда законопослушные граждане.
Много причин. Но как минимум не хочется раздувать объём за счёт скачивания на клиент натренированной модели.
А фанатичная борьба хоть «0 читеров», хоть «0 безбилетников в автобусе» обычно сопряжена с очень сильными неудобствами и для контролёров, и для простых граждан.
Одного знакомого "задрота" по КС не раз банили за, якобы, читы и доказать никак. Сначала злился, а потом принял это за меру его мастерства.
Это уже какой-то социализм в отдельно взятом MOBA-геймдеве получается.
Не равенство условий, а равенство результата....
Сюда же можно отнести включение авто-AIM для джойстиков в коссплатформах. Чтобы им не обидно было - будто кто-то запрещает им играть с клавомыши.
В качестве игрового сервера — Photon Unity Networking (Cloud), который не имеет серверной логики и, следовательно, не дает возможности контролировать игровую логику.
До этого момента никак не мог понять, почему вы так долго и упорно занимались какой-то ерундой вместо того чтобы сразу перенести хранение и валидацию данных на сервер. Имхо проблемы были бы более понятны, если бы этот момент был ближе к началу статьи обозначен.
Всё тот же PUN может быть использован для self-hosted решения, где вы вообще всё можете попереписать или для подписки позволяющей иметь плагин на сервере.
NikolayCherkashin поправьте, а то вводит людей в заблуждение
Наличие измененных версий игры в китайских сторонних сторах.>
Это прям классика жанра. Не просто скопировать софт а ещё и переиначить на собственный лад. Это не только в играх и не только в Китае такое бывает.
Я только не очень понимаю в чём выгода такого клонирования с добавлением изъянов и улучшайзеров.
Своя реклама или локализация интерфейса включая замыливание или удаление определенного контента.
Переделка интерфейса если это софт с меню управления под винду или стандартные юниксовые оконные менеджеры. Знаю вот интернациональную команду русские, украинцы и испанцы перерисовали интерфейс у немецко-американской поделки с желто-голубенького на ядовито черно-зленый. Даже не стали компилировать своё, зная что немцы использовали линь и иные решения с открытым исходным кодом. Тупо перекрасили и переименовали название служб и сервисов.
Китайский рынок — это же как отдельная планета. Куча своих запретов(нельзя кровь и прочее). Свои интеграции, свои платежки, своя реклама, как заметил Tarakanator.
Когда-то пытался придумать античит для CS:GO и понял, что не обойтись без ловушек-ханипотов. Иначе aim / wh не отловить
А можете, пожалуйста, подробнее рассказать о том, как устроить honeypot, чтобы ловить aim / wh?
WH кажется сильно сложнее ловить через honeypot и мне в голову не приходит как он тут поможет, особенно если учесть, что они обычно не убирают стены, а просто подсвечивают модельки и все нужное за стенами. С точки зрения античита я проверял к примеру «трассировкой луча» периодически с определением цвета пикселя на пересечении со стеной и моделями за ней. Он очевидно должен совпадать собственно с цветом пикселя стены. Вычисление видимости с отсечением невидимого при вычислении сцены все равно происходит, а значит вроде это все должно быть практически не затратно, в какой-то момент у движка должны быть все данные. Правда это не поможет от оверлея допустим, но их вроде тоже есть способы детектить. Но в любом случае, на любую хитрую гайку…
Это все конечно взгляд с дивана примерно в таких же теоретических рассуждениях про то, как это можно сделать.
Была мысль показывать "призрака" там, где его не может быть или там, где его не увидит человек — чёрное на чёрном, текстура на текстуре, в общем, чтобы встроить распознавание в код было достаточно сложно. Или, например, сделать его размером с точку — если это сложно спалить на клиенте. Или в момент, когда на него навелись, "отдергивать" так, что нормальный игрок не попал бы.
Всё это вместе с поведенческим анализом точности, линейности перемещения курсора прямо к точке… в общем, нужно смотреть на конкретную игру и анализировать, придумывать нехарактерные для людей факторы.
Не думали проверить сделать отдельные комнаты для читеров? Посмотреть, будут ли они честно тусоваться там или всё же дружно проигнорируют и пойдут в комнату обычных игроков.
А если игра бесплатная?
Зачем читеру что-то покупать в игре, если он знает, что рано или поздно ему придётся регистрировать новый аккаунт?
Не дешевле ли читеру запускать бота для фарма?
Спасибо, у меня теперь появилась идея как можно зарабатывать на таких читерах :)
В игре это выглядит следующим образом: пуля в голову прилетела с расстояния в 2 км, едва только ты оказался в зоне видимости читера. Для сервера все эти действия так же абсолютно легитимны: поворот, выстрел, поворот, выстрел, поворот, выстрел, поворот. Вот вам и отсутствие дурацкой обфускации и прочего идиотизма.
Сейчас по порядку. Клиенты надо делать наподобие сервиса NVIDIA Go, где клиент — это очень простая программка, которая посылает input юзера и в ответ получает картинки. Разумеется, не каждая компания потянет на собственные рендеринг фермы, так что поток с сервера не картинки а, в лучшем случае, геометрия. Копаться в геометрии, чтоб найти голову — нет смысла. Разумеется, это повышенная нагрузка на сервер и сеть. Если и на это нет ресурсов, то сваливаемся в классический случай, когда с сервера идут сообщения о состоянии (координаты объектов). Тогда это уже описанная вами ситуация.
Radar hack(частично) лечится путем дискретного минимализма: одно сообщение — это один объект, а не его изменения (трансляция и прочие). Клиент получат сообщения только в пределах его прямой видимости. Если враг за углом или за спиной, то сервер сообщения о нем не шлет, соответственно объекта в памяти нет.
Остается aimbot (autoaim) в пределах прямой видимости. Чтобы навести прицел на голову, ему понадобится генерировать системные события (сообщения, mouse input). С обратной контрольной связью. Что 1. сложно и 2. по моему, можно детектить (или сразу фильтровать) все сообщения, которые не идут из драйвера. Или, в конце концов, общаться напрямую с драйвером.
Все это, конечно, в контексте надежно шифрованной связи.
Как-то так.
Ну, во первых, wallhack это стрелять через стены, видеть это radar hack. :)
Попутал за давностью лет. Вы правы.
Клиенты надо делать наподобие сервиса NVIDIA Go, где клиент — это очень простая программка, которая посылает input юзера и в ответ получает картинки.
И сервера по всему миру, особенно для шутеров. Тот же МК через Remote Play в пределах одного города, периодически имеет сбои. Боюсь крайне мало компаний могут потянуть такое.
Клиент получат сообщения только в пределах его прямой видимости. Если враг за углом или за спиной, то сервер сообщения о нем не шлет, соответственно объекта в памяти нет.
Что приводит к появлению противников из воздуха, из-за естественной задержки на обмен с сервером. С этим можно смириться в MMO и нельзя в сессионных играх. А так же такой механикой вы напрочь исключили источники звука, позволяющие противника банально услышать. Это ведь важный элемент геймплея: определять местоположение противников даже тогда, когда ты его не видишь. Тоже все преломления источника звука считать на сервере для каждого игрока, да еще умудряться синхронизировать?
Что 1. сложно и 2. по моему, можно детектить (или сразу фильтровать) все сообщения, которые не идут из драйвера.
Если бы сложно, автонаведение в той же КС было еще в лохматых годах. Да и до сих пор оно в читах живет. Драйвера для эмуляции мышки тоже уже не первый десяток лет разменяли, автокликеры нужны не только для читов, но и для автоматизации интеграционных тестов программ, например. Про читнаборы компенсации отдачи от 4теч бладди тоже все знают, и им тоже уже далеко не первый год.
Да и прямую инъекцию кода в клиент никто не отменял, когда из клиента вырезается вся защита и делай что хочешь. И это тоже далеко не редкий случай, который детектят серьезными плясками с бубном, о чем, кстати, автор тоже упоминал.
Как было 10 лет назад: все что ушло клиенту, уже скомпрометировано, так оно и сейчас осталось. Вот и приходится разработчикам прыгать между двумя огнями: с одной стороны игроку нужен «гладкий игровой опыт», а с другой стороны, нужно поставить всех в равные условия. И никто уже не готов играть в шутер без звука, без позиционирования по звуку, с врагами выпрыгивающими из воздуха и появляющимися на экране через пол секунды, после того, как тебя уже убил. Да еще и ценник должен быть адекватный, а не подписка за оверпрайс, ради оплаты большой вычислительной мощности на уровне сервера, что бы успевать считать все, что игроки видят, слышат и чуют.
Что приводит к появлению противников из воздуха, из-за естественной задержки на обмен с сервером. С этим можно смириться в MMO и нельзя в сессионных играх.
Поле видимости (field of view) не сложно рассчитать по пингу. Да, будет не идеал, но по моему, можно добиться золотой среды — комфортабельная игра в сочетании с непривлекательности чита.
А так же такой механикой вы напрочь исключили источники звука
С какой статьи? Это самая простая вещь. Client.SendMessage(MsgSound, SoundID_step, SoundVolume(0.5))
Да и прямую инъекцию кода в клиент никто не отменял, когда из клиента вырезается вся защита и делай что хочешь. И это тоже далеко не редкий случай, который детектят серьезными плясками с бубном, о чем, кстати, автор тоже упоминал.
Как было 10 лет назад: все что ушло клиенту, уже скомпрометировано, так оно и сейчас осталось.
Делай с NVIDIA Go всё что хочешь. Ломай, изменяй, ВСЁ. Пользы никакой. У меня навязчивое чувство, что у вас не до конца оформилось понимание идеи.
Вот и приходится разработчикам прыгать между двумя огнями: с одной стороны игроку нужен «гладкий игровой опыт», а с другой стороны, нужно поставить всех в равные условия. И никто уже не готов играть в шутер без звука, без позиционирования по звуку, с врагами выпрыгивающими из воздуха и появляющимися на экране через пол секунды, после того, как тебя уже убил. Да еще и ценник должен быть адекватный, а не подписка за оверпрайс, ради оплаты большой вычислительной мощности на уровне сервера, что бы успевать считать все, что игроки видят, слышат и чуют.
Да, я согласен. С одной стороны, нагрузка на сервер будет огого. С другой — невзламываемая игра будет привлекать очень большую аудиторию. Тут уже слово разным финансистам и маркетологам, не даром же хлеб едят? :) Если нет финансовой пользы, то и делать незачем. То-же самое с геймплеем — это вопрос экспериментов и R&D. Если не получится дотянуть хороший геймплей — затея теряет смысл.
Да, я согласен. С одной стороны, нагрузка на сервер будет огого. С другой — невзламываемая игра будет привлекать очень большую аудиторию.
Вы очень оптимистичны, большую аудиторию привлекает не невзламываемая игра с дорогой подпиской, а бесплатная игра или игра с единоразовой оплатой, даже если там много читеров. Люди такие сволочи, что всегда хотят всего побольше, бесплатно и что бы им ничего за это не было. Причем видимая цена будет на первой строчке. На этой психологии и работает FTP, когда вроде бы оно и бесплатно, но для комфортной игры надо платить даже больше, чем за подписку в альтернативной игре. Причем платить так же регулярно, под комфортом я подразумеваю не только игровые преимущества, но в том числе и банально стремные и однообразные бесплатные шкурки.
Если у вас игра с супер защитой за 2,000 попугаев в месяц, а условный EA предлагает тоже самое за 2,000 попугаев разово, но без навороченной защиты и себестоимостью содержания раз в 100 ниже, чем у вас, то вас задавят банально экономически. А что бы не задавили, вам придется серьезно вкладываться в маркетинг, а значит разница в стоимости содержания вырастет еще в несколько раз. Результат думаю очевиден. Это же классическая дилема в сфере торговли: что больше суммарной прибыли принесет, дешевый палит или топовый ROG? Топовый ROG вроде и лучше, но купят-то все равно палит, т.к. он дешевле, не смотря на его недостатки в конкретно этой модели.
что больше суммарной прибыли принесет, дешевый палит или топовый ROG? Топовый ROG вроде и лучше, но купят-то все равно палит
Нет, в конце-концов, львиную долю сгребают вполне себе средненькие асусы и гигабайты. Современный сетевой гейминг это не очень большая разовая цена и не подписки. Это умеренная (до бесплатно) цена и микротранзакции. В этом тоже нужно очень внимательно соблюдать баланс: микротранзакции должны быть достаточно привлекательны и одновременно не должны давать слишком большое преимущество. Розовый Калаш никто не купит, но и в игре не должны появляться «голд шутеры» как в WoT. Я повторюсь: все это — дело долгих исследований и головочесаний. Как и техническая часть, впрочем. :)
Розовый Калаш никто не купит
Я тоже так думал, пока не открыл как-то в стиме рынок по контре и не офигел, что именно там за оверпрайс продается. И желтый, и розовый, и в кислотных разводах, и каждый в несколько раз дороже самой контры.
но и в игре не должны появляться «голд шутеры» как в WoT.
Шутеры идут той же дорогой, что и MMORPG, только отстают лет на 10. А если попадает все в руки условного Mail.ru, то и донат с преимуществами становится анальным, и все равно люди платят. Они специалисты по выкручиванию реальной стоимости бесплатной игры так, что тот же WOW с его подпиской курит в сторонке.
Но это игры в текущих рыночных условиях, когда затраты на сервер очень медленно масштабируются от количества игроков. У игры через стримминг картинки наоборот очень высока серверная нагрузка, да еще и кратно возрастающая от количества игроков. При этом конечный для игрока продукт выглядит абсолютно точно так же, как и остальные.
Если он стоит столько же, как и прочие, то вы получаете намного меньше операционной прибыли, чем другие, а значит и меньше возможностей вложения. Т.е. у конкурентов огромное преимущество по сравнению с вами.
Если же вы подняли ценник, с целью компенсации повышенных накладных расходов, то вам тут уже возникает проблема с игроками: если игра такая же, да еще и с дополнительными проблемами, то зачем платить больше?
Сырая еще слишком технология, да и обычным консолям она проигрывает, т.к. там читеров намного меньше, ибо узкоспециализированное устройство с узкоспециализированной ОС намного проще прикрыть от тех читов, которые чаще всего применяются на PC. И это будет в обслуживании многократно дешевле.
wallhack это стрелять через стены, видеть это radar hack
С кем не общался, у всех WallHack подразумевался как "видеть силуэт врага за препятствиями". И как это "стрелять через стены"? Оно даёт простреливать непростреливаемое или же показывает силуэт врага только в простреливаемых местах?
Посмотрите в поиске "Radar Hack" — у меня показывает "на радаре всегда будут показываться и союзники и враги".
не картинки а, в лучшем случае, геометрия. Копаться в геометрии, чтоб найти голову — нет смысла.
Конечно нет смысла, всё что движется — игроки. Противника среди них определяем по используемой для него текстуре.
Зачем хитбокы на клиенте?
Это всё ведь не критично получить с задержкой от сервера.
Я уже давно не играл в такие игры, но насколько помню, в каких-то такая обратная связь была сразу, а в каких-то можно было и до две пули успеть пустить — противник мог остаться в живых.
Наверно, зависело от задержки.
В нашем проекте (2D онлайн-выживалка, только PC) мы придерживаемся философии «клиент в руках врага» и поэтому всё изначально было написано с авторитарным сервером и тотальным контролем информации, передаваемой клиенту. Клиент же просто запускает код симуляции, идентичный серверному, для предикции лага, а сервер принимает только команды инпута. Игра при этом легко моддится (код самой игры (не движка) доступен на гитхабе, 0.5 млн строк).
Согласно нашему подходу, делать саму игру следует таким образом, чтобы всевозможные читы были бесполезны. Мы продумывали игровые механики таким образом, чтобы в принципе избежать какой-либо пользы от читов. Худшее, что мы ожидали — аимбот. Хотя игра 2D и прицелиться — дело не хитрое. Но, т. к. со временем была добавлена механика отдачи для автоматического оружия, у игроков появился стимул разработать аимбот (что удалось пофиксить просто добавив для автоматического оружия рандомный разброс на сервере, сделав всякие попытки компенсации бессмысленными; кстати, при высокой скорострельности игроки не замечают, что на самом деле стрельба на сервере симулируется иначе и промахи/попадания не совпадают). Также игроки бот на автоматическое применение оптимальной медицины создали (что пофиксить, конечно, гораздо проще на уровне игровых механик — просто запретили стрелять, пока хилишься — лишать себя такой возможности в пылу боя никто не захочет). Но в итоге PvP-игроки выразили категорическое мнение, что на PvP серверах клиенты должны быть без каких-либо модификаций. Пришлось городить дополнительные слои защиты, шифрования, верификации. Успешно, и не чересчур сложно, благо изначально клиент уже был защищён обфускацией. В итоге у игроков стимула пытаться что-то хакать на стороне клиента не осталось — чересчур много труда (который окажется напрасным стоит нам только собрать новый билд игры несовместимый со старой версией), игровые механики не позволяют получить какого-либо преимущества, а авторитарный сервер просто не принимает от клиента ничего кроме инпута и не присылает ничего такого, что клиенту не следует знать.
Кстати, за всё время мы не забанили ни одного игрока, несмотря на общее число игроков за 200 тысяч человек. Если всплывал факт чита, мы воспринимали это как нашу недоработку.
> 9. Добавили защиту от взлома оперативной памяти.
Было бы интересно узнать, какой подход был использован! В случае .NET приложений, это не так-то просто.
> К новым проектам в разработке тоже стали относиться по-другому и сразу пишем их с защитой, почти как у полноценных ААА-игр.
К сожалению, в последние годы многопользовательские AAA-игры не принято писать с адекватной моделью защиты (хотя бы с подлинно авторитарным сервером). Это сложно, дорого, и не всё возможно сделать хорошо в рамках такой модели (когда клиенту ноль доверия). Обычно просто используют защиту клиента — EasyAntiCheat, BattleEye, которые с переменным успехом позволяют пост-фактум банить читеров, но которые так же не составляет огромного труда обойти (причём не обязательно на уровне клиента, а на уровне сетевого протокола). Существует гигантский чёрный рынок платных читов. Перечислять AAA-проекты за последние 5 лет, кишащими читерами, нет смысла — проще перечислить те, где их нет (по моему, их — нет). Дырявый сервер же пытаются защищать с помощью ИИ (machine learning оценкой поведения игроков на сервере) — что мне видится просто как страшный костыль, не исключающий false-positive срабатываний. Не уверен, что это приведёт к чему-либо хорошему. Вот перенос гейминга в защищённое облачное окружение (с клиентом-терминалом для приёма игрового инпута и отображения транслируемого видеопотока) может гарантировать полное исключение читинга — ценой повышенной латентности. Однако провал Google Stadia показывает, что мы ещё не скоро до этого доберёмся.
По сути в WoT механика видимости сделана скриптами(если ты танк «не видишь» то и изображения его нет) в WT же надо искать врагов глазами.
Первые тысяч 7 боёв мне это казалось идеальной защитой от читеров… а потом я пошёл в командные бои… и увидел что при такой системе видимости и правильной игре весь геймплей ломается и становится слишком искуственным.
В 3D играх всё значительно проблематичней. Сервер в принципе может не присылать то, что игрок не способен видить (объекты за холмами, стенами и другими непрозрачными препятствиями), однако будет ощутимый лаг при входе объектов в поле зрения игрока.
В 3D шутерах есть другие проблемы — например, игроку нужно слышать шаги с 3D-позиционированием для персонажей за стенами.
обзора (30x16 «метров» для всех игроков независимо от разрешения экрана, автоматически скейлится)
А если соотношение сторон другое?
однако будет ощутимый лаг при входе объектов в поле зрения игрока.
При чём проблема не только в самом лаге, но и в том, что неизвестно когда он есть.
Несколько раз игра мне не показывала танк там, где он 100% был(WT). И это речь про случаи в которых я уверен на 100%типа посмотрел за камень, там пусто, выезжаю и меня убивает танк, стоящий за тем камнем.А уж сколько таких случаев я списывал на: ну наверно не заметил в кустах, одному богу известно.
С учётом RT видимость не ограничивается прямыми линиями… ну это на будущее скорее.
А ещё с видом от 3-го лица камеру можно переместить практически мгновенно на несколько метров. что тоже изменяет видимость.
А если соотношение сторон другое?
Для хардкорных PvP-игроков есть опция «16:9 (PvP max view)». Добавляются чёрные полосы по сторонам экрана, но гарантирован максимально возможный обзор.
Без этой опции, картинка будет обрезаться сверху и снизу, если у игрока монитор ultrawide 21:9 (если ещё шире — чёрные полосы добавятся слева и справа, т. к. уж слишком сильно обзор резать невозможно). Мы не особо беспокоимся, т. к. согласно статистике Steam, игроков с ultrawide мониторами не больше пары процентов (есть статистика по разрешениям экрана и из неё это очевидно). И динамика такова, что 16:9 сегмент растёт быстрее, чем ultrawide.
При чём проблема не только в самом лаге, но и в том, что неизвестно когда он есть.
Несколько раз игра мне не показывала танк там, где он 100% был(WT).
От багов в имплементации ничто не поможет. Если пинг низкий и код определения видимости написан правильно, проблем не будет и лаг будет едва ощутим.
А ещё с видом от 3-го лица камеру можно переместить практически мгновенно на несколько метров. что тоже изменяет видимость.Это верно. И если камера действительно полноценно и сразу просчитывается на сервере (а не привязана к самому танку), будет ощущаться лаг равный пингу.
учётом RT видимость не ограничивается прямыми линиями
Да, отражения сильно усложняют всё. Придётся выбирать, игра честная или игра красивая… для новых игр, в которых не принципиален соревновательный PvP, игроки выберут последнее. Графика продаёт игры, увы.
Делать 3D игры (кроме случая, когда вид сверху) с полностью авторитарным сервером — сложнейшая задача, к тому же требующая множество компромиссов. Поэтому и практически все AAA проекты просто не заморачиваются с этим — проще поставить какой-то клиентский античит и банить подозрительных игроков волнами уже пост-фактум. А игроки уже привыкли, что везде есть читеры…
К слову, даже если очень захотеть, маленьким инди-студиям клиентские античит решения для Windows практически недоступны — например, любопытства ради мы связывались с EasyAntiCheat и они перестали отвечать нам, когда узнали наш доход за прошлый год (он весьма приличный для нашей маленькой студии). Не говоря уже про то, что игроки могут просто убить своими отзывами инди-игру в случае, если их банить (хотя недавно в Steam появилась опция раздавать баны игрокам через отдельный API, лишая их доступа к игре полностью, аналогично VAC — но есть сомнения, дадут ли к этому функционалу доступ инди-разработчикам и сохраняется ли возможность написать негативный отзыв в случае такого бана). От отзывов и рейтинга очень сильно зависят продажи, по нашему опыту и опыту нашего издателя.
Мы ориентировались на возможность портирования на другие платформы, полную поддержку моддинга (опенсорс), невозможность (да и нежелание в силу их ненадёжности и инвазивности вплоть до уровня ядра ОС) использования любого популярного клиентского анти-чит решения, отсутствие банов за читинг в принципе. Получилось? Получилось. Но игра разработана с соответствующей философией и соответствующим геймплеем, механиками.
Я писал выше, что мы не беспокоимся на этот счёт — большинство игроков не замечает небольшого кропа картинки, а PvP-хардкорщики имеют опцию. При этом согласно статистике Steam порядка 90-95% игроков имеют экраны 16:9 (даже если они играют в оконном режиме развернув на весь экран, картинка лишь чуть-чуть обрежется). Т. к. игра доступна только для PC/Steam, проблемы с этим нет и игроки не жалуются.
Тянет на целую статью, интересно было бы почитать.
Насчёт облачного гейминга — на DTF, например, уже пробовали натренировать нейросеть целиться по картинке и она более менее успешно работала. Это тоже не панацея.
Также в файтингах невозможно определить насчёт комбо — выполнил опытный игрок или скрипт.
Вряд ли вы победили читеров, если вся игровая логика считается на стороне клиента. Появление новых читов это вопрос времени. Игровая логика должна вычисляться на стороне сервера, а клиент грубо говоря должен быть просто утилитой для рисования графики и не более.
Как мы «вырастили» и победили читеров в своем онлайн-шутере