跳转到指南

文档 9.6.24

server.cfg、convar 和权限

本页列出 Tosun AntiCheat 读取的所有 convar、检查的所有 ACE 权限,以及你可以编辑的文件和配置章节。开头给出完整的 server.cfg 配置块,还介绍了 AC 在启动时审计的 FiveM 加固 convar。

配置存放位置#

Tosun AntiCheat 从 server.cfg、资源中的四个文件以及网页面板读取设置。凭证只能放在仅服务器可见的位置。configs/anticheat_config.lua 是共享脚本,因此服务器会把它发送给每个客户端。

文件或位置加载于放置内容
server.cfg服务器Convar(许可证、面板密钥、受信任资源)、ACE 权限以及 FiveM 加固 convar。
configs/anticheat_server.lua仅服务器,在 AC 的服务器脚本之前不使用 convar 时的凭证备用位置:panelKey、centralToken 和 licenseKey。
configs/anticheat_config.lua共享:服务器和每个客户端所有 ts 设置:检测、惩罚、防护、管理菜单和各种列表。绝不要在这里放密钥、令牌或许可证。
configs/anticheat_webhooks.lua仅服务器Discord webhook URL 和 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 是 manifest 依赖项(txAdmin 也可以启用它)。
set onesync on

## 依赖项:在 tosun-ac 之前启动。
## oxmysql 和 tosun_render 是硬依赖。
## screenshot-basic 是默认的 ts.screenshotModule。
## 在 ensure oxmysql 之前配置 mysql_connection_string(参见 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 export 的资源(以逗号分隔)。
set tosun_ac_trusted_resources "my-housing,my-clothing"

## 可选:用于截图和证据上传的公开 https 面板地址。
# set ts_public_panel_url "https://panel.example.com"

## 可选:在此文件中控制 Tosun Connect DB 桥接。
## 没有 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

## ---------- AC 启动时检查的 FiveM 加固 convar ----------
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 配置块的规则#

根据你的服务器调整示例时,请遵循以下规则。

  • 在 tosun-ac 之前启动 oxmysql 和 tosun_render。manifest 声明的依赖项为服务器版本 4890 或更高、OneSync、oxmysql 和 tosun_render。
  • 如果保留默认的 ts.screenshotModule,请启动 screenshot-basic。
  • 把所有 set tosun_ac_ 凭证行放在 ensure tosun-ac 之前。这些值在加载时只读取一次;之后的更改需要重启资源。
  • 凭证请使用 set。setr 会把值复制到每个客户端,sets 会把它公开在服务器公开信息中。
  • 只对客户端会读取的 convar 使用 setr:ts_screen_upload、tosun_ac_resource 和 tosun_ac_bridge_client_ms。
  • 不需要添加 DB 桥接行。自 9.6.14 起桥接默认开启,除非 tosun_db_bridge_manual 为 "1" 或 ts.panelMirror.enabled = true,否则 set ... "0" 这样的行会被忽略。
  • 较旧的安装指南(INSTALLER-READY.md、INSTALLER-LICENSE.md、INSTALL-MULTILANG.md、CONFIG-PERFORMANCE-GUIDE.md)把 ensure 放在凭证之前,把面板密钥放在 configs/anticheat_config.lua 中,并且遗漏了 tosun_render。请以本页为准。

Convar 参考#

Tosun AntiCheat 读取的、你可以设置的所有 convar。除非备注列写明 setr,否则请使用 set。AC 还会写入和读取几个自己的内部 convar;它们受保护,你不得设置。

