From 4debfee66e8d8aabd179e2f8a61c7ca5ce62af3d Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 31 十二月 2025 15:28:37 +0800
Subject: [PATCH] 0312 修复觉醒后战力计算错误的问题

---
 Main/System/Settlement/BattleSettlementManager.cs |  310 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 305 insertions(+), 5 deletions(-)

diff --git a/Main/System/Settlement/BattleSettlementManager.cs b/Main/System/Settlement/BattleSettlementManager.cs
index 0e2f583..884920b 100644
--- a/Main/System/Settlement/BattleSettlementManager.cs
+++ b/Main/System/Settlement/BattleSettlementManager.cs
@@ -1,13 +1,18 @@
 锘�
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Text;
 using LitJson;
+using UnityEngine;
 
 public partial class BattleSettlementManager : GameSystemManager<BattleSettlementManager>
 {
     //缁撶畻鍚庨渶娓呴櫎 <battleName,JsonData>
     Dictionary<string, JsonData> battleSettlementDic = new Dictionary<string, JsonData>();
+    Dictionary<string, JsonData> battleAwardDic = new Dictionary<string, JsonData>();   //B431 鍙﹀閫氭姤濂栧姳
+
 
     // public string notifyGuid = string.Empty;
 
@@ -28,6 +33,7 @@
     public void OnBeforePlayerDataInitialize()
     {
         battleSettlementDic.Clear();
+        battleAwardDic.Clear();
     }
 
     public void AddPop(string battleName, int result)
@@ -35,11 +41,17 @@
         bool isWin = result == 1;
         switch (battleName)
         {
-            case "ArenaBattleField":
-                PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false);
+            case BattleConst.ArenaBattleField:
+                PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false, BattleConst.ArenaBattleField);
+                break;
+            case BattleConst.BoneBattleField:
+                PopupWindowsProcessor.Instance.Add(isWin ? "BoneBattleVictoryWin" : "BoneBattleFailWin", false, BattleConst.BoneBattleField);
+                break;
+            case BattleConst.TianziBillboradBattleField:
+                PopupWindowsProcessor.Instance.Add("TianziBillboradVictoryWin", false, BattleConst.TianziBillboradBattleField);
                 break;
             default:
-                PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false);
+                PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false, BattleConst.StoryBossBattleField);
                 break;
         }
     }
@@ -49,7 +61,7 @@
         bool isWin = result == 1;
         switch (battleName)
         {
-            case "ArenaBattleField":
+            case BattleConst.ArenaBattleField:
                 if (isWin)
                 {
                     UIManager.Instance.OpenWindow<ArenaBattleVictoryWin>();
@@ -58,6 +70,20 @@
                 {
                     UIManager.Instance.OpenWindow<ArenaBattleFailWin>();
                 }
+                break;
+            case BattleConst.BoneBattleField:
+                if (isWin)
+                {
+                    UIManager.Instance.OpenWindow<BoneBattleVictoryWin>();
+                }
+                else
+                {
+                    UIManager.Instance.OpenWindow<BoneBattleFailWin>();
+                }
+                break;
+            case BattleConst.TianziBillboradBattleField:
+                TianziBillboradManager.Instance.isSweepVictory = false;
+                UIManager.Instance.OpenWindow<TianziBillboradVictoryWin>();
                 break;
             default:
                 if (isWin)
@@ -70,6 +96,11 @@
                 }
                 break;
         }
+
+        if (isWin)
+        {
+            SoundPlayer.Instance.PlayUIAudio(57);
+        }
     }
 
     //"Msg":{"itemInfo":[{"ItemID":5,"Count":2},{"ItemID":3,"Count":40}],"winFaction":1,"statInfo":{"1":{"1":{"1":{"NPCID":0,"DefHurt":727,"CureHP":0,"AtkHurt":1891,"ObjID":1,"HeroID":530004},"3":{"NPCID":0,"DefHurt":483,"CureHP":1511,"AtkHurt":782,"ObjID":6,"HeroID":520001},"2":{"NPCID":0,"DefHurt":953,"CureHP":0,"AtkHurt":1712,"ObjID":5,"HeroID":510003}}},"2":{"1":{"1":{"NPCID":10101091,"DefHurt":638,"CureHP":0,"AtkHurt":140,"ObjID":2,"HeroID":610001},"3":{"NPCID":10101092,"DefHurt":625,"CureHP":0,"AtkHurt":126,"ObjID":3,"HeroID":610001},"5":{"NPCID":10101093,"DefHurt":3122,"CureHP":0,"AtkHurt":1897,"ObjID":4,"HeroID":510003}}}}}
