Pull to refresh

Comments 26

А почему наличие задержки по времени не заставляет разработчиков вводить гранулярность перемещений? Когда задаются некие ячейки, которые могут занимать ощутимую часть пространства. Попадая в такую гранулу, объект "замораживается" для совершения над ним каких-либо действий. С точки зрения графики, это означает принудительное понижение разрешения: мол, хотите играть по сети, тогда используйте CGA вместо VGA (например).

Это называется пространственно-временная дискретизацию состояния. Мир не обязан синхронизироваться с точностью до каждого сантиметра и каждого кадра и вместо cell(123.45, 123.45) остается позиция cell(123, 123), а клиент уже может локально дорисовывать движение внутри клетки. Просто гранулярность сама по себе не решает проблему задержка, а только снижает количество информации, которое нада синхронизировать.

А вот вторая идея интереснее и называется она SLOD(simulation)/AILOD/MTLAI(Multi tiered level), т.е чем дальше от игрока некий нпс, тем меньший квант времени ему выделяется для работы, и чтобы сделать всю работу ему нужно упрощать свою логику. Это целое отдельное направление в MMO играх и одного решения там нету, есть несколько областей, которые боле-менее справляются со своими задачами:
Simulation LOD -> уменьшение точности симуляции
Spatial Partitioning / AOI -> разбиение мира на области
Coarse-Grained Simulation -> агрегирование объектов
Hierarchical Simulation -> несколько уровней представления мира

Мне больше нравится подход с обработкой дамаги на клиенте, пусть тогда и теряется авторитарность сервера и становятся возможными читы типа "зафлудить дамагой всех других игроков". Единственный спорный кейс - если игрок лагает, видит у себя на клиенте противника и стреляет в него несмотря на то, что тот уже зашёл за стену - получается некрасивая ситуация, если сервер не проверяет рейкаст сам (а такое я видел в куче игр, где сеть построена на условном UNet/Photon, где тупо доверяют клиенту во всем и где сервер не авторитетен от слова совсем, т.е даже мир как таковой может не хранить толком, только список игроков, каких то специальных пропов типа флага в CTF и гонять логику матча, как это работает в SAMP).

Первое правило любой сетевой игры - "Не доверяй клиенту". Всё что можно заабъюузить - будет заабъюжено.

определенно, умудряются читить даже на анимациях

Как там было принято в Танках - отключать графику травы, чтобы лучше видеть ))

я бы даже больше сказал, умудряются включить wireframe режим без читов

Подменить DLL рендерера с парой заинжекченных инструкций - милое дело.

Хотя во благо это тоже используется - добавляют SSR, SSAO, итп к старым играм.

Лучше! В татанках умудрились читерить в условиях недостаточности информации о противнике. Незасвеченный командой противник имеет неизвестное месторасположение на карте. Но своя команда имеет все данные о своих союзниках. В итоге некоторые мододелы решили что можно собирать с клиентов с помощью своих модов, бесплатных типа инфо о win8 рейтингах и прочее, дополнительно информацию о состоянии союзных танков и передавать эту информацию через свой же мод на свой сервер. , А противнику и по подписке за денежку эту инфу передавать. При наличии большого количества использующих бесплатные моды, имеем практически всегда кого-то с модом во вражеской команде и с помощью него клиент показывает местоположение всей вражеской техники.

достачно своего бота в команде противника :)

Да какое правило, когда половина игр работает либо на не-авторитарной модели, либо P2P))

Мы у себя в RTS на p2p работаем. Игроки обмениваются инпутами и каждый у себя просчитывает следующий тик. Если кто-то читит, то очень быстро вылетает из-за рассинхрона состояния мира. Так что p2p это нормально, если его правильно готовить.

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

В обработке дамаги на клиенте нет ничего плохого, кроме пары решаемых кейсов. Читеры в любом случае будут - с аимботами, с вх, с триггерботами. Какая разница как чувак читерит - флудит пакетом урона или наводится всем на головы и крутится, если результат один - заруиненная игра?

Справедливости ради, видел вот такое: https://tashi.network. Это P2P, но с моделью консенсуса. Теоретически должно объединять лучшее из двух миров. Но на практике же они начинали как tashi.gg и заявляли о себе как о сетевом движке нового поколения для многопользовательских игр, а теперь перенацелились на ИИ и беспилотники, которые у инвесторов куда более на слуху.