Convar默认值作用备注
tosun_ac_license""服务器许可证密钥。加载时读取一次并写入 ts.licenseLock.licenseKey。许可证锁和 Tosun Connect DB 桥接之后也会重新读取该 convar。凭证:只用 set,放在 ensure 之前。格式为 tac_live_ 加 40 个小写十六进制字符。除非长度为 16 到 128 个字符且不含空白,否则 DB 桥接会将其视为缺失。
tosun_ac_panel_key""面板 API 密钥。在向面板发出的调用中发送,并用于验证来自面板的请求。凭证:只用 set。更改后需重启。为空时,AC 会从游戏数据库复制 panel_settings.ac_api_key。每次启动时都会以明文写入 ac_settings 的 webPanelKey 行。
tosun_ac_central_token""版本关卡和 v9 中央 API 的认证令牌。优先于面板密钥使用。凭证:只用 set。
tosun_ac_server_id"" (ts.licenseLock.serverId)许可证锁使用的服务器标识。只有在 ts.licenseLock.enabled = true 且 allowedServerIds 不为空时才有意义。不是机密。每次许可证检查后,AC 都会把它重写为复制型 convar,因此客户端可以看到它。licenseStatus export 会以 serverId 返回它。
tosun_ac_trusted_resources""可以调用受保护 export 的资源(以逗号或空格分隔)。与 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.phpscreenCapture export、/capture 和 /ts_capture 命令以及面板 web-bridge 截图操作所用的 screenshot-basic 截图上传 URL。使用 setr:它在客户端读取。默认值指向 localhost。AC 没有处理上传结果的处理器,因此结果会被丢弃。
tosun_db_bridge_manual"0"设为 "1" 后,AC 不再强制设置下面两个桥接 convar,由 server.cfg 控制它们。请在资源启动之前设置。
tosun_db_bridge_enabled代码中为 "0",加载时强制设为 "1"开启 Tosun Connect 按需 DB 桥接。只有在 tosun_db_bridge_manual 为 "1" 或 ts.panelMirror.enabled = true 时,server.cfg 中的值才有效。panelMirror 开启时 AC 不会强制设置它,因此除非 server.cfg 将其开启,否则桥接保持关闭。
tosun_db_bridge_money_write代码中为 "0",加载时强制设为 "1"允许桥接操作 player.money.set,用于设置在线玩家的余额。不为 "1" 时,该操作会以 write_disabled 失败。要在 server.cfg 中设为 "0",需要使用手动模式。
tosun_db_bridge_query_timeout_ms5000(1000 到 10000)每条桥接 SQL 查询的观察超时时间。超时会报告 query_timeout,但不会取消查询。
tosun_panel_playtime"1"设为 "0" 会禁用填充 players.playtime 的写入器。它只对 qb、qbcore 或 qbox 生效。加载时读取一次。即使为 "0",添加 playtime 列的 ALTER TABLE 仍会在启动 20 秒后运行。使用 set 即可,尽管文件头部建议使用 setr。
tosun_panel_playtime_interval_ms120000(30000 到 600000)游戏时长写入器的循环间隔。使用 set 即可。
tosun_ac_resource"tosun-ac"你自己资源内的可选桥接文件所使用的 AC 资源名。面向开发者。重命名 AC 文件夹时请使用 setr:客户端桥接只能看到复制型 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 都会把解析出的密钥以明文写入 ac_settings 的 webPanelKey 行。如果有人在面板中编辑了这一行,编辑后的值会替换你的值,直到下次重启。

仅限许可证密钥:许可证锁接受 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 和截图上传#

configs/anticheat_config.lua 中的 ts.webPanelURL 是面板基础 URL。你可以留空:为空时,AC 会从游戏数据库的 panel_settings 中加载 panel_url 或 site_url,并保存到 ac_settings 中。只有 URL 和面板密钥都已设置时,HTTP 设置同步才会运行。

只有当截图、封禁证据和实时视频必须发送到其他公开地址时,才设置 ts_public_panel_url。它必须是 https。只有当基础地址等于此 convar 或 ts.webPanelURL 时,才会为 https://host/api/screen_upload.php 签发上传令牌。

ts_screen_upload 是 screenCapture export 以及 /capture 和 /ts_capture 命令使用的另一条路径。它需要 setr,默认值指向 localhost。AC 中没有任何代码处理该上传的结果。

旧名称 ts.PanelUrl、ts.panelUrl 和 ts.webPanelUrl 仍会作为备用读取。

Tosun Connect DB 桥接 convar#

自 9.6.14 起,按需 DB 桥接默认开启,不需要任何 server.cfg 行。加载时,editable/server/tosun_db_bridge_defaults.lua 会把 tosun_db_bridge_enabled 和 tosun_db_bridge_money_write 设为 "1",因此旧指南中的 "0" 行会被忽略。

你也可以在面板中为某台服务器关闭连接:依次进入“服务器”、目标服务器、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 控制桥接,请在 ensure tosun-ac 之前添加 set tosun_db_bridge_manual "1"。
  2. 添加 set tosun_db_bridge_enabled,值为 "1" 或 "0"。
  3. 添加 set tosun_db_bridge_money_write,值为 "1" 或 "0"。不为 "1" 时,player.money.set 会以 write_disabled 失败,并且不会向面板公布。

