文档 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_BUILDserver.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_upload | http://localhost/api/screen_upload.php | screenCapture 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_ms | 5000(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_ms | 120000(30000 到 600000) | 游戏时长写入器的循环间隔。 | 使用 set 即可。 |
tosun_ac_resource | "tosun-ac" | 你自己资源内的可选桥接文件所使用的 AC 资源名。 | 面向开发者。重命名 AC 文件夹时请使用 setr:客户端桥接只能看到复制型 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 都会把解析出的密钥以明文写入 ac_settings 的 webPanelKey 行。如果有人在面板中编辑了这一行,编辑后的值会替换你的值,直到下次重启。
仅限许可证密钥:许可证锁接受 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 和截图上传#
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。
- 要从 server.cfg 控制桥接,请在 ensure tosun-ac 之前添加 set tosun_db_bridge_manual "1"。
- 添加 set tosun_db_bridge_enabled,值为 "1" 或 "0"。
- 添加 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.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 | 网页面板或白名单 exports | 否(仅惩罚豁免) | 否 | ts.Debug = true 时被忽略。 |
ACE tosunac.admin | server.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.AdminBypassDetections | true | false 会让管理人员像普通玩家一样受到惩罚。 |
ts.txAdminAuth | true | false 会禁用 txAdmin 命令 ACE 路径(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 检查都会忽略 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.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 | 在检测 embed 中添加 @everyone。该文本放在 embed 对象内,而不是消息顶层的 content 中。 |
ts.chatMessages | false | 在聊天中公告惩罚。 |
ts.spoilerIP | true | 在 Discord 日志中用剧透标记包裹 IP 地址。 |
ts.needDiscord | false | true 会拒绝没有 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.quarantine | quarantine 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.crashGuard | state 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.shield | JS 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.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 | v9 中央面板 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.PanelDangerousActionIPs | kick_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.cfgAudit | FiveM convar 防护和只读的 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。无效调用会被拒绝并记录,从不惩罚。 | 只添加你自己使用 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_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) | 审计;同时也是 manifest 依赖项 | 否 |
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 自己为六个安全的 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:管理人员和白名单绕过都处于关闭状态。