From d1a0f1d2842f78b5232948e8e33e7e83d954a6cb Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期二, 27 一月 2026 20:31:18 +0800
Subject: [PATCH] 449 查看他人-客户端 新增命格、古宝信息,战场点击查看双方武将或npc信息

---
 Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs |  219 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 165 insertions(+), 54 deletions(-)

diff --git a/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs b/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
index 7b5fadb..94fae49 100644
--- a/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
+++ b/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
@@ -8,6 +8,26 @@
 //鏌ョ湅鍏朵粬鐜╁鐨勭畝鐭俊鎭�, 璇ユā鍧楀鐞嗘暟鎹紝鍏朵粬鐢卞悇鑷姛鑳芥ā鍧楀鐞� 閫氳繃OnRevPackage
 public class OtherPlayerDetailManager : GameSystemManager<OtherPlayerDetailManager>
 {
+    public int viewPlayer { get; private set; }
+
+    // 鏌ヨ绫诲瀷锛氭牴鎹被鍨嬪仛涓嶅悓澶勭悊
+    // 鎸夊姛鑳借嚜瀹氫箟鏋氫妇鍊� EnumHelper鐨� ViewPlayerType
+    public int viewPlayerType { get; private set; }
+
+    public int viewPreSetType { get; private set; }
+
+    private Dictionary<int, ViewPlayerData> viewPlayerDataDic = new Dictionary<int, ViewPlayerData>();
+
+    // 鏌ョ湅绫诲瀷锛岀帺瀹禝D
+    public event Action<int, int> OnRevPackage; //灏介噺涓嶈鐢ㄧ涓�涓弬鏁皏iewtype鍋氬垽鏂紝瀹规槗鍑洪敊
+
+
+    public int viewHeroType;//0:鎴樺満鐐瑰嚮妯″瀷 1锛氭煡鐪嬩粬浜鸿嫳闆勮鎯呯晫闈㈢偣鍑昏嫳闆勫崱鐗�
+    public BattleClickHeroData clickHeroData;
+    public ViewNPCAttr viewNPCAttr;
+    public RolePlusData.HeroData heroData;
+    public List<RolePlusData.HeroData> heroDatas;
+    public RolePlusData.EquipData equip;
 
     public override void Init()
     {
@@ -22,54 +42,39 @@
 
     public void OnBeforePlayerDataInitializeEventOnRelogin()
     {
+        viewPlayer = -1;
         viewPlayerType = -1;
-        viewPlayerLineupType = -1;
+        viewPreSetType = -1;
     }
 
-    public int viewPlayer { get; private set; }
-
-    // 鏌ヨ绫诲瀷锛氭牴鎹被鍨嬪仛涓嶅悓澶勭悊
-    // 鎸夊姛鑳借嚜瀹氫箟鏋氫妇鍊� EnumHelper鐨� ViewPlayerType
-    public int viewPlayerType { get; private set; }
-
-    public int viewPlayerLineupType { get; private set; }
-    public RolePlusData.HeroData heroData;
-    public List<RolePlusData.HeroData> heroDatas;
-    public RolePlusData.EquipData equip;
-    private Dictionary<int, ViewPlayerData> viewPlayerDataDic = new Dictionary<int, ViewPlayerData>();
-
-    // 鏌ョ湅绫诲瀷锛岀帺瀹禝D
-    public event Action<int, int> OnRevPackage; //灏介噺涓嶈鐢ㄧ涓�涓弬鏁皏iewtype鍋氬垽鏂紝瀹规槗鍑洪敊
-
     // 鑾峰彇鍏朵粬鐜╁鏈湴缂撳瓨鏁版嵁
-    public ViewPlayerData GetViewPlayerData(int player)
+    public ViewPlayerData GetViewPlayerData(int playerId)
     {
         ViewPlayerData viewPlayerData = null;
-        viewPlayerDataDic.TryGetValue(player, out viewPlayerData);
+        viewPlayerDataDic.TryGetValue(playerId, out viewPlayerData);
         return viewPlayerData;
     }
 
-
     // 鍚戞湇鍔$璇锋眰鍏朵粬鐜╁鏁版嵁
-    public void ViewPlayerDetail(int _playerId, int viewType = (int)ViewPlayerType.viewPlayerData, int viewPlayerLineupType = (int)BattlePreSetType.Story)
+    public void ViewPlayerDetail(int playerId, int viewType = (int)ViewPlayerType.viewPlayerData, int viewBattlePreSetType = (int)BattlePreSetType.Story)
     {
-        if (_playerId == PlayerDatas.Instance.baseData.PlayerID)
-        {
+        // 鑷繁涓嶈兘鏌ョ湅鑷繁鐨勪俊鎭�
+        if (playerId == PlayerDatas.Instance.baseData.PlayerID)
             return;
-        }
+
         viewPlayerType = viewType;
-        this.viewPlayerLineupType = viewPlayerLineupType;
-        ViewRoleParticulars(_playerId);
+        viewPreSetType = viewBattlePreSetType;
+        ViewRoleParticulars(playerId);
     }
 
     // 鍚戞湇鍔$璇锋眰鐜╁鏁版嵁
     void ViewRoleParticulars(int playerID)
     {
-        if (playerID == 0)
-        {
+        if (playerID <= 0)
             return;
-        }
+
         viewPlayer = playerID;
+
         if (viewPlayerDataDic.ContainsKey(playerID))
         {
             ViewPlayerData viewPlayerData = viewPlayerDataDic[playerID];
@@ -80,34 +85,10 @@
             }
         }
 
-        //CC002_tagCGViewCrossPlayerInfo c002 = new CC002_tagCGViewCrossPlayerInfo();
-
         CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();
         pak.PlayerID = (uint)playerID;
         GameNetSystem.Instance.SendInfo(pak);
     }
-
-
-    //鏈湇绔炴妧鍦哄亣鏌ヨ妯℃嫙灏佸寘锛岃繑鍥炴煡鐪嬫満鍣ㄤ汉鏁版嵁 鎵撳紑RoleParticularsWin鐣岄潰锛屼笓鐢ㄦ帴鍙e叾浠栧湴鏂逛笉瑕佽皟鐢�
-    public void ViewFairyArenaRobot(int playerID, ViewPlayerData _viewPlayerData)
-    {
-        ViewPlayerData viewPlayerData = null;
-        viewPlayer = playerID;
-        if (!viewPlayerDataDic.TryGetValue(playerID, out viewPlayerData))
-        {
-            viewPlayerDataDic.Add(playerID, _viewPlayerData);
-        }
-        else
-        {
-            viewPlayerDataDic[playerID] = _viewPlayerData;
-        }
-
-        viewPlayerType = (int)ViewPlayerType.viewPlayerData;
-        ShowRoleParticulars(playerID);
-    }
-
-
-
     public void OnRevRoleEquip(HA705_tagSCQueryPlayerCacheResult package)
     {
 
@@ -159,15 +140,46 @@
         {
             if (!UIManager.Instance.IsOpened<OtherPlayerDetailWin>())
             {
-                UIManager.Instance.OpenWindow<OtherPlayerDetailWin>(viewPlayerLineupType);
+                UIManager.Instance.OpenWindow<OtherPlayerDetailWin>(viewPreSetType);
             }
         }
 
         OnRevPackage?.Invoke(viewPlayerType, playerID);
         viewPlayerType = -1;
-        viewPlayerLineupType = -1;
+        viewPreSetType = -1;
     }
+
     #region 鑾峰彇PlusData涓殑鏁版嵁
+
+    /// <summary>
+    /// 鑾峰彇鐗瑰畾鎴樻枟鐜涓嬬殑鍛芥牸鏂规璇︽儏
+    /// </summary>
+    public RolePlusData.MinggePresetData GetMinggePresetByBattleType(int playerID, int battleType)
+    {
+        int presetID = GetFuncPresetID(playerID, battleType, (int)FuncPresetType.Mingge);
+        var minggeData = GetMinggeTotalData(playerID);
+        if (minggeData == null || minggeData.PresetDic == null)
+            return null;
+
+        // 鍙栧嚭瀵瑰簲鐨勬柟妗堟暟鎹�
+        if (minggeData.PresetDic.TryGetValue(presetID, out var data))
+        {
+            return data;
+        }
+
+        // 濡傛灉鎵句笉鍒拌鏂规ID锛堝吋瀹规�э級锛屽皾璇曞彇榛樿鏂规 ID=1
+        if (presetID != 1 && minggeData.PresetDic.TryGetValue(1, out var defaultData))
+        {
+            return defaultData;
+        }
+
+        return null;
+    }
+    public RolePlusData.MinggeData GetMinggeTotalData(int playerID)
+    {
+        ViewPlayerData viewPlayerData = GetViewPlayerData(playerID);
+        return viewPlayerData?.rolePlusData?.minggeData;
+    }
 
     public int GetFuncPresetID(int playerID, int battleType, int funcType)
     {
@@ -362,6 +374,13 @@
         return viewPlayerData?.rolePlusData?.horseData;
     }
 
+    // 鑾峰彇鍙ゅ疂鏁版嵁瀵硅薄
+    public RolePlusData.GubaoData GetGubaoData(int playerID)
+    {
+        ViewPlayerData viewPlayerData = GetViewPlayerData(playerID);
+        return viewPlayerData?.rolePlusData?.gubaoData;
+    }
+
     #endregion
     #region 瑙f瀽PlusData
     public class ViewPlayerData
@@ -395,6 +414,8 @@
 
         // 闃靛瀛楀吀 <闃靛ID, 闃靛鏁版嵁>
         public Dictionary<int, LineupData> LineupDic = new Dictionary<int, LineupData>();
+
+        //<鎴樻枟棰勮绫诲瀷,<棰勮绫诲瀷,浣跨敤鐨勬柟妗圛D>>
         public Dictionary<int, Dictionary<int, int>> BatPresetDic = new Dictionary<int, Dictionary<int, int>>();
 
         // 绾㈤鏁版嵁
@@ -402,6 +423,12 @@
 
         // 鍧愰獞鏁版嵁
         public HorseData horseData;
+
+        // 鍙ゅ疂鏁版嵁
+        public GubaoData gubaoData;
+
+        // 鍛芥牸鏁版嵁
+        public MinggeData minggeData;
 
         // 绾㈤鏁版嵁绫�
         public class BeautyData
@@ -423,6 +450,27 @@
         {
             public int ItemID;
             public Dictionary<int, List<int>> UserData = new Dictionary<int, List<int>>();
+        }
+
+        // 鍙ゅ疂鏁版嵁绫�
+        public class GubaoData
+        {
+            public int Cnt; // 宸茶В閿佹暟
+            public Dictionary<int, long> AttrDict = new Dictionary<int, long>(); // 灞炴��
+        }
+
+        public class MinggeData
+        {
+            public int GWLV; // 鎰熸偀绛夌骇
+            public Dictionary<int, MinggePresetData> PresetDic = new Dictionary<int, MinggePresetData>(); // <棰勮ID, 棰勮璇︽儏>
+        }
+
+        public class MinggePresetData
+        {
+            // 鍛芥牸鎶�鑳� <鎰忚薄鎶�鑳絀D, 绛夌骇>
+            public Dictionary<int, int> SkillDic = new Dictionary<int, int>();
+            // 鍛芥牸灞炴�� <灞炴�D, 鍊�>
+            public Dictionary<int, long> AttrDict = new Dictionary<int, long>();
         }
 
         // 闃靛鏁版嵁绫�
@@ -490,6 +538,9 @@
                 BatPresetDic.Clear();
                 beautyData = null; // 蹇呴』缃┖锛岄槻姝㈡樉绀轰笂涓�涓帺瀹剁殑鏁版嵁
                 horseData = null;  // 蹇呴』缃┖
+                gubaoData = null;  // 蹇呴』缃┖
+                minggeData = null;
+
                 // 1. 杞负 JsonData 瀵硅薄
                 JsonData jd = JsonMapper.ToObject(jsonStr);
 
@@ -514,6 +565,20 @@
                         }
                     }
                 }
