Перейти к содержанию

Конфигурация

ssAntiCheat настраивается через единственный файл config.json в папке плагина:

ShooterGame/Binaries/Win64/ArkApi/Plugins/ssAntiCheat/config.json

Рядом с ним поставляется второй файл, config_commented.json. Это та же конфигурация с комментариями // — читайте его, но не переименовывайте поверх config.json (комментарии не являются валидным JSON).

Ключи LicenseKey, Verbose, LogToFile и Database являются общими для каждого плагина Bytemart и задокументированы на странице Общая конфигурация. Эта страница описывает только ключи, уникальные для ssAntiCheat.

💡 Проверяйте перед запуском. Всегда проверяйте ваш JSON после редактирования (например, через JSONLint). Код ошибки загрузки 1114 означает синтаксическую ошибку JSON.

⚠️ Имена ключей критически важны — копируйте их точно. Несколько ключей содержат пробелы ("Join Tracker", "SaveWorld Cycles", "Block Dedi Fill"), а некоторые несут историческую опечатку (Threshole, additionnalData). Они сверяются побайтово. «Исправление» опечатки незаметно отключит функцию.

Самовосстанавливающаяся конфигурация

При каждой загрузке ssAntiCheat сравнивает ваш config.json со схемой, с которой он был собран:

  • Отсутствующие ключи добавляются со значениями по умолчанию, и консоль выводит, что именно было добавлено. Ваш исходный файл сначала копируется в config.json.bak.
  • Несоответствия типов (строка там, где ожидается число, и т. д.) прерывают загрузку с ошибкой, называющей ключ — плагин не будет работать с конфигурацией, которой он не может доверять.

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


Ключи верхнего уровня

1
2
3
4
5
6
"Debug": false,
"Use Discord": true,
"UseDiscordURL": true,
"SteamAPIKey": "",
"CommandPrefix": "!",
"Send Alert to Ingame Admins when someone is detected using a cheat": true
Поле Тип По умолчанию Описание
Debug boolean false Внутренний флаг отладки. Оставьте false — используйте Verbose для вывода при устранении неполадок.
Use Discord boolean true Главный переключатель оповещений в Discord. Когда false, ни одно сообщение об обнаружении или бане никуда не отправляется.
UseDiscordURL boolean true Включать ли в сообщения Discord значок/миниатюру ssAntiCheat. Чисто косметическая настройка.
SteamAPIKey string "" Ключ Steam Web API. Требуется только для проверки при подключении (время в игре / возраст аккаунта / проверки VAC). Оставьте пустым, если не используете.
CommandPrefix string "!" Префикс для внутриигровых чат-команд администратора. См. Команды.
Send Alert to Ingame Admins when someone is detected using a cheat boolean true Разослать цветное оповещение об обнаружении всем администраторам, находящимся онлайн.

Вебхуки

1
2
3
4
"DefaultWebhookUrl": "",
"BanWebhookUrl": "",
"AssociationBans": "",
"AdminTrollingWebhook": ""

Все четыре — это URL вебхуков Discord, и все они изначально пустые. Пустой вебхук означает «ничего не отправлять» — это никогда не ошибка.

Поле Описание
DefaultWebhookUrl Куда уходят обнаружения, если у модуля нет собственного вебхука. Это поле нужно заполнить первым.
BanWebhookUrl Куда уходят оповещения о банах. Если пусто, используется DefaultWebhookUrl.
AssociationBans Куда уходят оповещения о банах по IP-ассоциации — то есть о новом аккаунте, пойманном при подключении с IP-адреса забаненного игрока. См. Баны и обнаружения.
AdminTrollingWebhook Журнал аудита внутриигровых чат-команд администратора: кто что выполнил, над кем и где.

Любой отдельный модуль также может иметь собственный ключ WebhookUrl, который переопределяет DefaultWebhookUrl только для этого модуля.

🔒 URL вебхука — это учётные данные. Любой, у кого он есть, может писать в ваш канал. Не публикуйте config.json в открытых репозиториях и на скриншотах.

Dashboard

1
2
3
4
"Dashboard": {
  "Enabled": false,
  "LivePositions": false
}

