From 66c8ccb8a2ee5355ed7a9fb66b81ef0aad70fee3 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 30 一月 2026 20:04:29 +0800
Subject: [PATCH] 125 跳过战斗修改

---
 Main/System/Battle/BattleField/BattleField.cs                                               |   11 ++++++++++-
 Main/System/Battle/RecordPlayer/RecordPlayer.cs                                             |    8 ++++++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs |    7 +++++--
 Main/System/Battle/BattleManager.cs                                                         |   31 +++++++++++++++++++++++++++++++
 4 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
index 28d9ef3..2ee638b 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
@@ -34,6 +34,8 @@
             // 1. 瑙f瀽鎴樻姤瀛楄妭娴侊紝鎻愬彇鎵�鏈夊寘
             List<GameNetPackBasic> vPackList = ParseReportBytes(vNetData.reportBytes, guid);
 
+            HB420_tagMCTurnFightState endPack = vPackList.Find(x => x is HB420_tagMCTurnFightState state && state.State == 4) as HB420_tagMCTurnFightState;
+
 #if UNITY_EDITOR
             // 2. 淇濆瓨瑙f瀽鍓嶇殑鍖呰鎯咃紙璋冭瘯鐢級
             SavePackageDetailBeforeAnalysis(vPackList, guid);
@@ -47,7 +49,7 @@
 #endif
 
             // 5. 灏嗗寘鎺ㄩ�佸埌鎴樺満闃熷垪
-            PushPackagesToBattle(guid, vPackList);
+            PushPackagesToBattle(guid, vPackList, endPack);
 
             // 6. 閫氱煡鎴樺満寮�濮嬪垎鍙戝寘
             canAddPack = false;
@@ -214,12 +216,13 @@
     /// <summary>
     /// 灏嗘墍鏈夊寘鎺ㄩ�佸埌鎴樺満绠$悊鍣ㄩ槦鍒�
     /// </summary>
-    private void PushPackagesToBattle(string guid, List<GameNetPackBasic> vPackList)
+    private void PushPackagesToBattle(string guid, List<GameNetPackBasic> vPackList, HB420_tagMCTurnFightState endPack)
     {
         for (int i = 0; i < vPackList.Count; i++)
         {
             BattleManager.Instance.PushPackage(guid, vPackList[i]);
         }
+        BattleManager.Instance.SetEndPack(guid, endPack);
     }
 
 #if UNITY_EDITOR
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 6435401..598ae12 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -831,7 +831,16 @@
 
     public void ForceFinish()
     {
-        recordPlayer.ForceFinish();
+        var endPack = BattleManager.Instance.GetEndPack(guid);
+        if (endPack != null)
+        {
+            recordPlayer.ClearAllRecordAction();
+            PackageRegedit.Distribute(endPack);
+        }
+        else
+        {
+            recordPlayer.ForceFinish();
+        }
     }
 
 
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index facc2d5..e2cd57f 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -375,6 +375,9 @@
     protected Dictionary<string, Queue<GameNetPackBasic>> battleReportDict = new Dictionary<string, Queue<GameNetPackBasic>>();
 
     protected Dictionary<string, List<ulong>> battlePackRelationList = new Dictionary<string, List<ulong>>();
+    
+    // 瀛樺偍姣忎釜 guid 瀵瑰簲鐨勭粨鏉熺姸鎬佸寘锛圚B420 State==4 绛夛級
+    protected Dictionary<string, HB420_tagMCTurnFightState> battleEndPackDict = new Dictionary<string, HB420_tagMCTurnFightState>();
 
     public void PushPackage(string guid, GameNetPackBasic vNetPack)
     {
@@ -550,6 +553,10 @@
         battleFields.Remove(guid);
         battleReportDict.Remove(guid);
         battlePackRelationList.Remove(guid);
+        
+        // 娓呯悊缁撴潫鍖呭瓧鍏镐腑鐨勮褰曪紝闃叉鍐呭瓨娉勬紡鎴栨棫鏁版嵁娈嬬暀
+        if (battleEndPackDict != null && battleEndPackDict.ContainsKey(guid))
+            battleEndPackDict.Remove(guid);
 
         if (storyBattleField == battleField)
         {
@@ -748,4 +755,28 @@
         }
         return null;
     }
+
+    public void SetEndPack(string guid, HB420_tagMCTurnFightState endPack)
+    {
+        if (string.IsNullOrEmpty(guid))
+            return;
+
+        if (endPack == null)
+        {
+            if (battleEndPackDict.ContainsKey(guid))
+                battleEndPackDict.Remove(guid);
+            return;
+        }
+
+        // 瀛樺偍鎴栨洿鏂扮粨鏉熷寘
+        battleEndPackDict[guid] = endPack;
+    }
+
+    public HB420_tagMCTurnFightState GetEndPack(string guid)
+    {
+        if (string.IsNullOrEmpty(guid)) return null;
+        if (battleEndPackDict.TryGetValue(guid, out var pack))
+            return pack;
+        return null;
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index 97204c3..0113d72 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -352,6 +352,14 @@
         ForceFinish();
     }
 
+    public void ClearAllRecordAction()
+    {
+        currentRecordAction?.ForceFinish();
+        currentRecordAction = null;
+        recordActionQueue.Clear();
+        immediatelyActionList.Clear();
+    }
+
     public void EnableForceFinish(bool enable)
     {
         stepForcefinish = enable;

--
Gitblit v1.8.0