跳轉到

D-20260814-10|直接致毀破壞歸因

背景與驅動力

Result 頁已承諾公開破壞統計,但正式與本機 runtime 一律注入空 Map,造成有破壞的比賽也顯示 0。 終局 broken 狀態不能還原傷害 owner,同幀碰撞、projectile、fluid、熱與環境來源又可能共同致毀, 不能用函式呼叫順序歸因。

考慮過的選項

  • 沒資料時隱藏欄位:未履行已核准的共用 Result 契約,棄。
  • 以最後一次傷害呼叫或終局接觸者歸因:依賴執行順序且不可驗算,棄。
  • 建立歷史助攻/推牆因果鏈:首版狀態與成本過大,留待新規格。
  • 同幀量化貢獻 ledger、直接致毀唯一 owner、required RoundResult 欄位(採納)。

決定

  • 每個 target part 首次 broken 的固定幀,把車撞、projectile、fluid zone、自損與環境的有效 normalized damage 依 source 彙整為 X1e9 整數;最大值勝,同值依 canonical source/event key。
  • 只對敵方玩家 owner 加一。自損、場地/環境、自然過熱及無 owner 不給分;間接推牆仍屬環境。 chassis 本身被打壞計一件,retirement 連帶停用的 intact part 不計。
  • 已發射 projectile 與 deploy zone 保留 source peer;計數為 physics consensus state,進 SavedState v16 與 hash。frame contribution ledger 在幀末結算後清空,不需進 snapshot。
  • RoundResult.destructionCounts 是 required plain Record,必須完整覆蓋 ranking roster 且每值為 非負整數;canonical serialization、多簽、ledger admission、settlement local review、replay 與 participant/spectator Result 共用。pre-launch 缺欄或不完整資料直接拒收,不設 optional、migration、 dual-read 或舊 UI 分支。

後果與影響

Result 的 0 現在只表示已驗證的真零值。第一版無 assist、占比或跨幀最後攻擊者;未來新增時使用 新欄位,不改寫 destructionCounts 的直接致毀語意。