调试器 API
调试器将核心对象暴露在 window.TankiDebug 下,供插件和外部脚本调用。
全局对象
window.TankiDebug
调试器的主对象,包含所有核心功能。
类型: object
示例:
// 在浏览器控制台中访问
console.log(TankiDebug);配置相关
TankiDebug.config
当前完整的配置对象。
类型: object
结构:
{
profiles: [ // 预设数组
{
id: string, // 预设唯一标识
name: string, // 预设名称
author: string, // 作者
enabled: boolean, // 是否启用
targets: { // 参数配置
"类名.参数名": {
val: string, // 注入值
active: boolean // 是否锁定
}
}
}
],
currentProfileId: string // 当前预设 ID
}TankiDebug.getCurrentProfile()
获取当前正在编辑的预设。
返回值: object - 当前预设对象
示例:
const profile = TankiDebug.getCurrentProfile();
console.log(profile.name);TankiDebug.getMergedTargets()
获取所有已启用预设的合并参数(冲突时后启用的覆盖)。
返回值: object - 合并后的参数配置
示例:
const targets = TankiDebug.getMergedTargets();
// {
// "BattleUsers.ranks": { val: "[15,30,45]", active: true, profileId: "xxx" },
// ...
// }TankiDebug.saveConfig()
手动保存当前配置到本地存储。
返回值: void
说明: 一般情况下配置会自动保存,无需手动调用。
参数操作
TankiDebug.addTarget(cls, pName, obf)
添加参数到当前预设。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
cls | string | 类名(如 BattleUsers) |
pName | string | 参数名(如 ranks) |
obf | string | 混淆名(可选,自动解析时可不传) |
返回值: void
示例:
TankiDebug.addTarget('BattleUsers', 'ranks');TankiDebug.removeTarget(targetKey)
从当前预设删除参数。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
targetKey | string | 参数完整路径(如 BattleUsers.ranks) |
返回值: void
TankiDebug.updateVal(targetKey, newVal)
更新参数的注入值。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
targetKey | string | 参数完整路径 |
newVal | string | 新的注入值(字符串形式) |
返回值: void
示例:
TankiDebug.updateVal('State.userTeam', 'TEAM_RED');TankiDebug.toggleActive(targetKey)
切换参数的锁定状态(启用/禁用注入)。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
targetKey | string | 参数完整路径 |
返回值: void
UI 相关
TankiDebug.showAlert(msg)
显示提示弹窗。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
msg | string | 提示内容 |
返回值: void
TankiDebug.showConfirm(msg, onYes)
显示确认弹窗。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
msg | string | 确认内容 |
onYes | function | 点击确定时的回调 |
返回值: void
TankiDebug.copyText(text, msg)
复制文本到剪贴板。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
text | string | 要复制的文本 |
msg | string | 成功提示(可选) |
返回值: void
数据解析
TankiDebug.serializeValue(val)
将任意值序列化为字符串(用于导出/复制)。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
val | any | 要序列化的值 |
返回值: string - 序列化后的字符串
示例:
const str = TankiDebug.serializeValue({ x: 100, y: 200 });
// "{\n \"x\": 100,\n \"y\": 200\n}"TankiDebug.deepInspect(obj, depth, maxDepth, seen, maxKeys)
深度检查对象并生成 HTML 高亮字符串。
参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
obj | any | - | 要检查的对象 |
depth | number | 0 | 当前深度 |
maxDepth | number | 5 | 最大深度 |
seen | WeakSet | new WeakSet() | 循环引用检测 |
maxKeys | number | 50 | 最大键数量 |
返回值: string - HTML 字符串
TankiDebug.translateObjToReal(obj, cache)
递归翻译对象,将混淆键名转换为真实名。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
obj | any | 要翻译的对象 |
cache | Set | 循环引用缓存(可选) |
返回值: any - 翻译后的新对象
内核探针
TankiDebug.kernel
内核探针模块,详见 内核探针 API。
示例:
// 打开探针面板
TankiDebug.kernel.openInspector();
// 获取坦克数据
const pos = TankiDebug.kernel.getPosition();插件系统
TankiDebug.registerPlugin(meta, impl)
注册插件。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
meta | object | 插件元数据 |
impl | object | 插件实现(含 onLoad、onUnload) |
meta 结构:
{
id: string, // 唯一标识
name: string, // 显示名称
version: string, // 版本号
author: string, // 作者
description: string // 描述
}返回值: void
详见 插件开发。
TankiDebug.getApi(pluginId)
获取插件 API 实例。
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
pluginId | string | 插件 ID |
返回值: object - API 对象
API 对象结构:
{
log: (msg, type) => void,
showToast: (msg) => void,
getKernel: () => object,
addButton: (config) => void
}其他
TankiDebug.version
调试器版本号(从 @version 读取)。
类型: string
TankiDebug.generateId()
生成随机 ID。
返回值: string - 9 位随机字符串
TankiDebug.obfToRealMap
混淆名到真实名的映射表。
类型: object
示例:
// 输入混淆名,得到真实名
const realName = TankiDebug.obfToRealMap['Z_1a2b3c'];
// "ranks"TankiDebug.realToObfMap
真实名到混淆名的映射表。
类型: object
示例:
// 输入真实名,得到混淆名
const obfName = TankiDebug.realToObfMap['ranks'];
// "Z_1a2b3c"事件
TankiDebugReady
当调试器加载完成并准备好接受插件注册时触发。
示例:
window.addEventListener('TankiDebugReady', () => {
TankiDebug.registerPlugin(meta, impl);
});使用示例
示例1:添加并锁定参数
const key = 'State.userTeam';
TankiDebug.addTarget('State', 'userTeam');
TankiDebug.updateVal(key, 'TEAM_RED');
TankiDebug.toggleActive(key);示例2:监听参数变化
// 通过 runtimeDebugs 获取运行时数据
const rt = Object.values(TankiDebug.runtimeDebugs).find(r => r.key === 'BattleUsers.ranks');
if (rt) {
console.log('当前值:', rt.origVal);
console.log('历史记录:', rt.origValues);
}示例3:导出全部配置
const config = JSON.stringify(TankiDebug.config, null, 2);
TankiDebug.copyText(config, '配置已复制');