| Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB424_tagSCTurnFightInit.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Arena/ArenaChallengeWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Arena/ArenaManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Arena/ArenaRecordWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/ArenaBattleWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/PlayerProfile/PlayerProfileWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Team/TeamHero.Properties.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Team/TeamHero.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB424_tagSCTurnFightInit.cs
@@ -49,6 +49,8 @@ TransBytes (out FactionList[i].LineupList[j].ObjList[k].LV, vBytes, NetDataType.WORD); TransBytes (out FactionList[i].LineupList[j].ObjList[k].PosNum, vBytes, NetDataType.BYTE); TransBytes (out FactionList[i].LineupList[j].ObjList[k].AngreXP, vBytes, NetDataType.WORD); TransBytes (out FactionList[i].LineupList[j].ObjList[k].FightPower, vBytes, NetDataType.DWORD); TransBytes (out FactionList[i].LineupList[j].ObjList[k].FightPowerEx, vBytes, NetDataType.DWORD); } } } @@ -72,6 +74,8 @@ public ushort LV; // 等级,玩家的武将等级或NPC成长等级,等级显示以该值为准 public byte PosNum; // 在本阵容中的站位,从1开始,非主战斗武将为0,如红颜 public ushort AngreXP; // 当前怒气值 public uint FightPower; // 战力,求余亿部分 public uint FightPowerEx; // 战力,整除亿部分 } public class tagSCTurnFightLineup { Main/System/Arena/ArenaChallengeWin.cs
@@ -77,7 +77,8 @@ { CreateScroller(); voucher.Display(); txtFightPoint.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); long myFightPower = ArenaManager.Instance.GetMyFightPower(); txtFightPoint.text = UIHelper.ReplaceLargeArtNum(myFightPower); imgMoneyIcon.SetIconWithMoneyType(ArenaManager.Instance.currencyType); txtMoneyCount.text = UIHelper.ShowUseMoney(ArenaManager.Instance.currencyType, ArenaManager.Instance.currencyValue); } Main/System/Arena/ArenaManager.cs
@@ -304,8 +304,16 @@ sortedList.Sort((a, b) => b.Time.CompareTo(a.Time)); // 按时间从大到小排序 return true; } } //优先取进攻队伍的战力,没有进攻队伍,取主线战力 public long GetMyFightPower() { var arenaDefenseTeam = TeamManager.Instance.GetTeam(TeamType.Arena); return arenaDefenseTeam.IsEmpty() || arenaDefenseTeam.GetTeamHeroCount() <= 0 ? PlayerDatas.Instance.baseData.FightPower : FightPowerManager.Instance.GetTeamFightPower(TeamType.Arena, false); } } Main/System/Arena/ArenaRecordWin.cs
@@ -82,6 +82,7 @@ { CreateScroller(); voucher.Display(); txtFightPoint.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); long myFightPower = ArenaManager.Instance.GetMyFightPower(); txtFightPoint.text = UIHelper.ReplaceLargeArtNum(myFightPower); } } Main/System/Battle/ArenaBattleWin.cs
@@ -172,6 +172,22 @@ } private long GetFightPonit(List<BattleObject> Team) { if (Team.IsNullOrEmpty()) { return 0; } long res = 0; foreach (var obj in Team) { if (obj.teamHero == null) continue; res += obj.teamHero.fightPower; } return res; } private void DisplayPlayerInfo() { if (battleField == null) @@ -186,7 +202,7 @@ txtEnemyLV.text = Language.Get("Arena22", info.Lv); txtEnemyName.text = UIHelper.ServerStringTrim(info.PlayerName); txtEnemyFightPonit.text = UIHelper.ReplaceLargeArtNum(info.FightPower); txtEnemyFightPonit.text = UIHelper.ReplaceLargeArtNum(GetFightPonit(enemyTeam)); enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)info.PlayerID, (int)info.Face, (int)info.FacePic)); enemyAvatarCell.SetListener(() => { @@ -197,7 +213,8 @@ txtMyLV.text = Language.Get("Arena22", PlayerDatas.Instance.baseData.LV); txtMyName.text = PlayerDatas.Instance.baseData.PlayerName; txtMyFightPonit.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); long myFightPower = GetFightPonit(myTeam); txtMyFightPonit.text = UIHelper.ReplaceLargeArtNum(myFightPower); myAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic)); team = GetTeamHeroList(myTeam); myCountry.RefreshOnTeamCountry(team, true); Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
@@ -199,6 +199,18 @@ return res; } public bool TryGetFightPointByTeamType(int playerID, int teamType, out long fightPower) { fightPower = 0; var lineupDic = GetViewPlayerData(playerID)?.rolePlusData?.LineupDic; if (lineupDic != null && lineupDic.TryGetValue(teamType, out var lineupData)) { fightPower = lineupData.FightPower; return true; } return false; } public Dictionary<int, RolePlusData.EquipData> GetEquipDataDict(int playerID) { ViewPlayerData viewPlayerData = GetViewPlayerData(playerID); @@ -325,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 @@ -358,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 @@ -393,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); @@ -429,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")) { @@ -481,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; } } @@ -526,6 +588,7 @@ } } } } catch (Exception e) { Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs
@@ -1,3 +1,4 @@ using System; using System.Collections.Generic; using UnityEngine; @@ -19,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; @@ -26,24 +31,45 @@ OtherPlayerDetailManager.ViewPlayerData viewPlayerData; OtherPlayerDetailManager manager { get { return OtherPlayerDetailManager.Instance; } } int viewPlayerLineupType = -1; int teamType = -1; protected override void InitComponent() { btnReport.SetListener(OnClickReport); btnCopy.SetListener(OnClickCopy); btnGuild.SetListener(OnClickGuild); btnMM.SetListener(OnClickMM); btnHorse.SetListener(OnClickHorse); } protected override void OnPreOpen() { viewPlayerLineupType = functionOrder; GuildManager.Instance.OnRefreshFairyList += OnRefreshFairyList; teamType = functionOrder; Display(); } protected override void OnPreClose() { GuildManager.Instance.OnRefreshFairyList -= OnRefreshFairyList; } private void OnRefreshFairyList() { if (viewPlayerData == null) { return; } if (!GuildManager.Instance.guildsDict.ContainsKey(viewPlayerData.FamilyID)) { return; } if (!UIManager.Instance.IsOpened<GuildPreviewWin>()) { UIManager.Instance.OpenWindow<GuildPreviewWin>(viewPlayerData.FamilyID); } } private void Display() @@ -56,27 +82,41 @@ return; } DisplayMM(); DisplayPlayerInfo(viewPlayerData); DisplayGuildInfo(viewPlayerData); int playerID = viewPlayerData.PlayerID; var heroList = manager.GetHeroDataSortList(playerID, viewPlayerLineupType); DisplayMM(playerID); var heroList = manager.GetHeroDataSortList(playerID, teamType); if (heroList.IsNullOrEmpty()) { heroList = manager.GetHeroDataSortList(playerID, (int)TeamType.Story); } DisplayCard(heroList); long fightPonit; if (!manager.TryGetFightPointByTeamType(playerID, teamType, out fightPonit)) { if (!manager.TryGetFightPointByTeamType(playerID, (int)TeamType.Story, out fightPonit)) { fightPonit = 0; } } txtFightPower.text = UIHelper.ReplaceLargeArtNum(fightPonit); var equipDict = manager.GetEquipDataDict(playerID); 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)) @@ -87,7 +127,7 @@ btnGuild.SetActive(true); guildEmblem.Display(viewPlayerData.FamilyEmblemID, viewPlayerData.FamilyEmblemWord, 0.35f); txtGuildName.text = viewPlayerData.FamilyName; GuildManager.Instance.SendFindGuildNoDecrypt(viewPlayerData.FamilyID.ToString()); } private void DisplayPlayerInfo(OtherPlayerDetailManager.ViewPlayerData viewPlayerData) @@ -95,7 +135,6 @@ txtPlayerName.text = viewPlayerData.PlayerName; txtPlayerId.text = Language.Get("OtherPlayerDetail02", viewPlayerData.PlayerID); txtServerName.text = Language.Get("PlayerProfile11", ServerListCenter.Instance.GetServerName(viewPlayerData.ServerID)); txtFightPower.text = UIHelper.ReplaceLargeArtNum(viewPlayerData.FightPower); txtLV.text = viewPlayerData.LV.ToString(); avatarCell.InitUI(AvatarHelper.GetAvatarModel(viewPlayerData.PlayerID, viewPlayerData.Face, viewPlayerData.FacePic)); officialTitle.InitUI(viewPlayerData.RealmLV, viewPlayerData.TitleID); @@ -105,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 @@ -124,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) @@ -198,8 +245,32 @@ { return; } UIManager.Instance.OpenWindow<GuildPreviewWin>(viewPlayerData.FamilyID); 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); } } Main/System/PlayerProfile/PlayerProfileWin.cs
@@ -29,7 +29,12 @@ btnSetting.SetListener(() => { UIManager.Instance.OpenWindow<SystemSetWin>(); }); btnAnnouncement.SetListener(() => { GameNotice.OpenGameNoticeForce(); }); btnSwitchServer.SetListener(() => { GameNetSystem.Instance.LoginOut(); }); btnRedemptionCode.SetListener(() => { UIManager.Instance.OpenWindow<ExchangeCodeWin>(); }); btnRedemptionCode.SetListener(() => { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Mail, true)) return; UIManager.Instance.OpenWindow<ExchangeCodeWin>(); }); btnCopy.SetListener(() => { UIHelper.CopyToClipboard(PlayerDatas.Instance.baseData.PlayerID.ToString()); Main/System/Team/TeamHero.Properties.cs
@@ -11,5 +11,6 @@ // 最大血量 public long maxHp; // 战力 public long fightPower; } Main/System/Team/TeamHero.cs
@@ -85,6 +85,7 @@ curHp = (long)fightObj.HPEx * (long)Constants.ExpPointValue + (long)fightObj.HP; maxHp = (long)fightObj.MaxHPEx * (long)Constants.ExpPointValue + (long)fightObj.MaxHP; fightPower = (long)fightObj.FightPowerEx * (long)Constants.ExpPointValue + (long)fightObj.FightPower; rage = (int)fightObj.AngreXP; positionNum = fightObj.PosNum - 1;