From ceabc7dde8514ed6bcfadfb5fe9fb37c45cc370e Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期四, 22 一月 2026 20:43:06 +0800
Subject: [PATCH] 136 白骨盈野-客户端  重构红点逻辑

---
 Main/System/Settlement/BoneBattleVictoryWin.cs    |    2 
 Main/System/BoneField/BoneFieldManager.cs         |   75 ++++++++++++++++++------
 Main/Utility/EnumHelper.cs                        |    1 
 Main/System/BoneField/AdsManager.cs               |   52 ++++++++++++++++
 Main/System/BoneField/BoneFieldWin.cs             |   16 +++--
 Main/System/Settlement/BoneBattleFailWin.cs       |    2 
 Main/System/ChallengeTab/BoneFieldTabHandler.cs   |    2 
 Main/System/BoneField/BoneFieldChallengeButton.cs |    4 
 8 files changed, 121 insertions(+), 33 deletions(-)

diff --git a/Main/System/BoneField/AdsManager.cs b/Main/System/BoneField/AdsManager.cs
index 262527e..cdeecb9 100644
--- a/Main/System/BoneField/AdsManager.cs
+++ b/Main/System/BoneField/AdsManager.cs
@@ -10,6 +10,8 @@
     {
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEvent;
         DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += UpdateRedpoint;
+        DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
+        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
 
         var keys = ADAwardConfig.GetKeys();
         for (int i = 0; i < keys.Count; i++)
@@ -27,11 +29,33 @@
     {
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEvent;
         DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= UpdateRedpoint;
+        DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
+        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+    }
+
+    private void OnFuncStateChangeEvent(int funcId)
+    {
+        switch (funcId)
+        {
+            case (int)FuncOpenEnum.BoneBattle:
+                UpdateBoneAdRedPoint();
+                break;
+        }
     }
 
     public void OnBeforePlayerDataInitializeEvent()
     {
         adsInfoDict.Clear();
+    }
+
+    private void OnUpdateFBInfoChangeEvent(int mapID)
+    {
+        switch (mapID)
+        {
+            case 30010:
+                UpdateBoneAdRedPoint();
+                break;
+        }
     }
 
     void SendGetReward(int ADID)
@@ -114,7 +138,7 @@
         foreach (var key in redPointDict.Keys)
         {
             redPointDict[key].state = RedPointState.None;
-            
+
             var config = ADAwardConfig.Get(key);
             if (!FuncOpen.Instance.IsFuncOpen(config.FuncID))
             {
@@ -122,9 +146,33 @@
             }
             if (GetADCntByADID(key) < config.ADCntMax)
             {
-                redPointDict[key].state = RedPointState.Simple;
+                switch (key)
+                {
+                    //鐧介
+                    case 1:
+                        UpdateBoneAdRedPoint();
+                        break;
+                    default:
+                        redPointDict[key].state = RedPointState.Simple;
+                        break;
+                }
             }
         }
     }
+
+
+    private void UpdateBoneAdRedPoint()
+    {
+        int key = 1;
+        if (!ADAwardConfig.HasKey(key))
+            return;
+        var config = ADAwardConfig.Get(key);
+        if (!FuncOpen.Instance.IsFuncOpen(config.FuncID))
+            return;
+        if (redPointDict.IsNullOrEmpty() || !redPointDict.ContainsKey(key))
+            return;
+        bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
+        redPointDict[key].state = isNoChallenge ? RedPointState.None : RedPointState.Simple;
+    }
 }
 
diff --git a/Main/System/BoneField/BoneFieldChallengeButton.cs b/Main/System/BoneField/BoneFieldChallengeButton.cs
index e3d552d..e7cb0dc 100644
--- a/Main/System/BoneField/BoneFieldChallengeButton.cs
+++ b/Main/System/BoneField/BoneFieldChallengeButton.cs
@@ -21,8 +21,8 @@
         this.isHasNextLineID = isHasNextLineID;
         this.lvLimitMin = lvLimitMin;
         isLvOk = PlayerDatas.Instance.baseData.LV >= lvLimitMin;
-        long myFightPower = PlayerDatas.Instance.baseData.FightPower;
-        imgChallengeRed.SetActive(isLvOk && isHasNextLineID && myFightPower >= bossFightPower);
+        bool isShowRed = BoneFieldManager.Instance.IsShowChallengeRed();
+        imgChallengeRed.SetActive(isShowRed);
         txtChallengeLv.SetActive(!isLvOk);
         txtChallengeLv.text = Language.Get("BoneField07", lvLimitMin);
         txtChallengeYes.SetActive(isLvOk && isHasNextLineID);
diff --git a/Main/System/BoneField/BoneFieldManager.cs b/Main/System/BoneField/BoneFieldManager.cs
index e915b7b..bfc1f3a 100644
--- a/Main/System/BoneField/BoneFieldManager.cs
+++ b/Main/System/BoneField/BoneFieldManager.cs
@@ -5,13 +5,13 @@
 
     public readonly int DataMapID = 30010;  // 鐧介鐩堥噹(鎴橀敜绉樺)
     public readonly int MinStartLineID = 1;    // funcLineID浠�1寮�濮�
-    public readonly int funcId = 9;  //鍔熻兘ID 
     public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.BoneFieldRepoint);
     public override void Init()
     {
         DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
         AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent;
         FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
         TimeMgr.Instance.OnDayEvent += OnDayEvent;
     }
 
@@ -20,12 +20,13 @@
         DungeonManager.Instance.UpdateFBInfoListEvent -= OnUpdateFBInfoChangeEvent;
         AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent;
         FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
         TimeMgr.Instance.OnDayEvent -= OnDayEvent;
     }
 
     private void OnFuncStateChangeEvent(int obj)
     {
-        if (obj != funcId)
+        if (obj != (int)FuncOpenEnum.BoneBattle)
             return;
         UpdateRedPoint();
     }
@@ -51,39 +52,75 @@
         UpdateRedPoint();
     }
 
+    private void OnPlayerDataRefresh(PlayerDataType type)
+    {
+        if (type == PlayerDataType.FightPower)
+        {
+            UpdateRedPoint();
+        }
+        else if (type == PlayerDataType.LV)
+        {
+            UpdateRedPoint();
+        }
+    }
+
     public void UpdateRedPoint()
     {
         parentRedpoint.state = RedPointState.None;
-        if (!FuncOpen.Instance.IsFuncOpen(funcId))
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BoneBattle))
             return;
+
+        bool isShowChallengeRed = IsShowChallengeRed();
+        if (isShowChallengeRed)
+        {
+            parentRedpoint.state = RedPointState.Simple;
+            return;
+        }
+
+        bool isShowSweepRed = IsShowSweepRed();
+        if (isShowSweepRed)
+        {
+            parentRedpoint.state = RedPointState.Simple;
+            return;
+        }
+
+    }
+    public bool IsShowChallengeRed()
+    {
         if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
-            return;
+            return false;
         bool isHasNextLineID = IsHasNextLineID(fbInfo);
         int nowPassLineID = GetNowPassLineID(fbInfo);
         DungeonConfig.TryGetDungeonID(DataMapID, nowPassLineID, out int dungeonID);
         if (!DungeonConfig.HasKey(dungeonID))
-            return;
+            return false;
         DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID);
         bool isLvOk = PlayerDatas.Instance.baseData.LV >= dungeonConfig.LVLimitMin;
         long myFightPower = PlayerDatas.Instance.baseData.FightPower;
-        if (myFightPower >= dungeonConfig.FightPower)
+        return isLvOk && isHasNextLineID && myFightPower >= dungeonConfig.FightPower;
+    }
+
+    public bool IsShowSweepRed()
+    {
+        bool isNoChallenge = IsNoChallenge();
+        if (isNoChallenge)
+            return false;
+        if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount))
         {
-            if (isLvOk && isHasNextLineID)
+            bool isSweepCountOk = showrealRemainSweepCount > 0;
+            if (isSweepCountOk)
             {
-                parentRedpoint.state = RedPointState.Simple;
+                return true;
             }
         }
-        else
-        {
-            if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount))
-            {
-                bool isSweepCountOk = showrealRemainSweepCount > 0;
-                if (isSweepCountOk)
-                {
-                    parentRedpoint.state = RedPointState.Simple;
-                }
-            }
-        }
+        return false;
+    }
+
+    public bool IsNoChallenge()
+    {
+        if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
+            return true;
+        return fbInfo.PassLineID <= 0;
     }
 
     public bool IsHasNextLineID(FBInfo fBInfo)
diff --git a/Main/System/BoneField/BoneFieldWin.cs b/Main/System/BoneField/BoneFieldWin.cs
index c84dbc9..3c01fc2 100644
--- a/Main/System/BoneField/BoneFieldWin.cs
+++ b/Main/System/BoneField/BoneFieldWin.cs
@@ -165,8 +165,8 @@
         DisplaySkillWordsList(lineupConfig);
         DisplayItemCellList(challengeItemCells1, dungeonConfig.PassAwardList);
         DisplayItemCellList(challengeItemCells2, dungeonConfig.PassAwardList);
-
-        if (fbInfo.PassLineID > 0)
+        bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
+        if (!isNoChallenge)
         {
             DungeonConfig.TryGetDungeonID(dataMapID, (int)fbInfo.PassLineID, out int sweepDungeonID);
             if (!DungeonConfig.HasKey(dungeonID))
@@ -189,8 +189,9 @@
 
     public void DisplayChallengeButton(DungeonConfig dungeonConfig, FBInfo fBInfo)
     {
-        transNoChallenge.SetActive(fBInfo.PassLineID <= 0);
-        transHasChallenge.SetActive(fBInfo.PassLineID > 0);
+        bool isNoChallenge = BoneFieldManager.Instance.IsNoChallenge();
+        transNoChallenge.SetActive(isNoChallenge);
+        transHasChallenge.SetActive(!isNoChallenge);
         btnChallenge1.Display(dungeonConfig.LVLimitMin, isHasNextLineID, dungeonConfig.FightPower);
         btnChallenge2.Display(dungeonConfig.LVLimitMin, isHasNextLineID, dungeonConfig.FightPower);
     }
@@ -204,8 +205,9 @@
         bool isSweepCountOk = showrealRemainSweepCount > 0;
         btnSweep.interactable = isSweepCountOk;
         imgSweep.gray = !isSweepCountOk;
-        long myFightPower = PlayerDatas.Instance.baseData.FightPower;
-        imgSweepRed.SetActive(isSweepCountOk && myFightPower < dungeonConfig.FightPower);
+        bool isShowChallengeRed = BoneFieldManager.Instance.IsShowChallengeRed();
+        bool isShowSweepRed = BoneFieldManager.Instance.IsShowSweepRed();
+        imgSweepRed.SetActive(!isShowChallengeRed && isShowSweepRed);
         txtTodaySweepCount.SetActive(showSweepMaxCount > showrealRemainSweepCount);
         txtTodaySweepCount.text = UIHelper.AppendColor(isSweepCountOk ? TextColType.LightGreen : TextColType.Red, Language.Get("BoneField08", showrealRemainSweepCount, showSweepMaxCount));
 
@@ -231,7 +233,7 @@
                 txtNeedMoneyCount.text = payMoneyValue.ToString();
             }
         }
-    }        
+    }
 
     public void DisplayAdsButton(ADAwardConfig aDAwardConfig)
     {
diff --git a/Main/System/ChallengeTab/BoneFieldTabHandler.cs b/Main/System/ChallengeTab/BoneFieldTabHandler.cs
index bb0c18c..d3f48a6 100644
--- a/Main/System/ChallengeTab/BoneFieldTabHandler.cs
+++ b/Main/System/ChallengeTab/BoneFieldTabHandler.cs
@@ -5,7 +5,7 @@
 {
     protected override int GetIndex() => 2;
     protected override int GetOpenState() => 0; // 0=FuncID
-    protected override int GetFuncId() => BoneFieldManager.Instance.funcId;
+    protected override int GetFuncId() => (int)FuncOpenEnum.BoneBattle;
     protected override int GetRedpointId() => MainRedDot.BoneFieldRepoint;
 
     protected override string GetCountInfo()
diff --git a/Main/System/Settlement/BoneBattleFailWin.cs b/Main/System/Settlement/BoneBattleFailWin.cs
index 6d410d6..9dabd6f 100644
--- a/Main/System/Settlement/BoneBattleFailWin.cs
+++ b/Main/System/Settlement/BoneBattleFailWin.cs
@@ -36,7 +36,7 @@
 
     protected override void OnPreOpen()
     {
-        int funcId = BoneFieldManager.Instance.funcId;
+        int funcId = (int)FuncOpenEnum.BoneBattle;
         txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
         if (!FirstChargeManager.Instance.GetLocalFail())
         {
diff --git a/Main/System/Settlement/BoneBattleVictoryWin.cs b/Main/System/Settlement/BoneBattleVictoryWin.cs
index 765321f..2cfb115 100644
--- a/Main/System/Settlement/BoneBattleVictoryWin.cs
+++ b/Main/System/Settlement/BoneBattleVictoryWin.cs
@@ -22,7 +22,7 @@
     {
         scroller.OnRefreshCell += OnRefreshCell;
         CreateScroller();
-        int funcId = BoneFieldManager.Instance.funcId;
+        int funcId = (int)FuncOpenEnum.BoneBattle;
         txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
     }
 
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index 22d3d9f..19a0e83 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -817,6 +817,7 @@
     Official = 3,//鍐呮斂
     BeautyMM = 7,//绾㈤ 
     GoldRush = 8, //娣橀噾
+    BoneBattle = 9, //鐧介鐩堥噹
     Realm = 10, //澧冪晫 瀹樿亴
     Guild = 11,// 鍏細
     BlessLV = 12, //绁濈绛夌骇

--
Gitblit v1.8.0