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('[忽略] 统计已清零'); } };