文档 9.6.24
Export 参考
Tosun AC 9.6.15 的所有公开 export,包括参数、返回值、副作用,以及调用方资源是否必须受信任。如需按任务讲解的说明,请先阅读集成指南。
调用 export#
在你资源的服务器脚本中调用服务器 export,在其客户端脚本中调用客户端 export。资源名包含连字符,因此请始终使用方括号形式 exports['tosun-ac']。exports.tosun-ac 这种写法不是有效的 Lua。
- 服务器 id 请以数字传入。有几个 export 直接把 id 用作表的键。
- 有些 export 会执行同步数据库查询并让出(yield)。请在线程或事件处理器中调用它们:getBans、getBanInfo、GetDetections、isAdmin 及其他管理人员检查、IsExemptFromPunish、ForensicLinksOf 和 refreshPanelWhitelist。scanAllResources 和 scanSingleResource 也会让出。
- 受保护的 export 拒绝你的资源时会返回 false,即使它通常返回 nil。
- 有些 export 只有在对应功能启用时才存在(参见“依赖功能的 exports”)。调用未注册的 export 会抛出错误,因此请用 pcall 包裹这些调用。
- 有几个 export 没有出现在 fxmanifest.lua 的 export 列表中(例如 MarkTeleport、punish 和 AllowWeapon)。这些列表仅供参考;export 本身可以正常工作。
- 下面的表格中,调用方资源必须受信任时,最后一列为“是”。参见“受信任资源”。
-- 你自己资源中的服务器脚本
local status = exports['tosun-ac']:GetIntegrationStatus()
if not status.trusted then
print(status.hint) -- 需要添加的 server.cfg 行
end
-- 先告知 AC 即将传送,再移动玩家
exports['tosun-ac']:MarkTeleport(src, 8000)
SetEntityCoords(GetPlayerPed(src), x, y, z)
-- 你自己资源中的客户端脚本
exports['tosun-ac']:SetExempt(true, 60000, 'my_menu')受信任资源#
信任列中标为“是”的 export 会更改豁免、管理人员权限、封禁、玩家生命值、武器或背包、隔离、资源和特征码,或影响整个服务器。它们只接受来自受信任资源的调用。被拒绝的调用不做任何事并返回 false。
满足以下条件之一的调用方即为受信任:服务器控制台、tosun-ac 本身、配置中 ts.ExportCallerWhitelist 列出的资源,或 convar tosun_ac_trusted_resources 中列出的资源。默认配置列表为 qbx_core、qb-core、es_extended、ox_inventory 和 ox_lib。
优先使用 convar。它位于 server.cfg 中,AC 更新后仍然保留,而对配置文件的修改可能会在更新 AC 时丢失。名称之间用逗号或空格分隔。信任列表缓存 10 秒,因此运行时所做的更改会在 10 秒内生效。
对于每个资源与 export 的组合,第一次被拒绝时,AC 会在服务器控制台输出一条警告,其中包含需要添加的准确 server.cfg 行,并在面板日志中写入一行。面板日志行始终为土耳其语。
审计模式:设置 ts.EnforceExportCallerWhitelist = false 时,不受信任的调用会被执行,每个资源与 export 的组合会在服务器控制台输出一次(不写面板日志)。默认值为 true。审计模式只应在设置期间使用,用来查看哪些脚本调用了什么。
在服务器控制台运行 tosunac_integration,可输出执行模式、受信任资源及其来源(config 或 convar),以及最近 20 次被拒绝的调用。在脚本中可调用 GetIntegrationStatus()。
信任还会取消 MarkTeleport 额度:受信任资源可以标记传送,不受按玩家计算的时间限制。
Tosun AC 还为自身的内部机制(面板桥接、签名、扫描、授权、批处理)注册了内部 exports 和网络事件。它们不属于本参考,也不是受支持的 API。其中一些受信任检查或内部调用方检查保护。不要调用它们。
# server.cfg
set tosun_ac_trusted_resources "my-housing,my-clothing"集成和豁免#
这些服务器 export 用于告知 AC 你的脚本中的合法操作,以及读取玩家是否处于豁免状态。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
MarkTeleport | src;ms?(默认 8000,限制在 1000 到 ts.Integration.markTeleportMaxMs 之间,默认 15000);reason?(日志标签) | 授予成功或已被覆盖时为 true;玩家无效或离线,或额度不足时为 false | 软豁免。请在移动玩家之前立即调用。放宽服务器移动检查、godmode/invisible/noclip/focus 检查以及该玩家自己的客户端检查。武器、金钱、伤害、事件滥用、注入和崩溃类惩罚仍然适用。断开连接时清除。 | 否。不受信任的资源共享每名玩家每 10 分钟 180000 毫秒的额度(ts.Integration.markTeleportBudgetMs)。超出额度的请求会被整体拒绝。 |
IsMovementExempt | src | 布尔值 | MarkTeleport 或 DetectionExempt.serverEvents 软豁免窗口有效期间为 true。 | 否 |
GetIntegrationStatus | 无(自动识别调用方) | { version, resource, trusted, trustedVia ('config', 'convar', 'self' 或 nil), enforcing, hint } | 告诉你的资源它是否受信任以及信任方式。未受信任时,hint 是需要添加的 server.cfg 行。enforcing = false 表示审计模式。 | 否 |
SetPlayerExempt | src;state(true 授予,false 移除);durationMs?(默认 30000,最大 300000);reason? | true;不受信任或 src 不是数字时为 false | 完全豁免:服务器惩罚豁免加客户端豁免标志。大多数客户端检查会被跳过;仍进入客户端封禁路径的检测会降级为带 [exempt] 标签的 LOG 记录。与 whitelistPlayer、PausePlayerDetections 和 BypassDetection 共用一个计时器,因此新的授予可能缩短旧的授予,state = false 会取消它们。断开连接时清除。 | 是 |
SetExempt (server) | src;durationMs?(默认 30000,最大 300000);reason? | 与 SetPlayerExempt 相同 | SetPlayerExempt(src, true, durationMs, reason) 的别名。同名的客户端 export 参数不同。 | 是 |
BypassDetection | src;detectionKey(必填,但其值会被忽略);durationMs?(默认 5000,500 到 60000) | true;不受信任、src 缺失或为 0,或 key 为 nil 时为 false | 旧名称。授予与 SetPlayerExempt 相同的完全豁免;它并不只针对某一项检测。用空表作为 key 会返回 true,但不授予任何豁免。 | 是 |
PausePlayerDetections | src;durationMs?(默认 15000,最大 300000) | true;不受信任或 src 不是数字时为 false | 为一名玩家提供服务器惩罚豁免,并设置客户端暂停标志。 | 是 |
PauseAllDetections | durationMs?(默认 10000,最大 300000) | true;不受信任时为 false | 暂停当前所有在线玩家的客户端检测。没有服务器端豁免。之后加入的玩家不会被暂停。没有调用频率限制。 | 是 |
AllowWeapon | src;weapon?(名称如 'WEAPON_PISTOL'、哈希值、'*' 或 nil 表示所有武器);ms?(默认 600000,1000 到 3600000) | true;不受信任、玩家无效或离线,或某个数字为 NaN/inf 时为 false | 允许玩家持有和使用不在其背包中的武器。只放宽武器与背包比对检查(持有的武器和伤害)。断开连接时清除。 | 是 |
IsExemptFromPunish | src | 布尔值(true = 不惩罚) | 执行模块使用的核心规则。以下情况为 true:管理人员(ts.AdminBypassDetections 不为 false 时)、有效的豁免、运行时白名单和面板白名单,以及受保护的玩家。由于最后一条规则,即使 AdminBypassDetections = false,管理人员在这里仍然被豁免。开启 ts.Debug 时始终为 false。可能会查询数据库。 | 否 |
IsPlayerProtected | src | 布尔值 | 管理人员、管理员状态或有效豁免时为 true。忽略 ts.AdminBypassDetections 和 ts.Debug。不包括运行时白名单或面板白名单;完整规则请使用 IsExemptFromPunish。可能会查询数据库。 | 否 |
选择豁免方式#
使用能覆盖你脚本需求的最窄的豁免。几种豁免共用同一个客户端豁免标志,因此一种可能会结束另一种:带区域名调用 ClearArea 会重置 SetPlayerExempt、MarkTeleport 和 BypassDetection 也会设置的那个标志。
| Export | 服务器惩罚豁免 | 客户端检查 | 时长 | 是否需要受信任资源? |
|---|---|---|---|---|
MarkTeleport | 仅移动和可见性检查 | 豁免(窗口只会延长) | 默认 8 秒,最少 1 秒;每次调用最多 ts.Integration.markTeleportMaxMs(默认 15 秒) | 否(受额度限制) |
SetPlayerExempt, SetExempt (server) | 是 | 豁免 | 默认 30 秒,最长 300 秒 | 是 |
BypassDetection | 是 | 豁免 | 默认 5 秒,0.5 到 60 秒 | 是 |
PausePlayerDetections | 是 | 暂停 | 默认 15 秒,最长 300 秒 | 是 |
PauseAllDetections | 否 | 对当前在线玩家暂停 | 默认 10 秒,最长 300 秒 | 是 |
whitelistPlayer | 是 | 无客户端标志 | 默认 3600 秒,-1 = 直到断开连接 | 是 |
AddWhitelist | 是,按标识符 | 无客户端标志 | 直到重启,或 durationSec | 是 |
WhitelistArea | 否 | 豁免 | 默认 30 秒 | 是 |
AllowWeapon | 仅武器与背包比对检查 | 不变 | 默认 600 秒,最长 3600 秒 | 是 |
Client SetExempt, PauseDetections | 否 | 在该客户端上豁免或暂停 | 默认 30 秒或 10 秒,最长 300 秒 | 否(任何客户端资源) |
管理人员和权限#
读取和更改 AC 将谁视为管理人员。管理人员检查可能会查询数据库,因此请在线程或事件处理器中调用。
以下情况 isAdmin 返回 true:手动 addAdmin 授权;ACE txadmin、tx.admin、txadmin.menu、txadmin.advanced、command.txadmin、command.ts、command.ban、command.kick、tosun.admin、ts.admin 以及 ts.AdminBypassAces 中的任意 ACE;主体 group.admin、group.superadmin、group.moderator 和 group.god;ts.txAdminAuth 开启时的 command.kick/ban/resources/restart;admins.lua、ts.AdminMenu.allowedIds 和 ts.AdminBypassIdentifiers 中的标识符;以及数据库中的面板授权。同时授予了 builtin.everyone 的 ACE 不算。
isAdmin 和 addAdmin 在源码中注册了两次。anticheat_server.lua 中的版本最后加载,是实际运行的版本;本参考描述的就是这些版本。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
isAdmin | src(请传入数字) | 布尔值 | 根据上面列出的来源判断管理员状态。数据库结果为肯定时缓存 5 秒,为否定时缓存 30 秒。不考虑 ts.AdminBypassDetections。 | 否 |
isStaffPlayer | src | 布尔值 | 封禁路径使用的管理人员检查。来源与 isAdmin 相同,另外还包括 txAdmin 命令 ACE(command.kick/ban/resources/restart/screenshot/unban),除非 ts.txAdminAuth = false。 | 否 |
isAdminMenuAllowed | src | 布尔值 | 玩家是否可以打开管理菜单。菜单禁用时为 false。仅限 txAdmin 的 ACE(txadmin、tx.admin)、ts.AdminBypassAces 和 ts.AdminBypassIdentifiers 不算。不缓存:每次调用执行一次数据库查询。 | 否 |
getAdminType | src | 'tx'、'config' 或 false | 标签具有误导性:每条判定为管理员的路径都会设置同一个标志,因此管理人员几乎总是得到 'tx',而 'tx' 并不表示 txAdmin。请改用 isAdmin。 | 否 |
addAdmin | src(请传入数字) | nil;被拒绝时为 false | 运行时管理人员授权:惩罚豁免和管理菜单访问权限。不保存到数据库。断开连接时不清除:它会一直绑定到该服务器 id,直到 removeAdmin 或重启。 | 是 |
removeAdmin | src | nil;被拒绝时为 false | 移除手动授权和缓存的状态。ACE、txAdmin、admins.lua 和面板授权不会被撤销,下次检查时仍然有效。 | 是 |
玩家白名单和区域#
服务器 id 白名单、标识符白名单和命名区域。运行时列表只保存在内存中,重启后丢失;面板白名单是独立的。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
whitelistPlayer | src(请传入数字);durationSec?(默认 3600;-1 = 直到断开连接) | nil;被拒绝时为 false | 按服务器 id 提供服务器惩罚豁免。无客户端标志。断开连接时清除。SetPlayerExempt、PausePlayerDetections 和 BypassDetection 会覆盖它。 | 是 |
removeWhitelist | src | nil;被拒绝时为 false | 结束 whitelistPlayer。同时结束 SetPlayerExempt、PausePlayerDetections 或 BypassDetection 提供的服务器豁免。 | 是 |
AddWhitelist | target(服务器 id 或标识符字符串);durationSec?(nil 或 0 = 直到重启) | true;为空或被拒绝时为 false | 把标识符加入内存中的白名单(不保存到数据库)。传入服务器 id 会加入该玩家的所有标识符。标识符会转为小写,并去掉 license:、license2:、discord:、steam: 或 fivem: 前缀。全数字的值会被当作服务器 id,因此 Discord id 请带上 discord: 前缀。 | 是 |
RemoveWhitelist | target(服务器 id 或标识符) | true;为空或被拒绝时为 false | 移除运行时白名单条目。不会触及面板白名单表。 | 是 |
IsWhitelisted | src | 布尔值 | 任一标识符在运行时白名单或缓存的面板白名单中时为 true。不包括 whitelistPlayer 或 SetPlayerExempt。开启 ts.Debug 时始终为 false。 | 否 |
refreshPanelWhitelist | 无 | nil | 立即重新加载面板白名单(同步查询)。它还会在启动 12 秒后以及每 60 秒自动重新加载。 | 否 |
WhitelistArea | src;areaName(非空);durationSec?(默认 30) | true;无效或被拒绝时为 false | 记录一个命名区域并设置客户端豁免标志。只在客户端放宽:没有任何服务器模块读取该区域,因此没有服务器惩罚豁免。 | 是 |
ClearArea | src;areaName?('' 或 nil = 所有区域) | true;src 为 0 或被拒绝时为 false | 移除该区域。带名称时还会重置客户端豁免标志,这也会结束其他客户端豁免。名称为空时该标志保持不变。 | 是 |
IsInArea | src;areaName?(为空 = 任意区域) | 布尔值 | 带名称时会检查是否过期。名称为空时,只要存在任何条目(包括已过期的)就返回 true。 | 否 |
惩罚和封禁#
通过 AC 流程惩罚玩家、封禁离线玩家以及读取封禁。这里所有写入类 export 都需要信任。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
punish | src(在线);reason;image?(截图 URL 或数据);configKey?;punishment?('BAN'、'KICK' 或 'LOG') | nil;被拒绝时为 false | 运行完整的 AC 惩罚流程。被豁免的玩家会被跳过。参见“punish() 如何选择惩罚”。 | 是 |
ban | src(在线);reason | nil;被拒绝时为 false | 相同流程,配置键为 'Banned via Export',惩罚为 ts.punishType。并不总是永久:时长为 ts.BanDurations['default'](0 = 永久);如果服主把 ts.punishType 设为 KICK 或 LOG,则改为踢出或记录日志。被豁免的玩家会被静默跳过。 | 是 |
BanPlayerExt | src(在线);reason?(默认 'Banned by script') | 已派发时为 true;不受信任或离线时为 false | 与 ban() 相同。 | 是 |
KickPlayer | src(在线);reason?(默认 'Kicked by script') | true;不受信任或离线时为 false | 普通踢出,消息为 '[Tosun AC] ' 加上原因。不做豁免检查:管理人员和白名单玩家也会被踢出。不记录任何日志。 | 是 |
offlineBan | data { playername, license, steam, discord, ip, HWID, HWID2 到 HWID5 }(不带前缀的标识符);reason | nil;被拒绝时为 false | 为离线玩家写入永久封禁记录。缺失的标识符会存为连接时永远不会匹配的占位值。务必设置 data.playername 和 reason:缺少它们时,在 STRICT sql_mode 下写入会失败,而调用方不会收到通知。会在控制台输出一行。data = nil 会引发 Lua 错误。 | 是 |
offlineBanByLicense | license(纯 hex 或 'license:...');reason?(默认 'Sebep yok',土耳其语);actor?(默认 'panel');name?;citizenid? | true, banID('O' + 8 位 hex);false, 'license required';被拒绝时为 false | 永久 license 封禁,并在 ac_offline_bans 中写入一条历史记录。在数据库写入完成之前就返回,因此不会报告数据库错误。不会踢出在线的玩家。license 不是字符串时会引发 Lua 错误。 | 是 |
unban | banID | 始终为 nil | 异步:如果封禁存在,则删除它,向管理菜单 webhook 发送 Discord 日志,并触发服务器事件 ts_anticheat:playerUnbanned。ac_offline_bans 中的历史记录会保留。 | 是 |
getBans | limit?(默认 100,无上限);offset?(默认 0) | 封禁记录,最新的在前 | 完整记录,包括 IP、license、Steam、Discord 和 HWID 列。同步查询。 | 否 |
getBanInfo | banID | 完整封禁记录或 nil | 同步查询。 | 否 |
punish() 如何选择惩罚#
punish()、ban() 和 BanPlayerExt() 共用一个流程。以下是它遵循的顺序。
- ts.AdminBypassDetections 不为 false 时跳过管理人员。有有效豁免或在运行时白名单、面板白名单中的玩家会被跳过。ts.Debug 会关闭这些跳过。被跳过的调用不做任何事,也不记录日志。
- 玩家必须在线。否则会在服务器控制台输出错误,且不会发生任何事。
- 惩罚方式:有效的 punishment 参数优先。否则依次使用 ts.DetectionPunishments[configKey]、其别名、检测键、ts.punishType,最后是 BAN。
- 每种结果都会触发服务器事件 ts_anticheat:playerBanned,在 ts.chatMessages 开启时发送聊天消息,增加一次云端违规记录,并写入 AC 日志和实时日志。
- LOG:把截图日志发送到 Discord。
- KICK:无论 ts.AdminBypassDetections 如何都会再次检查管理人员,因此管理人员永远不会被踢出。然后发送截图日志并断开玩家连接。
- BAN:写入封禁,时长取自 ts.BanDurations,单位为小时(依次查找 configKey、别名、检测键、前缀,最后是 default;0 = 永久),bannedBy 为 'anticheat:' 加上键名。触发 ts_anticheat:banCommitted,通知面板并断开玩家连接(3 秒后重试)。
exports['tosun-ac']:punish(src, 'Money exploit', nil, 'my_shop_exploit', 'BAN')单个玩家的管理#
对一名玩家执行操作。请仔细查看信任列:其中有几个没有信任检查。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
freezePlayer | src(在线);freeze(布尔值) | true;离线时为 false | 冻结或解冻玩家,并发送本地化的聊天通知。断开连接时不会清除冻结标志。 | 否 |
isPlayerFrozen | src | 布尔值 | 只反映 freezePlayer,不反映 massFreeze。 | 否 |
slayPlayer | src(在线) | true;离线时为 false | 在玩家客户端上将其杀死并显示通知。 | 否 |
warnPlayer | src(在线);reason?;actor?(默认 'console') | true;离线时为 false | 向玩家发送聊天警告,并在 ac_player_warnings 中写入一条记录。 | 否 |
mutePlayer | src(在线);durationSec?(数字;nil 或 0 = 永久);reason?;actor?(默认 'system') | true;离线时为 false | 阻止该玩家的旧版 chatMessage 事件,并在 ac_player_mutes 中保存一条记录。限时禁言在到期后 15 秒内结束。永久禁言在断开连接时不会清除,会延续到下一个获得相同服务器 id 的玩家身上,直到 unmutePlayer 或重启。发给玩家的聊天通知是硬编码的土耳其语。 | 否 |
unmutePlayer | src | true;src 为 nil 时为 false | 解除禁言,玩家在线时通知玩家(硬编码的土耳其语聊天通知)。 | 否 |
isPlayerMuted | src | 布尔值 | 只读。 | 否 |
setPlayerHealth | src(在线);hp?(默认 100,0 到 200) | true;离线或被拒绝时为 false | 在客户端设置生命值,并把最大生命值设为 200。 | 是 |
setPlayerArmor | src(在线);armor?(默认 0,0 到 100) | true;离线或被拒绝时为 false | 在客户端设置护甲。 | 是 |
giveWeapon | src(在线);weapon?(默认 'WEAPON_PISTOL');ammo?(默认 60) | true;离线或被拒绝时为 false | 已启动 ox_inventory 时使用它;否则使用 QB 背包(仅限框架 'qb' 或 'qbox',不包括 'qbcore');否则使用 ESX addWeapon;否则以原生方式发放。即使背包拒绝了该物品也返回 true。不会调用 AllowWeapon,因此以原生方式发放的武器可能被武器与背包比对检查标记(默认动作为 log)。 | 是 |
stripWeapons | src(在线) | true;离线或被拒绝时为 false | 移除 ped 身上的所有武器。不触及背包物品。 | 是 |
clearInventory | src(在线) | true;离线或被拒绝时为 false | 通过 ox_inventory 清空背包。没有 ox_inventory 时只显示通知,不清空任何东西,但仍返回 true。 | 是 |
spectatePlayer | adminSrc;targetSrc | true;某个参数为 nil 或目标没有 ped 时为 false | 并非真正的观战:把 adminSrc 传送到目标处。每次调用还会给 adminSrc 一个不受额度限制的 15 秒移动豁免。 | 否 |
全服操作#
影响所有玩家或所有新连接的操作。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
lockdownStatus | 无 | active(布尔值)、reason(字符串) | 只读。 | 否 |
setLockdown | state(布尔值);reason(启用时请传入字符串) | nil;被拒绝时为 false | 封锁期间,所有新连接都会被拒绝,并显示 LOCKDOWN 消息和原因。没有管理人员例外。仅在运行时有效。会广播一条聊天消息。以 state 为 true 且不带 reason 调用时,会先开启封锁,然后引发 Lua 错误。 | 是 |
emergencyLockdown | reason?(封锁原因默认为 'Acil durum',土耳其语) | 被踢出的玩家数;被拒绝时为 false | 开启封锁,并以本地化消息踢出所有非管理人员玩家。 | 是 |
massFreeze | state(布尔值) | 玩家数;被拒绝时为 false | 冻结或解冻所有玩家,包括管理人员,并广播一条聊天消息。聊天消息是硬编码的土耳其语。 | 是 |
healAll | 无 | 收到治疗的玩家数;被拒绝时为 false | 为每个有 ped 的玩家把生命值设为最大、护甲设为 100。 | 是 |
setSpeedLimit | kmh(0 表示禁用) | 实际应用的限速值;被拒绝时为 false | 为当前在线的玩家限制车速。之后加入的玩家不受该限制。 | 是 |
applyWeatherWithFramework | weather(不校验) | true,以及尝试过的方法列表 | 依次尝试 qb-weather、Renewed-Weathersync、cd_easytime,然后是 wd_weather、weathersync、vSync 和 qb-weathersync,都不可用时广播给每个客户端。只有管理菜单启用时才存在。 | 否 |
applyTimeWithFramework | hour;minute(不做范围限制) | true,以及尝试过的方法列表 | 对时间使用相同的回退链。只有管理菜单启用时才存在。 | 否 |
隔离和数据保护#
隔离可疑玩家,并保护你自己的网络事件免受崩溃数据和刷屏攻击。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
quarantine | src(在线);reason?(默认 'supheli davranis',土耳其语);seconds?(默认 300,30 到 1800) | true(已被隔离时也是);对于被豁免或无效的玩家、bucket 失败或不受信任的调用方为 false | 把玩家移到隔离的 routing bucket(默认 9001 到 9500,严格实体锁定,无人口生成)。记录一条 QUARANTINE 检测,并向玩家发送聊天通知,除非 notifyPlayer = false。通知是硬编码的土耳其语。到期后自动释放。 | 是 |
releaseQuarantine | src | 释放成功时为 true;未被隔离或被拒绝时为 false | 恢复原来的 routing bucket,记录日志并通知玩家(硬编码的土耳其语聊天通知,除非 notifyPlayer = false)。 | 是 |
isQuarantined | src | 布尔值 | 只读。 | 否 |
quarantineList | 无 | { id, name, reason, remaining }[](remaining 以秒为单位) | 只读。 | 否 |
crashGuardInspect | value(任意数据) | 安全时为 nil;否则为土耳其语的问题描述 | 检查 NaN/Inf 数字、无效向量、超过 32768 个字符的字符串、超过 8 层的嵌套、超过 2000 个元素、总大小约 64 KB、超过 512 个字符的键、不支持的类型和递归。没有副作用。 | 否 |
crashGuardReject | src(在线);payload | 数据有问题时为 true(应丢弃);数据干净或 src 无效时为 false | 相同的检查,并给玩家记一次警告。60 秒内累计 3 次时执行 ts.crashGuard.action:'kick'(默认)、'ban',其他任何值 = 仅输出到控制台和日志。被豁免的玩家会被跳过。 | 否 |
RateLimit | src;key?(默认 'default');max?(默认 10,最小 1);windowMs?(默认 10000,最小 100) | true = 允许;false = 超出限制 | 按玩家和键的固定窗口计数器。所有资源共用这些键,因此请用你的资源名作为前缀。src 为 0 或无效时始终返回 true。断开连接时清除。 | 否 |
RegisterNetEvent('myres:buy', function(data)
local src = source
if not exports['tosun-ac']:RateLimit(src, 'myres:buy', 5, 10000) then return end
if exports['tosun-ac']:crashGuardReject(src, data) then return end
-- 处理购买
end)玩家和检测#
查询玩家、标识符、按玩家查询封禁、威胁评分和关联账号。部分结果包含 IP 地址等个人数据。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
GetPlayerInfo | src(在线) | { id, name, ping, license, discord, steam, citizenid, isAdmin, coords, endpoint } 或 nil | 标识符不带前缀(license 缺失时回退为 license2)。endpoint 是玩家的 IP。citizenid 只在框架为 'qb'、'qbcore' 或 'esx' 时填充;在 'qbox' 上为空。isAdmin 可能会查询数据库。 | 否 |
GetNearbyPlayers | src;radius?(默认 30.0) | { id, name, distance }[] | 根据服务器端 ped 位置(OneSync)查找 src 附近的玩家,不包括 src 本身。 | 否 |
getOnlinePlayers | 无 | { id, name, ping, license, discord, steam, isAdmin }[] | 这里的标识符保留前缀(license:...、discord:...、steam:...)。isAdmin 可能会为每名玩家查询数据库。 | 否 |
GetDetections | src(在线);limit?(默认 25) | { banID, reason, banDate, banUntil }[] 或 {} | 历史名称:返回按 license 匹配的该玩家 BAN 记录,而不是检测记录。 | 否 |
GetCloudThreatScore | src | 0 到 100 | 显示用评分:每次会话违规 8 分(最多 40,仅当最近一次违规不到 10 分钟时),每次错过 shield 签到 10 分(最多 30),每个 native-guard 威胁点 12 分(最多 30)。ts.cloudBridge.enabled = false 时为 0。 | 否 |
NoteCloudViolation | src;reason?;punishment?('LOG'、'KICK' 或 'BAN') | nil | 为玩家的评分增加一次违规;ts.cloudBridge.enabled = false 时不做任何事。每条 KICK 或 BAN 记录会使情报评分增加 25(最多 100,仅当最近一次不到 10 分钟时);达到 50 或以上时,该 license 会被报告到面板的跨服务器威胁数据库(需要面板 URL 和令牌)。只有 ts.cloudBridge.threatIntelAction = 'kick'(默认 'log')时才会阻止之后的加入。AC 已经在每次惩罚时调用它。 | 否 |
ForensicLinksOf | license(纯 hex,不带 license: 前缀) | 关联的 license(字符串列表);未知时为 {} | 查找共享 Steam、Discord 或 HWID 值的小号(只有 ts.forensics.linkByIp = true 时才包括 IP),最多 ts.forensics.maxHops 跳(默认 3,最大 5)。阻塞式查询。forensics 禁用时也能工作,但不会记录新的关联。 | 否 |
checkIpReputation | ip | { vpn, proxy, hosting, country, org, expiresAt } 或 nil | 只读取缓存。只为在 ts.v12.ipCheckCacheHours(24)内于连接时检查过的 IP 返回数据。不做实时查询。 | 否 |
webBridgeFindByLicense | license(字符串,带或不带 license:) | 在线服务器 id 或 nil | 查找在线玩家。实际上它会精确匹配任何标识符,例如 license2:... 或 discord:...。 | 否 |
webBridgeFindByCitizen | cid(QB citizenid 或 ESX identifier) | 在线服务器 id 或 nil | 仅适用于框架 'qb'、'qbcore' 和 'esx';在 'qbox' 上返回 nil。 | 否 |
通知和语言#
发送手机通知并使用 AC 的翻译表。phoneNotify 和 phoneNotifyAdmins 只有在 ts.AdminMenu.enable 开启时才存在。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
phoneNotify | src(在线);title;body;opts? { icon, color, app } | true;离线时为 false | 发送到第一个已启动的手机资源:qb-phone、qs-smartphone、lb-phone、yseries、gks_phone、npwd 或 roadphone,都没有时发送到聊天。手机资源只检测一次,因此之后才启动的手机资源在重启前会被忽略。 | 否 |
phoneNotifyAdmins | title;body;opts? | nil | 对每名在线管理人员调用 phoneNotify。可能会为每名玩家查询数据库。 | 否 |
getPlayerLocale | src | 语言代码;默认 ts.Locale('tr') | 只读。仅服务器端。 | 否 |
setPlayerLocale | src;lang(2 或 3 个小写字母,且有对应的 locales 文件) | 设置成功时为 true;否则为 false | 设置玩家的服务器端语言。与 ts_setlang 命令不同,它不会把语言同步到客户端。断开连接时清除。 | 否 |
translate | key;...({0}、{1} 的值,或用于 {name} 的一个表) | 翻译后的字符串;英文回退;缺失时返回键名本身 | 使用 ts.Locale。末尾带有对应 locale 文件的 2 或 3 个字母代码时会选择该语言。使用 %s 的模板会原样返回,不做格式化;请自行格式化。 | 否 |
translateForPlayer | src;key;... | 玩家语言的字符串 | 与 translate 类似,但使用玩家的语言。末尾不带语言代码。 | 否 |
截图#
为面板请求玩家截图。AC 的日志写入类 export 属于内部接口,不在此列出。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
v6ScreenWatchRequest | serverId(在线);mode?(默认 'once');requestedBy?(默认 'panel');panelUrl?;forceBase64? | 请求 id;或 nil, 'invalid_id';或 nil, 'offline' | 将截图加入队列,并要求客户端使用单次上传令牌把截图上传到面板。panelUrl 必须是 https,并与 ts_public_panel_url 或 ts.webPanelURL 一致,否则不会向客户端发出请求。待处理的请求 30 秒后过期,90 秒后被移除。 | 否 |
v6ScreenWatchPoll | rid | 待处理时为 { pending = true };否则为带有 status('done'、'failed' 或 'expired')和 url 的条目;或 nil, 'not_found' | 只读。 | 否 |
v6ScreenWatchLatest | serverId | 最新的请求条目或 nil | 只读。 | 否 |
RequestShieldScreenshot | src(在线) | true;离线时为 false | 向客户端 shield 请求一张截图(请求有效期 60 秒)。签名后的回复会发送到面板,并触发服务器事件 ts_anticheat:shield:screenshot_saved(src, b64)。 | 否 |
screenCapture | src(在线);requestedBy?(默认 'panel') | true;离线时为 false | 旧接口。需要 screenshot-basic 资源,并需用 setr 设置 convar ts_screen_upload(默认 http://localhost/api/screen_upload.php)。AC 不保存结果。请改用 v6ScreenWatchRequest 或 RequestShieldScreenshot。 | 否 |
状态和诊断#
为仪表盘和健康检查读取 AC 状态。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
GetStatus | 无 | { version, online, detections, debug, framework } | version 是 fxmanifest 中的资源版本。detections 只统计来自旧版未签名客户端通道的报告,开启签名(默认)时接近 0;它不是检测数或封禁数。没有运行时长字段。 | 否 |
getConfig (server) | configType?('webhooks' 或其他任意值) | 经过清理的配置副本;对于 'webhooks',向受信任调用方返回 Webhooks 表,向其他调用方返回 {} | 副本会去掉函数、名称中包含 secret、password、token 或 webhook 的键、以 key 结尾的键(以 hotkey 结尾的名称和单独的 key 除外),以及嵌套超过 6 层的内容。缓存 5 秒。 | 仅 'webhooks' 需要 |
licenseStatus | 无 | { checked, ok, reason, serverId, licenseSet } | 许可证锁定状态。ts.licenseLock.enabled 不为 true 时 reason 为 'disabled';在启动 1.5 秒后的首次检查之前为 'not_checked'。 | 否 |
GetServerAuthorityStatus | 无 | { enabled, checks = { [id] = { available, enabled, action } } } | 显示此服务器版本支持哪些服务器权威检查及其设置方式。Id:superJump、damageMod、meleeMod、defenseMod、weapon、godmode、invisible、noclip、focus。 | 否 |
getRuntimeStats | 无 | { uptime_sec, connect_buckets, subnet_buckets, license_tracking } | 连接加固计数器。 | 否 |
getBatchStats | 无 | { log_pending, detection_pending, webhook_pending } | 5 秒批量写入器的队列大小。 | 否 |
getCleanupStats | 无 | { runs, last_run_at, last_summary, cleaned } | 只读。 | 否 |
runCleanup | 无 | 统计表;被拒绝时为 false | 立即运行保留期清理:过期的在线玩家记录、旧检测记录、管理日志、面板审计、IP 信誉、命令和截图队列、登录尝试和过期会话(限制来自 ts.v12 的 keep 设置)。删除是异步的,因此返回的统计还不包括本次运行。 | 是 |
资源防护(Resource Guard)#
读取和更改已批准的资源基线。即使资源防护被禁用,这些 export 也都会注册。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
getBaseline | 无 | { [resource] = { manifest_hash, deep_hash } } | 已批准的基线。 | 否 |
getResources | 无 | { [resource] = true } | 已知资源。 | 否 |
getSuspicious | 无 | { [resource] = { reason, state, hash, manifest, at } } | 被标记为已更改或可疑的资源。 | 否 |
getStats | 无 | { lastScan, violations, driftedResources } | 防护计数器。 | 否 |
rescanResources | 无 | 完整的防护状态(ready、resources、hashes、suspicious、drift_count、violation_count、last_scan 等) | 同步重建资源快照。 | 否 |
approveResource | resourceName;approvedBy?(默认 'web_panel') | true;false, 'resource_missing';被拒绝时为 false | 把当前 manifest 哈希加入基线,清除可疑和阻止标志,保存到数据库并更新所有客户端。 | 是 |
blockResource | resourceName;reason?(默认 'Manuel blok',土耳其语) | true;被拒绝时为 false | 把资源标记为已阻止,从基线中移除,保存到数据库,如果已启动则将其停止。 | 是 |
tsAutoSetup | 无 | true(已有 setup 在运行时也是);被拒绝时为 false | 与控制台命令 tosunac_setup 相同:检测框架,运行后门扫描(超时 120 秒)和特征码扫描,只批准后门和特征码结果完整、干净且未改动的已启动资源,然后运行事件扫描。如果后门防护被禁用或正忙,会中止且不批准任何内容。 | 是 |
特征码、后门和事件扫描#
运行扫描并管理特征码、误报例外和 escrow 跳过项。扫描可能需要一些时间;请在线程中运行。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
scanAllResources | 无 | { total, scanned, infected, clean, errors, cached, skipped };或 nil, 'already_scanning' | 对所有资源进行特征码扫描。会让出(yield)。重置感染列表。ts.ResourceGuard.autoBlockInfected 开启时会阻止被感染的资源。 | 否 |
scanSingleResource | name | infected(布尔值)、reason | reason 为以下之一:self、escrow_signature_skip、whitelisted、snapshot_unavailable、incomplete、clean、cached_clean、infected、cached_infected、blocked。可能会让出。 | 否 |
getInfectedFiles | 无 | 被感染文件映射表 | 上次扫描的结果。 | 否 |
addCheatSignature | pattern(资源名模式);signatureName?;severity?(默认 'critical') | true;为空或被拒绝时为 false | 在内存和数据库中添加该模式。severity:info(低)、warning(中)、low、medium、high 或 critical;未知值会变为 high。 | 是 |
invalidateSignatureCache | 无 | true | 清空模式缓存和已保存的扫描结果,使下次扫描重新读取每个资源。 | 否 |
reloadSignatureExceptions | 无 | true | 使例外缓存、escrow 跳过缓存和已保存的扫描结果失效。下次使用时重新加载。 | 否 |
reloadSignatureScanCaches | 无 | true | 立即从数据库重新加载模式、白名单、例外和 escrow 跳过项。 | 否 |
addSignatureEscrowSkip | resourceName;note? | true;为空、没有 MySQL 或被拒绝时为 false | 对该资源跳过整个特征码扫描(用于 escrow 代码)。 | 是 |
removeSignatureEscrowSkip | idOrName(行 id 或资源名) | true;无效、没有 MySQL 或被拒绝时为 false | 移除 escrow 跳过项。 | 是 |
addSignatureException | resourceName;filePath?('' = 所有文件);signatureName;note? | true;缺少字段、没有 MySQL 或被拒绝时为 false | 把该资源中的一次特征码命中标记为误报。 | 是 |
removeSignatureException | id(数字) | true;不是数字、没有 MySQL 或被拒绝时为 false | 删除该例外。 | 是 |
tsScanBackdoors | callback?(report),其中 report = { complete, resources, finished_at, trigger } | 启动成功时为 true;已有扫描在运行时为 false | 在线程中运行后门扫描。结果写入数据库并发送到面板。ts.BackdoorGuard.autoQuarantine 开启时,严重命中会停止对应资源。 | 否 |
tsScanEvents | 无 | 启动成功时为 true;已有扫描在运行时为 false | 为所有资源中的事件和触发器建立静态清单,并发送到面板。 | 否 |
蜜罐事件#
把事件名变成陷阱或解除陷阱。两者都会写入 ac_protected_events 并从数据库重新加载。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
fakeTriggerTrap | eventName;type('client' 或 'server') | 已派发时为 true;不受信任或 type 无效时为 false | 把该事件设为蜜罐(active = 1)。重启 AC(ensure tosun-ac)以完全生效。 | 是 |
fakeTriggerWhitelist | eventName | 已派发时为 true(名称为空时也是,但不做任何事);不受信任时为 false | 禁用该事件的蜜罐(active = 0)。已注册的处理器可能需要重启 AC;控制台会给出提示。 | 是 |
依赖功能的 exports#
这些 export 只有在对应功能开启时才会注册。功能关闭时调用它们会抛出错误。
| Exports | 仅在以下情况注册 |
|---|---|
quarantine, releaseQuarantine, isQuarantined, quarantineList | ts.quarantine.enabled 不为 false |
crashGuardInspect, crashGuardReject | ts.crashGuard.enabled 不为 false |
runCleanup, getCleanupStats | ts.v12.enableAutoCleanup 不为 false |
tsScanBackdoors | ts.BackdoorGuard.enabled 不为 false |
tsScanEvents | ts.EventScanner.enabled 不为 false |
applyWeatherWithFramework, applyTimeWithFramework | 管理菜单已启用(ts.AdminMenu 存在,且 enable 和 enabled 都不为 false) |
phoneNotify, phoneNotifyAdmins | ts.AdminMenu.enable 已开启 |
客户端 exports#
在客户端脚本中调用这些 export。任何客户端资源都可以调用;没有信任检查。它们只影响该客户端上的检查,永远不会改变服务器端的执行。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
SetExempt (client) | state(布尔值);durationMs?(默认 30000,最大 300000);reason?(键,默认 'unknown') | nil | 以该 reason 添加或移除本地豁免。对同一 reason 的新授予会替换结束时间。生效期间大多数客户端检查会被跳过;仍进入客户端封禁路径的检测会降级为带 [exempt] 标签的 LOG 记录。state = false 只移除该 reason。 | 否 |
PauseDetections | durationMs?(默认 10000,最大 300000) | nil | 暂停本地客户端检查。每次调用都会替换结束时间,因此 PauseDetections(0) 会结束暂停,较短的值会缩短暂停。 | 否 |
IsPlayerAdmin | 无 | 布尔值 | 本地管理人员标志,每 2 秒根据服务器验证过的管理员状态刷新,而不是根据客户端可写的 state bag。 | 否 |
IsExempt | 无 | 布尔值 | 以下任一情况为 true:玩家是管理人员,服务器豁免或暂停有效,PauseDetections 有效,或有任何 SetExempt reason 有效。 | 否 |
GetExemptions | 无 | { [reason] = remainingMs } | 只列出 SetExempt 的 reason 和 tsAcExempt state bag。不显示 PauseDetections、服务器豁免或管理人员状态;完整结果请使用 IsExempt。 | 否 |
SetSpawned | state(布尔值) | nil | true 把玩家标记为已出生。false 会暂停移动和视觉检查,例如在角色选择时;每 5 分钟最多生效一次,检查会在约 30 秒的正常可见移动后恢复。 | 否 |
getConfig (client) | 无 | 客户端配置表 | 只有对客户端安全的设置才会同步到客户端。 | 否 |
-- 角色选择
exports['tosun-ac']:SetSpawned(false)
-- ... 玩家选择角色 ...
exports['tosun-ac']:SetSpawned(true)JavaScript exports#
Tosun AC 在服务器上注册了几个 JavaScript export,用于资源扫描和许可证验证。它们是内部接口,不受受信任资源检查保护,也不是受支持的 API。不要调用它们。没有公开的 JavaScript export。
桥接文件:设置#
tosun-ac/bridge 中的可选桥接文件会为你的资源提供一个带简短辅助函数的全局 TosunAC 表。它们在 pcall 中调用 export,因此 AC 停止时你的脚本仍会继续运行。AC 会把你的资源视为调用方。
- 把桥接文件加入你资源的 fxmanifest.lua:server_script '@tosun-ac/bridge/tosun_ac_server.lua',如有需要再加 client_script '@tosun-ac/bridge/tosun_ac_client.lua'。
- 如果 AC 文件夹使用了其他名称,在 server.cfg 中添加 setr tosun_ac_resource "folder-name"。请使用 setr:客户端桥接会在客户端读取这个 convar。
- 可选:set tosun_ac_bridge_server_ms(默认 60000)、set tosun_ac_bridge_cooldown_ms(默认 750,0 表示禁用)以及 setr tosun_ac_bridge_client_ms(默认 60000)。
- 如需完全的服务器豁免,请把你的资源加入 tosun_ac_trusted_resources。未受信任时,TosunAC.PlayerExempt 会回退为软豁免,并在服务器控制台输出一次提示(提示文本为土耳其语)。
-- 你的资源的 fxmanifest.lua
server_script '@tosun-ac/bridge/tosun_ac_server.lua'
client_script '@tosun-ac/bridge/tosun_ac_client.lua'
# server.cfg
setr tosun_ac_resource "tosun-ac"
set tosun_ac_trusted_resources "my-resource"
-- 服务器脚本
local ok, mode = TosunAC.PlayerExempt(src, 'long', 'clothing')
-- mode 为 'full'(受信任)或 'soft'(仅移动,最长 15 秒)桥接:服务器辅助函数#
由你资源内的 bridge/tosun_ac_server.lua 定义。预设:SHORT 30000、MEDIUM 60000、LONG 120000、XL 180000 毫秒(TosunAC.Presets)。TosunAC.Version 为 '1.2'。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
TosunAC.MarkTeleport | playerId(1 或更大);durationMs?(默认 8000) | 仅当 export 返回 true 时为 true | 以 reason 'bridge:teleport' 调用 MarkTeleport。 | 否(如果你的资源不受信任,则适用按玩家计算的 MarkTeleport 额度) |
TosunAC.PlayerExempt | playerId;durationMs(500 到 300000)、预设名称或 nil(= tosun_ac_bridge_server_ms);tag?(默认为你的资源名) | true, 'full';true, 'soft';或 false | 尝试 SetPlayerExempt。被拒绝时回退为最长 15 秒的 MarkTeleport。按玩家计算的冷却时间(默认 750 毫秒,与 PlayerExemptPreset 共用)期间直接返回一个 false。在审计模式下,即使是未列出的资源,结果也是 'full'。 | 仅 'full' 需要 |
TosunAC.PlayerExemptPreset | playerId;presetName?(默认 'MEDIUM',不区分大小写);tag? | 与 PlayerExempt 相同 | 使用预设时长的 PlayerExempt。未知名称使用 MEDIUM。忽略 tosun_ac_bridge_server_ms。 | 仅 'full' 需要 |
TosunAC.PlayerExemptOff | playerId;tag?(AC 不使用) | 被接受时为 true | 调用 SetPlayerExempt(playerId, false)。不受信任的资源得到 false,且软豁免窗口不会结束。 | 是 |
TosunAC.IsTrusted | 无 | 布尔值 | 即 GetIntegrationStatus().trusted。即使在审计模式下(受保护的调用仍会通过),对未列出的资源也返回 false。 | 否 |
TosunAC.IsAvailable | 无 | 布尔值 | AC 资源已启动时为 true。 | 否 |
桥接:客户端辅助函数#
由你资源内的 bridge/tosun_ac_client.lua 定义。它们封装了客户端 SetExempt export,因此只在客户端放宽检查。
| Export | 参数 | 返回值 | 作用 | 是否需要受信任资源? |
|---|---|---|---|---|
TosunAC.Exempt | durationMs(500 到 300000)、预设名称或 nil(= tosun_ac_bridge_client_ms);tag?(默认为你的资源名) | nil | 以键 'bridge:' 加 tag 调用客户端 SetExempt。 | 否 |
TosunAC.ExemptOff | tag?(必须与 Exempt 中使用的 tag 一致) | nil | 移除该豁免。 | 否 |
TosunAC.ExemptPreset | name?(默认 'MEDIUM') | nil | 使用预设时长和默认 tag 的 Exempt。没有 tag 参数。 | 否 |
TosunAC.RunWithExempt | durationMs;tag;fn | true 加上 fn 的返回值;false, err;或 fn 不是函数时为 false | 先豁免,在 pcall 中运行 fn,然后调用 ExemptOff(tag)。 | 否 |
TosunAC.RunWithExemptPreset | presetName;fn | 与 RunWithExempt 相同 | 使用预设时长和默认 tag 的 RunWithExempt。 | 否 |
TosunAC.IsAvailable | 无 | 布尔值 | AC 资源已启动时为 true。 | 否 |
tosun-ac:bridge:clientExempt (net event) | durationMs?;tag? | 无返回值 | 在每个包含客户端桥接文件的资源内注册。服务器脚本可以用 TriggerClientEvent 发送它,在该客户端上运行 TosunAC.Exempt。如果多个资源都包含桥接文件,每个资源都会应用各自的豁免。tosun-ac 中没有任何地方发送它。 | 否(服务器脚本,或使用 TriggerEvent 的本地客户端脚本) |
任何资源都能调用的 exports#
这些 export 没有信任检查,并且有副作用。每个服务器资源都可以调用它们。只运行你信任的资源;注意,任何服务器资源本来就可以通过 FiveM native 踢出玩家或触发客户端事件。
- MarkTeleport:移动豁免,受按玩家计算的额度限制。
- spectatePlayer:传送玩家,并在每次调用时授予不受额度限制的 15 秒移动豁免。
- NoteCloudViolation:提高玩家的威胁评分,并可能把 license 报告到跨服务器威胁数据库。
- warnPlayer 和 mutePlayer:写入警告和禁言记录。
- freezePlayer 和 slayPlayer:直接作用于玩家。
- crashGuardReject:增加可能导致踢出或封禁的警告次数。
- screenCapture、v6ScreenWatchRequest 和 RequestShieldScreenshot:请求截图。
- rescanResources、scanAllResources、scanSingleResource、tsScanBackdoors 和 tsScanEvents:启动扫描。自动阻止或自动隔离开启时,scanAllResources 可能阻止资源,tsScanBackdoors 可能停止资源。
- applyWeatherWithFramework 和 applyTimeWithFramework:为所有人更改天气和时间。
- invalidateSignatureCache、reloadSignatureExceptions、reloadSignatureScanCaches 和 refreshPanelWhitelist:重新加载缓存。
- setPlayerLocale 和 unmutePlayer:更改玩家状态。
- phoneNotify 和 phoneNotifyAdmins:向玩家发送手机或聊天消息。
旧名称和易误解的名称#
这些 export 仍然可用,但它们的名称或旧文档暗示了它们实际上并不做的事情。
- 旧指南(9.6.6 的 INTEGRATION.md、8.6.1 的 CONFIG-EXPORTS-MULTILANG.md,以及重定向占位文件 TOSUN-AC-EXPORTS.md)已经过时。两者不一致时,以本参考为准,它与 9.6.15 的代码一致。
- SetPlayerExempt、PausePlayerDetections、PauseAllDetections、BypassDetection、AddWhitelist、RemoveWhitelist、WhitelistArea、ClearArea、addAdmin、fakeTriggerTrap 和 fakeTriggerWhitelist 需要受信任资源,尽管 CONFIG-EXPORTS-MULTILANG.md 列出它们时没有提到这一要求。
- 默认受信任列表为 qbx_core、qb-core、es_extended、ox_inventory 和 ox_lib。INSTALLER-READY.md 漏掉了 qb-core 和 es_extended。
- GetIntegrationStatus() 还会返回 version 字段。
- punish、ban、BanPlayerExt、KickPlayer、offlineBan 和 offlineBanByLicense 需要受信任资源。
- ban() 和 BanPlayerExt() 遵循 ts.punishType 和 ts.BanDurations['default'],因此并不总是永久封禁。
- KickPlayer 不检查豁免。在 punish 流程中,KICK 始终放过管理人员,而 BAN 和 LOG 遵循 ts.AdminBypassDetections。
- 客户端豁免期间,大多数客户端检查会被完全跳过。只有仍进入封禁路径的检测才会变成带 [exempt] 标签的 LOG 记录。
- 只有 ts.cloudBridge.threatIntelAction = 'kick' 时,NoteCloudViolation 才会阻止之后的加入。
- 使用客户端桥接时,convar tosun_ac_resource 和 tosun_ac_bridge_client_ms 必须用 setr 设置,而不是 set。
- MarkTeleport 的单次调用上限(ts.Integration.markTeleportMaxMs)同样适用于受信任的调用方。只有每 10 分钟 180 秒的额度是针对不受信任调用方的。
| Export | 须知 | 改用 |
|---|---|---|
BypassDetection | 检测键会被忽略。它授予 0.5 到 60 秒的完全豁免。 | 短时长的 SetPlayerExempt,传送则用 MarkTeleport |
GetDetections | 返回玩家的封禁记录,而不是检测记录。 | getBans 或 getBanInfo |
getAdminType | 'tx' 并不表示 txAdmin;管理人员几乎总是得到 'tx'。 | isAdmin 或 isStaffPlayer |
SetExempt (server) | SetPlayerExempt(src, true, ...) 的别名。参数与客户端 SetExempt 不同。 | SetPlayerExempt |
WhitelistArea | 只在客户端放宽;没有服务器惩罚豁免。 | 需要服务器豁免时使用 SetPlayerExempt |
screenCapture | AC 不保存结果。 | v6ScreenWatchRequest 或 RequestShieldScreenshot |
GetStatus().detections | 不是检测数或封禁数。 | 不要把它当作计数器使用 |
isAdmin, addAdmin | 在源码中注册了两次。运行的是 anticheat_server.lua 中的版本。 | 正常调用即可 |