К руководству

Документация 9.6.24

server.cfg, convar и права доступа

На этой странице перечислены все convar, которые читает Tosun AntiCheat, все проверяемые им права ACE, а также файлы и разделы конфигурации, которые можно редактировать. Она начинается с полного блока server.cfg и также описывает convar защиты FiveM, которые AC проверяет при запуске.

Где хранится конфигурация#

Tosun AntiCheat читает настройки из server.cfg, четырёх файлов в ресурсе и веб-панели. Учётные данные должны находиться только в местах, доступных лишь серверу. configs/anticheat_config.lua — общий скрипт, поэтому сервер отправляет его каждому клиенту.

Файл или местоГде загружаетсяЧто там хранится
server.cfgСерверConvar (лицензия, ключ панели, доверенные ресурсы), права ACE и convar защиты FiveM.
configs/anticheat_server.luaТолько сервер, до серверных скриптов ACЗапасной источник учётных данных, если вы не используете convar: panelKey, centralToken и licenseKey.
configs/anticheat_config.luaОбщий: сервер и каждый клиентВсе настройки ts: обнаружения, наказания, защиты, меню администратора и списки. Никогда не размещайте здесь ключи, токены или лицензию.
configs/anticheat_webhooks.luaТолько серверURL вебхуков Discord и стиль embed.
admins/anticheat_admins.luaТолько серверСписок идентификаторов Admins (статус персонала и меню администратора).
Web panel (ac_settings and ac_ tables)Синхронизируется на серверПереопределяет большинство значений конфигурации примерно через 3 с после запуска, а затем каждые ts.ServerPerf.configSyncIntervalSec секунд (в поставке 120).

Полный пример server.cfg#

Полный блок для типовой установки. Порядок важен: зависимости и convar с учётными данными должны идти до ensure tosun-ac, потому что учётные данные определяются один раз при загрузке ресурса. Строки, начинающиеся с одного #, необязательны; чтобы использовать их, удалите #.

## ---------- Tosun AntiCheat: блок server.cfg ----------
## OneSync — зависимость манифеста (txAdmin также может его включить).
set onesync on

## Зависимости: запускайте их до tosun-ac.
## oxmysql и tosun_render — обязательные зависимости.
## screenshot-basic — значение ts.screenshotModule по умолчанию.
## Настройте mysql_connection_string до ensure oxmysql (см. руководство по MySQL).
ensure oxmysql
ensure screenshot-basic
ensure tosun_render

## Учётные данные: используйте set (никогда setr или sets) и держите их ВЫШЕ ensure tosun-ac.
## Они читаются один раз при загрузке ресурса.
## Формат лицензии: tac_live_ и 40 шестнадцатеричных символов в нижнем регистре.
set tosun_ac_license "YOUR_LICENSE_KEY"
## Необязательно: если пусто, ключ панели загружается из panel_settings в игровой БД.
# set tosun_ac_panel_key "YOUR_PANEL_API_KEY"
# set tosun_ac_central_token "YOUR_FIVEM_SCOPED_TOKEN"
## Необязательно: используется только ts.licenseLock.
# set tosun_ac_server_id "server-1"

## Ресурсы, которым разрешено вызывать защищённые экспорты AC (через запятую).
set tosun_ac_trusted_resources "my-housing,my-clothing"

## Необязательно: публичный https-адрес панели для загрузки скриншотов и доказательств.
# set ts_public_panel_url "https://panel.example.com"

## Необязательно: управление DB bridge Tosun Connect из этого файла.
## Без строки manual (и при выключенном ts.panelMirror) оба convar моста принудительно равны "1".
# set tosun_db_bridge_manual "1"
# set tosun_db_bridge_enabled "1"
# set tosun_db_bridge_money_write "0"

## Необязательно: отключить запись игрового времени (только qb, qbcore и qbox).
# set tosun_panel_playtime "0"

## Необязательно, для интеграторов, использующих файлы моста. Их читают клиенты, поэтому используйте setr.
# setr tosun_ac_resource "tosun-ac"
# setr tosun_ac_bridge_client_ms "60000"

ensure tosun-ac

## ---------- Права персонала ----------
## Статус персонала и внутриигровое меню администратора:
add_ace group.admin tosun.admin allow
## tosunac_setup, ручные сканирования и предпросмотр экрана бана:
add_ace group.admin tosunac.admin allow
add_ace group.admin command.tosunac_setup allow
add_ace group.admin command.tosunac_backdoorscan allow
add_ace group.admin command.tosunac_eventscan allow
add_ace group.admin tosunac.banscreen.test allow
## По одной строке на каждого сотрудника:
add_principal identifier.license:YOUR_LICENSE_HEX group.admin

## ---------- Convar защиты FiveM, которые AC проверяет при запуске ----------
set sv_stateBagStrictMode true
set sv_filterRequestControl 2
set sv_enableNetworkedSounds false
set sv_enableNetworkedPhoneExplosions false
set sv_enableNetworkedScriptEntityStates false
set sv_scriptHookAllowed false
## Сначала протестируйте: relaxed или strict могут сломать скрипты, которые спавнят транспорт с клиента.
set sv_entityLockdown relaxed
set sv_pureLevel 1
## Аудит server.cfg предупреждает, пока это значение пустое:
# set sv_enforceGameBuild YOUR_GAME_BUILD

Правила для блока server.cfg#

Соблюдайте эти правила, адаптируя пример под свой сервер.

  • Запускайте oxmysql и tosun_render до tosun-ac. Манифест объявляет зависимостями сборку сервера 4890 или новее, OneSync, oxmysql и tosun_render.
  • Запускайте screenshot-basic, если оставляете ts.screenshotModule по умолчанию.
  • Размещайте все строки set tosun_ac_ с учётными данными до ensure tosun-ac. Значения читаются один раз при загрузке; для последующего изменения нужен перезапуск ресурса.
  • Для учётных данных используйте set. setr реплицирует значение на каждый клиент, а sets публикует его в публичной информации о сервере.
  • Используйте setr только для convar, которые читают клиенты: ts_screen_upload, tosun_ac_resource и tosun_ac_bridge_client_ms.
  • Строка для DB bridge не нужна. Начиная с 9.6.14 мост включён по умолчанию, а строки set ... "0" игнорируются, если tosun_db_bridge_manual не равен "1" и не задано ts.panelMirror.enabled = true.
  • Старые руководства по установке (INSTALLER-READY.md, INSTALLER-LICENSE.md, INSTALL-MULTILANG.md, CONFIG-PERFORMANCE-GUIDE.md) ставят ensure перед учётными данными, помещают ключ панели в configs/anticheat_config.lua и не упоминают tosun_render. Следуйте этой странице.

Справочник convar#

Все convar, которые читает Tosun AntiCheat и которые вы можете задавать. Используйте set, если в столбце «Примечания» не указан setr. AC также записывает и читает несколько собственных внутренних convar; они защищены, задавать их нельзя.

