Документация 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_upload | http://localhost/api/screen_upload.php | URL загрузки для захвата 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_ms | 5000 (от 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_ms | 120000 (от 30000 до 600000) | Интервал цикла записи игрового времени. | Достаточно set. |
tosun_ac_resource | "tosun-ac" | Имя ресурса AC, используемое необязательными файлами моста внутри вашего ресурса. | Для разработчиков. Используйте setr, если переименовали папку AC: клиентский мост видит только реплицируемые convar. |
tosun_ac_bridge_server_ms | 60000 (от 500 до 300000) | Длительность освобождения по умолчанию для TosunAC.PlayerExempt в серверном мосте. | Для разработчиков. Достаточно set. |
tosun_ac_bridge_cooldown_ms | 750 (0 отключает) | Задержка на игрока, отбрасывающая повторные вызовы TosunAC.PlayerExempt в серверном мосте. | Для разработчиков. Достаточно set. |
tosun_ac_bridge_client_ms | 60000 (от 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, и проверяет лишь формат.
- Серверный convar: tosun_ac_license, tosun_ac_panel_key или tosun_ac_central_token.
- Значение в configs/anticheat_server.lua: licenseKey, panelKey или centralToken.
- Устаревшее значение в общем 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.
- Чтобы управлять мостом из server.cfg, добавьте set tosun_db_bridge_manual "1" до ensure tosun-ac.
- Добавьте set tosun_db_bridge_enabled со значением "1" или "0".
- Добавьте 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.ts | server.cfg add_ace | Да | Да | Рекомендуемый способ выдачи прав персонала. |
ACE command.ban, command.kick | server.cfg или txAdmin | Да | Да | Остаётся персоналом даже при ts.txAdminAuth = false. |
Principals group.admin, group.superadmin, group.moderator, group.god | server.cfg add_principal | Только если имя разрешается в разрешённый ACE | То же условие | Проверяются как ACE-объекты. Дополнительно добавьте явный ACE. |
ACE txadmin, tx.admin, txadmin.menu, txadmin.advanced, command.txadmin | txAdmin или add_ace | Да | Нет | Администраторам txAdmin для меню нужен tosun.admin или права из панели. |
ACE command.resources, command.restart | txAdmin | Только при ts.txAdminAuth = true | Нет | Обычно выдаётся txAdmin. |
ACE command.screenshot, command.unban | txAdmin | Только освобождение, при ts.txAdminAuth = true | Нет | Без команд персонала. |
ts.AdminBypassAces | configs/anticheat_config.lua | Да | Нет | Добавленные вами записи не открывают меню. |
Admins | admins/anticheat_admins.lua | Да | Да | Файл только для сервера. |
ts.AdminMenu.allowedIds | configs/anticheat_config.lua | Да | Да | "all" и "staff" не являются идентификаторами и ничего не дают. |
ts.AdminBypassIdentifiers | configs/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.admin | server.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.AdminBypassDetections | true | false делает персонал наказуемым, как любого игрока. |
ts.txAdminAuth | true | false отключает путь через ACE команд txAdmin (command.resources, command.restart, command.screenshot, command.unban). command.ban и command.kick по-прежнему дают статус персонала. |
ts.Debug | false | true отключает обходы для персонала, белого списка, белого списка панели и освобождений, чтобы персонал мог тестировать обнаружения на себе. В рабочей среде держите false. |
ts.NuiNeverBanUnauthorized | true | false наказывает игроков, вызывающих события меню администратора без прав, а не только записывает их в лог. Наказание — ts.punishType. |
ts.AdminMenu.enable, ts.AdminMenu.enabled | true, true | false в любом из них отключает меню администратора. enable = false также останавливает модуль уведомлений на телефон. |
ts.AdminMenu.requireActionSignature | true | false отключает подпись чувствительных действий меню администратора. |
ts.v12.bypassStaffIpCheck | true | Персонал пропускает проверки 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.Debug | false | true отключает обходы для персонала и белого списка. В рабочей среде держите false. |
ts.txAdminAuth, ts.AdminBypassDetections, ts.NuiNeverBanUnauthorized | true, true, true | Обработка персонала. См. «Настройки, меняющие обработку персонала». |
ts.screenshotModule | "screenshot-basic" | Ресурс, используемый для скриншотов. |
ts.banIDFormat | 1 | 1 = ABCD-1234, 2 = #1234. |
ts.autoSQL | false | true создаёт таблицы при запуске. Комментарий в конфигурации советует задать true при первой установке, а затем вернуть false. |
ts.Prefix, ts.showReason | 'Tosun AntiCheat', true | Оформление сообщений о кике и бане. |
ts.appealDiscord, ts.appealTicketUrl | vendor links | Добавляется к сообщению о бане. appealDiscord в поставке указывает на Discord разработчика (https://discord.gg/9tCSJch) и также служит запасным значением. Укажите свою ссылку для апелляций. |
ts.pingOnDetect | false | Добавляет @everyone в embed обнаружений. Текст помещается внутрь объекта embed, а не в content верхнего уровня сообщения. |
ts.chatMessages | false | Объявляет наказания в чате. |
ts.spoilerIP | true | Скрывает IP-адреса под спойлерами в логах Discord. |
ts.needDiscord | false | true отклоняет игроков без идентификатора 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 settings | OCR экрана для поиска слов чит-меню. | 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.connectingCard | Adaptive 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_stateBagStrictMode | true | Защита convar | Да |
sv_filterRequestControl | 2 | Защита convar | Да |
sv_enableNetworkedSounds | false | Защита convar | Да |
sv_enableNetworkedPhoneExplosions | false | Защита convar | Да |
sv_enableNetworkedScriptEntityStates | false | Защита convar | Да |
sv_scriptHookAllowed | false | Защита convar; аудит также предупреждает, если значение true | Да |
sv_entityLockdown | relaxed (strict also passes) | Защита convar, только отчёт | Нет. Может сломать скрипты, которые спавнят транспорт с клиента; сначала протестируйте. |
sv_pureLevel | 1 or higher | Защита convar, только отчёт | Нет |
onesync | on (legacy also passes) | Аудит; также зависимость манифеста | Нет |
sv_lan | false | Аудит предупреждает, если значение true | Нет |
sv_authMinTrust | 4 or higher (unset reads as 5) | Аудит | Нет |
sv_enforceGameBuild | any 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: обходы для персонала и белого списка отключены.