Обновить

Комментарии 20

А почему наличие задержки по времени не заставляет разработчиков вводить гранулярность перемещений? Когда задаются некие ячейки, которые могут занимать ощутимую часть пространства. Попадая в такую гранулу, объект "замораживается" для совершения над ним каких-либо действий. С точки зрения графики, это означает принудительное понижение разрешения: мол, хотите играть по сети, тогда используйте 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, итп к старым играм.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации