diff --git a/3dtank.com/play/static/js/unpacked/hornet_bundle.js b/3dtank.com/play/static/js/unpacked/hornet_bundle.js index d2bb6a1..87ef1c7 100644 --- a/3dtank.com/play/static/js/unpacked/hornet_bundle.js +++ b/3dtank.com/play/static/js/unpacked/hornet_bundle.js @@ -276,7 +276,7 @@ return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 }; } } - // 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的) + // 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件 var Found = null; try { tank.qz1_1.s2a_1.forEach(function (valueList) { @@ -294,6 +294,28 @@ } }); } catch (e) {} + if (Found) return Found; + + // 兜底 2:矩阵式位置 —— 引擎的世界矩阵通常是长度 ≥16 的数组,[12],[13],[14] 是平移分量 + try { + tank.qz1_1.s2a_1.forEach(function (valueList) { + if (Found) return; + var comp = (valueList && typeof valueList.g1 === 'function') ? valueList.g1(0) : valueList; + if (!comp) return; + for (var K in comp) { + var M = comp[K]; + if (M && typeof M === 'object' && typeof M.length === 'number' && M.length >= 15) { + var X = M[12], Y = M[13], Z = M[14]; + if (typeof X === 'number' && typeof Y === 'number' && typeof Z === 'number' && + Math.abs(X) < 1e6 && Math.abs(Y) < 1e6 && Math.abs(Z) < 1e6 && + (X !== 0 || Y !== 0 || Z !== 0)) { + Found = { x: X, y: Y, z: Z }; + return; + } + } + } + }); + } catch (e) {} return Found; } diff --git a/3dtank_bundle.js b/3dtank_bundle.js index d2bb6a1..87ef1c7 100644 --- a/3dtank_bundle.js +++ b/3dtank_bundle.js @@ -276,7 +276,7 @@ return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 }; } } - // 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的) + // 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件 var Found = null; try { tank.qz1_1.s2a_1.forEach(function (valueList) { @@ -294,6 +294,28 @@ } }); } catch (e) {} + if (Found) return Found; + + // 兜底 2:矩阵式位置 —— 引擎的世界矩阵通常是长度 ≥16 的数组,[12],[13],[14] 是平移分量 + try { + tank.qz1_1.s2a_1.forEach(function (valueList) { + if (Found) return; + var comp = (valueList && typeof valueList.g1 === 'function') ? valueList.g1(0) : valueList; + if (!comp) return; + for (var K in comp) { + var M = comp[K]; + if (M && typeof M === 'object' && typeof M.length === 'number' && M.length >= 15) { + var X = M[12], Y = M[13], Z = M[14]; + if (typeof X === 'number' && typeof Y === 'number' && typeof Z === 'number' && + Math.abs(X) < 1e6 && Math.abs(Y) < 1e6 && Math.abs(Z) < 1e6 && + (X !== 0 || Y !== 0 || Z !== 0)) { + Found = { x: X, y: Y, z: Z }; + return; + } + } + } + }); + } catch (e) {} return Found; } diff --git a/tools/hornet_lib.js b/tools/hornet_lib.js index 40b04da..fa5ba22 100644 --- a/tools/hornet_lib.js +++ b/tools/hornet_lib.js @@ -61,7 +61,7 @@ return { x: Comp[Key].f20_1, y: Comp[Key].g20_1, z: Comp[Key].h20_1 }; } } - // 兜底:遍历坦克全部组件,找任意"带 O$ 向量"的组件(位置向量通常会每帧更新,取第一个数值合理的) + // 兜底 1:遍历坦克全部组件,找任意"带 O$ 向量"的组件 var Found = null; try { tank.qz1_1.s2a_1.forEach(function (valueList) { @@ -79,6 +79,28 @@ } }); } catch (e) {} + if (Found) return Found; + + // 兜底 2:矩阵式位置 —— 引擎的世界矩阵通常是长度 ≥16 的数组,[12],[13],[14] 是平移分量 + try { + tank.qz1_1.s2a_1.forEach(function (valueList) { + if (Found) return; + var comp = (valueList && typeof valueList.g1 === 'function') ? valueList.g1(0) : valueList; + if (!comp) return; + for (var K in comp) { + var M = comp[K]; + if (M && typeof M === 'object' && typeof M.length === 'number' && M.length >= 15) { + var X = M[12], Y = M[13], Z = M[14]; + if (typeof X === 'number' && typeof Y === 'number' && typeof Z === 'number' && + Math.abs(X) < 1e6 && Math.abs(Y) < 1e6 && Math.abs(Z) < 1e6 && + (X !== 0 || Y !== 0 || Z !== 0)) { + Found = { x: X, y: Y, z: Z }; + return; + } + } + } + }); + } catch (e) {} return Found; }