| Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
@@ -337,6 +337,20 @@ return GetUseData(hero, 73); } // 获取红颜属性值 public RolePlusData.BeautyData GetBeautyData(int playerID) { ViewPlayerData viewPlayerData = GetViewPlayerData(playerID); return viewPlayerData?.rolePlusData?.beautyData; } // 获取坐骑数据对象 public RolePlusData.HorseData GetHorseData(int playerID) { ViewPlayerData viewPlayerData = GetViewPlayerData(playerID); return viewPlayerData?.rolePlusData?.horseData; } #endregion #region 解析PlusData public class ViewPlayerData @@ -370,6 +384,27 @@ // 阵容字典 <阵容ID, 阵容数据> public Dictionary<int, LineupData> LineupDic = new Dictionary<int, LineupData>(); // 红颜数据 public BeautyData beautyData; // 坐骑数据 public HorseData horseData; // 红颜数据类 public class BeautyData { public int Cnt; // 已解锁数 public Dictionary<int, long> AttrDict = new Dictionary<int, long>(); // 属性 } // 坐骑数据类 public class HorseData { public int LV; // 等级 public int ClassLV; // 阶级 public Dictionary<int, long> AttrDict = new Dictionary<int, long>(); // 属性 } // 装备数据类 public class EquipData @@ -405,18 +440,43 @@ public Dictionary<int, List<int>> Data = new Dictionary<int, List<int>>(); } // --- 解析逻辑 --- // 通用的属性解析方法 private Dictionary<int, long> ParseAttrDict(JsonData jd, string key) { Dictionary<int, long> result = new Dictionary<int, long>(); if (jd.Keys.Contains(key)) { JsonData attrs = jd[key]; foreach (string attrKey in attrs.Keys) { if (int.TryParse(attrKey, out int attrId)) { JsonData v = attrs[attrKey]; long val = 0; // 健壮性数值转换 if (v.IsLong) val = (long)v; else if (v.IsInt) val = (long)(int)v; else if (v.IsDouble) val = (long)(double)v; else if (v.IsString) long.TryParse(v.ToString(), out val); result[attrId] = val; } } } return result; } // --- 解析逻辑 --- public void AnalysisRolePlusData(string jsonStr) { try { if (string.IsNullOrEmpty(jsonStr)) return; // 清除旧数据,防止重用对象时数据堆叠 EquipDic.Clear(); LineupDic.Clear(); beautyData = null; // 必须置空,防止显示上一个玩家的数据 horseData = null; // 必须置空 // 1. 转为 JsonData 对象 JsonData jd = JsonMapper.ToObject(jsonStr); @@ -441,7 +501,33 @@ } } } // 【新增】解析红颜 (Beauty) if (jd.Keys.Contains("Beauty")) { JsonData beautyJd = jd["Beauty"]; beautyData = new BeautyData(); if (beautyJd.Keys.Contains("Cnt")) beautyData.Cnt = (int)beautyJd["Cnt"]; // 解析属性 beautyData.AttrDict = ParseAttrDict(beautyJd, "Attr"); } // 【新增】解析坐骑 (Horse) if (jd.Keys.Contains("Horse")) { JsonData horseJd = jd["Horse"]; horseData = new HorseData(); if (horseJd.Keys.Contains("LV")) horseData.LV = (int)horseJd["LV"]; if (horseJd.Keys.Contains("ClassLV")) horseData.ClassLV = (int)horseJd["ClassLV"]; // 解析属性 horseData.AttrDict = ParseAttrDict(horseJd, "Attr"); } // 3. 解析阵容 (Lineup) if (jd.Keys.Contains("Lineup")) { @@ -493,43 +579,7 @@ heroData.SkillIDList.Add((int)skills[i]); } } // 【修改点 2】: 属性解析逻辑更新 if (heroJd.Keys.Contains("AttrDict")) { JsonData attrs = heroJd["AttrDict"]; foreach (string attrKey in attrs.Keys) { if (int.TryParse(attrKey, out int attrId)) { JsonData v = attrs[attrKey]; long val = 0; // 健壮性判断:无论Json里是int, long还是double,都安全转为long if (v.IsLong) { val = (long)v; } else if (v.IsInt) { val = (long)(int)v; } else if (v.IsDouble) { // 如果服务端发了小数,这里会截断取整,防止报错 val = (long)(double)v; } else if (v.IsString) { // 防止有些极端情况数值变成了字符串 long.TryParse(v.ToString(), out val); } heroData.AttrDict[attrId] = val; } } } heroData.AttrDict = ParseAttrDict(heroJd, "AttrDict"); lineupData.HeroDic[heroPos] = heroData; } } @@ -538,6 +588,7 @@ } } } } catch (Exception e) { Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs
@@ -20,6 +20,10 @@ [SerializeField] OtherEquipCardItem[] equipCards; [SerializeField] ButtonEx btnMM; [SerializeField] TextEx txtMMCnt; [SerializeField] ButtonEx btnHorse; [SerializeField] HorseController horseController; [SerializeField] TextEx txtHorseLV; [SerializeField] ImageEx imgHorseBG; [SerializeField] ButtonEx btnBlock; [SerializeField] ButtonEx btnReport; [SerializeField] ButtonEx btnAddFriend; @@ -34,6 +38,8 @@ btnReport.SetListener(OnClickReport); btnCopy.SetListener(OnClickCopy); btnGuild.SetListener(OnClickGuild); btnMM.SetListener(OnClickMM); btnHorse.SetListener(OnClickHorse); } protected override void OnPreOpen() @@ -76,11 +82,14 @@ return; } DisplayMM(); DisplayPlayerInfo(viewPlayerData); DisplayGuildInfo(viewPlayerData); int playerID = viewPlayerData.PlayerID; DisplayMM(playerID); var heroList = manager.GetHeroDataSortList(playerID, teamType); if (heroList.IsNullOrEmpty()) { @@ -103,11 +112,11 @@ DisplayEquip(equipDict); } private void DisplayMM() private void DisplayMM(int playerID) { txtMMCnt.text = Language.Get("OtherPlayerDetail08", 0); OtherPlayerDetailManager.RolePlusData.BeautyData beautyData = manager.GetBeautyData(playerID); txtMMCnt.text = Language.Get("OtherPlayerDetail08", beautyData == null ? 0 : beautyData.Cnt); } private void DisplayGuildInfo(OtherPlayerDetailManager.ViewPlayerData viewPlayerData) { if (viewPlayerData.FamilyEmblemID <= 0 || string.IsNullOrEmpty(viewPlayerData.FamilyEmblemWord)) @@ -135,7 +144,7 @@ private void DisplayHorseModel(OtherPlayerDetailManager.ViewPlayerData viewPlayerData) { int HorseSkinID = viewPlayerData.EquipShowSwitch % 1000; int horseSkinID = HorseManager.Instance.GetOtherPlayerHorseSkinID(viewPlayerData.EquipShowSwitch); int modelMark = viewPlayerData.ModelMark; // 如果 ModelMark 为 0,获取默认的 ModelMark @@ -154,7 +163,15 @@ var modelConfig = ModelConfig.Get(modelMark); int heroSkinID = modelConfig.SkinID; horseModel.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID(HorseSkinID), heroSkinID, 1); horseModel.Create(horseSkinID, heroSkinID, 1); OtherPlayerDetailManager.RolePlusData.HorseData horseData = manager.GetHorseData(viewPlayerData.PlayerID); imgHorseBG.SetActive(horseData != null); if (horseData != null) { txtHorseLV.text = Language.Get("Horse8", horseData == null ? 0 : horseData.ClassLV, horseData == null ? 0 : horseData.LV); horseController.Create(horseSkinID, 0, 0.6f); } } private void DisplayCard(List<OtherPlayerDetailManager.RolePlusData.HeroData> heros) @@ -231,5 +248,29 @@ GuildManager.Instance.SendFindGuildNoDecrypt(viewPlayerData.FamilyID.ToString()); } private void OnClickMM() { if (viewPlayerData == null) { return; } int playerID = viewPlayerData.PlayerID; OtherPlayerDetailManager.RolePlusData.BeautyData beautyData = manager.GetBeautyData(playerID); AttributeManager.Instance.OpenTotalAttributeWin(beautyData == null || beautyData.AttrDict == null ? new Dictionary<int, long>() : beautyData.AttrDict); } private void OnClickHorse() { if (viewPlayerData == null) { return; } int playerID = viewPlayerData.PlayerID; OtherPlayerDetailManager.RolePlusData.HorseData horseData = manager.GetHorseData(playerID); if (horseData == null) { return; } AttributeManager.Instance.OpenTotalAttributeWin(horseData.AttrDict == null ? new Dictionary<int, long>() : horseData.AttrDict); } }