From 640e6447e7864730c56ffc5597c9a599945af45d Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 21 十一月 2025 16:40:04 +0800
Subject: [PATCH] 125 战斗 1.流血伤害 2.修复技能卡死问题 3.添加战斗回放(Editor)

---
 Assets/Editor/UI/GMQuickPlayingEditor.cs |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 157 insertions(+), 0 deletions(-)

diff --git a/Assets/Editor/UI/GMQuickPlayingEditor.cs b/Assets/Editor/UI/GMQuickPlayingEditor.cs
index 795ec87..51f586f 100644
--- a/Assets/Editor/UI/GMQuickPlayingEditor.cs
+++ b/Assets/Editor/UI/GMQuickPlayingEditor.cs
@@ -2,19 +2,32 @@
 using UnityEditor;
 using System.Collections.Generic;
 using System.Linq;
+using System.IO;
 
 public class GMQuickPlayingEditor : EditorWindow
 {
     private string searchText = "";
     private string commandText = "";
     private Vector2 scrollPosition;
+    private Vector2 reportScrollPosition;
     private List<ItemConfig> searchResults = new List<ItemConfig>();
     private int itemCount = 1;
+    private bool isBattlePaused = false;
+    
+    // 鎴樻姤鐩稿叧
+    private string reportFilePath = "";
+    private string[] reportFiles = new string[0];
+    private int selectedReportIndex = 0;
     
     [MenuItem("Tools/GM蹇嵎宸ュ叿 &9")]
     public static void ShowWindow()
     {
         GetWindow<GMQuickPlayingEditor>("GM蹇嵎宸ュ叿");
+    }
+    
+    private void OnEnable()
+    {
+        RefreshReportList();
     }
     
     private void OnGUI()
@@ -108,7 +121,122 @@
         warningStyle.fontSize = 11;
         EditorGUILayout.LabelField("鈿� 娣诲姞鐗╁搧鏈�濂借窡鏈嶅姟鍣ㄧ‘璁よ繃鐗╁搧鐨勫瓨鍦ㄥ悗鍐嶆坊鍔�", warningStyle);
         
+        GUILayout.Space(10);
+        
+        // 鎴樻姤娴忚鍖哄煙
+        GUILayout.Label("鎴樻姤娴忚", EditorStyles.boldLabel);
+        GUILayout.BeginVertical("box");
+        
+        GUILayout.BeginHorizontal();
+        if (GUILayout.Button("鍒锋柊鎴樻姤鍒楄〃", GUILayout.Width(120)))
+        {
+            RefreshReportList();
+        }
+        if (GUILayout.Button("鎵撳紑鎴樻姤鏂囦欢澶�", GUILayout.Width(120)))
+        {
+            OpenReportFolder();
+        }
+        GUILayout.EndHorizontal();
+        
+        GUILayout.Space(5);
+        
+        if (reportFiles.Length > 0)
+        {
+            reportScrollPosition = GUILayout.BeginScrollView(reportScrollPosition, GUILayout.Height(150));
+            
+            for (int i = 0; i < reportFiles.Length; i++)
+            {
+                GUILayout.BeginHorizontal("box");
+                string fileName = Path.GetFileName(reportFiles[i]);
+                GUILayout.Label(fileName, GUILayout.Width(300));
+                
+                if (GUILayout.Button("鍔犺浇骞禗istribute", GUILayout.Width(60)))
+                {
+                    LoadReport(reportFiles[i]);
+                }
+                
+                
+                GUILayout.EndHorizontal();
+            }
+            
+            GUILayout.EndScrollView();
+        }
+        else
+        {
+            GUILayout.Label("鏈壘鍒版垬鎶ユ枃浠讹紙.bytes锛�");
+        }
+        
         GUILayout.EndVertical();
+        
+        GUILayout.Space(10);
+        
+        // 鏆傚仠/寮�濮嬫垬鏂楁寜閽�
+        GUILayout.BeginHorizontal();
+        GUILayout.FlexibleSpace();
+        string buttonText = isBattlePaused ? "寮�濮嬪綋鍓嶆垬鏂�" : "鏆傚仠褰撳墠鎴樻枟";
+        if (GUILayout.Button(buttonText, GUILayout.Width(120), GUILayout.Height(30)))
+        {
+            OnPauseBattle();
+        }
+        GUILayout.FlexibleSpace();
+        GUILayout.EndHorizontal();
+        
+        GUILayout.EndVertical();
+    }
+    
+    private void RefreshReportList()
+    {
+        string reportFolder = Application.dataPath + "/../BattleReport/";
+        if (Directory.Exists(reportFolder))
+        {
+            reportFiles = Directory.GetFiles(reportFolder, "*.bytes");
+            Debug.Log($"鎵惧埌 {reportFiles.Length} 涓垬鎶ユ枃浠�");
+        }
+        else
+        {
+            Directory.CreateDirectory(reportFolder);
+            reportFiles = new string[0];
+            Debug.Log("鍒涘缓鎴樻姤鏂囦欢澶�: " + reportFolder);
+        }
+    }
+    
+    private void OpenReportFolder()
+    {
+        string reportFolder = Application.dataPath + "/../BattleReport/";
+        if (!Directory.Exists(reportFolder))
+        {
+            Directory.CreateDirectory(reportFolder);
+        }
+        EditorUtility.RevealInFinder(reportFolder);
+    }
+    
+    private void LoadReport(string filePath)
+    {
+        if (!File.Exists(filePath))
+        {
+            Debug.LogError("鎴樻姤鏂囦欢涓嶅瓨鍦�: " + filePath);
+            return;
+        }
+        
+        reportFilePath = filePath;
+        Debug.Log("宸插姞杞芥垬鎶�: " + Path.GetFileName(filePath));
+
+        HB430_tagSCTurnFightReport hB430_TagSCTurnFightReport = new HB430_tagSCTurnFightReport();
+        byte[] vBytes = File.ReadAllBytes(filePath);
+        hB430_TagSCTurnFightReport.ReadFromBytes(vBytes);
+        PackageRegedit.Distribute(hB430_TagSCTurnFightReport);
+    }
+    
+    private string ExtractGuidFromFileName(string fileName)
+    {
+        // 浠庢枃浠跺悕涓彁鍙� GUID
+        // 鏍煎紡: B430_ReportBytes_{GUID}_{DateTime}
+        string[] parts = fileName.Split('_');
+        if (parts.Length >= 3)
+        {
+            return parts[2]; // 杩斿洖 GUID 閮ㄥ垎
+        }
+        return "unknown_guid";
     }
     
     private void OnSearchItem()