面向脚本开发者的 convar#

只有当其他资源调用 AC 时,这些 convar 才有意义。tosun_ac_trusted_resources 决定哪些资源可以调用受保护的 export;桥接 convar 用于配置可选的桥接文件。

受保护的 export 包括 SetExempt、SetPlayerExempt、各个 Pause export、BypassDetection、addAdmin、whitelistPlayer、approveResource、ban、offlineBan、各个 webBridge export 和 quarantine。

服务器控制台和 tosun-ac 本身始终受信任。不受信任的调用会被拒绝;对于每个资源与 export 的组合,AC 会输出一条控制台警告并写入一条面板日志,其中会提到这个 convar。ts.EnforceExportCallerWhitelist = false 时,调用会被执行,并且只记录一次。

受信任的调用方使用 MarkTeleport 时也不受按玩家计算的额度限制。

INTEGRATION.md 和 bridge/INTEGRATION.txt 对 tosun_ac_resource 和 tosun_ac_bridge_client_ms 使用的是 set。请改用 setr:客户端桥接会在客户端读取这两个值。

AC 还有内部事件和 exports。它们受保护,不得从你的资源中调用。

# 允许调用受保护 export 的资源(以逗号或空格分隔)
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 权限#

Tosun AntiCheat 检查的所有 ACE。把 ACE 授予某个组,再用 add_principal 把管理人员加入该组。builtin.everyone 也拥有的 ACE 永远不会让任何人成为管理人员。

ACE 或主体授予的权限示例行
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 时,才给予管理人员状态和菜单。请同时显式授予 tosun.admin 之类的 ACE。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 拥有它时永远不算管理人员。不过,它是连接时 IP 检查的豁免 ACE 之一,而该检查没有 builtin.everyone 过滤。Do not use: add_ace builtin.everyone command allow
ts.AdminBypassAces (config list)给予管理人员状态,不给予菜单。自带条目:command.ts、各个 txAdmin ACE、command.kick、command.ban、四个组名、tosun.admin 和 ts.admin。绝不要添加单独的 command ACE。ts.AdminBypassAces = { "command.ts", ..., "your.staff.ace" }

受限命令和仅限控制台的命令#

有十个 AC 命令注册为受限命令。在游戏内,FiveM 除了 AC 自己的检查外,还要求对应的命令 ACE。这十个命令中有五个完全忽略玩家。

banscreentest 不是受限命令。控制台形式 banscreentest playerId 不需要 ACE;游戏内的 /banscreentest 需要 tosunac.banscreen.test 或 tosunac.admin。tosunac_setup、两个扫描命令和 banscreentest 被拒绝时没有任何提示。

如果后门扫描或特征码扫描没有完成(包括 ts.BackdoorGuard 被禁用的情况),tosunac_setup 不会批准任何内容。正在运行时再次执行会被拒绝。

命令谁可以运行作用
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仅限控制台输出 export 执行模式、受信任资源及其来源,以及最近 20 次拒绝。
tosunac_doctor仅限控制台已生效设置的风险报告。启动 90 秒后也会运行一次。输出为土耳其语。
ac_cleanup仅限控制台立即运行数据库保留期清理。输出的数量通常偏低。ts.v12.enableAutoCleanup = false 时不注册。
tosunac_db_status仅限控制台输出 DB 桥接状态、许可证状态、oxmysql 状态和框架。
tosunac_db_check仅限控制台通过 oxmysql 运行 SELECT 1,并输出通过或失败。

如何识别管理人员#

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网页面板或白名单 exports否(仅惩罚豁免)否ts.Debug = true 时被忽略。
ACE tosunac.adminserver.cfg add_ace否否解锁 setup、手动扫描和封禁界面预览。

标识符列表: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 export#

面板授权是你在网页面板中创建的 ac_v7_admin_grants 记录。有效的授权会匹配玩家的 license 或 license2(带或不带前缀),并给予管理人员状态和菜单访问权限。

肯定结果缓存 5 秒,否定结果缓存 30 秒,因此对于已经检查过的玩家,新的授权最多可能需要 30 秒才能生效。

受信任资源可以调用 addAdmin export,给予玩家管理人员状态和菜单访问权限,直到调用 removeAdmin 为止。ts.EnforceExportCallerWhitelist 为 true 时,调用方必须列在 tosun_ac_trusted_resources 或 ts.ExportCallerWhitelist 中。