Добровольная телеметрия на дашборд ssAnticheat: живая лента обнаружений и банов, история банов и базовое состояние сервера. Оба ключа по умолчанию false — ничего не уходит с вашей машины, пока вы их не включите.

Поле Тип По умолчанию Описание
Enabled boolean false Главный переключатель телеметрии дашборда.
LivePositions boolean false Дополнительно отправлять позиции игроков, чтобы дашборд мог рисовать живую карту. По сути, это живой обзор местоположения каждого игрока — оставьте выключенным, если вам это не нужно.

Используйте ssac.status, чтобы проверить, действительно ли идёт телеметрия, и ssac.testdetection, чтобы пропустить через конвейер симулированное обнаружение.

Join Tracker

1
2
3
4
5
"Join Tracker": {
  "Enabled": true,
  "Include IP": true,
  "JoinLogs": ""
}

Публикует сообщение в Discord каждый раз, когда игрок заходит на сервер, с его именем, Steam ID, племенем и местом появления.

Поле Тип По умолчанию Описание
Enabled boolean true Переключатель логирования входов.
Include IP boolean true Включать в сообщение IP-адрес подключения.
JoinLogs string "" URL вебхука для логов входов. Пусто означает, что логи входов собираются, но не публикуются.

⚠️ IP-адреса — это персональные данные. Если вы включаете Include IP, отправляйте логи входов в приватный канал, доступный только администраторам, и уточните, что требуют от вас местные нормы, прежде чем хранить их.

Admin ESP

Настройки внутриигрового ESP-оверлея администратора, переключаемого для каждого администратора отдельно с помощью семейства команд !esp.

1
2
3
4
5
6
"Admin ESP": {
  "Enabled": true,
  "RefreshTime": 0.1,
  "Range": 30000,
  "Structure ESP": ["Box"]
}
Поле Тип По умолчанию Описание
Enabled boolean true Зарезервировано. Доступ к командам ESP определяется статусом администратора ARK, а не этим ключом.
RefreshTime number 0.1 Как долго живёт каждая отрисованная метка/рамка, в секундах. Меньше = более плавно, больше вызовов отрисовки на клиенте.
Range number 30000 Радиус сканирования (в юнитах Unreal) вокруг администратора.
Structure ESP array ["Box"] Подстроки имён чертежей построек, которые нужно подсвечивать, когда ESP построек включён. "Box" соответствует ящикам для хранения; добавьте, например, "Vault" или "Turret".

ServerCrash

1
2
3
4
"ServerCrash": {
  "SaveWorld": true,
  "AutomaticRestart": true
}

Что делать, когда процесс сервера падает.

Поле Тип По умолчанию Описание
SaveWorld boolean true Попытаться сохранить мир изнутри обработчика краша, чтобы краш стоил минуты, а не весь интервал сохранения.
AutomaticRestart boolean true Автоматически перезапускать сервер через небольшую задержку после краша. Отключите это, если ваш менеджер сервера (ASM, ArkServerManager, обёртка-служба и т. д.) уже перезапускает сервер при выходе — иначе два перезапуска будут конкурировать друг с другом.

Fixes

Исправления для известных глитчей сервера и путей эксплойтов. Это не детекторы — никто не помечается и не банится с их помощью; проблемное поведение просто предотвращается.

1
2
3
4
5
6
7
8
"Fixes": {
  "Scout Glitch Fix":         { "Enabled": true },
  "Handcuff Glitch Fix":      { "Enabled": false },
  "Player Already Connected": { "Enabled": true },
  "Pull Fix":                 { "Enabled": true },
  "Lag Protector":            { "Enabled": true },
  "Dupe Fix":                 { "Enabled": true }
}
Исправление По умолчанию Что оно делает
Scout Glitch Fix true Исправляет поведение переноски у Scout, закрывая известный глитч Scout.
Handcuff Glitch Fix false Повторно надевает наручники на игрока, который заходит обратно после выхода из игры в наручниках — закрывая трюк «выйти из игры, чтобы избавиться от наручников». По умолчанию отключено; включите, если наручники являются частью того, как работают ваши администраторы или игроки.
Player Already Connected true Очищает зависшую сессию, вызывающую ошибку «player already connected», чтобы игрокам не приходилось её пережидать.
Pull Fix true Блокирует эксплойт server pull из Structures Plus, при котором притягивание используется для массового вытягивания запрещённых предметов (жертвоприношений боссов и подобных) из контейнера. Игроку показывается сообщение «You can't pull this craft».
Lag Protector true Защита от гриферства с намеренным вызовом лагов сервера. Требует дополнительных ключей — см. ниже.
Dupe Fix true Уничтожает продублированные тайники предметов смерти S+: второй тайник смерти, появившийся поверх уже существующего, удаляется вместо того, чтобы удваивать его содержимое.

