From 8b13766dc43e3f4406a64873844dcecd24cabcb5 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 10 十二月 2025 16:28:17 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/System/Settlement/BattleSettlementManager.cs |  150 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 150 insertions(+), 0 deletions(-)

diff --git a/Main/System/Settlement/BattleSettlementManager.cs b/Main/System/Settlement/BattleSettlementManager.cs
index d477cf8..a11396b 100644
--- a/Main/System/Settlement/BattleSettlementManager.cs
+++ b/Main/System/Settlement/BattleSettlementManager.cs
@@ -264,7 +264,157 @@
 
     }
 
+    #region 鎴樻枟缁撴灉璇︽儏
+    public BattleDetailMsg msg = new BattleDetailMsg();
+    public string BattleDetailBattleName = string.Empty;
+    public string BattleDetailMyName = string.Empty;
+    public string BattleDetailEnemyName = string.Empty;
+    public bool isMyStartBattleDetail = false;  // 鏄惁鏄垜鏂瑰彂璧风殑鎴樻枟
 
+    // isMyStart 鏄惁鏄垜鏂瑰彂璧风殑鎴樻枟
+    public void OpenBattleDetailWin(string battleName, bool isMyStart = true)
+    {
+        if (UIManager.Instance.IsOpened<BattleDetailWin>())
+            return;
+
+        JsonData battleSettlement = GetBattleSettlement(battleName);
+        if (battleSettlement == null)
+            return;
+
+        msg = ParserBattleDetail(battleSettlement);
+        if (msg == null)
+            return;
+
+        BattleDetailBattleName = battleName;
+        this.isMyStartBattleDetail = isMyStart;
+        UIManager.Instance.OpenWindow<BattleDetailWin>();
+    }
+
+    //鎴樻枟缁撴灉璇︽儏鐣岄潰鑾峰彇 鎴戞柟鍙戣捣鐨勬垬鏂楃殑涓晫鏂瑰悕瀛�
+    public string GetBattleDetailEnemyNameByMyStart(string battleName)
+    {
+        string detailName = string.Empty;
+        BattleField battleField = BattleManager.Instance.GetActiveBattleFieldByName(battleName);
+        if (battleField == null)
+            return detailName;
+
+        switch (battleName)
+        {
+            // 鏁屾柟鍚嶅瓧鏄疊oss鍚嶅瓧
+            case BattleConst.StoryBossBattleField:
+            case BattleConst.BoneBattleField:
+            case BattleConst.TianziBillboradBattleField:
+                BattleObject bossBattleObject = battleField.FindBoss();
+                if (bossBattleObject == null || bossBattleObject.teamHero == null)
+                    return detailName;
+                detailName = bossBattleObject.teamHero.name;
+                break;
+            // 鏁屾柟鍚嶅瓧鏄鏂圭帺瀹跺悕瀛�
+            case BattleConst.ArenaBattleField:
+                if (!ArenaManager.Instance.TryGetPlayerInfo(ArenaManager.Instance.atkPlayerId, out ArenaMatchInfo info) || info == null)
+                    return detailName;
+                detailName = info.PlayerName;
+                break;
+        }
+        return detailName;
+    }
+
+    public BattleDetailMsg ParserBattleDetail(JsonData jsonMsg)
+    {
+        if (jsonMsg == null)
+            return null;
+        try
+        {
+            string jsonStr = jsonMsg.ToJson();
+            BattleDetailMsg result = JsonMapper.ToObject<BattleDetailMsg>(jsonStr);
+            return result;
+        }
+        catch (Exception ex)
+        {
+            Debug.Log("瑙f瀽鎴樻枟鏁版嵁寮傚父: " + ex.Message);
+        }
+        return null;
+    }
+
+    public List<BattleDetailHeroInfo> GetHeroInfo(BattleDetailMsg msg, bool isMyStart, string battleName, bool isWin)
+    {
+        if (msg == null || msg.statInfo.IsNullOrEmpty())
+            return null;
+
+        int winFaction = msg.winFaction;    // 鑾疯儨闃佃惀
+        Dictionary<string, Dictionary<string, BattleDetailHeroInfo>> lineupInfo = new Dictionary<string, Dictionary<string, BattleDetailHeroInfo>>();
+        string statInfoKey = string.Empty;
+
+        if (isMyStart)
+        {
+            // 澶╁瓙鎴樺満鐜╁涓嶄細杈�
+            if (battleName == BattleConst.TianziBillboradBattleField)
+            {
+                statInfoKey = isWin ? msg.statInfo.Keys.FirstOrDefault(key => key != winFaction.ToString()) : winFaction.ToString();
+            }
+            else
+            {
+                statInfoKey = isWin ? winFaction.ToString() : msg.statInfo.Keys.FirstOrDefault(key => key != winFaction.ToString());
+            }
+        }
+
+        if (!msg.statInfo.TryGetValue(statInfoKey, out lineupInfo) || lineupInfo.IsNullOrEmpty())
+            return null;
+        var lineupInfoKeyList = lineupInfo.Keys.ToList();
+        if (lineupInfoKeyList.IsNullOrEmpty())
+            return null;
+
+        // 鐩墠鍙彇绗竴涓樀瀹圭殑淇℃伅
+        string key = lineupInfoKeyList[0];
+        if (!lineupInfo.TryGetValue(key, out var heroInfoDict) || heroInfoDict.IsNullOrEmpty())
+            return null;
+
+        var heroInfoKeyList = heroInfoDict.Keys.ToList();
+        heroInfoKeyList = heroInfoKeyList
+            .OrderBy(key => int.Parse(key)) // 灏嗗瓧绗︿覆閿В鏋愪负鏁存暟鍚庤繘琛屾帓搴�
+            .ToList(); // 灏嗘帓搴忓悗鐨勭粨鏋滆浆鍥� List<string>
+
+        List<BattleDetailHeroInfo> res = new List<BattleDetailHeroInfo>();
+        foreach (var heroInfoKey in heroInfoKeyList)
+        {
+            if (!heroInfoDict.TryGetValue(heroInfoKey, out var heroInfo))
+                continue;
+            res.Add(heroInfo);
+        }
+        return res;
+    }
+
+    #endregion
 
 }
 