玩家白名单不等于管理人员#

面板玩家白名单(ac_whitelist)和通过白名单 exports 在运行时添加的标识符只会阻止惩罚。它们不提供管理人员命令,也不提供管理菜单。

  • expires_at 为空或在未来时,该行有效。
  • 接受的值:license、discord、steam 或 fivem 标识符,或 citizenid。前缀会被去掉。
  • 运行时条目保存在内存中,重启后丢失。
  • ts.Debug = true 时两个列表都会被忽略。

改变管理人员处理方式的设置#

configs/anticheat_config.lua 中的这些键会改变对管理人员和未授权菜单用户的处理方式。

设置自带值效果
ts.AdminBypassDetectionstruefalse 会让管理人员像普通玩家一样受到惩罚。
ts.txAdminAuthtruefalse 会禁用 txAdmin 命令 ACE 路径(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, true任一为 false 都会禁用管理菜单。enable = false 还会停止手机通知模块。
ts.AdminMenu.requireActionSignaturetruefalse 会关闭敏感管理菜单操作的签名。
ts.v12.bypassStaffIpChecktrue管理人员在连接时跳过 VPN、代理、托管和国家检查。

builtin.everyone 和连接时 IP 检查#

所有管理人员和菜单 ACE 检查都会忽略 builtin.everyone 也拥有的 ACE。因此 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 webhooks 文件#

configs/anticheat_webhooks.lua 仅在服务器上。它为每个日志频道保存一个 Discord webhook URL,以及 embed 样式。所有 URL 默认都是占位符 WEBHOOK_URL_BURAYA。

  • 面板 HTTP 同步会覆盖它发送了非空 URL 的任何 webhook。
  • 其他资源只有作为受信任调用方时,才能通过 getConfig('webhooks') 获得 webhook URL。
  • 截图日志用 ts.punishType 而不是实际确定的惩罚来标注 Detections embed,并且只要 ts.punishType 为 BAN,也会发送到 Webhooks.Bans。
  • 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 export、/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在检测 embed 中添加 @everyone。该文本放在 embed 对象内,而不是消息顶层的 content 中。
ts.chatMessagesfalse在聊天中公告惩罚。
ts.spoilerIPtrue在 Discord 日志中用剧透标记包裹 IP 地址。
ts.needDiscordfalsetrue 会拒绝没有 Discord 标识符的玩家。
ts.maxUsernameLength-1玩家名称的最大长度。-1 表示禁用该检查。
ts.webPanelURL, ts.webPanelKey"", ""两者都留空。参见“面板 URL 和截图上传”以及凭证相关章节。
ts.version"9.6.15"仅供参考。运行时使用的是 manifest 中的版本。

配置章节:检测和惩罚#

决定检测什么以及惩罚力度的章节。

章节用途服主通常修改的设置
ts.DetectionPunishments每个检测键的惩罚:BAN、KICK 或 LOG。顺序:显式惩罚、直接键、别名、派生键,最后是 ts.punishType。单个条目。面板可以覆盖每一项。自带值:确定性信号为 BAN,中等风险为 KICK,与情境相关的检测(如 freecam、teleport、fastrun、invisibility 和 ocr)为 LOG。
ts.BanDurations每个检测键的封禁时长(小时)。0 或缺少该键表示永久。["default"](自带值 0 = 永久;手动封禁也使用它)。物理类检测有时限,例如 superjump、fastrun 和 teleport 为 72 小时,noclip 和 godmode 为 168 小时。
ts.confirmWindow客户端物理类检测的确认关卡:速度、传送、noclip、超级跳、生命值和护甲。高 ping 或画面卡顿时的读数会被忽略。建议使用默认值:confirmFrames 3、confirmMs 3000、maxPingMs 220。90 秒内 hardEscalateHits 达到 8 次时,即使有延迟也会强制惩罚。
ts.v6Enforcement限制签名客户端启发式检测和刷屏检测的惩罚上限。maxAction("KICK")。confirmWindowSec 600(最小 30)内 confirmHits 2 次。
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.quarantinequarantine export 用来代替封禁的 routing bucket 隔离。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"):等所有传送玩家的脚本都调用 MarkTeleport 之后,再切换为 kick。
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 60 秒内 2 次封禁;respawn 120 秒内 6 次踢出;vehicleComponent 记录日志;explosionDistance 250 米踢出,3 次警告;damageDistance 600 米封禁,4 次。
ts.entityFlood按玩家的生成速率限制。超出限制的生成会被取消。maxPerSec 30、banAfterFloods 3、action("ban")。
ts.crashGuardstate bag 值和事件数据的大小、深度和有效性限制。action("kick"),60 秒内 strikes 3 次。
ts.serverAuthority读取 OneSync 复制的状态,以发现超级跳、伤害和防御倍率、黑名单武器、无敌、隐身、noclip 和镜头焦点。每项检查:enabled、action、confirm。高置信度检查会踢出;与情境相关的检查只记录日志。
ts.shieldAi实体生成防护。无法关联到资源的车辆和 ped 生成会被取消。action("cancel")、strikes 3、maxObjectPerSec 25、maxVehiclePerSec 4、maxPedPerSec 8、scriptWhitelist。tosunac_doctor 会标记 strictScriptWhitelist = true。
ts.shieldExplosion取消不可见或无声的爆炸,只在重复发生后才惩罚。action("kick"),60 秒内 strikes 5 次。
ts.premiumGuard防护粒子、抛射物、请求控制权、声音和布娃娃刷屏,以及车辆炸弹滥用。所有动作默认为 log。按类型设置每秒上限。
ts.vehicleGuard检测车辆被抛掷或弹射。action("kick")、strikeLimit 3、stuntMode、excludeAirVehicles。
ts.weaponInventory标记玩家手持但不在其 ox_inventory、QB 或 ESX 背包中的武器。action("log")、removeWeapon(关闭)、ignore、extraWeapons。在背包之外发放武器的脚本应从受信任资源调用 AllowWeapon export。
ts.entityGuard检测大量物体生成,并删除被踢出或被封禁玩家生成的物体。60 秒内 massThreshold 50、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蜜罐式反 dump;针对检测 native 被覆盖的客户端绊线;外观、多角色和死亡事件期间的自动豁免。antiDump.action("ban")、nativeIntegrity.checkMs 12000。
ts.shieldJS native 钩子层、隐藏的 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.AutoSetupframework 为 "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.Centralv9 中央面板 API:握手、轮询和语言同步。pollIntervalSec 5(限制在 5 到 60)。这里的 token 请留空,改用 tosun_ac_central_token。
ts.cloudBridge把威胁评分和控制台输出发送到面板,并在连接时检查中央威胁情报列表。consoleForward 自带为开启:每一行服务器控制台输出都会分批发送到面板。threatIntelAction("log")、threatIntelMinScore 70。
ts.panelMirror旧版的完整数据库推送到面板。需手动启用。enabled(false)。开启时不会自动启用 DB 桥接。
ts.connectingCard玩家连接时显示的自适应卡片。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.PanelDangerousActionIPskick_all、stop_resource 和 broadcast 面板操作的 IP 允许列表。为空表示只做审计日志。添加面板服务器的 IP 以阻止其他来源。
ts.licenseLock分发防护:许可证格式和服务器 ID 检查。enabled(false)、action(log、reject 或 stop)、allowedServerIds、failClosed。这里的 licenseKey 请留空。
ts.NpcBlocker移除环境 NPC 和交通;任务、脚本和白名单实体会保留。enabled(false)、blockPeds、blockVehicles、whitelistModels。
ts.hardening, ts.cfgAuditFiveM convar 防护和只读的 server.cfg 审计。参见“加固开关和输出”。

配置章节:资源、事件和集成#

关于资源信任、扫描器和开发者集成的章节。标为面向开发者的行只有在你自己的脚本调用 AC 时才有意义。

章节用途服主通常修改的设置
ts.whitelistedResourcesAC 始终视为安全的核心资源:框架、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。无效调用会被拒绝并记录,从不惩罚。只添加你自己使用 SafeEvents 客户端 API 的事件。上限为每 10 秒 30 次调用;SafeEventMaxArgs 64。:safe 处理器仍必须检查权限。
ts.EnforceExportCallerWhitelist, ts.ExportCallerWhitelist面向开发者。受保护 export 的受信任资源。自带列表:qbx_core、qb-core、es_extended、ox_inventory、ox_lib。false = 审计模式:调用会执行并记录一次。MarkTeleport 不需要信任。
ts.Integration面向开发者。MarkTeleport 限制。markTeleportMaxMs 每次调用 15000(1000 到 60000,适用于所有调用方);markTeleportBudgetMs 每名玩家每 10 分钟 180000(仅限不受信任的调用方)。
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。移除你的职业会发放的物品。配置注释中提到了警察和 EMS 直升机以及 SWAT 和 hwaycop ped。
ts.BlacklistPlayerModels玩家 ped 模型,每隔 5 秒采样一次、共 3 次(约 15 秒)后上报。惩罚键为 peds(KICK)。客户端循环本身不检查 antiPeds 开关。
ts.BlacklistSprites作弊菜单的纹理字典。面板可以替换它。
ts.detectedKeys叠加层触发键。自带值 {44, 73, 104}。
ts.explosionBlacklist会被取消并惩罚的特殊爆炸类型。每种类型可设 BAN、KICK 或 LOG。与面板同步。
ts.triggerList, ts.fakeTriggers, ts.fakeTriggerStrikeMax, ts.fakeTriggerServerTraps作弊菜单会调用的蜜罐事件名。ts.fakeTriggers 开启时,type 为 server 的条目会成为服务器陷阱。绝不要添加真实的框架事件。fakeTriggerStrikeMax 1,fakeTriggerServerTraps 关闭。
ts.whitelistedCoords, ts.TaskList客户端坐标白名单和黑名单 ped 任务。自带时两者都为空。

无效的键,以及文件中缺少的键#

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),以及 ts.DetectionExempt 服务器事件上的 always = true。