ConvarПо умолчаниюЧто делаетПримечания
tosun_ac_license""Лицензионный ключ сервера. Читается один раз при загрузке в ts.licenseLock.licenseKey. Блокировка лицензии и DB bridge Tosun Connect позже также перечитывают convar.Учётные данные: только set, до ensure. Формат: tac_live_ и 40 шестнадцатеричных символов в нижнем регистре. DB bridge считает значение отсутствующим, если оно не длиной от 16 до 128 символов без пробелов.
tosun_ac_panel_key""API-ключ панели. Отправляется в исходящих вызовах панели и используется для авторизации входящих запросов панели.Учётные данные: только set. После изменения перезапустите ресурс. Если пусто, AC копирует panel_settings.ac_api_key из игровой БД. При каждом запуске он записывается открытым текстом в строку webPanelKey таблицы ac_settings.
tosun_ac_central_token""Токен авторизации для проверки версии и центрального API v9. Используется вместо ключа панели, если задан.Учётные данные: только set.
tosun_ac_server_id"" (ts.licenseLock.serverId)Идентификатор сервера для блокировки лицензии. Имеет значение, только если ts.licenseLock.enabled = true и allowedServerIds не пуст.Не секрет. После каждой проверки лицензии AC перезаписывает его как реплицируемый convar, поэтому клиенты могут его видеть. Экспорт licenseStatus возвращает его как serverId.
tosun_ac_trusted_resources""Ресурсы (через запятую или пробел), которым разрешено вызывать защищённые экспорты. Объединяется с ts.ExportCallerWhitelist.Для разработчиков. Перечитывается в течение 10 с и сохраняется при обновлениях AC. Проверяйте консольной командой tosunac_integration.
ts_public_panel_url""Публичный базовый адрес панели для загрузки скриншотов, доказательств бана и живого видео (base/api/screen_upload.php). Имеет приоритет над ts.webPanelURL.Нужен, только если публичный URL отличается от ts.webPanelURL. Должен быть https.
ts_screen_uploadhttp://localhost/api/screen_upload.phpURL загрузки для захвата screenshot-basic, используемого экспортом screenCapture, командами /capture и /ts_capture и действием захвата web-bridge панели.Используйте setr: читается на клиенте. Значение по умолчанию указывает на localhost. У AC нет обработчика результата загрузки, поэтому результат отбрасывается.
tosun_db_bridge_manual"0""1" не даёт AC принудительно задавать два convar моста ниже, и ими управляет server.cfg.Задайте до запуска ресурса.
tosun_db_bridge_enabled"0" в коде, при загрузке принудительно "1"Включает DB bridge Tosun Connect, работающий по запросу.Значение из server.cfg учитывается только при tosun_db_bridge_manual "1" или ts.panelMirror.enabled = true. При включённом panelMirror AC не задаёт его принудительно, поэтому мост остаётся выключенным, пока server.cfg его не включит.
tosun_db_bridge_money_write"0" в коде, при загрузке принудительно "1"Разрешает операцию моста player.money.set, которая задаёт баланс игрока онлайн.Если значение не "1", операция завершается ошибкой write_disabled. Чтобы задать "0" из server.cfg, нужен ручной режим.
tosun_db_bridge_query_timeout_ms5000 (от 1000 до 10000)Тайм-аут наблюдения для каждого SQL-запроса моста.Тайм-аут сообщает query_timeout, но не отменяет запрос.
tosun_panel_playtime"1""0" отключает запись, заполняющую players.playtime. Действует только для qb, qbcore или qbox.Читается один раз при загрузке. ALTER TABLE, добавляющий столбец playtime, всё равно выполняется через 20 с после запуска даже при "0". Достаточно set, хотя заголовок файла предлагает setr.
tosun_panel_playtime_interval_ms120000 (от 30000 до 600000)Интервал цикла записи игрового времени.Достаточно set.
tosun_ac_resource"tosun-ac"Имя ресурса AC, используемое необязательными файлами моста внутри вашего ресурса.Для разработчиков. Используйте setr, если переименовали папку AC: клиентский мост видит только реплицируемые convar.
tosun_ac_bridge_server_ms60000 (от 500 до 300000)Длительность освобождения по умолчанию для TosunAC.PlayerExempt в серверном мосте.Для разработчиков. Достаточно set.
tosun_ac_bridge_cooldown_ms750 (0 отключает)Задержка на игрока, отбрасывающая повторные вызовы TosunAC.PlayerExempt в серверном мосте.Для разработчиков. Достаточно set.
tosun_ac_bridge_client_ms60000 (от 500 до 300000)Длительность TosunAC.Exempt() по умолчанию в клиентском мосте.Для разработчиков. Требуется setr.

Учётные данные: приоритет и обращение#

Три учётных данных определяются один раз при загрузке ресурса: лицензионный ключ, API-ключ панели и центральный токен. Для каждого AC берёт первое непустое значение в следующем порядке.

Предупреждение MIGRATION просит очистить общее значение и заменить все учётные данные, которые когда-либо там хранились, потому что этот файл отправляется каждому клиенту.

Значение длиннее 4096 символов или содержащее управляющие символы останавливает загрузку с ошибкой Invalid server credential setting.

Только для ключа панели: если после этих шагов он всё ещё пуст, AC копирует panel_settings.ac_api_key из игровой БД. При каждом запуске AC записывает итоговый ключ открытым текстом в строку webPanelKey таблицы ac_settings. Если кто-то изменит эту строку в панели, изменённое значение заменит ваше до следующего перезапуска.

Только для лицензионного ключа: блокировка лицензии принимает форматы tac_live_ плюс 40 шестнадцатеричных символов в нижнем регистре (49 символов), TOSUN-AC-YYYY-... и TOSUN-.... Проверка формата выполняется, только если ts.licenseLock.enabled = true, и проверяет лишь формат.

  1. Серверный convar: tosun_ac_license, tosun_ac_panel_key или tosun_ac_central_token.
  2. Значение в configs/anticheat_server.lua: licenseKey, panelKey или centralToken.
  3. Устаревшее значение в общем configs/anticheat_config.lua: ts.licenseLock.licenseKey, ts.webPanelKey или ts.Central.token. Любое значение здесь выводит в консоль предупреждение MIGRATION.

configs/anticheat_server.lua#

Используйте этот файл, доступный только серверу, если не хотите хранить учётные данные в server.cfg. Он загружается до серверных скриптов AC и на клиентах сразу завершается. Оставьте поле пустым, чтобы продолжать использовать convar или поиск в базе данных.

  • Непустой convar всегда имеет приоритет над значением в этом файле.
  • Оставляйте соответствующие поля в configs/anticheat_config.lua пустыми: ts.webPanelKey, ts.Central.token и ts.licenseLock.licenseKey.
  • Храните резервные копии этого файла в закрытом доступе.
  • Файл лишь заполняет ts.webPanelKey, ts.Central.token и ts.licenseLock.licenseKey. Другие скрипты читают эти значения, а не файл.
-- configs/anticheat_server.lua (только сервер)
local credentials = {
    panelKey = '',     -- или: set tosun_ac_panel_key "YOUR_PANEL_API_KEY"
    centralToken = '', -- или: set tosun_ac_central_token "YOUR_FIVEM_SCOPED_TOKEN"
    licenseKey = '',   -- или: set tosun_ac_license "YOUR_SERVER_LICENSE"
}

URL панели и загрузка скриншотов#

ts.webPanelURL в configs/anticheat_config.lua — базовый URL панели. Его можно оставить пустым: в этом случае AC загружает panel_url или site_url из panel_settings в игровой БД и сохраняет его в ac_settings. HTTP-синхронизация настроек работает, только если заданы и URL, и ключ панели.

Задавайте ts_public_panel_url, только если скриншоты, доказательства бана и живое видео должны идти на другой публичный адрес. Он должен быть https. Токены загрузки выдаются для https://host/api/screen_upload.php, только если базовый адрес совпадает с этим convar или с ts.webPanelURL.

ts_screen_upload — отдельный путь, используемый экспортом screenCapture и командами /capture и /ts_capture. Ему нужен setr, а значение по умолчанию указывает на localhost. Ничто в AC не обрабатывает результат этой загрузки.

