From cb27c5ca5ad19a40b028e14fc8e7b2912ec33dc4 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 15 Oct 2026 13:34:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(turret):=20=E7=82=AE=E5=A1=94=E6=91=86?= =?UTF-8?q?=E5=A4=B4=E7=B2=BE=E5=87=86=E8=B7=9F=E6=89=8B=EF=BC=88=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=BC=80=E5=90=AF=EF=BC=89+=20=E6=8E=A2=E9=92=88?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - module_87072 oxt.wak:case 1/2 直接锁到目标角,去掉速度追赶导致的追过头再回摆 - module_87072 weaponMount.qyr:去掉渲染层二次插值(dzi_1=azi_1、izi_1=gzi_1) - 回退开关:window.__hornetTurretPrecise__ = 'off' / false - probe_chassis.js:新增 oxt.wak / weaponMount.qyr 采样链路,用于定位过冲 - main.9f4e7a89.js:探针改为默认关闭(localStorage.hornetProbe='1' 开启) --- 3dtank.com/play/static/js/main.9f4e7a89.js | 6 +++--- sockets/probe_chassis.js | 25 ++++++++++++++++++++-- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/3dtank.com/play/static/js/main.9f4e7a89.js b/3dtank.com/play/static/js/main.9f4e7a89.js index 83d6ac0..dc17884 100644 --- a/3dtank.com/play/static/js/main.9f4e7a89.js +++ b/3dtank.com/play/static/js/main.9f4e7a89.js @@ -155,11 +155,11 @@ try { } } - // ===== 自动加载链路探针(默认开;localStorage.hornetProbe='0' 关闭)===== + // ===== 自动加载链路探针(**默认关闭**;localStorage.hornetProbe='1' 开启)===== // 开关只能用 localStorage:hash 会被游戏当路由(进不去战场),查询串会被当 config 参数(握手 1005)。 - // 探针数据走 POST /__probe__ 落盘:武器链路 → probe_railgun.log,底盘控制 → probe_chassis.log。 + // 探针数据走 POST /__probe__ 落盘:武器链路 → probe_railgun.log,底盘/炮塔 → probe_chassis.log。 console.log('[Hornet] 探针块已执行 (localStorage.hornetProbe=' + JSON.stringify(localStorage.getItem('hornetProbe')) + ')'); - if (localStorage.getItem('hornetProbe') !== '0') { + if (localStorage.getItem('hornetProbe') === '1') { (async () => { for (let i = 0; i < 900; i++) { // 等进战场(最多 15 分钟) if (window.__gameMode__) break; diff --git a/sockets/probe_chassis.js b/sockets/probe_chassis.js index 3518ede..9d18139 100644 --- a/sockets/probe_chassis.js +++ b/sockets/probe_chassis.js @@ -61,7 +61,7 @@ }; // ---- 状态 ---- - var Tank = null, Cyt = null, Zmt = null, Eyt = null, Iyt = null, InputS = null, SI = null; + var Tank = null, Cyt = null, Zmt = null, Eyt = null, Iyt = null, InputS = null, SI = null, Mount = null, Turret = null; var LastSeen = {}; var Once = function (key, val) { var s = JSON.stringify(val); @@ -117,7 +117,7 @@ else Object.keys(m).forEach(function (k) { Entries.push([k, m[k]]); }); })(); - var c = null, z = null, e = null, iy = null, isv = null; + var c = null, z = null, e = null, iy = null, isv = null, mt = null, tu = null; Entries.forEach(function (en) { var v = en[1]; if (!v) return; @@ -126,11 +126,14 @@ if (!e && 'k14l_1' in v && 'l14l_1' in v) e = v; // 上行桥 if (!iy && 't14l_1' in v && 'r14l_1' in v && 'u14l_1' in v) iy = v; // 注入通道 if (!isv && typeof v.ua2 === 'function') isv = v; // inputSettingsService + if (!mt && 'azi_1' in v && 'dzi_1' in v && 'ezi_1' in v && 'mzi_1' in v) mt = v; // weaponMount(炮塔朝向矩阵) + if (!tu && 'tzp_1' in v && 'pzp_1' in v && 'rzp_1' in v && 'lzp_1' in v) tu = v; // oxt(炮塔控制器) }); // 只在有实质变化时更新(避免坦克重建后仍指向旧对象) if (Found !== Tank) { Tank = Found; LOG('玩家坦克组件数=' + Best + ' ctor=' + Ctor(Tank)); } Cyt = c; Zmt = z; Eyt = e; Iyt = iy; InputS = isv; + Mount = mt; Turret = tu; return !!(Cyt || Zmt); }; @@ -140,6 +143,8 @@ LOG('Zmt ' + (Zmt ? Ctor(Zmt) + ' ▸ ' + Object.keys(Zmt).join(',') : 'null')); LOG('Eyt ' + (Eyt ? Ctor(Eyt) + ' ▸ ' + Object.keys(Eyt).join(',') : 'null')); LOG('Iyt ' + (Iyt ? Ctor(Iyt) + ' ▸ ' + Object.keys(Iyt).join(',') : 'null')); + LOG('Mount ' + (Mount ? Ctor(Mount) + ' ▸ ' + Object.keys(Mount).join(',') : 'null')); + LOG('Turret ' + (Turret ? Ctor(Turret) + ' ▸ ' + Object.keys(Turret).join(',') : 'null')); if (Cyt) LOG('Cyt.j14k_1 ctor=' + Ctor(Cyt.j14k_1) + ' 三轴=' + JSON.stringify(Axes(Cyt.j14k_1))); if (Zmt) LOG('Zmt.r14f_1 三轴=' + JSON.stringify(Axes(Zmt.r14f_1)) + ' q14f_1 三轴=' + JSON.stringify(Axes(Zmt.q14f_1))); if (InputS) { @@ -167,6 +172,20 @@ var c = args[1]; LOG('p14n 履带上行 t=' + Num(args[0]) + ' fwd=' + Num(c && c.m14b_1) + ' turn=' + Num(c && c.n14b_1) + ' revTurn=' + Num(c && c.o14b_1)); + } else if (tag === 'OXTWAK') { + // 炮塔控制器每帧:azi_1=目标角,mode=输入模式,rzp_1=输入,lzp_1=当前转速 + var z = Num(self.azi_1); + if (Once('oxt', z + '|' + Num(self.pzp_1 && self.pzp_1.k3_1))) { + LOG('oxt.wak azi_1=' + z + ' mode=' + Num(self.pzp_1 && self.pzp_1.k3_1) + + ' rzp_1=' + Num(self.rzp_1) + ' lzp_1=' + Num(self.lzp_1) + ' jzp_1=' + Num(self.jzp_1)); + } + } else if (tag === 'QYR') { + // 炮塔矩阵每帧插值:azi_1=目标角,dzi_1=显示角,czi_1=弹簧补偿,args[0]=渲染插值系数 + var R2 = function (x) { return typeof x === 'number' ? Math.round(x * 100) / 100 : Num(x); }; + var Key = R2(self.azi_1) + '|' + R2(self.dzi_1) + '|' + R2(self.czi_1) + '|' + R2(args[0]); + if (Once('qyr', Key)) { + LOG('qyr t=' + R2(args[0]) + ' azi_1=' + R2(self.azi_1) + ' dzi_1=' + R2(self.dzi_1) + ' czi_1=' + R2(self.czi_1)); + } } }; var Wrap = function (obj, name, tag) { @@ -194,6 +213,8 @@ var Hit = []; if (Wrap(Cyt, 'wak', 'CYTAWAK')) Hit.push('Cyt.wak'); if (Wrap(Zmt, 'wak', 'ZMTAWAK')) Hit.push('Zmt.wak'); + if (Wrap(Turret, 'wak', 'OXTWAK')) Hit.push('oxt.wak(炮塔控制器)'); + if (Wrap(Mount, 'qyr', 'QYR')) Hit.push('weaponMount.qyr(炮塔矩阵)'); Hooked = true; LOG('已挂 Hook: ' + (Hit.join(' | ') || '(无)')); } else if (Tries % 15 === 0) {