@@ -77,11 +108,29 @@
     {
         if (string.Empty == _guid)
             return;
+        Debug.Log($"OnBattleEnd 缁撶畻 guid {_guid}");
         var battle = BattleManager.Instance.GetBattleField(_guid);
         if (battle == null)
             return;
         var battleName = battle.ToString();
-        battleSettlementDic[battleName] = _data;
+        try
+        {
+            battleSettlementDic[battleName] = _data;
+            if (battleAwardDic.ContainsKey(battleName))
+            {
+                //鍚堝苟鎴樻姤鍜岀粨绠楁暟鎹�
+                JsonData extendData = battleAwardDic[battleName];
+                foreach (var key in extendData.Keys)
+                {
+                    _data[key] = extendData[key];
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.ToString());
+        }
+
 
         string activeBattleName = BattleManager.Instance.GetActiveBattleName();
 
@@ -104,6 +153,7 @@
     public void WinShowOver(string battleName)
     {
         battleSettlementDic.Remove(battleName);
+        battleAwardDic.Remove(battleName);
 
         var battle = BattleManager.Instance.GetActiveBattleFieldByName(battleName);
         if (battle != null)
@@ -118,5 +168,255 @@
         }
         return battleSettlementDic[battleName];
     }
+
+    public JsonData GetBattleSettlementByMapID(int mapID)
+    {
+        if (BattleConst.mapIDToBattleNameDic.ContainsKey(mapID))
+        {
+            return GetBattleSettlement(BattleConst.mapIDToBattleNameDic[mapID]);
+        }
+        return null;
+    }
+
+    public void UpdateSettlementData(HB431_tagSCTurnFightRet netData)
+    {
+        // 鍏堣幏寰楁垬鏂楃粨鏋滐紝濡傛灉闇�瑕佸睍绀烘垬鏂楋紝鍒欒姹傛垬鎶� 锛堝鏈変簺璺宠繃鎴樻枟琛ㄧ幇鐩存帴缁撶畻锛�
+        bool needBattleData = true;
+        var guid = UIHelper.ServerStringTrim(netData.GUID);
+        var mapID = (int)netData.MapID;
+        JsonData extendData2 = JsonMapper.ToObject(netData.AwardMsg);
+
+        battleAwardDic[BattleConst.mapIDToBattleNameDic[mapID]] = extendData2;
+
+        if (needBattleData)
+        {
+            Debug.Log("鎴樻枟鏃跺簭 鏀跺埌B431 骞惰姹備笅杞芥垬鎶�" + Time.time);
+            var date = UIHelper.ServerStringTrim(netData.PathDate);
+            RequestTurnFightData(guid, date, mapID);
+        }
+        else
+        {
+            JsonData extendData1 = JsonMapper.ToObject(netData.BatStatMsg);
+
+            JsonData turnFightStateData = new JsonData();
+            foreach (var key in extendData1.Keys)
+            {
+                turnFightStateData[key] = extendData1[key];
+            }
+            foreach (var key in extendData2.Keys)
+            {
+                turnFightStateData[key] = extendData2[key];
+            }
+
+            EventBroadcast.Instance.Broadcast<string, JsonData>(EventName.BATTLE_END, guid, turnFightStateData);
+        }
+
+    }
+    public void RequestTurnFightData(string guid, string date, int mapID)
+    {
+        //mobile.secondworld.net.cn:53080\S9006\20251202\3042602\5b11338f-cf2c-11f0-a0a0-000c29b22418.tfr
+        var serverID = UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID);
+
+        var url = ServerListCenter.Instance.GetServerUrl(serverID);
+        string assetVersionUrl = string.Empty;
+
+        if (string.IsNullOrEmpty(date))
+        {
+            //鍏叡鎴樻姤  璺緞锛� C:\TurnFightReport\S鏈嶅姟鍣ㄧ紪鍙穃鍔熻兘鍦板浘ID\鎴樻姤GUID
+            assetVersionUrl = $"{url}/S{serverID}/{mapID}/{guid}.tfr";
+        }
+        else
+        {
+            //涓汉鎴樻姤  璺緞锛� C:\TurnFightReport\S鏈嶅姟鍣ㄧ紪鍙穃鏃ユ湡\鐜╁ID\鍔熻兘鍦板浘ID\鎴樻姤GUID
+            assetVersionUrl = $"{url}/S{serverID}/{date}/{PlayerDatas.Instance.baseData.PlayerID}/{mapID}/{guid}.tfr";
+        }
+        Debug.Log($"璇锋眰鎴樻姤: {assetVersionUrl}");
+        HttpRequestEx.UnityWebRequestTurnFightGet(assetVersionUrl, guid, 3, OnGetTurnFightData);
+    }
+
+    void OnGetTurnFightData(bool _ok, string guid, byte[] _result)
+    {
+        if (_ok)
+        {
+            ReadTurnFightInfo(_result);
+        }
+        else
+        {
+            Debug.Log($"璇锋眰鎴樻姤澶辫触");
+            UIManager.Instance.CloseWindow<MapLoadingWin>();
+        }
+    }
+
+    //鎴樻姤瀛樺偍鐨勬槸B430灏佸寘锛屾墍浠ラ渶瑕佽浆鍙態430灏佸寘
+    private void ReadTurnFightInfo(byte[] vBytes)
+    {
+        try
+        {
+            byte[] vPackBytes = vBytes;
+            GameNetPackBasic vNetpack;
+            byte[] vCmdBytes = new byte[2];
+            ServerType socketType = ServerType.B430;
+
+            Array.Copy(vPackBytes, 0, vCmdBytes, 0, 2);
+            var cmd = (ushort)((ushort)(vCmdBytes[0] << 8) + vCmdBytes[1]);
+
+            // 澶勭悊涓诲伐绋嬬殑灏佸寘
+            if (PackageRegedit.Contain(cmd))
+            {
+                vNetpack = PackageRegedit.TransPack(socketType, cmd, vPackBytes);
+                if (vNetpack != null)
+                {
+                    GameNetSystem.Instance.PushPackage(vNetpack, socketType);
+                }
+            }
+
+        }
+        catch (Exception ex)
+        {
+            Debug.LogErrorFormat("ReadTurnFightInfo 鍒嗘瀽鎴樻姤寮傚父锛歿0}", ex);
+        }
+
+    }
+
+    #region 鎴樻枟缁撴灉璇︽儏
+    public BattleDetailMsg msg = new BattleDetailMsg();
+    public string BattleDetailBattleName = string.Empty;
+    public string BattleDetailMyName = string.Empty;
+    public string BattleDetailEnemyName = string.Empty;
+
+    public void OpenBattleDetailWin(string battleName)
+    {
+        if (UIManager.Instance.IsOpened<BattleDetailWin>())
+            return;
+
+        JsonData battleSettlement = GetBattleSettlement(battleName);
+        if (battleSettlement == null)
+            return;
+
+        msg = ParserBattleDetail(battleSettlement);
+        if (msg == null)
+            return;
+
+        BattleDetailBattleName = battleName;
+        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;
+    }
+
+    // 宸﹁摑鍙崇孩
+    // 鐩墠鐜╁涓诲姩鍙戣捣鐨勯樀瀹逛竴瀹氭槸1锛屽鏂规槸 2, 濡傛灉鏄偅绉嶇郴缁熻嚜鍔ㄦ墦鐨勶紝涓�鑸�1-宸︼紝2-鍙�
+    public string GetFaction(bool isBlue)
+    {
+        return isBlue ? "1" : "2";
+    }
+
+    public List<BattleDetailHeroInfo> GetHeroInfoByFaction(BattleDetailMsg msg, string faction)
+    {
+        if (msg == null || msg.statInfo.IsNullOrEmpty())
+            return null;
+        int winFaction = msg.winFaction;    // 鑾疯儨闃佃惀
+        Dictionary<string, Dictionary<string, BattleDetailHeroInfo>> lineupInfo = new Dictionary<string, Dictionary<string, BattleDetailHeroInfo>>();
+
+        if (!msg.statInfo.TryGetValue(faction, 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 long DefHurt; // 鎬绘壙浼�
+    public long CureHP;  // 鎬绘不鐤�
+    public long AtkHurt; // 鎬昏緭鍑�
+    public int Dead;      // 鏄惁闃典骸
+}
+
+public class BattleDetailRewardItem
+{
+    public int ItemID;
+    public int Count;
+}
\ No newline at end of file

--
Gitblit v1.8.0