From 9406f16ae0496f02adc301d6084af71240cba514 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 06 一月 2026 20:26:07 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts

---
 Main/System/Arena/ArenaRecordWin.cs                                             |    3 
 Main/System/PlayerProfile/PlayerProfileWin.cs                                   |    7 +
 Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs                       |  143 ++++++++++++++++++++--------
 Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB424_tagSCTurnFightInit.cs |    4 
 Main/System/Team/TeamHero.Properties.cs                                         |    3 
 Main/System/Arena/ArenaChallengeWin.cs                                          |    3 
 Main/System/Team/TeamHero.cs                                                    |    1 
 Main/System/Arena/ArenaManager.cs                                               |   10 +
 Main/System/Battle/ArenaBattleWin.cs                                            |   21 +++
 Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs                           |   95 ++++++++++++++++--
 10 files changed, 231 insertions(+), 59 deletions(-)

diff --git a/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB424_tagSCTurnFightInit.cs b/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB424_tagSCTurnFightInit.cs
index be022dd..6a46ba6 100644
--- a/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB424_tagSCTurnFightInit.cs
+++ b/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;        // 绛夌骇锛岀帺瀹剁殑姝﹀皢绛夌骇鎴朜PC鎴愰暱绛夌骇锛岀瓑绾ф樉绀轰互璇ュ�间负鍑�
         public byte PosNum;        // 鍦ㄦ湰闃靛涓殑绔欎綅锛屼粠1寮�濮嬶紝闈炰富鎴樻枟姝﹀皢涓�0锛屽绾㈤
         public ushort AngreXP;        // 褰撳墠鎬掓皵鍊�
+        public uint FightPower;        // 鎴樺姏锛屾眰浣欎嚎閮ㄥ垎
+        public uint FightPowerEx;        // 鎴樺姏锛屾暣闄や嚎閮ㄥ垎
     }
 
     public class tagSCTurnFightLineup {
diff --git a/Main/System/Arena/ArenaChallengeWin.cs b/Main/System/Arena/ArenaChallengeWin.cs
index 161abd1..93381b2 100644
--- a/Main/System/Arena/ArenaChallengeWin.cs
+++ b/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);
     }
diff --git a/Main/System/Arena/ArenaManager.cs b/Main/System/Arena/ArenaManager.cs
index d921a07..b4aec02 100644
--- a/Main/System/Arena/ArenaManager.cs
+++ b/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);
+    }
+}
 
 
 
diff --git a/Main/System/Arena/ArenaRecordWin.cs b/Main/System/Arena/ArenaRecordWin.cs
index 5222834..be4804d 100644
--- a/Main/System/Arena/ArenaRecordWin.cs
+++ b/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);
     }
 }
diff --git a/Main/System/Battle/ArenaBattleWin.cs b/Main/System/Battle/ArenaBattleWin.cs
index 735eced..9b0f8b3 100644
--- a/Main/System/Battle/ArenaBattleWin.cs
+++ b/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);
diff --git a/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs b/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
index fccccad..40d114c 100644
--- a/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
+++ b/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 瑙f瀽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>>();
         }
 
-        // --- 瑙f瀽閫昏緫 ---
+        // 閫氱敤鐨勫睘鎬цВ鏋愭柟娉�
+        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;
+        }
+
+        // --- 瑙f瀽閫昏緫 ---
         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"];
+
+                    // 瑙f瀽灞炴��
+                    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"];
+
+                    // 瑙f瀽灞炴��
+                    horseData.AttrDict = ParseAttrDict(horseJd, "Attr");
+                }
                 // 3. 瑙f瀽闃靛 (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)
             {
diff --git a/Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs b/Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs
index c595c81..237a0c4 100644
--- a/Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs
+++ b/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);
+    }
 }
diff --git a/Main/System/PlayerProfile/PlayerProfileWin.cs b/Main/System/PlayerProfile/PlayerProfileWin.cs
index 26a640e..ab17e8e 100644
--- a/Main/System/PlayerProfile/PlayerProfileWin.cs
+++ b/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());
diff --git a/Main/System/Team/TeamHero.Properties.cs b/Main/System/Team/TeamHero.Properties.cs
index acf7871..a8693bf 100644
--- a/Main/System/Team/TeamHero.Properties.cs
+++ b/Main/System/Team/TeamHero.Properties.cs
@@ -11,5 +11,6 @@
     //  鏈�澶ц閲�
     public long maxHp;
 
-    
+    //  鎴樺姏
+    public long fightPower;
 }
\ No newline at end of file
diff --git a/Main/System/Team/TeamHero.cs b/Main/System/Team/TeamHero.cs
index 3d94074..4217979 100644
--- a/Main/System/Team/TeamHero.cs
+++ b/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;

--
Gitblit v1.8.0