@@ -156,4 +284,33 @@
         GMCmdManager.Instance.OnSendGMQuest(commandText);
         GMCmdManager.Instance.SetRecordCmdlist(commandText);
     }
+    
+    private void OnPauseBattle()
+    {
+        for (int i = 0; i < BattleConst.BattleWindows.Count; i++)
+        {
+            var win = UIManager.Instance.GetUI(BattleConst.BattleWindows[i].Name);
+            if (win != null && win.IsActive())
+            {
+                // 浣跨敤鍙嶅皠鑾峰彇 battleField 瀛楁
+                var battleFieldField = win.GetType().GetField("battleField", 
+                    System.Reflection.BindingFlags.NonPublic | 
+                    System.Reflection.BindingFlags.Instance);
+                
+                if (battleFieldField != null)
+                {
+                    var battleField = battleFieldField.GetValue(win) as BattleField;
+                    if (battleField != null)
+                    {
+                        battleField.IsPause = !battleField.IsPause;
+                        isBattlePaused = battleField.IsPause;
+                        Debug.Log($"鎴樻枟鏆傚仠鐘舵�佸垏鎹�: {battleField.IsPause}");
+                        return;
+                    }
+                }
+            }
+        }
+        
+        Debug.LogWarning("鏈壘鍒版縺娲荤殑鎴樻枟绐楀彛鎴� battleField 涓虹┖");
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0