From 89343a7a0909e5244a3b69c4db1294de4536243b Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期一, 15 十二月 2025 18:15:22 +0800
Subject: [PATCH] 262 幻境阁系统-客户端 新增仅适用武将解锁的头像和形象的红点移除规则

---
 Main/System/OSActivity/OSActivityManager.cs |  147 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 136 insertions(+), 11 deletions(-)

diff --git a/Main/System/OSActivity/OSActivityManager.cs b/Main/System/OSActivity/OSActivityManager.cs
index 38faf81..ea5464a 100644
--- a/Main/System/OSActivity/OSActivityManager.cs
+++ b/Main/System/OSActivity/OSActivityManager.cs
@@ -65,13 +65,11 @@
             osHeroCallGiftSortList.Add(_list[i] + 100000000);
         }
 
-        config = FuncConfigConfig.Get("OSACelebration");
-        osGalaOpenDays = int.Parse(config.Numerical1);
-        osGalaScoreAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
+        ParseOSGalaConfig();
     }
 
     // 寮�鏈嶆帓琛屾椿鍔ㄦ槸鍚﹀紑鍚�
-    public bool IsOpened(int rankType)
+    public bool IsOpened(int rankType, bool needLastDay = true)
     {
         if (!rankTypeToFuncID.ContainsKey(rankType))
         {
@@ -90,9 +88,19 @@
         }
 
         var openDays = rankOpenDays[rankType];
-        if (TimeUtility.OpenDay > openDays[1])
+        if (needLastDay)
         {
-            return false;
+            if (TimeUtility.OpenDay > openDays[1])
+            {
+                return false;
+            }
+        }
+        else
+        {
+            if (TimeUtility.OpenDay >= openDays[1])
+            {
+                return false;
+            }
         }
 
         return true;
@@ -147,6 +155,7 @@
         return a.CompareTo(b);
     }
 
+    //寮�鏈嶆嫑鍕熸绀煎寘
     public void RefreshGiftSortList()
     {
         osHeroCallGiftSortList.Sort(CmpGift);
@@ -164,11 +173,14 @@
     public void UpdateRedpoint()
     {
         osMainLevelRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None;
+        osGalaRedpoint2.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSGalaChange) ? RedPointState.Simple : RedPointState.None;
+        
         osHeroCallRedpoint.state = RedPointState.None;
+        osGalaRedpoint3.state = RedPointState.None;
 
         if (StoreModel.Instance.freeShopDict.Count == 0) return;
 
-        if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSHeroCall))
+        if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSHeroCall) && IsOpened(4, false))
         {
             var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSHeroCall];
 
@@ -179,6 +191,22 @@
                 if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
                 {
                     osHeroCallRedpoint.state = RedPointState.Simple;
+                    break;
+                }
+            }
+        }
+
+        if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSGalaGift) && IsOpenedOSGala(false))
+        {
+            var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSGalaGift];
+
+            for (int i = 0; i < shopList.Count; i++)
+            {
+                var shopID = shopList[i];
+                var config = StoreConfig.Get(shopID);
+                if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
+                {
+                    osGalaRedpoint3.state = RedPointState.Simple;
                     break;
                 }
             }
@@ -199,28 +227,125 @@
     #region 寮�鏈嶅簡鍏�
     //寮�鏈嶅簡鍏�
     public int osGalaOpenDays = 0; //鎸佺画澶╂暟
-    public Dictionary<int, int[][]> osGalaScoreAwards = new Dictionary<int, int[][]>();  // 寮�鏈嶅簡鍏哥Н鍒嗗鍔�
+    public Dictionary<int, int[][]> osGalaScoreAwards = new Dictionary<int, int[][]>();  // 寮�鏈嶅簡鍏哥Н鍒嗗鍔� 绉垎锛氬鍔�
+    public Dictionary<int, int> typeToGuideID = new Dictionary<int, int>();
+    public List<int> osGalaChangeSortList = new List<int>();    //鍏戞崲鍒楄〃锛堝晢搴�5锛�
+    public List<int> osGalaGiftSortList = new List<int>();    //寮�鏈嶅簡鍏哥ぜ鍖� 鍏呭�糏D + 100000000
 
     public int osGalaScore = 0; //褰撳墠绉垎 绱鐨勶紱娑堣�楃殑鏄揣甯�55
     public int osGalaAwardState = 0; //鎸変綅璁板綍鏄惁棰嗗彇
     public event Action OnOSGalaDataChangeEvent;
