Ложные срабатывания: почему ваш античит обвиняет честных игроков
Быстрое перемещение принимают за телепорт, дилижанс за спидхак: классические ложные срабатывания античита RedM и как убрать их, не отключая детекцию.
Античит почти никогда не умирает потому, что ничего не детектирует. Он умирает в тот день, когда ваш персонал перестаёт открывать канал оповещений. С этого дня детекция продолжает работать, оповещения продолжают копиться, а их никто не читает, потому что последние шесть оказались честными игроками. После этого настоящий читер проходит сквозь шум, и никто этого не замечает. В этой статье о ложных срабатываниях античита RedM разберём, откуда они берутся и как их устранять.
Что ваш сервер делает каждый день и что выглядит в точности как читерство
Ни один из этих случаев не теоретический. Это пять главных причин абсурдных оповещений на ролевом сервере RedM, в порядке появления:
Быстрое перемещение. Ваш скрипт переносит игрока из Валентайна в Сен-Дени за один кадр. Для детектора, который делит расстояние на время, это идеальный телепорт, причём исполненный лучше, чем в мод-меню.
Дилижансы и поезда. Игрок, сидящий в фургоне, движется со скоростью фургона. В зависимости от того, как он прикреплён,
GetEntitySpeedможет возвращать почти ноль, пока его координаты продвигаются по карте. Одна галопирующая лошадь уже попадает в диапазон, который вы выбрали бы потолком для человека пешком: наивный порог неверен ещё до того, как поезд Анесбурга отправится.Падение с лошади. Игрока сбрасывает, персонаж превращается в рэгдолл, и несколько кадров он проходит сквозь декорации: коллизия ещё не подгружена, координаты ниже земли. Детектор ноуклипа, который спрашивает «он под геометрией?», обвиняет его при каждом спешивании.
Ваш фреймворк реанимирует кого-то. Ваш фреймворк ставит флаг неуязвимости во время состояния повалена и подбора, в точности как мод-меню. То же при спавне, в кат-сценах, в безопасных зонах. Годмод, который чаще всего детектируют на ролевом сервере, - ваш собственный.
Ваши собственные админские инструменты. Модератор в ноуклипе, пед, заспавненный для RP-события, телепорт к игроку: та же возможность, тот же след, тот же сигнал. Античит, не знающий, откуда пришёл вызов, первым обвиняет вашу собственную команду.
Что общего у этих пяти: детектор читает состояние и выводит из него намерение. Он видит «неуязвим» и пишет «годмод». Он видит расстояние и пишет «телепорт». Но это состояние одинаково порождают и читер, и ваш сервер, делающий свою работу. Пока у вас нет причины, у вас нет ничего.
На практике рабочий потолок скорости - не одно число: он зависит от носителя, которого опознал сервер (пешком, верхом, в фургоне, на рельсах), и повышается на в окне, следующем за скриптовым перемещением. Точные значения остаются внутри компании: читер, который их знает, настроится чуть ниже.
Не публикуется/Пороги срабатывания не публикуются: известное значение - это значение, под которое настраивают чит.
Сколько на самом деле стоит ложное срабатывание
Обычно его считают в потерянном времени персонала. Это дешёвая часть. Настоящая цена в другом: наказанный по ошибке игрок рассказывает свою историю, и он вправе её рассказывать. Ваше сообщество узнаёт, что античит ошибается, и начиная со следующего бана (правильного, подкреплённого доказательствами) вам придётся сначала защищать инструмент и только потом решение. Античит, один раз солгавший, потом ничего не доказывает.
- неделя 1
- подавляющее большинство оповещений были ложными срабатываниями
- причины
- скриптовое перемещение + верховое животное/фургон
- усугубляющий фактор
- одно и то же событие считалось дважды
- автоматические санкции
- нет: поставлено в режиме наблюдения
Две причины, и почти каждое оповещение в панели. Ни один из этих игроков не читерил, и никто не был наказан, потому что ничто не было привязано к санкции. Только поэтому этот эпизод вообще можно рассказать: он стоил времени на чтение и ничего больше.
Дисциплина, которая их устраняет
- 1
Измеряйте, прежде чем обвинять. Долю ложных срабатываний считают по семействам детекций и относительно трафика (события на тысячу пульсов присутствия), а не как сырое число оповещений на экране. Семейство, которое взорвалось, видно сразу; общий итог ничего не говорит.
- 2
Подтверждайте, то есть требуйте эффекта, а не состояния. «У него флаг неуязвимости» ничего не доказывает. «Мы в него стреляли, попадания подтверждены на сервере, и он не потерял ни одной единицы здоровья» доказывает. Доказательство должно касаться наблюдаемого следствия, а не значения переменной.
- 3
Изучите собственные скрипты сервера. Список легитимных событий на вашем сервере нельзя угадать: он выводится из ваших ресурсов. Античит, который при загрузке выясняет, какие события вызывает ваш собственный код, перестаёт обвинять ваше быстрое перемещение в первый же день.
- 4
Запускайтесь в режиме наблюдения. Никаких автоматических санкций, пока не известна доля ложных срабатываний по семействам. Первые дни нужны для измерения, а не для наказания.
- 5
Чините причину, никогда не выключайте детекцию. Именно здесь два ремесла расходятся.
На последнем пункте стоит остановиться, потому что именно здесь все сдаются. Семейство детекций шумит? Выключить. Тишина возвращается, команда выдыхает, и дверь теперь открыта навсегда: за этой возможностью больше никто не следит, в том числе когда её использует читер. Правильный ответ хирургический: разрешить это конкретное событие, потому что оно приходит из вашего скрипта дилижанса, поднять этот потолок для игрока, прикреплённого к фургону, игнорировать эту неуязвимость, потому что она ставится при подборе. Детекция остаётся включённой везде.
С одной оговоркой, и она важна: разрешить событие значит выдать возможность, которую можно вызвать снова. Читер, узнавший название исключённого события, может вызвать и его. Поэтому исключение здесь остаётся щелчком человека: машина предлагает поправку, но никогда не применяет её сама.
Механизм запускается раз в ночь: он перечитывает оповещения, закрытые как ошибочные, возводит их к причине и готовит самую узкую возможную поправку, например окно допуска в после перемещения. Два рычага, два правила. Повышение потолка применяется само, но только в жёстких границах: минимум двадцать замеров от как минимум трёх разных игроков, пятнадцать процентов запаса над наблюдённым p99, не больше чем втрое от штатного значения, пять изменений в сутки, и оно истекает через тридцать дней. Разрешение названия события никогда не бывает автоматическим, что бы ни говорили доказательства: это название рассылается каждому клиенту, а значит, это возможность, которую чит может вызывать по желанию. Здесь щёлкает человек или не щёлкает никто.
Не публикуется/Пороги срабатывания не публикуются: известное значение - это значение, под которое настраивают чит.
Вопрос, который нужно задать перед покупкой
Не «сколько читов вы детектируете». На это все отвечают списком. Спросите иначе: как вы измеряете свои ложные срабатывания и что происходит, когда детекция ошибается на моём сервере? Если ответ «мы отключаем модуль», это выключатель, а не античит. Если ответ «мы возводим это к причине, предлагаем поправку, вы её утверждаете», за продуктом стоит человек.
Демо-панель показывает, как выглядит оповещение, которое расследовали, а не прокричали, а тарифы публичны. Наш античит RedM построен сначала вокруг этого правила и только потом вокруг числа детекций. О том, почему наблюдение за состоянием структурно порождает этот шум, читайте в статье как работает античит RedM.