Устаревшие имена ts.PanelUrl, ts.panelUrl и ts.webPanelUrl по-прежнему читаются как запасные варианты.

Convar DB bridge Tosun Connect#

Начиная с 9.6.14 DB bridge, работающий по запросу, включён по умолчанию и не требует строки в server.cfg. При загрузке editable/server/tosun_db_bridge_defaults.lua задаёт tosun_db_bridge_enabled и tosun_db_bridge_money_write равными "1", поэтому строки "0" из старых руководств игнорируются.

Подключение можно отключить и для одного сервера в панели: Servers, затем сервер, затем карточка Tosun Connect.

Мост опрашивает https://admin.tosundev.com/api/server_db_bridge.php, отправляет ваш лицензионный ключ как Bearer-токен и выполняет только операции players.list, player.detail, player.vehicles, bans.list, logs.list и player.money.set.

При ts.panelMirror.enabled = true AC не включает мост принудительно, поэтому устаревшее зеркалирование продолжает работать. Само зеркалирование не работает, пока tosun_db_bridge_enabled равен "1".

Консольные команды tosunac_db_status и tosunac_db_check показывают состояние моста и проверяют oxmysql.

  1. Чтобы управлять мостом из server.cfg, добавьте set tosun_db_bridge_manual "1" до ensure tosun-ac.
  2. Добавьте set tosun_db_bridge_enabled со значением "1" или "0".
  3. Добавьте set tosun_db_bridge_money_write со значением "1" или "0". Без "1" player.money.set завершается ошибкой write_disabled и не объявляется панели.

Convar для разработчиков скриптов#

Эти convar важны, только когда AC вызывает другой ресурс. tosun_ac_trusted_resources определяет, каким ресурсам разрешено вызывать защищённые экспорты; convar моста настраивают необязательные файлы моста.

К защищённым экспортам относятся SetExempt, SetPlayerExempt, экспорты Pause, BypassDetection, addAdmin, whitelistPlayer, approveResource, ban, offlineBan, экспорты webBridge и quarantine.

Серверная консоль и сам tosun-ac всегда доверенные. Недоверенный вызов отклоняется; для каждой пары «ресурс + экспорт» AC выводит одно предупреждение в консоль и одну строку в лог панели с упоминанием этого convar. При ts.EnforceExportCallerWhitelist = false вызов выполняется и лишь один раз записывается в лог.

Доверенные вызывающие также получают MarkTeleport без бюджета на игрока.

INTEGRATION.md и bridge/INTEGRATION.txt показывают set для tosun_ac_resource и tosun_ac_bridge_client_ms. Используйте вместо этого setr: клиентский мост читает оба значения на клиенте.

Существуют также внутренние события и экспорты AC. Они защищены, и вызывать их из ваших ресурсов нельзя.

# Ресурсы, которым разрешено вызывать защищённые экспорты (через запятую или пробел)
set tosun_ac_trusted_resources "my-housing,my-clothing"

# Файлы моста внутри вашего ресурса
setr tosun_ac_resource "tosun-ac"
setr tosun_ac_bridge_client_ms "60000"
set tosun_ac_bridge_server_ms "60000"
set tosun_ac_bridge_cooldown_ms "750"

Права ACE#

Все ACE, которые проверяет Tosun AntiCheat. Выдавайте ACE группе и добавляйте персонал в группу через add_principal. ACE, который есть и у builtin.everyone, никогда не делает никого персоналом.

ACE или principalЧто даётПример строки
tosun.adminСтатус персонала (освобождение от наказаний и команды персонала) и внутриигровое меню администратора. Не открывает доступ к tosunac_setup и ручным сканированиям.add_ace group.admin tosun.admin allow
ts.adminТо же, что tosun.admin.add_ace group.admin ts.admin allow
command.tsСтатус персонала и меню администратора. Сама /ts зарегистрирована без ограничений, поэтому этот ACE — маркер роли для AC, а не барьер FiveM.add_ace group.admin command.ts allow
command.ban, command.kickСтатус персонала и меню администратора, даже при ts.txAdminAuth = false.add_ace group.admin command.ban allow
txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadminТолько статус персонала. Без меню администратора.Usually granted by txAdmin, or: add_ace group.admin txadmin.menu allow
command.resources, command.restartСтатус персонала только при ts.txAdminAuth = true. Без меню администратора.Usually granted by txAdmin
command.screenshot, command.unbanТолько освобождение от наказаний, при ts.txAdminAuth = true. Без команд персонала и без меню администратора.Usually granted by txAdmin
group.admin, group.superadmin, group.moderator, group.godПроверяются как ACE-объекты. Дают статус персонала и меню, только если имя разрешается в разрешённый ACE для игрока. Дополнительно выдайте явный ACE, например tosun.admin.add_principal identifier.license:YOUR_LICENSE_HEX group.admin
tosunac.adminИспользование в игре tosunac_setup, tosunac_backdoorscan и tosunac_eventscan (каждой также нужен ACE её команды) и /banscreentest. Без статуса персонала и без меню.add_ace group.admin tosunac.admin allow
tosunac.banscreen.test/banscreentest в игре: предпросмотр экрана бана только у вызывающего.add_ace group.admin tosunac.banscreen.test allow
command.tosunac_setupОграниченная команда. Игроку также нужен tosunac.admin.add_ace group.admin command.tosunac_setup allow
command.tosunac_backdoorscanОграниченная команда. Игроку также нужен tosunac.admin.add_ace group.admin command.tosunac_backdoorscan allow
command.tosunac_eventscanОграниченная команда. Игроку также нужен tosunac.admin.add_ace group.admin command.tosunac_eventscan allow
command.ts_setlangОграниченная команда. Игроку также нужен статус персонала.add_ace group.admin command.ts_setlang allow
command.ts_v9_helpОграниченная команда без других проверок. Вывод идёт в серверную консоль.add_ace group.admin command.ts_v9_help allow
command.tosunac_integration, command.tosunac_doctor, command.ac_cleanup, command.tosunac_db_status, command.tosunac_db_checkВ игре ничего. Эти команды работают только из консоли и игнорируют игроков, даже если у них есть ACE.Run them from the server console
command (bare ACE)Не даёт статус персонала, если он есть у builtin.everyone. Однако это один из ACE обхода проверки IP при подключении, а у этой проверки нет фильтра builtin.everyone.Do not use: add_ace builtin.everyone command allow
ts.AdminBypassAces (config list)Даёт статус персонала, но не меню. Записи в поставке: command.ts, ACE txAdmin, command.kick, command.ban, четыре имени групп, tosun.admin и ts.admin. Никогда не добавляйте голый ACE command.ts.AdminBypassAces = { "command.ts", ..., "your.staff.ace" }

Ограниченные и консольные команды#

Десять команд AC зарегистрированы как ограниченные (restricted). В игре FiveM в этом случае требует соответствующий ACE команды в дополнение к собственной проверке AC. Пять из десяти полностью игнорируют игроков.

banscreentest не ограничена. Консольной форме banscreentest playerId ACE не нужен; внутриигровой /banscreentest нужен tosunac.banscreen.test или tosunac.admin. Отказы для tosunac_setup, двух сканирований и banscreentest происходят молча.

tosunac_setup ничего не утверждает, если сканирование на бэкдоры или сигнатуры не завершилось, в том числе когда ts.BackdoorGuard отключён. Повторный запуск во время уже идущего отклоняется.