+
+    // 鍏戞崲鍟嗗簵
+    Redpoint osGalaRedpoint2 = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 2);
+    // 绀煎寘鍏嶈垂
+    Redpoint osGalaRedpoint3 = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 3);
+    // 鎬诲鍔�
+    Redpoint osGalaRedpoint4 = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 4);
+
+
     public void UpdateOSGalaData(HAB05_tagSCOSACelebrationInfo netPack)
     {
         osGalaScore = (int)netPack.PointTotal;
         osGalaAwardState = (int)netPack.PointAward;
         OnOSGalaDataChangeEvent?.Invoke();
+        UpdateGalaRedpoint();
     }
 
-    public bool IsOpenedOSGala()
+    public bool IsOpenedOSGala(bool needLastDay = true)
     {
         if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OSGala))
         {
             return false;
         }
-        //缁撴潫鍚庡欢杩熶竴澶╁叧闂睍绀�
-        return TimeUtility.OpenDay <= osGalaOpenDays;
+        if (needLastDay)
+        {
+            //缁撴潫鍚庡欢杩熶竴澶╁叧闂睍绀�
+            return TimeUtility.OpenDay <= osGalaOpenDays;
+        }
+        else
+        {
+            return TimeUtility.OpenDay < osGalaOpenDays;
+        }
     }
 
+    // 鏄惁宸查鍙栧鍔�
+    public bool IsGotAward(int index)
+    {
+        return (osGalaAwardState & (1 << index)) != 0;
+    }
 
+    // 鏄惁鍙鍙栧鍔�
+    public bool CanGetAward(int index, int score)
+    {
+        if (IsGotAward(index))
+        {
+            return false;
+        }
+
+        if (osGalaScore < score)
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    void ParseOSGalaConfig()
+    {
+        var config = FuncConfigConfig.Get("OSACelebration");
+        osGalaOpenDays = int.Parse(config.Numerical1);
+        osGalaScoreAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
+
+        config = FuncConfigConfig.Get("Achievement");
+        typeToGuideID = ConfigParse.ParseIntDict(config.Numerical1);
+
+
+        var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSGalaChange];
+        for (int i = 0; i < list.Count; i++)
+        {
+            var item = list[i];
+            osGalaChangeSortList.Add(item.shopId);
+        }
+
+        var _list1 = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSGalaGift];
+        var _list2 = RechargeManager.Instance.GetCTGIDListByType(19);
+        for (int i = 0; i < _list1.Count; i++)
+        {
+            var item = _list1[i];
+            osGalaGiftSortList.Add(item.shopId);
+        }
+        for (int i = 0; i < _list2.Count; i++)
+        {
+            osGalaGiftSortList.Add(_list2[i] + 100000000);
+        }
+    }
+
+    public void RefreshOSGalaGiftSortList()
+    {
+        osGalaGiftSortList.Sort(CmpGift);
+    }
+
+    public void RefreshOSGalaChangeSortList()
+    {
+        osGalaGiftSortList.Sort(CmpGift);
+    }
+
+    void UpdateGalaRedpoint()
+    {
+        osGalaRedpoint4.state = RedPointState.None;
+        var keys = osGalaScoreAwards.Keys.ToList();
+        keys.Sort();
+        for (int i = 0; i < keys.Count; i++)
+        {
+            var score = keys[i];
+            if (CanGetAward(i, score))
+            {
+                osGalaRedpoint4.state = RedPointState.Simple;
+                return;
+            }
+        }
+
+    }
     #endregion
 }

--
Gitblit v1.8.0