Каждое исправление принимает флаг Enabled. Lag Protector принимает ещё три.

Lag Protector

Lag Protector изначально содержит только Enabled, и каждая из его защит добавляется по желанию — добавьте ключи самостоятельно, чтобы их включить:

1
2
3
4
5
6
"Lag Protector": {
  "Enabled": true,
  "WhipProtection": true,
  "BlueprintProtection": true,
  "LagWebhook": ""
}
Поле Тип По умолчанию Описание
WhipProtection boolean false Кикать игрока, который стреляет из оружия внутри зоны, настолько плотно застроенной, что это лагает сервер — классическое гриферство «whip in a mega-base» (стрельба в мегабазе).
BlueprintProtection boolean false Кикать игрока, который ставит в очередь неправдоподобно большое количество крафтов по чертежам за несколько секунд.
LagWebhook string "" Вебхук для киков от защиты от лагов. Если пусто, ничего не отправляется.

Кики от этого исправления несут намеренно непрозрачный код причины, чтобы грифер ничего из него не узнал: 0x7E3 — это защита от whip, 0x4DE — защита от чертежей.

ℹ️ Добавленные вами ключи сохраняются. Самовосстановление конфигурации только добавляет отсутствующие ключи — оно никогда не удаляет ключи, которые не распознаёт, поэтому три ключа выше переживут обновления плагина.

IntegratedBanSystem и AutoBan

Эти два раздела управляют конвейером банов и подробно описаны на странице Баны и обнаружения:

"IntegratedBanSystem": {
  "Enabled": true,
  "UseIPBans": true,
  "UseHWIDBans": false,
  "Exclude IPS": [],
  "BanMessage": "You are banned from our server\nReason: {reason}\nBan id: {ban_id}\nUnban at: https://store.example.com"
},
"AutoBan": {
  "SaveWorld Cycles": 2,
  "ExecuteCommand": "banplayer {steamid} "
}

⚠️ Замените URL в BanMessage. Он поставляется с заглушкой example.com. Укажите ссылку на ваш собственный магазин или страницу апелляции.


Modules

Каждый детектор находится внутри Modules, в одной из четырёх категорий:

Категория Что она охватывает
CombatCheats Читы боевого времени — помощь в прицеливании, манипуляции со скорострельностью и боеприпасами, автоматизация расходников.
MiscCheats Клиентская автоматизация и клиентские инструменты — auto-loot, auto-craft, спуферы, аномалии тайминга, а также проверка при подключении.
Mod Проверки, требующие необязательного клиентского мода-компаньона (включая захват аппаратного ID и обнаружение обхода мода). Неактивно, если этот мод не развёрнут — спросите в Discord Bytemart, если он вам нужен.
Exploits Известные эксплойты игры и модов: способы дюпа, векторы крашей, анлокеры, злоупотребление ездовыми и постройками, защита администраторов и другое.

Структура всегда одинаковая:

"Modules": {
  "CombatCheats": {
    "Enabled": true,
    "SubModules": {
      "AutoFlak":   { "Enabled": true, "Block": true, "TimesUntilDetect": 6 },
      "NoOverheat": { "Enabled": true, "Block": true, "BanAfterDetections": 2 },
      "...":        { "...": "..." }
    }
  },
  "MiscCheats": { "Enabled": true, "SubModules": { "...": "..." } },
  "Mod":        { "Enabled": true, "SubModules": { "...": "..." } },
  "Exploits":   { "Enabled": true, "SubModules": { "...": "..." } }
}