КомандаКто может запуститьЧто делает
tosunac_setupКонсоль или игрок с command.tosunac_setup и tosunac.adminАвтонастройка: определяет фреймворк, запускает сканирования на бэкдоры и сигнатуры, утверждает чистые ресурсы в базовом списке и каталогизирует события, не доверяя им. Запускайте только на сервере, в чистоте которого вы уверены.
tosunac_backdoorscanКонсоль или command.tosunac_backdoorscan и tosunac.adminРучное сканирование на бэкдоры. Не регистрируется при ts.BackdoorGuard.enabled = false.
tosunac_eventscanКонсоль или command.tosunac_eventscan и tosunac.adminРучное сканирование событий и триггеров с отправкой в панель. Не регистрируется при ts.EventScanner.enabled = false.
ts_setlang playerId langКонсоль или command.ts_setlang и статус персоналаЗадаёт язык AC для одного игрока. Не проверяет, что игрок с этим ID онлайн.
ts_v9_helpКонсоль или command.ts_v9_helpВыводит в серверную консоль список дополнительных команд v9.
tosunac_integrationТолько консольВыводит режим применения экспортов, доверенные ресурсы и их источник, а также последние 20 отказов.
tosunac_doctorТолько консольОтчёт о рисках применённых настроек. Также запускается через 90 с после старта. Вывод на турецком.
ac_cleanupТолько консольСразу запускает очистку базы данных по сроку хранения. Выводимое число обычно занижено. Не регистрируется при ts.v12.enableAutoCleanup = false.
tosunac_db_statusТолько консольВыводит состояние DB bridge, лицензии, oxmysql и фреймворк.
tosunac_db_checkТолько консольВыполняет SELECT 1 через oxmysql и выводит результат: успех или ошибка.

Как определяется персонал#

У AC два отдельных уровня доступа. Статус персонала даёт освобождение от наказаний и команды персонала (подкоманды /ts и команды ts_). Доступ к меню открывает внутриигровое меню администратора. Некоторые источники дают только один из них.

Освобождение персонала от наказаний действует, только пока ts.AdminBypassDetections = true (в поставке) и ts.Debug = false (в поставке).

Для доступа к меню также нужно, чтобы ts.AdminMenu.enable и ts.AdminMenu.enabled оставались true. Если любой из них равен false, меню, клавиша F7 и клиентские команды инструментов администратора не регистрируются.

Персонал со статусом персонала, но без доступа к меню (например, только из txAdmin), всё равно может нажать F7. Запрос отклоняется и записывается в лог.

ИсточникГде задаётсяСтатус персоналаМеню администратораПримечания
ACE tosun.admin, ts.admin, command.tsserver.cfg add_aceДаДаРекомендуемый способ выдачи прав персонала.
ACE command.ban, command.kickserver.cfg или txAdminДаДаОстаётся персоналом даже при ts.txAdminAuth = false.
Principals group.admin, group.superadmin, group.moderator, group.godserver.cfg add_principalТолько если имя разрешается в разрешённый ACEТо же условиеПроверяются как ACE-объекты. Дополнительно добавьте явный ACE.
ACE txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmintxAdmin или add_aceДаНетАдминистраторам txAdmin для меню нужен tosun.admin или права из панели.
ACE command.resources, command.restarttxAdminТолько при ts.txAdminAuth = trueНетОбычно выдаётся txAdmin.
ACE command.screenshot, command.unbantxAdminТолько освобождение, при ts.txAdminAuth = trueНетБез команд персонала.
ts.AdminBypassAcesconfigs/anticheat_config.luaДаНетДобавленные вами записи не открывают меню.
Adminsadmins/anticheat_admins.luaДаДаФайл только для сервера.
ts.AdminMenu.allowedIdsconfigs/anticheat_config.luaДаДа"all" и "staff" не являются идентификаторами и ничего не дают.
ts.AdminBypassIdentifiersconfigs/anticheat_config.luaДаНетКомментарий в конфигурации также упоминает ip:x.x.x.x.
Panel grants (ac_v7_admin_grants)Веб-панельДаДаПоложительный результат кешируется на 5 с, отрицательный — на 30 с.
addAdmin exportДоверенный ресурсДаДаДо вызова removeAdmin.
Player whitelist (ac_whitelist) and runtime whitelistВеб-панель или экспорты белого спискаНет (только освобождение от наказаний)НетИгнорируется при ts.Debug = true.
ACE tosunac.adminserver.cfg add_aceНетНетОткрывает доступ к настройке, ручным сканированиям и предпросмотру экрана бана.

Списки идентификаторов: Admins, allowedIds и AdminBypassIdentifiers#

Используйте полные идентификаторы, например значения license:, steam:, discord: или fivem:. Для персонала предпочитайте admins/anticheat_admins.lua или права из панели: этот файл доступен только серверу, а configs/anticheat_config.lua отправляется каждому клиенту.

  • Admins: запись совпадает с полным идентификатором (без учёта регистра) или с частью после префикса. Даёт статус персонала и меню.
  • ts.AdminMenu.allowedIds: статус персонала и меню. Значения "all" и "staff" ничего не дают.
  • ts.AdminBypassIdentifiers: только статус персонала и освобождение, без меню.
-- admins/anticheat_admins.lua (только сервер)
Admins = {
    "license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "steam:11000010xxxxxxxx",
    "discord:123456789012345678",
}

-- configs/anticheat_config.lua (общий, отправляется клиентам)
ts.AdminMenu = {
    -- остальные ключи меню оставьте как в поставке
    allowedIds = {
        "license:YOUR_EXACT_PLAYER_IDENTIFIER",
    },
}
ts.AdminBypassIdentifiers = {}  -- статус персонала и освобождение, без меню

Права из панели и экспорт addAdmin#

Права из панели — это строки в ac_v7_admin_grants, которые вы создаёте в веб-панели. Активная выдача совпадает с license или license2 игрока, с префиксом или без, и даёт статус персонала и доступ к меню.

Положительный ответ кешируется на 5 с, отрицательный — на 30 с, поэтому новые права могут вступить в силу до 30 с для игрока, которого уже проверяли.

Доверенный ресурс может вызвать экспорт addAdmin, чтобы дать игроку статус персонала и доступ к меню до вызова removeAdmin. Пока ts.EnforceExportCallerWhitelist равен true, вызывающий должен быть указан в tosun_ac_trusted_resources или ts.ExportCallerWhitelist.

Белый список игроков — это не персонал#

Белый список игроков панели (ac_whitelist) и идентификаторы, добавленные во время работы экспортами белого списка, лишь останавливают наказания. Они не дают команд персонала и меню администратора.

  • Строка учитывается, пока expires_at пуст или указывает на будущее.
  • Допустимые значения: идентификатор license, discord, steam или fivem либо citizenid. Префиксы удаляются.
  • Записи времени выполнения хранятся в памяти и теряются при перезапуске.
  • Оба списка игнорируются при ts.Debug = true.

Настройки, меняющие обработку персонала#

Эти ключи в configs/anticheat_config.lua меняют то, как обрабатываются персонал и неавторизованные пользователи меню.

ПараметрЗначение в поставкеЭффект
ts.AdminBypassDetectionstruefalse делает персонал наказуемым, как любого игрока.
ts.txAdminAuthtruefalse отключает путь через ACE команд txAdmin (command.resources, command.restart, command.screenshot, command.unban). command.ban и command.kick по-прежнему дают статус персонала.
ts.Debugfalsetrue отключает обходы для персонала, белого списка, белого списка панели и освобождений, чтобы персонал мог тестировать обнаружения на себе. В рабочей среде держите false.
ts.NuiNeverBanUnauthorizedtruefalse наказывает игроков, вызывающих события меню администратора без прав, а не только записывает их в лог. Наказание — ts.punishType.
ts.AdminMenu.enable, ts.AdminMenu.enabledtrue, truefalse в любом из них отключает меню администратора. enable = false также останавливает модуль уведомлений на телефон.
ts.AdminMenu.requireActionSignaturetruefalse отключает подпись чувствительных действий меню администратора.
ts.v12.bypassStaffIpChecktrueПерсонал пропускает проверки VPN, прокси, хостинга и страны при подключении.

