Learn · modules
Что такое пробивание в Minecraft? Объяснение, как проходить сквозь стены
Пробитие игнорирует проверку видимости, позволяя ударам проходить сквозь стены. Вот как это работает и почему серверы почти всегда его фиксируют.
Что такое Пробитие?
Пробитие — это боевой модуль, который позволяет атаке наносить урон даже тогда, когда между атакующим и целью находится твердый блок. В обычном бою в Minecraft сначала выполняется проверка: игра прослеживает линию от вас к цели, и если эта линия попадает в местность до того, как достигнет цели, атака не регистрируется. Пробитие эту проверку пропускает. Забор, стена, каменная плита — ничто из этого больше не имеет значения. Проверка либо проходит, либо нет, и Пробитие просто убирает это требование, что и делает его одной из самых простых вещей для сервера в обнаружении.
Как это работает
В ванильном Minecraft выполняется трассировка луча перед тем, как удар будет зафиксирован. Игра прослеживает прямую линию от атакующего игрока к цели и останавливается на первом твердом блоке, который эта линия касается. Если этот блок находится ближе к цели, чем сама цель, атака не попадает. Именно эта единственная проверка и является причиной того, что стена, закрытая дверь или даже столб забора обычно достаточно, чтобы удар не достиг цели.
Пробитие игнорирует или обходит луч, поэтому атака проходит так, будто блока и не было. Удаление не всегда полное. Некоторые реализации сохраняют столкновение с блоком для передвижения, но отключают его специально для боя, а некоторые лишь прекращают проверку на наличие сущностей на пути, а не на местность — более узкая версия той же идеи. В конечном итоге, во всех случаях, результат один: между двумя игроками стояло что-то твёрдое, но удар всё равно достиг цели
Пробивание против досягаемости
Стоит отделить это от дальности. Дальность определяет, как далеко может пролететь удар. Пробитие не имеет отношения к расстоянию, речь идёт о том, что находится на линии между двумя точками, а не о длине этой линии. Игрок может иметь совершенно обычную дальность и при этом использовать Пробитие, и эти два свойства часто встречаются вместе, из-за чего их путают.
| Пробитие | Дальность | |
|---|---|---|
| Что меняет | Требование видимости по прямой | Предел дальности удара |
| Работает через | Стены между игроками | Открытое пространство на любом расстоянии |
| Обнаружение | Проверка луча сервером | Дальность удара по отношению к позиции |
Почему серверы это ловят
Краткий ответ: проверка геометрическая и неоспоримая. В момент столкновения сервер может выполнить собственный трассировочный луч между фактическими позициями двух игроков. Если на этом пути находится твердая местность, нет никаких законных причин для того, чтобы удар все равно состоялся. В отличие от сглаживания досягаемости или поворота, где серверу приходится учитывать задержку и обычную человеческую неточность, стена либо была там, либо ее не было. Это оставляет очень мало места для ложных срабатываний, что также означает очень мало места для того, чтобы игрок смог избежать наказания.
Часто задаваемые вопросы
Оно позволяет атаке достичь цели, даже если между вами и ней находится блок, например, стена или забор. Обычные блоки Minecraft наносят урон напрямую.
Нет. Дальность определяет, как далеко может достать атака. Пробитие игнорирует всё, что физически мешает. Они решают разные задачи, хотя часто используются вместе.
Поскольку сервер может в момент удара самостоятельно проверить прямую видимость между двумя игроками, а прочное препятствие на этом пути — это то, что клиент не сможет обойти.
Зависит от реализации, но удар происходит так же, как и легитимный. Ложь в проверке разрешений, а не в формате пакета. Сервер проверяет, что должно было произойти, находит препятствие и понимает, что что-то пошло не так.