以下客户端开关会被读取但不在文件中,除非设为 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 的注释说超过上限时触发。实际上计数达到该值时就会触发。
  • 桥接注释建议四个桥接 convar 都使用 setr。只有 tosun_ac_resource 和 tosun_ac_bridge_client_ms 需要 setr。
  • ts.Locale 的注释漏掉了 ar,但 locales/ar.json 是随附的。

AC 检查的 FiveM 加固 convar#

有两个模块会在启动时读取 FiveM convar。convar 防护(ts.hardening)在启动约 8 秒后运行,并把未设置的值视为薄弱。server.cfg 审计(ts.cfgAudit)在启动 15 秒后运行,并且是只读的。

Convar推荐值检查者是否由 autoApply 应用
sv_stateBagStrictModetrueConvar 防护是
sv_filterRequestControl2Convar 防护是
sv_enableNetworkedSoundsfalseConvar 防护是
sv_enableNetworkedPhoneExplosionsfalseConvar 防护是
sv_enableNetworkedScriptEntityStatesfalseConvar 防护是
sv_scriptHookAllowedfalseConvar 防护;值为 true 时审计也会警告是
sv_entityLockdownrelaxed (strict also passes)Convar 防护,仅报告否。它可能会破坏从客户端生成车辆的脚本;请先测试。
sv_pureLevel1 or higherConvar 防护,仅报告否
onesyncon (legacy also passes)审计;同时也是 manifest 依赖项否
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 自己为六个安全的 convar 执行 set。sv_entityLockdown 和 sv_pureLevel 永远不会被自动应用。
  • ts.cfgAudit.enabled = false 会关闭 server.cfg 审计。
  • convar 防护会输出一条控制台警告,并写入一条列出所有薄弱 convar 的 ac_detections 记录(detection_type 为 hardening_missing)。
  • 审计会输出一条控制台警告,并写入一条包含薄弱设置数量的 admin_logs 记录。
  • 两项检查的控制台文本都是硬编码的土耳其语。每条防护警告行都会显示需要添加的准确 set 行。
  • tosunac_doctor 是另一份控制台报告,针对有风险的 AC 设置,而不是 FiveM convar。

常见错误#

提交支持工单之前,请先检查这些问题。

  • 用 setr 或 sets 设置凭证:它们会发送到每个客户端,或出现在服务器公开信息中。
  • 凭证放在 ensure tosun-ac 之后:要到下次资源重启才会生效。
  • 面板密钥放在 configs/anticheat_config.lua 中:该文件会发送给客户端,控制台会输出 MIGRATION 警告。
  • 没有启动 tosun_render:它是硬依赖。
  • ESX 或 Qbox 服务器上 ts.Framework.framework 仍为 "qb"。
  • 不使用土耳其语的服务器上 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 菜单:txAdmin ACE 只给予管理人员状态。请添加 tosun.admin 或面板授权。
  • set tosun_db_bridge_enabled "0" 但没有 tosun_db_bridge_manual "1":该行会被忽略。
  • ts.Debug 仍为 true:管理人员和白名单绕过都处于关闭状态。