Комментарии 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).
Первое правило любой сетевой игры - "Не доверяй клиенту". Всё что можно заабъюузить - будет заабъюжено.
определенно, умудряются читить даже на анимациях
Да какое правило, когда половина игр работает либо на не-авторитарной модели, либо P2P))
Мы у себя в RTS на p2p работаем. Игроки обмениваются инпутами и каждый у себя просчитывает следующий тик. Если кто-то читит, то очень быстро вылетает из-за рассинхрона состояния мира. Так что p2p это нормально, если его правильно готовить.
Вы молодцы и это классно, но это не отменяет того факта, что большинство индюшатины и игр на стандартных сетевых либах запилены без особой авторитарности и зачастую вообще понимания того, как грамотно реализовать сеть.
В обработке дамаги на клиенте нет ничего плохого, кроме пары решаемых кейсов. Читеры в любом случае будут - с аимботами, с вх, с триггерботами. Какая разница как чувак читерит - флудит пакетом урона или наводится всем на головы и крутится, если результат один - заруиненная игра?
Справедливости ради, видел вот такое: https://tashi.network. Это P2P, но с моделью консенсуса. Теоретически должно объединять лучшее из двух миров. Но на практике же они начинали как tashi.gg и заявляли о себе как о сетевом движке нового поколения для многопользовательских игр, а теперь перенацелились на ИИ и беспилотники, которые у инвесторов куда более на слуху.
Сколько копий на этом было сломано в Blacklight: Tango Down и Blacklight: Retribution...
Клиент в таких случаях должен быть тонким и отправлять лишь намерение. Игрок нажал кнопку, ничего не произошло, ушёл запрос на сервер, пришёл ответ на клиент, только после этого клиент отображает, как и если действие удалось совершить в момент обработки сервером. Все остальное не про equality, а про equity. Как человек, который спокойно относится к лагам/фризам/прочему на своей стороне, не вижу необходимости искажать действительность и кому-либо подыгрывать, потому что считаю, что это убивает дух соперничества. Играть с высоким пингом никто не заставляет.
Это очень сильно портит отзывчивость игры, особенно такой динамичной, как шутер.
У себя в RTS мы так делаем, но даже пока команда идёт туда-обратно (допустим 200мс), мы всё равно стараемся локально показать что она уже выполняется (т.к. в 99 случаях из 100 команда будет неоспорена). Отдали приказ - юнит моментально откливается голосом, а начинает идти через 200мс.Поставили план здания - рисуем план моментально, а через 200мс его либо оставляем либо отменяем.
Вы сейчас сказали "не играть по Интернету, играть только по локалке." Люди не хотят.
Да, сейчас ты мёртв. И ты кого‑то убил.
Потому что, когда ты стрелял, ты ещё был жив.
Если ещё и "снаряд" долетает до цели не мгновенно, то это и вовсе штатная ситуация. В одной игре за такое даже ачивку выдавали.
Сервер должен самостоятельно ограничивать глубину отмотки
А зачем, если она и так ограничена величиной “прощаемого пинга” (теми 200мс в статье)?

Попасть нельзя промахнуться