builtin.everyone и проверка IP при подключении#

Каждая проверка ACE персонала и меню игнорирует ACE, который есть и у builtin.everyone. Поэтому add_ace builtin.everyone command allow не делает игроков персоналом. Проверка IP при подключении работает иначе.

Пока ts.v12.bypassStaffIpCheck не равен false, подключающийся игрок пропускает запрет по странам и отказы для VPN, прокси и хостинга в любом из случаев: игрок — персонал; у игрока есть ACE command, txadmin, tx.admin, txadmin.menu, command.kick, command.ban или одно из имён group.admin, group.superadmin, group.moderator или group.god; или активная выдача прав из панели точно совпадает с license игрока.

Эта проверка использует простые проверки ACE без фильтра builtin.everyone. Поэтому на сервере с add_ace builtin.everyone command allow каждый игрок пропускает проверки VPN и страны. Проверка на массовые подключения всё равно выполняется до обхода.

Файл вебхуков Discord#

configs/anticheat_webhooks.lua доступен только серверу. В нём хранится по одному URL вебхука Discord на канал логов и стиль embed. Каждый URL в поставке — заглушка WEBHOOK_URL_BURAYA.

  • HTTP-синхронизация панели перезаписывает любой вебхук, для которого она присылает непустой URL.
  • Другие ресурсы получают URL вебхуков через getConfig('webhooks'), только если они доверенные вызывающие.
  • Логи скриншотов подписывают embed Detections значением ts.punishType, а не итоговым наказанием, и также публикуются в Webhooks.Bans, когда ts.punishType равен BAN.
  • Webhooks.WebhookAvatar задаёт изображение аватара embed.
Webhooks.Detections    = "https://discord.com/api/webhooks/..."
Webhooks.Bans          = "https://discord.com/api/webhooks/..."
Webhooks.AdminMenuLogs = "https://discord.com/api/webhooks/..."
Webhooks.Connections   = "https://discord.com/api/webhooks/..."
Webhooks.OCR           = "https://discord.com/api/webhooks/..."
Webhooks.Commands      = "https://discord.com/api/webhooks/..."
Webhooks.MoneyLogs     = "https://discord.com/api/webhooks/..."
Webhooks.ResourceLogs  = "https://discord.com/api/webhooks/..."

Webhooks.WebhookUsername = "Tosun AntiCheat"
Webhooks.WebhookColor    = 15285208
Webhooks.WebhookInlines  = true

Как панель переопределяет файл конфигурации#

Большинство значений в configs/anticheat_config.lua — значения по умолчанию. Веб-панель хранит свои значения в ac_settings и других таблицах ac_, и эти значения имеют приоритет. Редактируйте файл только для значений, которыми панель не управляет.

  • Примерно через 3 с после запуска, а затем каждые ts.ServerPerf.configSyncIntervalSec секунд (в поставке 120, минимум 20, запасное значение 60) строки ac_settings перезаписывают значения ts.
  • Ключи с точками, например AdminMenu.enable, записывают вложенные поля. Устаревшие плоские ключи, например framework или moneyCheck, сначала сопоставляются.
  • Ключ punishment_ записывает ts.DetectionPunishments для соответствующего обнаружения. BAN и KICK сохраняются; любое другое значение становится LOG.
  • Поля действий нормализуются к ban, kick, log, cancel, reject или stop. Любое другое значение становится log.
  • Ключи, начинающиеся с globalBan., игнорируются.
  • Списки панели заменяют списки конфигурации: оружие, чёрный список транспорта, номера, список триггеров, лимиты событий, ресурсы из белого списка, слова OCR, списки Blacklist, список взрывов и белые списки сущностей. Ресурсы из белого списка и слова OCR из базы данных, наоборот, объединяются.
  • Исключение: обработчики ts.EventLimiter и ts.ProtectedEvents регистрируются один раз из файла при загрузке. Последующие изменения в панели не меняют для них серверное применение.
  • После изменения клиентам повторно отправляются только безопасные для клиента ключи.
  • Выполните tosunac_doctor в консоли, чтобы проверить рискованные значения после синхронизации с панелью.

Основные настройки#

Ключи верхнего уровня в начале configs/anticheat_config.lua. Большинство из них можно также задать в панели.

