工具链(3DTank/tools/):extract(模块提取)、mine_evidence/apply_names(命名证据与别名回填)、extract_codec_fields(字段表 + 全库槽位类型 + PrimClassWire/ResourceClasses)、mine_downlink(下行字段表)、extract_space_init/rebase_space_init/audit_space_init(空间模板与记录切分审计)、extract_space_session(把真实会话切成按上行触发的回放模板)、pair_flow(请求→应答配对)、probe_containers、ingest/decrypt_frames(抓包入库与解密)、serve/fetch_assets(本地站点镜像)、import_db(抓包对象仓库导入 MySQL)。 服务器(3DTank/tools/server/):link/entry/codec/container/dispatch/world/space/semantic(协议层与 lt/pt/zt 三个容器布局)、session(会话回放,顺序推进)、db + schema.sql(MySQL 连接层与对象仓库表结构)、store/responder(查库组帧与定向应答;接管范围默认只开 ba.lcr)。 同时修 pair_flow 的时间轴偏移:timeline_c2s 与 timeline_s2c 的 0 点相差 144~4453ms,改前配对整体偏约 2 秒(实测 space-100073070 偏 2084ms),改后 22.4% 的触发者被纠正。 src/、src_named/、packets/、3DTank/local/(含数据库口令)不进库,可用上述工具重新生成。
22 lines
1.2 KiB
JavaScript
22 lines
1.2 KiB
JavaScript
// client_send_dump.js - 把客户端记录下来的"上行命令"上传到本地服务器,用于反查上行方法号
|
||
// 前置:本地镜像 module_61860.js 的发送点(Ie.i7q)已加 [Hornet 调试],
|
||
// 每次上行都会往 window.__HornetSendLog__ 里塞 {t, cls, text, len, hex}。
|
||
// 用法:进游戏点几下(车库/商店/任务…)→ 控制台粘贴本文件 → 等"已上传"提示
|
||
(function () {
|
||
var Log = window.__HornetSendLog__;
|
||
if (!Log || !Log.length) {
|
||
console.warn('[SendDump] window.__HornetSendLog__ 为空:确认镜像 module_61860.js 已带调试钩子,并且刷新过页面');
|
||
return;
|
||
}
|
||
console.log('[SendDump] 共 ' + Log.length + ' 条上行记录,样例:');
|
||
Log.slice(-8).forEach(function (E) {
|
||
console.log(' len=' + E.len + ' cls=' + E.cls + ' ' + String(E.text).slice(0, 90));
|
||
});
|
||
var Body = JSON.stringify(Log);
|
||
fetch('/__dump__/sendlog.json', { method: 'POST', body: Body }).then(function (R) {
|
||
console.log('[SendDump] 已上传 /__dump__/sendlog.json → HTTP ' + R.status + '(' + Body.length + ' 字节)');
|
||
}).catch(function (E) {
|
||
console.warn('[SendDump] 上传失败:' + E.message + '(可手动 copy(JSON.stringify(window.__HornetSendLog__)))');
|
||
});
|
||
})();
|