Сколько копий на этом было сломано в Blacklight: Tango Down и Blacklight: Retribution...

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

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

У себя в RTS мы так делаем, но даже пока команда идёт туда-обратно (допустим 200мс), мы всё равно стараемся локально показать что она уже выполняется (т.к. в 99 случаях из 100 команда будет неоспорена). Отдали приказ - юнит моментально откливается голосом, а начинает идти через 200мс.Поставили план здания - рисуем план моментально, а через 200мс его либо оставляем либо отменяем.

да, человеческое восприятие очень важно, вы готовы смотреть на эту полоску загруки минуту, но уходите с сайта через 15 секунд если он не отвечает. Состояние называется "иллюзия прогресса" или "порог Доэрти"

Если false-positive - это плохо, то клиент сам в пограничных случаях мог бы дожидаться подтверждения сервером, а не спекулировть.

Вы сейчас сказали "не играть по Интернету, играть только по локалке." Люди не хотят.

Да, сейчас ты мёртв. И ты кого‑то убил.
Потому что, когда ты стрелял, ты ещё был жив.

Если ещё и "снаряд" долетает до цели не мгновенно, то это и вовсе штатная ситуация. В одной игре за такое даже ачивку выдавали.

В Овере если есть два Ханзо, вообще то и дело вылетает в логе, что они друг-друга грохнули одновременно.

А в реале так разве не бывает?На полёт пули время нужно, не из лазера стреляют. При выстреле из автомата видно, как пуля уходит - смотришь почти по оси траектории, сбоку - не видно совсем, только если трассер мелькнёт.

Сервер должен самостоятельно ограничивать глубину отмотки

А зачем, если она и так ограничена величиной “прощаемого пинга” (теми 200мс в статье)?

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

В золотые времена конца 00х и самого начала 10х, в SA:MP 0.2 (мультиплеерный мод на GTA San Andreas) не было лаг-компенсатора. Поэтому если хотелось участвовать в перестрелках с другими игроками и всех нагибать, приходилось осваивать искусство стрельбы по пингу - целиться не в персонажа другого игрока, а чуть в сторону от него, туда где он окажется через долю секунды с точки зрения сервера, с учётом разницы в ваших пингах.
А чтобы не быть постоянно нагибаемым, нужно было осваивать искусство уворачивания по пингу - неистово танцевать чечётку влево-вправо-взад-вперёд переключаясь с прицеливания на бег и обратно.
От новичков регулярно сыпались жалобы в чат “я стреляю и кровь летит, а хп не убавляются!!”
Признаком вежливости было проводить дуэли на desert eagle, снимающих треть хп но с очень медленным темпом стрельбы; а на стрелков с двух рук из пестиков, узи или обрезов (которые вдобавок позволяли носиться как угорелый не выходя из прицеливания) презрительно морщились, а сами пушки называли “ламоганы”.
Перестреливаться со злостными попингуями у кого пинг за 100+ уже превращалось в испытание, а на 300+ было проще сказать “да иди нафиг, не буду я с тобой стреляться”.

А ещё была огромная куча багов рассинхронизации.
Кинул гранату - а никто этого не заметил, пакет до сервера не долетел.
У себя ты пшикнул во врага из баллончика и он зашёлся в анимации кашля, а у себя он увернулся и лупит по тебе очередями из автомата, которые у тебя просто не регистрируются.
К тебе кто-то прибежал, бегает вокруг, переключает оружие и ничего не делает? Лучше предупредить его в чате “если ты в меня стреляешь, то я этого не вижу”.
На сервер залетел читер с неуязвимостью, а админ спит или пошёл пива попить? К читеру можно подбежать со спины и зарезать ножом - у себя он встанет и продолжит беситься, а у окружающих по земле будет ползать труп в лежачей анимации.

В 0.3 разрабы таки придумали как сделать лаг-компенсатор для стрельбы, его включили практически на всех серверах, и самп растерял половину своего шарма. А потом мода на DM и freeroam сменилась модой на RP - и растерялась вторая половина. Через годик-другой пустоты на сервере мы его закрыли, хотя ещё (казалось бы) недавно там было 30/30 игроков (больше хост не тянул) 🥲

Sign up to leave a comment.

Articles