+
+                // 銆愭柊澧炪�戣В鏋愬彜瀹� (Gubao)
+                if (jd.Keys.Contains("Gubao"))
+                {
+                    JsonData gubaoJd = jd["Gubao"];
+                    gubaoData = new GubaoData();
+
+                    if (gubaoJd.Keys.Contains("Cnt"))
+                        gubaoData.Cnt = (int)gubaoJd["Cnt"];
+
+                    // 瑙f瀽灞炴��
+                    gubaoData.AttrDict = ParseAttrDict(gubaoJd, "Attr");
+                }
+
                 // 銆愭柊澧炪�戣В鏋愮孩棰� (Beauty)
                 if (jd.Keys.Contains("Beauty"))
                 {
@@ -624,6 +689,52 @@
                     }
 
                 }
+                // 銆愭柊澧炪�戣В鏋愬懡鏍� (Mingge)
+                if (jd.Keys.Contains("Mingge"))
+                {
+                    JsonData minggeJd = jd["Mingge"];
+                    minggeData = new MinggeData();
+
+                    // 1. 瑙f瀽鎰熸偀绛夌骇
+                    if (minggeJd.Keys.Contains("GWLV"))
+                        minggeData.GWLV = (int)minggeJd["GWLV"];
+
+                    // 2. 瑙f瀽棰勮 (Preset)
+                    if (minggeJd.Keys.Contains("Preset"))
+                    {
+                        JsonData presetRootJd = minggeJd["Preset"];
+                        foreach (string key in presetRootJd.Keys)
+                        {
+                            // key 涓哄懡鏍奸璁綢D
+                            if (int.TryParse(key, out int presetId))
+                            {
+                                JsonData singlePresetJd = presetRootJd[key];
+                                MinggePresetData presetData = new MinggePresetData();
+
+                                // 瑙f瀽灞炴�� (Attr)
+                                presetData.AttrDict = ParseAttrDict(singlePresetJd, "Attr");
+
+                                // 瑙f瀽鎶�鑳� (Skill) - {"SkillID": level, ...}
+                                if (singlePresetJd.Keys.Contains("Skill"))
+                                {
+                                    JsonData skillJd = singlePresetJd["Skill"];
+                                    foreach (string skillKey in skillJd.Keys)
+                                    {
+                                        if (int.TryParse(skillKey, out int skillId))
+                                        {
+                                            if (int.TryParse(skillJd[skillKey].ToString(), out int level))
+                                            {
+                                                presetData.SkillDic[skillId] = level;
+                                            }
+                                        }
+                                    }
+                                }
+
+                                minggeData.PresetDic[presetId] = presetData;
+                            }
+                        }
+                    }
+                }
 
             }
             catch (Exception e)

--
Gitblit v1.8.0