+public class BattleDetailMsg
+{
+    public List<BattleDetailRewardItem> itemInfo;
+
+    public int winFaction;
+
+    // 瀵瑰簲 "statInfo"
+    // 缁撴瀯锛�<闃佃惀缂栧彿, <闃靛缂栧彿, <绔欎綅缂栧彿, 姝﹀皢鏁版嵁>>>
+    // 娉ㄦ剰锛欽SON涓殑閿� "1", "2" 鏄瓧绗︿覆锛屾墍浠ュ瓧鍏� Key 鐢� string
+    public Dictionary<string, Dictionary<string, Dictionary<string, BattleDetailHeroInfo>>> statInfo;
+}
+public class BattleDetailHeroInfo
+{
+    public int ObjID;   // 瀹炰緥ID
+    public int HeroID;  // 鐜╁闃靛姝﹀皢ID
+    public int NPCID;   // NPCID
+    public int LV;      // 姝﹀皢绛夌骇
+    public int Star;      // 姝﹀皢鏄熺骇
+    public int Skin;      // 姝﹀皢鐨偆ID
+    public ulong DefHurt; // 鎬绘壙浼�
+    public ulong CureHP;  // 鎬绘不鐤�
+    public ulong AtkHurt; // 鎬昏緭鍑�
+    public int Dead;      // 鏄惁闃典骸
+}
+
+public class BattleDetailRewardItem
+{
+    public int ItemID;
+    public int Count;
+}
\ No newline at end of file

--
Gitblit v1.8.0