From d4a260ac929d3c1df51b363ae4e1d4191ea468dd Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 21 Oct 2026 00:45:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(ignore):=20=E5=A2=9E=E5=8A=A0=20seen=20?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E4=B8=8E=20ResetStat=EF=BC=8C=E4=BE=BF?= =?UTF-8?q?=E4=BA=8E=E5=AF=B9=E6=AF=94=E6=A0=85=E6=A0=8F=E4=B8=8E=E5=9C=B0?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E5=BD=A2=E7=8A=B6=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit seen = 本车接触到的所有非坦克形状的 cat/type 直方图(不论是否忽略);新增 ResetStat() 清零,便于「平地 1 秒」与「顶住栅栏 1 秒」两次对比定位栅栏的真实形状类型。 --- .../play/static/js/unpacked/hornet_bundle.js | 24 ++++++++++++++++--- 3dtank_bundle.js | 24 ++++++++++++++++--- tools/hornet_noclip.js | 24 ++++++++++++++++--- 3 files changed, 63 insertions(+), 9 deletions(-) diff --git a/3dtank.com/play/static/js/unpacked/hornet_bundle.js b/3dtank.com/play/static/js/unpacked/hornet_bundle.js index 58154fc..51a9469 100644 --- a/3dtank.com/play/static/js/unpacked/hornet_bundle.js +++ b/3dtank.com/play/static/js/unpacked/hornet_bundle.js @@ -6591,6 +6591,7 @@ skippedFence: 0, skippedOverlap: 0, // x9o 形状相交查询被拦下的次数 byType: {}, // cat/type → 被忽略次数(诊断) + seen: {}, // cat/type → 本车接触到的非坦克形状次数(诊断) patched: false, overlapPatched: false }; @@ -6848,6 +6849,13 @@ var FenceShape = null; if (TankA && OwnerOf(ShapeA) === Local) FenceShape = ShapeB; else if (TankB && OwnerOf(ShapeB) === Local) FenceShape = ShapeA; + + // 统计:本车接触到的所有非坦克形状(不论是否跳过)→ cat/type 直方图 + if (FenceShape) { + var SeenKey = FenceShape[FShapeCategory] + '/' + FenceShape[FShapeType]; + Stat.seen[SeenKey] = (Stat.seen[SeenKey] || 0) + 1; + } + if (FenceShape && IsFenceLike(FenceShape)) { Stat.skippedFence++; var Key = FenceShape[FShapeCategory] + '/' + FenceShape[FShapeType]; @@ -6855,8 +6863,7 @@ return true; } // 诊断:本车与任意非坦克形状配对但没跳过 → 记录样本(含被挡住的栅栏) - if (TankA && OwnerOf(ShapeA) === Local && !TankB) RecordFenceSample(ShapeB); - if (TankB && OwnerOf(ShapeB) === Local && !TankA) RecordFenceSample(ShapeA); + if (FenceShape) RecordFenceSample(FenceShape); } return false; @@ -7003,8 +7010,19 @@ running: Stat.running, mode: Stat.mode, ignoreFence: Stat.ignoreFence, skippedTank: Stat.skippedTank, skippedFence: Stat.skippedFence, skippedOverlap: Stat.skippedOverlap, - byType: Stat.byType, patched: Stat.patched, overlapPatched: Stat.overlapPatched + byType: Stat.byType, seen: Stat.seen, + patched: Stat.patched, overlapPatched: Stat.overlapPatched }; + }, + // 清零统计:便于「平地 1 秒」与「顶住栅栏 1 秒」两次对比 seen 里的 cat/type + ResetStat: function () { + Stat.skippedTank = 0; + Stat.skippedFence = 0; + Stat.skippedOverlap = 0; + Stat.byType = {}; + Stat.seen = {}; + FenceSampleKeys = {}; + console.log('[忽略] 统计已清零'); } }; diff --git a/3dtank_bundle.js b/3dtank_bundle.js index 58154fc..51a9469 100644 --- a/3dtank_bundle.js +++ b/3dtank_bundle.js @@ -6591,6 +6591,7 @@ skippedFence: 0, skippedOverlap: 0, // x9o 形状相交查询被拦下的次数 byType: {}, // cat/type → 被忽略次数(诊断) + seen: {}, // cat/type → 本车接触到的非坦克形状次数(诊断) patched: false, overlapPatched: false }; @@ -6848,6 +6849,13 @@ var FenceShape = null; if (TankA && OwnerOf(ShapeA) === Local) FenceShape = ShapeB; else if (TankB && OwnerOf(ShapeB) === Local) FenceShape = ShapeA; + + // 统计:本车接触到的所有非坦克形状(不论是否跳过)→ cat/type 直方图 + if (FenceShape) { + var SeenKey = FenceShape[FShapeCategory] + '/' + FenceShape[FShapeType]; + Stat.seen[SeenKey] = (Stat.seen[SeenKey] || 0) + 1; + } + if (FenceShape && IsFenceLike(FenceShape)) { Stat.skippedFence++; var Key = FenceShape[FShapeCategory] + '/' + FenceShape[FShapeType]; @@ -6855,8 +6863,7 @@ return true; } // 诊断:本车与任意非坦克形状配对但没跳过 → 记录样本(含被挡住的栅栏) - if (TankA && OwnerOf(ShapeA) === Local && !TankB) RecordFenceSample(ShapeB); - if (TankB && OwnerOf(ShapeB) === Local && !TankA) RecordFenceSample(ShapeA); + if (FenceShape) RecordFenceSample(FenceShape); } return false; @@ -7003,8 +7010,19 @@ running: Stat.running, mode: Stat.mode, ignoreFence: Stat.ignoreFence, skippedTank: Stat.skippedTank, skippedFence: Stat.skippedFence, skippedOverlap: Stat.skippedOverlap, - byType: Stat.byType, patched: Stat.patched, overlapPatched: Stat.overlapPatched + byType: Stat.byType, seen: Stat.seen, + patched: Stat.patched, overlapPatched: Stat.overlapPatched }; + }, + // 清零统计:便于「平地 1 秒」与「顶住栅栏 1 秒」两次对比 seen 里的 cat/type + ResetStat: function () { + Stat.skippedTank = 0; + Stat.skippedFence = 0; + Stat.skippedOverlap = 0; + Stat.byType = {}; + Stat.seen = {}; + FenceSampleKeys = {}; + console.log('[忽略] 统计已清零'); } }; diff --git a/tools/hornet_noclip.js b/tools/hornet_noclip.js index 4c3de0c..f649a94 100644 --- a/tools/hornet_noclip.js +++ b/tools/hornet_noclip.js @@ -66,6 +66,7 @@ skippedFence: 0, skippedOverlap: 0, // x9o 形状相交查询被拦下的次数 byType: {}, // cat/type → 被忽略次数(诊断) + seen: {}, // cat/type → 本车接触到的非坦克形状次数(诊断) patched: false, overlapPatched: false }; @@ -323,6 +324,13 @@ var FenceShape = null; if (TankA && OwnerOf(ShapeA) === Local) FenceShape = ShapeB; else if (TankB && OwnerOf(ShapeB) === Local) FenceShape = ShapeA; + + // 统计:本车接触到的所有非坦克形状(不论是否跳过)→ cat/type 直方图 + if (FenceShape) { + var SeenKey = FenceShape[FShapeCategory] + '/' + FenceShape[FShapeType]; + Stat.seen[SeenKey] = (Stat.seen[SeenKey] || 0) + 1; + } + if (FenceShape && IsFenceLike(FenceShape)) { Stat.skippedFence++; var Key = FenceShape[FShapeCategory] + '/' + FenceShape[FShapeType]; @@ -330,8 +338,7 @@ return true; } // 诊断:本车与任意非坦克形状配对但没跳过 → 记录样本(含被挡住的栅栏) - if (TankA && OwnerOf(ShapeA) === Local && !TankB) RecordFenceSample(ShapeB); - if (TankB && OwnerOf(ShapeB) === Local && !TankA) RecordFenceSample(ShapeA); + if (FenceShape) RecordFenceSample(FenceShape); } return false; @@ -478,8 +485,19 @@ running: Stat.running, mode: Stat.mode, ignoreFence: Stat.ignoreFence, skippedTank: Stat.skippedTank, skippedFence: Stat.skippedFence, skippedOverlap: Stat.skippedOverlap, - byType: Stat.byType, patched: Stat.patched, overlapPatched: Stat.overlapPatched + byType: Stat.byType, seen: Stat.seen, + patched: Stat.patched, overlapPatched: Stat.overlapPatched }; + }, + // 清零统计:便于「平地 1 秒」与「顶住栅栏 1 秒」两次对比 seen 里的 cat/type + ResetStat: function () { + Stat.skippedTank = 0; + Stat.skippedFence = 0; + Stat.skippedOverlap = 0; + Stat.byType = {}; + Stat.seen = {}; + FenceSampleKeys = {}; + console.log('[忽略] 统计已清零'); } };