Enabled: false на уровне категории отключает все модули внутри неё, независимо от того, что говорят отдельные флаги. Ваш поставляемый config.json содержит полный список подмодулей с разумными значениями по умолчанию — приведённый ниже справочник объясняет ключи, которые вы там найдёте.

Общие ключи подмодулей

Ключ Тип Значение
Enabled boolean Включить или отключить этот конкретный детектор.
Block boolean Предотвращать читерское действие, а не только сообщать о нём. Когда false, действие проходит, и вы получаете только оповещение — полезно, пока вы набираете уверенность в модуле на своём сервере.
BanAfterDetections number Поставить игрока в очередь на бан после этого количества обнаружений этим модулем. Отсутствие ключа или 0 означает, что этот модуль никогда не банит сам по себе.
InstantBan boolean Выполнить этот бан немедленно, не дожидаясь следующей волны банов.
OnlyAnalysis boolean Обнаруживать и записывать, но не публиковать в ваш вебхук Discord. Тихий режим для оценки модуля.
WebhookUrl string Отправлять оповещения этого модуля на конкретный вебхук вместо DefaultWebhookUrl.
Threshole / *Threshold number Чувствительность модуля. Выше = требуется больше доказательств до срабатывания. Написание Threshole в ключах, где оно используется, — намеренное.
BlockMovement boolean Используется несколькими модулями-анлокерами: замораживает нарушителя на месте, а не только помечает его.

Некоторые модули добавляют собственные ключи — например, список имён чертежей, исключаемых из проверки, или дополнительный подфлаг для конкретного варианта эксплойта. Они описаны в config_commented.json там, где это не очевидно само по себе.

💡 Советы по настройке. Начните со значений по умолчанию. Если модуль даёт ложные срабатывания на вашем сервере, предпочтительнее повысить его порог или BanAfterDetections, а не отключать его полностью — и включить OnlyAnalysis, пока вы за ним наблюдаете.

Проверка при подключении

Один модуль в MiscCheats стоит выделить отдельно, потому что он требует внешней настройки: трекер сессий проверяет входящего игрока через Steam Web API и может отклонять аккаунты, которые выглядят одноразовыми.

"SessionTracker": {
  "Enabled": true,
  "WebhookUrl": "",
  "Checks": {
    "AccountRestrictions": {
      "MinGameHours": 30,
      "BlockMinGameHours": false,
      "LogMinGameHours": true,
      "MinAccountAgeDays": 30,
      "BlockMinAccountAgeDays": false,
      "LogMinAccountAgeDays": true
    },
    "VacBanRestrictions": {
      "Block": false,
      "RecentDaysThreshole": 90,
      "Log": true
    }
  }
}
Поле Тип По умолчанию Описание
WebhookUrl string "" Вебхук для результатов проверки. Если пусто, используется DefaultWebhookUrl.
MinGameHours number 30 Минимальное время в ARK, в часах.
BlockMinGameHours boolean false Кикать игроков с меньшим временем в игре.
LogMinGameHours boolean true Сообщать об игроках с меньшим временем в игре.
MinAccountAgeDays number 30 Минимальный возраст аккаунта Steam, в днях.
BlockMinAccountAgeDays boolean false Кикать аккаунты моложе этого возраста.
LogMinAccountAgeDays boolean true Сообщать об аккаунтах моложе этого возраста.
VacBanRestrictions.RecentDaysThreshole number 90 Насколько недавним должен быть VAC-бан, чтобы учитываться.
VacBanRestrictions.Block boolean false Кикать игроков с недавним VAC-баном.
VacBanRestrictions.Log boolean true Сообщать об игроках с недавним VAC-баном.

ℹ️ Требует SteamAPIKey. Без ключа эти проверки не могут выполняться. Также учтите, что игрок с приватным профилем Steam скрывает своё время в игре — решайте осознанно, нужны ли вам Block*, поскольку это оттолкнёт часть добросовестных игроков.


Дальнейшие шаги: