Переведено специально для Halo Russian Community.
Автор: Ричард Уотсон
ПРОБЛЕМЫ РЕГИСТРАЦИИ УДАРОВ И ВЫСТРЕЛОВ
ПРОБЛЕМА:
Нет ничего более фрустрирующего, чем момент, когда удар/выстрел, который на вашем экране должен был нанести урон, не наносит урона. Как мы объясняли раньше: когда кто то стреляет, сообщение отправляется на сервер. Сервер осматривает ситуацию самостоятельно, в момент времени, когда выстрел был произведен. Если есть различия между двумя взглядами, игрока и сервера, то выстрел может не попасть в Цель. Тогда другой вопрос: почему сервер может видеть ситуацию иначе, чем клиент? У данного момента 3 главных причины.
Первая причина заключена в том факте, что симуляция ситуации должна быть детерменирована. Это означает, что когда клиент производит действие, результат данного действия такой же, как и на сервере. Если сервер делает что то иначе, то две машины будут разъединены. Иногда отсутствие детерминизации невозможно избежать, ибо клиент может совершить неожидаемые действия (например Вархог ударил вас бортом) и состояние мира на клиенте и сервере различаются. Но в большинстве случаев, в Арене, ситуация обязана быть детерменированной, но мы верим, что существуют некоторые баги, которые не позволяют ситуации быть такой всегда.
Вторая причина заключена в пропускной способности сети. Чтобы поддерживать одинаковое состояние миров, мы отправляем огромное количество информации с серверов на клиент. Даже в режиме Арена, в матчах 4 на 4, слишком много информации, которая важна для игроков, основываясь на разных значениях эвристики. Информация о том, в кого вы стреляете, как и информация о том, кто стреляет в вас, а также информация о конкретном игроке - наш приоритете в потоке данных, но если пропускная способность непостоянна, то мы не сможем отправлять своевременно всю важную для вас информацию.
Третья причина (прим. это ты) это тот факт, что у нас есть задержка в симуляции, которая влияет на ситуации, где игроки, ожидающие выиграть ближний бой, на самом деле проигрывают. Проблема в том, что необходимо время сказать вам, что вы мертвы. Вы умрете на сервере раньше, что в клиенте. В этом случае все выстрелы, которые вы сделаете между вашей смертью на сервере и на клиенте не будут учтены. Для атак ближнего боя (прим. кулаки и т.д.) мы используем отдельный код, который позволяет вам наносить урон, даже когда вы мертвы на сервере, но подобный код для выстрелов не используется.
СМЯГЧЕНИЕ ПРОБЛЕМЫ:
С нашей стороны ожидайте небольших улучшений в будущем, которые смогут улучшить детерменирование и использование пропускной способности, а наша команда тестеров без перерывов проверяет все ситуации, где детерменирование может не работать.
Мы просим вас оставлять отзывы о возможных проблемах, чтобы мы смогли их исправить, чтобы в будущем улучшить ваш опыт:
Также я бы посоветовал ПК игрокам в настройках изменить параметр Качество Симуляции (Simulation Quality) на Ультра настройки. Эта настройка пусть и влияет всего на несколько систем, но самое главное, она влияет на детерменирование между клиентом и сервером. Ультра настройки помогут дать больше шансов на эту работу, что улучшит ваш игровой опыт.
Также мы работаем над проблемой того, что видят игроки после смерти и в ближайшее время мы выпустим несколько патчей для этого.
Эта проблема является ключевой для нас, ибо если вы не сможете быть уверены, что ваши выстрелы или удары попадут, то ваш опыт в Halo будет максимально плохим.
НЕДОСТАТОЧНАЯ КОЛЛИЗИЯ И ПРОХОДЯЩИЕ УДАРЫ БЛИЖНЕГО БОЯ
ПРОБЛЕМА:
Некоторые игроки сообщали о проблемах, особенно касательно ближнего боя, когда они могли пройти сквозь другого игрока или же же коллизия другого игрока оказывалась отключенной. Для начала я хотел бы сразу всех успокоить - коллизия соперников всегда включена. А теперь разберем случаи, когда проход сквозь оппонента это не намеренный случай.
В связи с задержкой, передвижения, которые вы совершаете на своей машине, займут время для перемещения на сервер и на момент их поступления, мир на сервере будет другим. На вашей машине место, куда вы хотите перейти, может быть пустым, но на сервере на вашем пути может быть оппонент. Если бы мы не сделали никакой компенсации задержки, то в результате вы бы испытывали режим "резиновой ленты", когда вы рядом с другими игроками. Вы бы не смогли двигаться вперед на сервере, но могли бы на клиенте.
В других шутерах это могло бы быть приемлемым, так как ближний бой там мог быть не таким частым, но в Halo "бои на мечах" одна из важнейших частей нашей боевой системы, так что у нас есть системы, которые должны справляться с такими неприятными моментами, выполняя небольшую компенсацию задержки (как при стрельбе)
Выпад в ближнем бою особенно сложный случай, так как представьте, что у вас есть 2 игрока, двигающиеся в локацию, где их оппонент был в прошлом. Представьте, два игрока двигаются в противоположных направления друг относительно друга. На изображении ниже фиолетовый игрок движется вправо, а зеленый движется налево.
В связи с задержкой, каждый игрок видит другого ровно напротив друг друга (круги)
Как только каждый игрок делает выпад, они перемещаются по штриховой линии
Но на их машинах произошло что то такое (перспектива зеленого игрока показана ниже, фиолетовый видит также, но развернуто):
Для другого игрока это будет выглядеть так, будто оппонент прошел сквозь него, проигнорировав выпад.
Также это причина, почему вы иногда могли увидеть двойную "Больную Спину" (прим. убийство со спины). Так как сервер производит компенсацию задержки для каждого игрока в ближнем бою, есть возможность того, что каждый игрок увидел убийство со спины у себя на машине, приводя к тому, что сервер принимает обе картины, ведя к двойной "Больной Спине"
СМЯГЧЕНИЕ ПРОБЛЕМЫ:
На данный момент мы работаем над улучшениями системы коллизии, так как понимаем, что ближний бой является одной из главных частей нашей боевой системы. Проблема стоит для нашей команды в высшем разряде.
Большинство улучшений, которые мы описали выше, должны также помочь в решении данной проблемы.
СЕРВЕР -> ДЕСИНХРОНИЗАЦИЯ КЛИЕНТА
ПРОБЛЕМА:
Игроки находили случаи, когда вы могли пермаментно десинхронизироваться с серверами. Сабреддит по Halo наглядно показывает подобные случаи. Обычно, когда мы находим момент десинхронизации, не важно насколько маленький, клиент должен моментально обновляться до статуса сервера. В худших случаях происходит эффект "резиновой ленты", но обычно вы даже этого не замечаете. Проблемы перманентной десинхронизации обычно происходят, когда наши системы не могут обнаружить ошибку и перейти в состояние синхронизации с клиентом.
СМЯГЧЕНИЕ ПРОБЛЕМЫ:
Мы будем отдельно решать каждую ситуацию, которая может привести к проблемам.
ОТКЛЮЧАЕМСЯ
Я хотел бы сказать вам, что понимаю ваше разочарование и понимаю, насколько плохо ощущать сетевые проблемы во время матчей. Мы постоянно работаем над улучшением всех наших систем и хотим сделать все возможное, чтобы дать вам лучший опыт среди шутеров.
Как я говорил выше, я надеюсь сегодняшние улучшения системы подбора игроков по приоритету задержки помогут вам находить лучшие матчи. Помимо этого, помните Деталпро улучшение систем регистрации стрельбы и ближнего боя.
И также я хочу напомнить, что это не единственные проблемы, на которые мы обращаем внимание, но это новости, которые дадут самый большой толчок для нашего с вами, сообществом, общения. Я надеюсь, что контакт между нами, 343, и вами станет частым и вместе мы сможем решить данные проблемы, а как вы помните, наша задача - дать вам лучший опыт игры.
Спасибо за то, что прочитали и продолжайте сообщать о всех проблемах с игрой.
Ричард Уотсон.
FAQ
В: Какой тикрейт у серверов?
О: Для 4 на 4 мы используем сервера с 60 Гц, а для Битвы Больших Команд (и кооператива в будущем) используем 30 Гц.