ПараметрЗначение в поставкеЧто делает
ts.Locale"tr"Язык AC по умолчанию (порядок выбора: язык игрока, ts.Locale, en). Файлы: ar, de, en, es, fr, pt, ru, tr, zh. В поставке турецкий: англоязычным серверам следует задать "en". Значение default_locale из панели может его заменить.
ts.punishType'BAN'Запасное наказание для обнаружений без сопоставления. Это также наказание для ручных банов: экспорт ban, /ts ban, баны из меню администратора и из панели. LOG или KICK превращают их в запись в лог или кик.
ts.Debugfalsetrue отключает обходы для персонала и белого списка. В рабочей среде держите false.
ts.txAdminAuth, ts.AdminBypassDetections, ts.NuiNeverBanUnauthorizedtrue, true, trueОбработка персонала. См. «Настройки, меняющие обработку персонала».
ts.screenshotModule"screenshot-basic"Ресурс, используемый для скриншотов.
ts.banIDFormat11 = ABCD-1234, 2 = #1234.
ts.autoSQLfalsetrue создаёт таблицы при запуске. Комментарий в конфигурации советует задать true при первой установке, а затем вернуть false.
ts.Prefix, ts.showReason'Tosun AntiCheat', trueОформление сообщений о кике и бане.
ts.appealDiscord, ts.appealTicketUrlvendor linksДобавляется к сообщению о бане. appealDiscord в поставке указывает на Discord разработчика (https://discord.gg/9tCSJch) и также служит запасным значением. Укажите свою ссылку для апелляций.
ts.pingOnDetectfalseДобавляет @everyone в embed обнаружений. Текст помещается внутрь объекта embed, а не в content верхнего уровня сообщения.
ts.chatMessagesfalseОбъявляет наказания в чате.
ts.spoilerIPtrueСкрывает IP-адреса под спойлерами в логах Discord.
ts.needDiscordfalsetrue отклоняет игроков без идентификатора Discord.
ts.maxUsernameLength-1Максимальная длина имени игрока. -1 отключает проверку.
ts.webPanelURL, ts.webPanelKey"", ""Оставьте оба пустыми. См. «URL панели и загрузка скриншотов» и разделы об учётных данных.
ts.version"9.6.15"Только для информации. Во время работы используется версия из манифеста.

Разделы конфигурации: обнаружения и наказания#

Разделы, определяющие, что обнаруживается и насколько строго наказывается.

РазделНазначениеЧто обычно меняют владельцы
ts.DetectionPunishmentsНаказание для каждого ключа обнаружения: BAN, KICK или LOG. Порядок: явное наказание, прямой ключ, псевдоним, производный ключ, затем ts.punishType.Отдельные записи. Панель может переопределить каждую. В поставке: BAN для достоверных сигналов, KICK для среднего риска, LOG для зависящих от контекста, таких как freecam, teleport, fastrun, invisibility и ocr.
ts.BanDurationsДлительность бана в часах для каждого ключа обнаружения. 0 или отсутствующий ключ означает навсегда.["default"] (в поставке 0 = навсегда; используется и для ручных банов). Физические обнаружения временные, например superjump, fastrun и teleport — 72 ч, noclip и godmode — 168 ч.
ts.confirmWindowБарьер подтверждения для клиентских физических обнаружений: скорость, телепорт, noclip, superjump, здоровье и броня. Показания при высоком пинге или подтормаживании кадров игнорируются.Рекомендуются значения по умолчанию: confirmFrames 3, confirmMs 3000, maxPingMs 220. hardEscalateHits 8 за 90 с принудительно приводит к наказанию даже при лагах.
ts.v6EnforcementОграничивает наказания от подписанных клиентских эвристик и обнаружений спама.maxAction ("KICK"). confirmHits 2 в пределах confirmWindowSec 600 (минимум 30).
Client detection toggles (ts.anti keys, thresholds, ts.confirmHits)Простые переключатели и лимиты для клиентских обнаружений.Отключайте отдельные проверки. Выключены в поставке: antiRadar, fakeTriggerServerTraps, antiInfiniteStamina, antiPickups, antiClipboardPaste, antiGodmodeV2.
ts.OCR settingsOCR экрана для поиска слов чит-меню.ts.OCR, ts.OCRCheckInterval (20000), ts.OCRWords. Все действия по умолчанию — log, потому что текст чата на экране совпал бы у каждого, кто его видит. Слова из панели объединяются.
ts.quarantineИзоляция через routing bucket, используемая экспортом quarantine вместо бана.defaultSeconds 300, maxSeconds 1800, autoQuarantine (выключен).
ts.autoEvidenceКороткое автоматическое видеодоказательство после серьёзных обнаружений, пока игрок онлайн. Требует tosun_render.durationSec 25, cooldownSec 120, triggers.
ts.forensicsГраф обхода банов, связывающий общие HWID и license с забаненными кластерами.Начните с evasionAction "log". linkByIp выключен.
ts.v16Серверная проверка движения.action ("ban"). teleportAction ("log"): переключите на kick, когда все скрипты, телепортирующие игроков, будут вызывать MarkTeleport.
ts.aimGuardСтатистический анти-аимбот по событиям урона от оружия. Персонал освобождён, пока включён AdminBypassDetections.magicBulletTargets 4 (kick), fireRatePerSec 22 (kick), headshotRatio 0.90 (log).
ts.combatGuardСерверные лимиты здоровья и брони и проверка чрезмерного урона от оружия.healthCap 250, armorCap 105, weaponDamageCap 600. Оба действия — kick.

Разделы конфигурации: серверные защиты#

Защиты, работающие на сервере. Некоторые из них сначала отменяют событие и наказывают только после повторных страйков.

РазделНазначениеЧто обычно меняют владельцы
ts.netEventsСерверно-авторитетные проверки игровых событий.Для каждого подраздела: action, strikes, windowMs, cancel. В поставке: weapons — ban, 2 за 60 с; respawn — kick, 6 за 120 с; vehicleComponent — log; explosionDistance — kick, 250 м, 3 страйка; damageDistance — ban, 600 м, 4.
ts.entityFloodЛимит частоты спавна на игрока. Спавны сверх лимита отменяются.maxPerSec 30, banAfterFloods 3, action ("ban").
ts.crashGuardЛимиты размера, глубины и корректности для значений state bag и данных событий.action ("kick"), strikes 3 за 60 с.
ts.serverAuthorityЧитает состояние, реплицируемое OneSync, чтобы ловить superjump, множители урона и защиты, запрещённое оружие, godmode, невидимость, noclip и фокус камеры.Для каждой проверки: enabled, action, confirm. Высокодостоверные проверки кикают; зависящие от контекста пишут в лог.
ts.shieldAiЩит от спавна сущностей. Спавны транспорта и педов, которые нельзя связать с ресурсом, отменяются.action ("cancel"), strikes 3, maxObjectPerSec 25, maxVehiclePerSec 4, maxPedPerSec 8, scriptWhitelist. tosunac_doctor помечает strictScriptWhitelist = true.
ts.shieldExplosionОтменяет невидимые или беззвучные взрывы и наказывает только после повторов.action ("kick"), strikes 5 за 60 с.
ts.premiumGuardЗащита от спама частицами, снарядами, запросами контроля, звуками и ragdoll, а также от злоупотреблений с бомбами в транспорте.Все действия по умолчанию — log. Лимиты в секунду для каждого типа.
ts.vehicleGuardОбнаруживает подбрасывание или запуск транспорта.action ("kick"), strikeLimit 3, stuntMode, excludeAirVehicles.
ts.weaponInventoryПомечает оружие в руках, которого нет в инвентаре игрока ox_inventory, QB или ESX.action ("log"), removeWeapon (выключен), ignore, extraWeapons. Скрипты, выдающие оружие вне инвентаря, должны вызывать экспорт AllowWeapon из доверенного ресурса.
ts.entityGuardОбнаруживает массовый спавн объектов и удаляет объекты, заспавненные кикнутыми или забаненными игроками.massThreshold 50 за 60 с, cleanupOnBan.
ts.rateGuardЛимиты на игрока в секунду для событий взрывов, ptfx, огня и снарядов.action ("kick"), explosionsPerSec 12, ptfxPerSec 25, firePerSec 15, projectilesPerSec 30.
ts.entityWhitelist (and its vehicle, ped, object, projectile and particle lists)Необязательный режим списка разрешённых для каждого типа сущностей.В поставке все режимы выключены, поэтому действуют только чёрные списки и щит от спавна. Таблицы белых списков сущностей из панели заменяют списки.
ts.SpamGuardЛимиты на игрока для серверных событий и команд чата. Отключается через ts.SpamGuard = false либо ts.antiServerEventSpam / ts.antiCommandSpam = false.serverEventPerSec 25, commandPerSec 8, autoKickAfter 1. Часть для серверных событий слушает событие, которое ресурс никогда не вызывает; проверьте свою сборку, иначе действует только лимит команд.
ts.EventLimiterЛимит вызовов на событие в фиксированном окне 5 с. При достижении лимита (счётчик достигает значения) вызывает Event Spam (server_event_spam, KICK).Добавляйте или повышайте лимиты в файле. Обработчики регистрируются один раз при загрузке, поэтому лимиты событий из панели не меняют применение.
ts.antiDump, ts.nativeIntegrity, ts.autoExemptЛовушка против дампа; клиентская сигнальная проверка перезаписанных нативных функций обнаружения; автоматические освобождения во время событий внешности, мультиперсонажа и смерти.antiDump.action ("ban"), nativeIntegrity.checkMs 12000.
ts.shieldСлой перехвата нативных функций в JS, скрытые проверки NUI, а также доказательства в виде скриншота и видео геймплея перед баном (для видео нужен tosun_render).banScreenshot, banGameplayVideo.
ts.nativeGuardИнтеграция с внешним компаньоном для Windows tosun-guard.exe.action ("log"), requireGuard (false).
ts.guardСторожевой механизм для отдельного клиентского ресурса tosun-guard. Никого не наказывает, если tosun-guard не установлен.action ("kick").
ts.launcherGateПри подключении требует недавнего чистого сканирования лаунчером с IP игрока, подтверждённого панелью.enabled (false), action ("reject"), failOpen (false), downloadUrl, message (по умолчанию на турецком).

Разделы конфигурации: подключение, администрирование и панель#

Разделы для подключающихся игроков, меню администратора, подключения к панели и поведения на уровне всего сервера.

РазделНазначениеЧто обычно меняют владельцы
ts.FrameworkВыбор фреймворка и обнаружение скачков денег.framework: esx, qb, qbox, standalone или "auto". В поставке "qb", который не определяется автоматически, поэтому серверам на ESX и Qbox нужно его изменить. moneyCheckThreshold 5000000, moneySoftThreshold 75000.
ts.AutoSetupПассивное определение фреймворка, если framework равен "auto" или "": qbx_core, затем qb-core, es_extended, vrp, ox_core.autoDetectFramework (true).
ts.v12Самозащита, проверки VPN, прокси и хостинга при подключении (ipapi.co) и очистка базы данных по сроку хранения.blockVpn, blockProxy, blockHosting (выключены), bypassStaffIpCheck, ключи хранения keep (логи администраторов — 60 дней, обнаружения — 90 дней).
ts.HeartBeatКлиентский сторожевой механизм: допустимый интервал между отчётами клиента и крайний срок первого действительного отчёта.maxTime 90 с (минимум 15). firstHeartbeatDeadline 180 с (минимум 60): игроки без действительного первого отчёта к этому сроку отключаются.
ts.NetworkJoinТемп входа, предотвращающий переполнение надёжных событий, и период отсрочки перед активацией обнаружений.minReadyDelayMs (в поставке 15000; старые руководства указывают 45000), postFrameworkSettleMs 5000.
ts.AdminMenuВнутриигровое меню администратора, открывается через /ts menu, /tsmenu или F7.enable, enabled, allowedIds, openKeyControl (168 = F7), espMaxDist, noclipInvisible, requireActionSignature. allowEsp, allowFreecam и allowDelete применяются только в клиентском коде.
ts.PhoneNotifyУведомления AC на телефоны персонала: qb-phone, qs-smartphone, lb-phone, yseries, gks_phone, npwd, roadphone.Читается только heartbeat (уведомление о статусе каждые 15 минут). Уведомления о банах и обнаружениях отправляются всегда, пока включён ts.AdminMenu.enable.
ts.LiveWatchНаблюдение за экраном в реальном времени из меню администратора и панели.interval 1500, quality 0.7, maxSeconds 600, timeout 12000.
ts.ServerPerfБаланс между нагрузкой на сервер и задержкой обновлений.configSyncIntervalSec 120 (минимум 20), panelPlayerSyncIntervalMs 12000, liveWatchDbPollMs 4500.
ts.CentralЦентральный API панели v9: рукопожатие, опрос и синхронизация локали.pollIntervalSec 5 (ограничено от 5 до 60). Оставьте token здесь пустым и используйте tosun_ac_central_token.
ts.cloudBridgeОтправляет показатели угрозы и вывод консоли в панель и проверяет центральный список угроз (threat-intel) при подключении.consoleForward в поставке включён: каждая строка серверной консоли пакетами уходит в панель. threatIntelAction ("log"), threatIntelMinScore 70.
ts.panelMirrorУстаревшая полная выгрузка базы данных в панель. Включается вручную.enabled (false). Пока он включён, DB bridge не включается автоматически.
ts.connectingCardAdaptive Card, показываемая при подключении игроков.title ("TOSUN RP"), discord (при отсутствии берётся ts.appealDiscord), website, rules, image, tips.
ts.banScreen (panel only)Полноэкранное уведомление о бане перед отключением. Его нет в файле; настраивайте в панели.enabled (выключен), seconds от 3 до 15 (8), mediaType, imageUrl (только https), youtubeId, title (80 символов), message (300 символов), showReason. Предпросмотр — через banscreentest.
ts.PanelDangerousActionIPsСписок разрешённых IP для действий панели kick_all, stop_resource и broadcast.Пустой список означает только журнал аудита. Добавьте IP сервера панели, чтобы блокировать другие источники.
ts.licenseLockЗащита распространения: проверка формата лицензии и ID сервера.enabled (false), action (log, reject или stop), allowedServerIds, failClosed. Оставьте licenseKey здесь пустым.
ts.NpcBlockerУдаляет фоновых NPC и трафик; сущности миссий, скриптов и из белого списка остаются.enabled (false), blockPeds, blockVehicles, whitelistModels.
ts.hardening, ts.cfgAuditЗащита convar FiveM и аудит server.cfg в режиме только чтения.См. «Переключатели защиты и вывод».

Разделы конфигурации: ресурсы, события и интеграция#

Разделы о доверии к ресурсам, сканерах и интеграции для разработчиков. Строки с пометкой «для разработчиков» важны, только когда ваши собственные скрипты вызывают AC.

РазделНазначениеЧто обычно меняют владельцы
ts.whitelistedResourcesОсновные ресурсы, которые AC всегда считает безопасными: фреймворки, oxmysql, chat, monitor, ресурсы ox_.Добавьте свои основные ресурсы. HTTP-синхронизация панели заменяет список; синхронизация с БД дополняет его.
ts.ResourceGuardБазовый список ресурсов, проверки изменения хешей и сканер сигнатур читов.signatureScan, signatureScanInterval 600000, autoStopCheatResources (true), autoBlockInfected (false), deepScan (false).
ts.BackdoorGuardСканирует файлы ресурсов на шаблоны бэкдоров, RCE и утечки данных.autoQuarantine (false; true останавливает ресурсы с критической находкой), ignoreResources, scanIntervalMs 1800000.
ts.EventScannerКаталогизирует сетевые события и триггеры всех ресурсов в панель.autoProtect (false; true помечает их как защищённые), ignoreResources.
ts.ProtectedEvents, ts.SafeEventRateWindow, ts.SafeEventRateLimit, ts.SafeEventMaxArgsДля разработчиков. События, которые должны вызываться через TriggerSafeServerEvent. Корректные вызовы перенаправляются на имя события с суффиксом :safe. Некорректные вызовы отклоняются и записываются в лог, но никогда не наказываются.Добавляйте только собственные события, использующие клиентский API SafeEvents. Лимит 30 вызовов за 10 с; SafeEventMaxArgs 64. Обработчик :safe всё равно должен проверять права.
ts.EnforceExportCallerWhitelist, ts.ExportCallerWhitelistДля разработчиков. Доверенные ресурсы для защищённых экспортов.Список в поставке: qbx_core, qb-core, es_extended, ox_inventory, ox_lib. false = режим аудита: вызовы выполняются и один раз записываются в лог. MarkTeleport доверия не требует.
ts.IntegrationДля разработчиков. Лимиты MarkTeleport.markTeleportMaxMs 15000 за вызов (от 1000 до 60000, для всех вызывающих); markTeleportBudgetMs 180000 на игрока за 10 минут (только для недоверенных вызывающих).
ts.DetectionExempt (alias ts.MenuDetectionExempt)Для разработчиков. Короткие автоматические освобождения при срабатывании известных событий одежды, жилья, гаража или воскрешения.clientEvents, localEvents, serverEvents (event, durationMs, resource, always). Серверные события дают облегчение только для проверок движения и видимости: не более 120 с на событие и budgetMsPer10Min 240000 на игрока.
ts.AdminBypassAces, ts.AdminBypassIdentifiersСписки ACE и идентификаторов персонала.См. «Как определяется персонал».

Разделы конфигурации: списки#

Списки по умолчанию в configs/anticheat_config.lua. Большинство из них при синхронизации заменяются таблицами панели.

РазделНазначениеЧто обычно меняют владельцы
ts.Weapons, ts.vehicleBlacklist, ts.Plates, ts.BlacklistObjects, ts.pedBlacklist, ts.BlacklistPeds, ts.BlacklistCommands, ts.BlacklistWords, ts.BlacklistNames, ts.BlacklistKeys, ts.BlacklistAnimsЧёрные списки по умолчанию. Список оружия также задаёт BAN, KICK или LOG для каждого оружия.Удалите предметы, которые выдают ваши работы. Комментарии в конфигурации упоминают вертолёты PD и EMS, а также педов SWAT и hwaycop.
ts.BlacklistPlayerModelsМодели педов игроков, о которых сообщается после 3 замеров с интервалом 5 с (около 15 с). Ключ наказания peds (KICK).Клиентский цикл сам не проверяет переключатель antiPeds.
ts.BlacklistSpritesСловари текстур чит-меню.Панель может заменить его.
ts.detectedKeysКлавиши вызова оверлея.В поставке {44, 73, 104}.
ts.explosionBlacklistЭкзотические типы взрывов, которые отменяются и наказываются.BAN, KICK или LOG для каждого типа. Синхронизируется с панелью.
ts.triggerList, ts.fakeTriggers, ts.fakeTriggerStrikeMax, ts.fakeTriggerServerTrapsИмена событий-ловушек, которые вызывают чит-меню. Записи с type server становятся серверными ловушками, пока включён ts.fakeTriggers.Никогда не добавляйте настоящие события фреймворков. fakeTriggerStrikeMax 1, fakeTriggerServerTraps выключен.
ts.whitelistedCoords, ts.TaskListБелый список координат клиента и запрещённые задачи педов.В поставке оба пусты.

Ключи, которые ничего не делают, и ключи, которых нет в файле#

Некоторые ключи в configs/anticheat_config.lua не читаются кодом в 9.6.15. Их изменение ни на что не влияет.

Код также читает ключи, которых нет в файле. При необходимости добавьте их сами: ts.v12.joinFloodWindowSec (60), ts.v12.joinFloodMaxJoins (6), ts.v12.bannedCountries (коды стран; запрет по геолокации), ts.v6Enforcement.heuristic (заменяет список эвристических типов), ts.LiveWatch.fps (30), ts.SafeEventMaxArgs (64) и always = true для серверных событий ts.DetectionExempt.

Эти клиентские переключатели читаются, но отсутствуют в файле, и включены, если не заданы как false: ts.antiScreenshotBypass, ts.antiRateOfFire и ts.antiNetOwnership. ts.microJitterMeanMin (0.5) также читается, но отсутствует в файле.

  • ts.NetworkJoin.minimalSync
  • ts.AdminMenu.espMaxDistance и ts.AdminMenu.screenshotTimeout (ESP использует espMaxDist)
  • ts.AdminMenu.permissionLevel (устаревшая метка; доступ определяется ACE, списками и выдачей прав)
  • ts.ResourceGuard.strictClientDiff
  • ts.LiveWatch.enabled, preferTosunRender и maxConcurrent
  • ts.PhoneNotify.enabled, onBan и onDetect

Устаревшие комментарии в файле конфигурации#

Некоторые комментарии внутри configs/anticheat_config.lua описывают прежнее поведение. Код работает следующим образом.

  • Комментарий говорит, что настройки панели синхронизируются каждые 30 с. Интервал — ts.ServerPerf.configSyncIntervalSec (в поставке 120 с).
  • Комментарий говорит, что tosunac_setup добавляет события в белый список. На самом деле он их только каталогизирует; о защите решает ts.EventScanner.autoProtect.
  • Комментарий к ts.ProtectedEvents предупреждает, что события фреймворков вызывают ложные баны. Вызовы без ключа отклоняются и записываются в лог, но никогда не наказываются.
  • Комментарий к ts.EventLimiter говорит, что он срабатывает при превышении лимита. На самом деле он срабатывает, когда счётчик достигает значения.
  • Комментарий о мосте рекомендует setr для всех четырёх convar моста. setr нужен только для tosun_ac_resource и tosun_ac_bridge_client_ms.
  • Комментарий к ts.Locale не упоминает ar, но locales/ar.json входит в поставку.

Convar защиты FiveM, которые проверяет AC#

При запуске convar FiveM читают два модуля. Защита convar (ts.hardening) запускается примерно через 8 с после старта и считает незаданное значение слабым. Аудит server.cfg (ts.cfgAudit) запускается через 15 с после старта и работает только на чтение.

ConvarРекомендуетсяКто проверяетПрименяется autoApply
sv_stateBagStrictModetrueЗащита convarДа
sv_filterRequestControl2Защита convarДа
sv_enableNetworkedSoundsfalseЗащита convarДа
sv_enableNetworkedPhoneExplosionsfalseЗащита convarДа
sv_enableNetworkedScriptEntityStatesfalseЗащита convarДа
sv_scriptHookAllowedfalseЗащита convar; аудит также предупреждает, если значение trueДа
sv_entityLockdownrelaxed (strict also passes)Защита convar, только отчётНет. Может сломать скрипты, которые спавнят транспорт с клиента; сначала протестируйте.
sv_pureLevel1 or higherЗащита convar, только отчётНет
onesyncon (legacy also passes)Аудит; также зависимость манифестаНет
sv_lanfalseАудит предупреждает, если значение trueНет
sv_authMinTrust4 or higher (unset reads as 5)АудитНет
sv_enforceGameBuildany build numberАудит предупреждает, если значение пустоеНет

Переключатели защиты и вывод#

По умолчанию обе проверки только сообщают. Меняйте их в configs/anticheat_config.lua.

  • ts.hardening.enabled = false пропускает защиту convar.
  • ts.hardening.autoApply = true (в поставке false) позволяет AC самому выполнить set для шести безопасных convar. sv_entityLockdown и sv_pureLevel никогда не применяются автоматически.
  • ts.cfgAudit.enabled = false отключает аудит server.cfg.
  • Защита convar выводит предупреждение в консоль и записывает одну строку ac_detections (detection_type hardening_missing) со списком всех слабых convar.
  • Аудит выводит предупреждение в консоль и записывает одну строку admin_logs с числом слабых настроек.
  • Текст обеих проверок в консоли жёстко задан на турецком. Каждая строка предупреждения защиты показывает точную строку set, которую нужно добавить.
  • tosunac_doctor — отдельный консольный отчёт о рискованных настройках AC, а не о convar FiveM.

Частые ошибки#

Проверьте это, прежде чем открывать обращение в поддержку.

  • Учётные данные заданы через setr или sets: они попадают на каждый клиент или в публичную информацию о сервере.
  • Учётные данные размещены после ensure tosun-ac: они не подхватываются до следующего перезапуска ресурса.
  • Ключ панели в configs/anticheat_config.lua: файл отправляется клиентам, а консоль выводит предупреждение MIGRATION.
  • tosun_render не запущен: это обязательная зависимость.
  • ts.Framework.framework оставлен равным "qb" на сервере ESX или Qbox.
  • ts.Locale оставлен равным "tr" на сервере, где не используется турецкий.
  • ts.appealDiscord оставлен со ссылкой на Discord разработчика.
  • ts.punishType равен LOG или KICK: ручные баны тоже превращаются в запись в лог или кик.
  • add_ace builtin.everyone command allow: каждый игрок пропускает проверки VPN и страны.
  • Ожидание, что tosun.admin откроет доступ к tosunac_setup: для этого нужны tosunac.admin и command.tosunac_setup.
  • Ожидание, что администраторы txAdmin смогут открыть меню AC: ACE txAdmin дают только статус персонала. Добавьте tosun.admin или права из панели.
  • set tosun_db_bridge_enabled "0" без tosun_db_bridge_manual "1": строка игнорируется.
  • ts.Debug оставлен равным true: обходы для персонала и белого списка отключены.