From c70f5a26bebf874828342ef69987848cbc352719 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期二, 17 三月 2026 14:33:58 +0800
Subject: [PATCH] 533 开服冲榜-客户端 新增3个榜单

---
 Main/System/OSActivity/OSHeroTrainBaseWin.cs.meta       |   11 
 Main/System/OSActivity/OSRankGiftBaseWin.cs.meta        |   11 
 Main/System/OSActivity/OSRankHeroTrainGiftWin.cs.meta   |   11 
 Main/System/GeneralConfig/DayRemind.cs                  |    8 
 Main/System/OSActivity/OSActivityBaseWin.cs             |   43 ++
 Main/System/OSActivity/OSMinggeBaseWin.cs.meta          |   11 
 Main/System/OSActivity/OSRankBeautyMMWin.cs.meta        |   11 
 Main/System/Redpoint/MainRedDot.cs                      |    3 
 Main/System/OSActivity/OSRankBeautyMMAwardCell.cs.meta  |   11 
 Main/System/OSActivity/OSRankBeautyMMGiftCell.cs        |   11 
 Main/System/OSActivity/OSRankHeroTrainAwardWin.cs.meta  |   11 
 Main/System/OSActivity/OSRankMinggeAwardCell.cs         |   10 
 Main/System/OSActivity/OSActivityBaseWin.cs.meta        |   11 
 Main/System/OSActivity/OSRankTipWin.cs                  |   98 ++++
 Main/System/OSActivity/OSRankGiftBaseWin.cs             |   48 ++
 Main/System/OSActivity/OSRankBaseWin.cs.meta            |   11 
 Main/System/OSActivity/OSRankBeautyMMGiftWin.cs         |   19 
 Main/System/OSActivity/OSRankMinggeAwardCell.cs.meta    |   11 
 Main/System/OSActivity/OSRankMinggeAwardWin.cs          |   16 
 Main/System/OSActivity/OSRankAwardBaseCell.cs.meta      |   11 
 Main/System/Store/StoreModel.cs                         |    3 
 Main/System/OSActivity/OSRankBeautyMMWin.cs             |    8 
 Main/System/OSActivity/OSRankHeroTrainAwardCell.cs      |   10 
 Main/System/OSActivity/OSMinggeBaseWin.cs               |   14 
 Main/System/OSActivity/OSRankHeroTrainGiftWin.cs        |   16 
 Main/System/BillboardRank/RankModel.cs                  |   11 
 Main/Utility/EnumHelper.cs                              |    3 
 Main/System/OSActivity/OSRankMinggeAwardWin.cs.meta     |   11 
 Main/System/OSActivity/OSActivityManager.cs             |  116 +++++
 Main/System/OSActivity/OSRankMinggeGiftWin.cs           |   16 
 Main/System/OSActivity/OSRankAwardBaseWin.cs.meta       |   11 
 Main/System/OSActivity/OSHeroTrainBaseWin.cs            |   14 
 Main/System/OSActivity/OSRankHeroTrainWin.cs            |   20 +
 Main/System/OSActivity/OSRankBaseWin.cs                 |   42 ++
 Main/System/OSActivity/OSBeautyMMBaseWin.cs.meta        |   11 
 Main/System/OSActivity/OSRankMinggeWin.cs               |   20 +
 Main/System/OSActivity/OSRankHeroTrainAwardCell.cs.meta |   11 
 Main/System/OSActivity/OSRankMinggeWin.cs.meta          |   11 
 Main/System/OSActivity/OSRankGiftBaseCell.cs.meta       |   11 
 Main/System/OSActivity/OSRankTipWin.cs.meta             |   11 
 Main/System/OSActivity/OSRankBeautyMMAwardWin.cs        |   18 
 Main/System/OSActivity/OSRankBeautyMMAwardWin.cs.meta   |   11 
 Main/System/Main/HomeWin.cs                             |   19 
 Main/System/OSActivity/OSRankBeautyMMGiftWin.cs.meta    |   11 
 Main/System/OSActivity/OSRankMinggeGiftCell.cs          |    8 
 Main/System/OSActivity/OSRankHeroTrainWin.cs.meta       |   11 
 Main/System/OSActivity/OSRankMinggeGiftCell.cs.meta     |   11 
 Main/System/OSActivity/OSRankAwardBaseWin.cs            |   56 ++
 Main/System/OSActivity/OSBeautyMMBaseWin.cs             |   15 
 Main/System/OSActivity/OSRankBeautyMMAwardCell.cs       |   12 
 Main/System/OSActivity/OSRankMinggeGiftWin.cs.meta      |   11 
 Main/System/OSActivity/OSRankHeroTrainGiftCell.cs.meta  |   11 
 Main/System/OSActivity/OSRankHeroTrainAwardWin.cs       |   16 
 Main/System/OSActivity/OSRankHeroTrainGiftCell.cs       |    8 
 Main/System/OSActivity/OSRankAwardBaseCell.cs           |   63 +++
 Main/System/OSActivity/OSRankBeautyMMGiftCell.cs.meta   |   11 
 Main/System/OSActivity/OSRankGiftBaseCell.cs            |  138 ++++++
 57 files changed, 1,175 insertions(+), 2 deletions(-)

diff --git a/Main/System/BillboardRank/RankModel.cs b/Main/System/BillboardRank/RankModel.cs
index ddd3517..982119a 100644
--- a/Main/System/BillboardRank/RankModel.cs
+++ b/Main/System/BillboardRank/RankModel.cs
@@ -356,6 +356,11 @@
                 return Language.Get("Arena15", config.ChapterID, config.LevelNum);
             case 4:
                 return cmpValue.ToString();
+            case 7:
+            case 9:
+                return Language.Get("OSActivity19", cmpValue.ToString());
+            case 8:
+                return Language.Get("L1113", cmpValue.ToString());
         }
         return string.Empty;
     }
@@ -370,6 +375,12 @@
                 return Language.Get("RankTypeName_1");
             case 4:
                 return Language.Get("OSActivity5");
+            case 7:
+                return Language.Get("OSActivity16");
+            case 8:
+                return Language.Get("OSActivity15");
+            case 9:
+                return Language.Get("OSActivity17");
         }
         return string.Empty;
     }
diff --git a/Main/System/GeneralConfig/DayRemind.cs b/Main/System/GeneralConfig/DayRemind.cs
index 66fd828..043afa4 100644
--- a/Main/System/GeneralConfig/DayRemind.cs
+++ b/Main/System/GeneralConfig/DayRemind.cs
@@ -37,6 +37,11 @@
     public const string OSMainLevel = "OSMainLevel"; // 寮�鏈嶄富绾垮叧鍗℃椿鍔ㄦ彁绀虹孩鐐�
     public const string OSGalaChange = "OSGalaChange"; // 寮�鏈嶅簡鍏稿厬鎹㈡彁绀虹孩鐐�
 
+    public const string OSHeroTrain = "OSHeroTrain";
+    public const string OSBeautyMM = "OSBeautyMM";
+    public const string OSMingge = "OSMingge";
+
+
     public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>();
 
     public bool GetDayRemind(string _remindKey)
@@ -79,6 +84,9 @@
         SetDayRemind(DJQTip);
         SetDayRemind(OSMainLevel);
         SetDayRemind(OSGalaChange);
+        SetDayRemind(OSHeroTrain);
+        SetDayRemind(OSBeautyMM);
+        SetDayRemind(OSMingge);
     }
 
     public void SetDayRemind(string _key)
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index 5fcfc17..e8fcdae 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -67,7 +67,10 @@
     [SerializeField] Button osMainLevelBtn;
     [SerializeField] Button osHeroCallBtn;
     [SerializeField] Button osGalaBtn;
+    [SerializeField] Button osHeroTrainBtn;
+    [SerializeField] Button osBeautyMMBtn;
     [SerializeField] TimingGiftCell timingGiftCell;
+    [SerializeField] Button osMinggeBtn;
     [SerializeField] TimeRushCell timeRushCell;
     [SerializeField] HeroDebutCell heroDebutCell;
 
@@ -212,7 +215,18 @@
         {
             UIManager.Instance.OpenWindow<OSGalaBaseWin>();
         });
-
+        osBeautyMMBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<OSBeautyMMBaseWin>();
+        });
+        osHeroTrainBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<OSHeroTrainBaseWin>();
+        });
+        osMinggeBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<OSMinggeBaseWin>();
+        });
         DailySpecialsBtns.AddListener(() =>
         {
             UIManager.Instance.OpenWindow<DailySpecialsBaseWin>();
@@ -874,6 +888,9 @@
     {
         osMainLevelBtn.SetActive(OSActivityManager.Instance.IsOpened(3));
         osHeroCallBtn.SetActive(OSActivityManager.Instance.IsOpened(4));
+        osHeroTrainBtn.SetActive(OSActivityManager.Instance.IsOpened(7));
+        osBeautyMMBtn.SetActive(OSActivityManager.Instance.IsOpened(8));
+        osMinggeBtn.SetActive(OSActivityManager.Instance.IsOpened(9));
         osGalaBtn.SetActive(OSActivityManager.Instance.IsOpenedOSGala());
     }
 
diff --git a/Main/System/OSActivity/OSActivityBaseWin.cs b/Main/System/OSActivity/OSActivityBaseWin.cs
new file mode 100644
index 0000000..0a841be
--- /dev/null
+++ b/Main/System/OSActivity/OSActivityBaseWin.cs
@@ -0,0 +1,43 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+public abstract class OSActivityBaseWin : FunctionsBaseWin
+{
+    [SerializeField] protected Button closBtn;
+
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+        if (closBtn != null)
+        {
+            closBtn.AddListener(CloseWindow);
+        }
+    }
+
+    // 鐢卞瓙绫诲疄鐜帮細褰撳墠娲诲姩鐨� RankType 
+    protected abstract int GetRankType();
+    
+    // 鐢卞瓙绫诲疄鐜帮細瀹炰緥鍖栧搴旂殑涓変釜瀛愮獥鍙�
+    protected abstract UIBase GetRankWin();
+    protected abstract UIBase GetAwardWin();
+    protected abstract UIBase GetGiftWin();
+
+    protected override void OpenSubUIByTabIndex()
+    {
+        switch (functionOrder)
+        {
+            case 0:
+                RankModel.Instance.ResetQueryParam();
+                RankModel.Instance.QueryRankByPage(GetRankType(), watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
+                currentSubUI = GetRankWin();
+                break;
+            case 1:
+                currentSubUI = GetAwardWin();
+                break;
+            case 2:
+                // 濡傛灉鍚庣画鏈夋椿鍔ㄦ病鏈夌ぜ鍖呴〉绛撅紝鍙渶鍦ㄥ瓙绫婚噷杩斿洖 null 鎴栦笉璋冪敤鍗冲彲
+                currentSubUI = GetGiftWin();
+                break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSActivityBaseWin.cs.meta b/Main/System/OSActivity/OSActivityBaseWin.cs.meta
new file mode 100644
index 0000000..55cf809
--- /dev/null
+++ b/Main/System/OSActivity/OSActivityBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 39e79ce497558694689712020f566c86
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSActivityManager.cs b/Main/System/OSActivity/OSActivityManager.cs
index ea5464a..c2ca0a3 100644
--- a/Main/System/OSActivity/OSActivityManager.cs
+++ b/Main/System/OSActivity/OSActivityManager.cs
@@ -10,14 +10,23 @@
     Dictionary<int, int[]> rankOpenDays = new Dictionary<int, int[]>();  //鎺掕姒滅被鍨嬶細銆愬紑濮嬪紑鏈嶅ぉ, 缁撴潫寮�鏈嶅ぉ銆�
     public Dictionary<int, int[][]> mainLevelRankAwards = new Dictionary<int, int[][]>();  //涓荤嚎鍏冲崱鍚嶆锛氬鍔�
     public Dictionary<int, int[][]> heroCallRankAwards = new Dictionary<int, int[][]>();  //姝﹀皢鎷涘嫙鍚嶆锛氬鍔�
+    public Dictionary<int, int[][]> beautyMMRankAwards = new Dictionary<int, int[][]>();  //绾㈤鍐叉鍚嶆锛氬鍔�
+    public Dictionary<int, int[][]> heroTrainRankAwards = new Dictionary<int, int[][]>();  //姝﹀皢鍐叉鍚嶆锛氬鍔�
+    public Dictionary<int, int[][]> minggeRankAwards = new Dictionary<int, int[][]>();  //鍛芥牸鍐叉锛氬鍔�
 
     public List<int> osHeroCallGiftSortList = new List<int>();    //寮�鏈嶆嫑鍕熺ぜ鍖� 鍏呭�糏D + 100000000
+    public List<int> osBeautyMMGiftSortList = new List<int>();    //绾㈤鍐叉绀煎寘 鍏呭�糏D + 100000000
+    public List<int> osHeroTrainGiftSortList = new List<int>();    //姝﹀皢鍐叉绀煎寘 鍏呭�糏D + 100000000
+    public List<int> osMinggeGiftSortList = new List<int>();    //鍛芥牸鍐叉绀煎寘 鍏呭�糏D + 100000000
 
     //寮�鏈嶆瀵瑰簲鐨勫姛鑳絀D
     Dictionary<int, int> rankTypeToFuncID = new Dictionary<int, int>()
     {
         {3, 45},
         {4, 46},
+        {7, 59},
+        {8, 60},
+        {9, 61},
     };
 
 
@@ -51,6 +60,11 @@
         rankOpenDays = ConfigParse.ParseIntArrayDict(config.Numerical1);
         mainLevelRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
         heroCallRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical3);
+        beautyMMRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical4);
+
+        config = FuncConfigConfig.Get("OSABillboardTrain");
+        heroTrainRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical3);
+        minggeRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical5);
 
         var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSHeroCall];
         var _list = RechargeManager.Instance.GetCTGIDListByType(18);
@@ -63,6 +77,45 @@
         for (int i = 0; i < _list.Count; i++)
         {
             osHeroCallGiftSortList.Add(_list[i] + 100000000);
+        }
+
+        list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSBeautyMM];
+        _list = RechargeManager.Instance.GetCTGIDListByType(22);
+
+        for (int i = 0; i < list.Count; i++)
+        {
+            var item = list[i];
+            osBeautyMMGiftSortList.Add(item.shopId);
+        }
+        for (int i = 0; i < _list.Count; i++)
+        {
+            osBeautyMMGiftSortList.Add(_list[i] + 100000000);
+        }
+
+        list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSHeroTrain];
+        _list = RechargeManager.Instance.GetCTGIDListByType(23);
+
+        for (int i = 0; i < list.Count; i++)
+        {
+            var item = list[i];
+            osHeroTrainGiftSortList.Add(item.shopId);
+        }
+        for (int i = 0; i < _list.Count; i++)
+        {
+            osHeroTrainGiftSortList.Add(_list[i] + 100000000);
+        }
+
+        list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSMingge];
+        _list = RechargeManager.Instance.GetCTGIDListByType(24);
+
+        for (int i = 0; i < list.Count; i++)
+        {
+            var item = list[i];
+            osMinggeGiftSortList.Add(item.shopId);
+        }
+        for (int i = 0; i < _list.Count; i++)
+        {
+            osMinggeGiftSortList.Add(_list[i] + 100000000);
         }
 
         ParseOSGalaConfig();
@@ -159,6 +212,9 @@
     public void RefreshGiftSortList()
     {
         osHeroCallGiftSortList.Sort(CmpGift);
+        osBeautyMMGiftSortList.Sort(CmpGift);
+        osHeroTrainGiftSortList.Sort(CmpGift);
+        osMinggeGiftSortList.Sort(CmpGift);
     }
 
     void RefreshStore()
@@ -169,14 +225,23 @@
 
     Redpoint osMainLevelRedpoint = new Redpoint(MainRedDot.RedPoint_OSMainLevel);
     Redpoint osHeroCallRedpoint = new Redpoint(MainRedDot.RedPoint_OSHeroCard);
+    Redpoint osHeroTrainRedpoint = new Redpoint(MainRedDot.RedPoint_OSHeroTrain);
+    Redpoint osBeautyMMRedpoint = new Redpoint(MainRedDot.RedPoint_OSBeautyMM);
+    Redpoint osMinggeRedpoint = new Redpoint(MainRedDot.RedPoint_OSMingge);
 
     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;
-        
+        osHeroTrainRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None;
+        osBeautyMMRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None;
+        osMinggeRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None;
+
         osHeroCallRedpoint.state = RedPointState.None;
         osGalaRedpoint3.state = RedPointState.None;
+        osHeroTrainRedpoint.state = RedPointState.None;
+        osBeautyMMRedpoint.state = RedPointState.None;
+        osMinggeRedpoint.state = RedPointState.None;
 
         if (StoreModel.Instance.freeShopDict.Count == 0) return;
 
@@ -211,6 +276,52 @@
                 }
             }
         }
+
+        if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSHeroTrain) && IsOpened(7, false))
+        {
+            var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSHeroTrain];
+            for (int i = 0; i < shopList.Count; i++)
+            {
+                var shopID = shopList[i];
+                var config = StoreConfig.Get(shopID);
+                if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
+                {
+                    osHeroTrainRedpoint.state = RedPointState.Simple;
+                    break;
+                }
+            }
+        }
+
+        if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSBeautyMM) && IsOpened(8, false))
+        {
+            var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSBeautyMM];
+            for (int i = 0; i < shopList.Count; i++)
+            {
+                var shopID = shopList[i];
+                var config = StoreConfig.Get(shopID);
+                if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
+                {
+                    osBeautyMMRedpoint.state = RedPointState.Simple;
+                    break;
+                }
+            }
+        }
+
+
+        if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSMingge) && IsOpened(9, false))
+        {
+            var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSMingge];
+            for (int i = 0; i < shopList.Count; i++)
+            {
+                var shopID = shopList[i];
+                var config = StoreConfig.Get(shopID);
+                if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
+                {
+                    osMinggeRedpoint.state = RedPointState.Simple;
+                    break;
+                }
+            }
+        }
     }
 
     private void FuncStateChange(int funcId)
@@ -219,6 +330,9 @@
         {
             case FuncOpenEnum.OSMainLevl:
             case FuncOpenEnum.OSHeroCall:
+            case FuncOpenEnum.OSHeroTrain:
+            case FuncOpenEnum.OSBeautyMM:
+            case FuncOpenEnum.OSMingge:
                 UpdateRedpoint();
                 break;
         }
diff --git a/Main/System/OSActivity/OSBeautyMMBaseWin.cs b/Main/System/OSActivity/OSBeautyMMBaseWin.cs
new file mode 100644
index 0000000..37f7d25
--- /dev/null
+++ b/Main/System/OSActivity/OSBeautyMMBaseWin.cs
@@ -0,0 +1,15 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+
+// 寮�鏈嶆椿鍔�-绾㈤鍐插埡娲诲姩
+public class OSBeautyMMBaseWin : OSActivityBaseWin
+{
+    // 绾㈤鍐叉瀵瑰簲鐨� RankType 涓� 8
+    protected override int GetRankType() => 8;
+
+    protected override UIBase GetRankWin() => UIManager.Instance.OpenWindow<OSRankBeautyMMWin>(8);
+    
+    protected override UIBase GetAwardWin() => UIManager.Instance.OpenWindow<OSRankBeautyMMAwardWin>();
+    
+    protected override UIBase GetGiftWin() => UIManager.Instance.OpenWindow<OSRankBeautyMMGiftWin>();
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSBeautyMMBaseWin.cs.meta b/Main/System/OSActivity/OSBeautyMMBaseWin.cs.meta
new file mode 100644
index 0000000..f8dcf9a
--- /dev/null
+++ b/Main/System/OSActivity/OSBeautyMMBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5a76a8ddc6f4ac048970693981c9e681
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSHeroTrainBaseWin.cs b/Main/System/OSActivity/OSHeroTrainBaseWin.cs
new file mode 100644
index 0000000..bbdc038
--- /dev/null
+++ b/Main/System/OSActivity/OSHeroTrainBaseWin.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+// 寮�鏈嶆椿鍔�-姝﹀皢鍐叉涓荤晫闈�
+public class OSHeroTrainBaseWin : OSActivityBaseWin
+{
+    protected override int GetRankType() => 7;
+
+    protected override UIBase GetRankWin() => UIManager.Instance.OpenWindow<OSRankHeroTrainWin>(7);
+    
+    protected override UIBase GetAwardWin() => UIManager.Instance.OpenWindow<OSRankHeroTrainAwardWin>();
+    
+    protected override UIBase GetGiftWin() => UIManager.Instance.OpenWindow<OSRankHeroTrainGiftWin>();
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSHeroTrainBaseWin.cs.meta b/Main/System/OSActivity/OSHeroTrainBaseWin.cs.meta
new file mode 100644
index 0000000..e7da08f
--- /dev/null
+++ b/Main/System/OSActivity/OSHeroTrainBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 62c2161f6d4221e48aa134a1916f92e4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSMinggeBaseWin.cs b/Main/System/OSActivity/OSMinggeBaseWin.cs
new file mode 100644
index 0000000..519fa70
--- /dev/null
+++ b/Main/System/OSActivity/OSMinggeBaseWin.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+// 寮�鏈嶆椿鍔�-鍛芥牸鍐叉涓荤晫闈�
+public class OSMinggeBaseWin : OSActivityBaseWin
+{
+    protected override int GetRankType() => 9;
+
+    protected override UIBase GetRankWin() => UIManager.Instance.OpenWindow<OSRankMinggeWin>(9);
+    
+    protected override UIBase GetAwardWin() => UIManager.Instance.OpenWindow<OSRankMinggeAwardWin>();
+    
+    protected override UIBase GetGiftWin() => UIManager.Instance.OpenWindow<OSRankMinggeGiftWin>();
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSMinggeBaseWin.cs.meta b/Main/System/OSActivity/OSMinggeBaseWin.cs.meta
new file mode 100644
index 0000000..a402f63
--- /dev/null
+++ b/Main/System/OSActivity/OSMinggeBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d9768976d78a97e41b67c00ea082085c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankAwardBaseCell.cs b/Main/System/OSActivity/OSRankAwardBaseCell.cs
new file mode 100644
index 0000000..11b4272
--- /dev/null
+++ b/Main/System/OSActivity/OSRankAwardBaseCell.cs
@@ -0,0 +1,63 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+public abstract class OSRankAwardBaseCell : CellView
+{
+    [SerializeField] protected Text rankText;
+    [SerializeField] protected Image rankImg;
+    [SerializeField] protected ItemCell[] itemCells;
+
+    // 鐢卞瓙绫绘彁渚涘綋鍓嶇晫闈㈠搴旂殑濂栧姳瀛楀吀鏁版嵁
+    protected abstract Dictionary<int, int[][]> GetRankAwards();
+
+    public void Display(int index)
+    {
+        var rankAwards = GetRankAwards();
+        var rank = index + 1;
+        
+        if (index < 3)
+        {
+            rankImg.SetActive(true);
+            rankText.SetActive(false);
+            rankImg.SetSprite($"Rank{index + 1}");
+        }
+        else
+        {
+            rankImg.SetActive(false);
+            rankText.SetActive(true);
+            var keys = rankAwards.Keys.ToList();
+            keys.Sort();
+            var startRank = keys[index - 1] + 1;
+            var endRank = keys[index];
+            rank = endRank;
+            
+            if (startRank == endRank)
+            {
+                rankText.text = startRank.ToString();
+            }
+            else
+            {
+                rankText.text = startRank + "-" + endRank;
+            }
+        }
+
+        var award = rankAwards[rank];
+        for (int i = 0; i < itemCells.Length; i++)
+        {
+            var itemCell = itemCells[i];
+            if (i < award.Length)
+            {
+                itemCell.SetActive(true);
+                int itemID = award[i][0];
+                itemCell.Init(new ItemCellModel(itemID, true, award[i][1]));
+                itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
+            }
+            else
+            {
+                itemCell.SetActive(false);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankAwardBaseCell.cs.meta b/Main/System/OSActivity/OSRankAwardBaseCell.cs.meta
new file mode 100644
index 0000000..b6e93e1
--- /dev/null
+++ b/Main/System/OSActivity/OSRankAwardBaseCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5c40df973d5ace349ade9c111bb96722
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankAwardBaseWin.cs b/Main/System/OSActivity/OSRankAwardBaseWin.cs
new file mode 100644
index 0000000..d535189
--- /dev/null
+++ b/Main/System/OSActivity/OSRankAwardBaseWin.cs
@@ -0,0 +1,56 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public abstract class OSRankAwardBaseWin : UIBase
+{
+    [SerializeField] protected ScrollerController scrollerController;
+    [SerializeField] protected Text myRankText;
+    [SerializeField] protected Text myRankValueText;
+
+    protected override void OnPreOpen()
+    {
+        scrollerController.OnRefreshCell += OnRefreshCell;
+        CreateScroller();
+        DisplayMyRank(GetRankType());
+    }
+
+    protected override void OnPreClose()
+    {
+        scrollerController.OnRefreshCell -= OnRefreshCell;
+    }
+
+    // 鐢卞瓙绫诲疄鐜帮細褰撳墠鐣岄潰鐨勬帓鍚嶇被鍨� (渚嬪 4 鏄嫑鍕熸, 8 鏄孩棰滄)
+    protected abstract int GetRankType();
+    // 鐢卞瓙绫诲疄鐜帮細褰撳墠鐣岄潰鐨勫鍔� Keys 闆嗗悎
+    protected abstract ICollection<int> GetAwardKeys();
+    // 鐢卞瓙绫诲疄鐜帮細缁戝畾瀵瑰簲鐨� Cell
+    protected abstract void OnRefreshCell(ScrollerDataType type, CellView cell);
+
+    protected void CreateScroller()
+    {
+        var keys = GetAwardKeys();
+        scrollerController.Refresh();
+        int count = keys == null ? 0 : keys.Count;
+        for (int i = 0; i < count; i++)
+        {
+            scrollerController.AddCell(ScrollerDataType.Header, i);
+        }
+        scrollerController.Restart();
+    }
+
+    public void DisplayMyRank(int rankType)
+    {
+        RankData rankData = RankModel.Instance.GetMyRank(rankType);
+        if (rankData == null)
+        {
+            myRankText.text = Language.Get("L1045");
+            myRankValueText.text = "";
+            return;
+        }
+
+        int rank = rankData.rank;
+        myRankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue);
+        myRankText.text = Language.Get("L1126") + Language.Get("L1096") + rank.ToString();
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankAwardBaseWin.cs.meta b/Main/System/OSActivity/OSRankAwardBaseWin.cs.meta
new file mode 100644
index 0000000..567e6e0
--- /dev/null
+++ b/Main/System/OSActivity/OSRankAwardBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 01d872416a4fa8b45a660c56ed4c759f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankBaseWin.cs b/Main/System/OSActivity/OSRankBaseWin.cs
new file mode 100644
index 0000000..9637112
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBaseWin.cs
@@ -0,0 +1,42 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+public abstract class OSRankBaseWin : PlayerRankWin
+{
+    [SerializeField] protected Text timeText;
+    [SerializeField] protected Text overTimeText;
+
+    protected override void OnPreOpen()
+    {
+        base.OnPreOpen();
+        GlobalTimeEvent.Instance.secondEvent += OnSecond;
+        ShowTime();
+    }
+
+    protected void ShowTime()
+    {
+        var seconds = OSActivityManager.Instance.GetEndTime(rankType);
+        if (seconds > 0)
+        {
+            timeText.SetActive(true);
+            overTimeText.SetActive(false);
+            timeText.text = TimeUtility.SecondsToShortDHMS(seconds);
+        }
+        else
+        {
+            timeText.SetActive(false);
+            overTimeText.SetActive(true);
+        }
+    }
+
+    protected override void OnPreClose()
+    {
+        base.OnPreClose();
+        GlobalTimeEvent.Instance.secondEvent -= OnSecond;
+    }
+
+    protected void OnSecond()
+    {
+        ShowTime();
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankBaseWin.cs.meta b/Main/System/OSActivity/OSRankBaseWin.cs.meta
new file mode 100644
index 0000000..120d38e
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3c869a53bb8b01141823913926a5b2b9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankBeautyMMAwardCell.cs b/Main/System/OSActivity/OSRankBeautyMMAwardCell.cs
new file mode 100644
index 0000000..0f03e2f
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMAwardCell.cs
@@ -0,0 +1,12 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class OSRankBeautyMMAwardCell : OSRankAwardBaseCell
+{
+    // 杩斿洖绾㈤鍐叉涓撳睘鐨勫鍔卞瓧鍏革紝渚涘熀绫绘覆鏌�
+    protected override Dictionary<int, int[][]> GetRankAwards()
+    {
+        return OSActivityManager.Instance.beautyMMRankAwards;
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankBeautyMMAwardCell.cs.meta b/Main/System/OSActivity/OSRankBeautyMMAwardCell.cs.meta
new file mode 100644
index 0000000..4a3cecd
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMAwardCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 647885ec6817f1342867bca550f5f5dc
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankBeautyMMAwardWin.cs b/Main/System/OSActivity/OSRankBeautyMMAwardWin.cs
new file mode 100644
index 0000000..b86009a
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMAwardWin.cs
@@ -0,0 +1,18 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+// 寮�鏈嶆椿鍔�-绾㈤鍐叉鎺掕濂栧姳
+public class OSRankBeautyMMAwardWin : OSRankAwardBaseWin
+{
+    protected override int GetRankType() => 8; // 8瀵瑰簲绾㈤鍐叉
+    
+    // 鎻愪緵绾㈤姒滅殑濂栧姳瀛楀吀 Key
+    protected override ICollection<int> GetAwardKeys() => OSActivityManager.Instance.beautyMMRankAwards.Keys;
+
+    protected override void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell.GetComponent<OSRankBeautyMMAwardCell>();
+        _cell.Display(cell.index);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankBeautyMMAwardWin.cs.meta b/Main/System/OSActivity/OSRankBeautyMMAwardWin.cs.meta
new file mode 100644
index 0000000..87ea82f
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMAwardWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e232ad2734808eb408390dd9059e49c9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankBeautyMMGiftCell.cs b/Main/System/OSActivity/OSRankBeautyMMGiftCell.cs
new file mode 100644
index 0000000..07cdc8c
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMGiftCell.cs
@@ -0,0 +1,11 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+
+public class OSRankBeautyMMGiftCell : OSRankGiftBaseCell
+{
+    // 浠� Manager 鑾峰彇褰撳墠 Index 瀵瑰簲鐨勭孩棰滅ぜ鍖� ID
+    protected override int GetGiftId(int index) => OSActivityManager.Instance.osBeautyMMGiftSortList[index];
+    
+    // 渚涘熀绫婚獙璇佹椿鍔ㄦ槸鍚﹁繃鏈熸椂浣跨敤锛岀孩棰滃啿姒滃搴旂殑 RankType 涓� 8
+    protected override int GetActivityFuncId() => 8; 
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankBeautyMMGiftCell.cs.meta b/Main/System/OSActivity/OSRankBeautyMMGiftCell.cs.meta
new file mode 100644
index 0000000..f2b80e6
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMGiftCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f90bbd7114f1139429d631eed6cab562
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankBeautyMMGiftWin.cs b/Main/System/OSActivity/OSRankBeautyMMGiftWin.cs
new file mode 100644
index 0000000..b5adebb
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMGiftWin.cs
@@ -0,0 +1,19 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+// 寮�鏈嶆椿鍔�-绾㈤鍐插埡绀煎寘
+public class OSRankBeautyMMGiftWin : OSRankGiftBaseWin
+{
+    // 璋冪敤 Manager 鍒锋柊绀煎寘鎺掑簭
+    protected override void RefreshManagerSortList() => OSActivityManager.Instance.RefreshGiftSortList();
+    
+    // 鎻愪緵绾㈤鍐插埡涓撶敤鐨勭ぜ鍖呭垪琛�
+    protected override IList<int> GetGiftSortList() => OSActivityManager.Instance.osBeautyMMGiftSortList;
+
+    protected override void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as OSRankBeautyMMGiftCell;
+        _cell.Display(cell.index);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankBeautyMMGiftWin.cs.meta b/Main/System/OSActivity/OSRankBeautyMMGiftWin.cs.meta
new file mode 100644
index 0000000..c9331f5
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMGiftWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d22a6513bbd196d41bffe0cfce5efd6c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankBeautyMMWin.cs b/Main/System/OSActivity/OSRankBeautyMMWin.cs
new file mode 100644
index 0000000..d05c521
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMWin.cs
@@ -0,0 +1,8 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+
+// 寮�鏈嶆椿鍔�-绾㈤鍐插埡鎺掕姒�
+public class OSRankBeautyMMWin : OSRankBaseWin
+{
+
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankBeautyMMWin.cs.meta b/Main/System/OSActivity/OSRankBeautyMMWin.cs.meta
new file mode 100644
index 0000000..7d0ab85
--- /dev/null
+++ b/Main/System/OSActivity/OSRankBeautyMMWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 482be961781f5cc44959db7fa28e59cf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankGiftBaseCell.cs b/Main/System/OSActivity/OSRankGiftBaseCell.cs
new file mode 100644
index 0000000..ac6fe6f
--- /dev/null
+++ b/Main/System/OSActivity/OSRankGiftBaseCell.cs
@@ -0,0 +1,138 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+public abstract class OSRankGiftBaseCell : CellView
+{
+    [SerializeField] protected Text nameText;
+    [SerializeField] protected ItemCell[] itemCells;
+    [SerializeField] protected Button buyBtn;
+    [SerializeField] protected Text moneyText;
+    [SerializeField] protected Image moneyIcon;
+    [SerializeField] protected Transform saleOutRect;
+    [SerializeField] protected Image redImg;
+    [SerializeField] protected Text buyLimitText;
+    [SerializeField] protected Image maskImg;
+
+    // 鐢卞瓙绫诲疄鐜帮細鑾峰彇绀煎寘ID
+    protected abstract int GetGiftId(int index);
+    // 鐢卞瓙绫诲疄鐜帮細鑾峰彇楠岃瘉娲诲姩鏄惁缁撴潫鎵�闇�鐨勬椿鍔‵uncID
+    protected abstract int GetActivityFuncId();
+
+    public void Display(int index)
+    {
+        var id = GetGiftId(index);
+        if (id > 100000000)
+        {
+            // 鍏呭�肩ぜ鍖�
+            id -= 100000000;
+            var ctgConfig = CTGConfig.Get(id);
+            nameText.text = ctgConfig.Title;
+            for (int i = 0; i < itemCells.Length; i++)
+            {
+                var itemCell = itemCells[i];
+                if (i < ctgConfig.GainItemList.Length)
+                {
+                    itemCell.SetActive(true);
+                    int itemID = ctgConfig.GainItemList[i][0];
+                    itemCell.Init(new ItemCellModel(itemID, true, ctgConfig.GainItemList[i][1]));
+                    itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
+                }
+                else
+                {
+                    itemCell.SetActive(false);
+                }
+            }
+            
+            RechargeManager.Instance.TryGetRechargeCount(id, out var rechargeCount);
+            var limitCnt = ctgConfig.DailyBuyCount;
+            if (rechargeCount.todayCount < limitCnt)
+            {
+                saleOutRect.SetActive(false);
+                maskImg.SetActive(false);
+                buyBtn.SetActive(true);
+                buyBtn.SetListener(() =>
+                {
+                    if (!OSActivityManager.Instance.IsOpened(GetActivityFuncId(), false))
+                    {
+                        SysNotifyMgr.Instance.ShowTip("ActivityOver");
+                        return;
+                    }
+                    RechargeManager.Instance.CTG(id);
+                });
+
+                RechargeManager.Instance.TryGetOrderInfo(id, out var orderInfo);
+
+                moneyText.text = Language.Get("PayMoneyNum", UIHelper.GetMoneyFormat(orderInfo.PayRMBNumOnSale));
+                moneyIcon.SetActive(false);
+            }
+            else
+            {
+                saleOutRect.SetActive(true);
+                maskImg.SetActive(true);
+                buyBtn.SetActive(false);
+            }
+            buyLimitText.text = Language.Get("storename6", limitCnt - rechargeCount.todayCount, limitCnt);
+            redImg.SetActive(false);
+        }
+        else
+        {
+            // 鍟嗗簵鐗╁搧
+            var storeConfig = StoreConfig.Get(id);
+            nameText.text = storeConfig.Name;
+            var awards = StoreModel.Instance.GetShopItemlistEx(storeConfig);
+            for (int i = 0; i < itemCells.Length; i++)
+            {
+                var itemCell = itemCells[i];
+                if (i < awards.Count)
+                {
+                    itemCell.SetActive(true);
+                    int itemID = awards[i][0];
+                    itemCell.Init(new ItemCellModel(itemID, true, awards[i][1]));
+                    itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
+                }
+                else
+                {
+                    itemCell.SetActive(false);
+                }
+            }
+
+            var state = StoreModel.Instance.GetShopIDState(id);
+            if (state == 1)
+            {
+                saleOutRect.SetActive(true);
+                maskImg.SetActive(true);
+                buyBtn.SetActive(false);
+                redImg.SetActive(false);
+            }
+            else
+            {
+                saleOutRect.SetActive(false);
+                maskImg.SetActive(false);
+                buyBtn.SetActive(true);
+                buyBtn.SetListener(() =>
+                {
+                    if (!OSActivityManager.Instance.IsOpened(GetActivityFuncId(), false))
+                    {
+                        SysNotifyMgr.Instance.ShowTip("ActivityOver");
+                        return;
+                    }
+
+                    StoreModel.Instance.SendBuyShopItemWithPopCheck(storeConfig, 1);
+                });
+                moneyText.text = storeConfig.MoneyNum == 0 ? Language.Get("L1127") : storeConfig.MoneyNum.ToString();
+                moneyIcon.SetActive(storeConfig.MoneyNum != 0);
+                if (storeConfig.MoneyType <= 0)
+                {
+                    moneyIcon.SetItemSprite(storeConfig.CostItemID);
+                }
+                else
+                {
+                    moneyIcon.SetIconWithMoneyType(storeConfig.MoneyType);
+                }
+                redImg.SetActive(storeConfig.MoneyNum == 0);
+            }   
+            var buyCnt = StoreModel.Instance.GetShopLimitBuyCount(id);
+            buyLimitText.text = Language.Get("storename6", storeConfig.LimitCnt - buyCnt, storeConfig.LimitCnt);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankGiftBaseCell.cs.meta b/Main/System/OSActivity/OSRankGiftBaseCell.cs.meta
new file mode 100644
index 0000000..163e33d
--- /dev/null
+++ b/Main/System/OSActivity/OSRankGiftBaseCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8fbb7021663b5294594aac0a985165da
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankGiftBaseWin.cs b/Main/System/OSActivity/OSRankGiftBaseWin.cs
new file mode 100644
index 0000000..657ea67
--- /dev/null
+++ b/Main/System/OSActivity/OSRankGiftBaseWin.cs
@@ -0,0 +1,48 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public abstract class OSRankGiftBaseWin : UIBase
+{
+    [SerializeField] protected ScrollerController scrollerController;
+
+    protected override void OnPreOpen()
+    {
+        scrollerController.OnRefreshCell += OnRefreshCell;
+        StoreModel.Instance.RefreshBuyShopLimitEvent += RefreshStore;
+        RechargeManager.Instance.rechargeCountEvent += OnRechargeCountEvent;
+        RefreshManagerSortList();
+        Display();
+    }
+
+    protected override void OnPreClose()
+    {
+        scrollerController.OnRefreshCell -= OnRefreshCell;
+        StoreModel.Instance.RefreshBuyShopLimitEvent -= RefreshStore;
+        RechargeManager.Instance.rechargeCountEvent -= OnRechargeCountEvent;
+    }
+
+    protected abstract void RefreshManagerSortList();
+    protected abstract IList<int> GetGiftSortList();
+    protected abstract void OnRefreshCell(ScrollerDataType type, CellView cell);
+
+    protected void Display()
+    {
+        scrollerController.Refresh();
+        var list = GetGiftSortList();
+        for (int i = 0; i < list.Count; i++)
+        {
+            scrollerController.AddCell(ScrollerDataType.Header, i);
+        }
+        scrollerController.Restart();
+    }
+
+    protected void RefreshStore()
+    {
+        scrollerController.m_Scorller.RefreshActiveCellViews();
+    }
+
+    protected void OnRechargeCountEvent(int id)
+    {
+        scrollerController.m_Scorller.RefreshActiveCellViews();
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankGiftBaseWin.cs.meta b/Main/System/OSActivity/OSRankGiftBaseWin.cs.meta
new file mode 100644
index 0000000..7e1d7f3
--- /dev/null
+++ b/Main/System/OSActivity/OSRankGiftBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 86879ba6d3ff65a41b612365b69eae6e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroTrainAwardCell.cs b/Main/System/OSActivity/OSRankHeroTrainAwardCell.cs
new file mode 100644
index 0000000..a8f5d7d
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainAwardCell.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class OSRankHeroTrainAwardCell : OSRankAwardBaseCell
+{
+    protected override Dictionary<int, int[][]> GetRankAwards()
+    {
+        return OSActivityManager.Instance.heroTrainRankAwards;
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankHeroTrainAwardCell.cs.meta b/Main/System/OSActivity/OSRankHeroTrainAwardCell.cs.meta
new file mode 100644
index 0000000..65b4d5b
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainAwardCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5cc407297dbf0a049bc7572140a7fc37
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroTrainAwardWin.cs b/Main/System/OSActivity/OSRankHeroTrainAwardWin.cs
new file mode 100644
index 0000000..a04f696
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainAwardWin.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+// 寮�鏈嶆椿鍔�-姝﹀皢鍐叉 鎺掕濂栧姳
+public class OSRankHeroTrainAwardWin : OSRankAwardBaseWin
+{
+    protected override int GetRankType() => 7; 
+    
+    protected override ICollection<int> GetAwardKeys() => OSActivityManager.Instance.heroTrainRankAwards.Keys;
+
+    protected override void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell.GetComponent<OSRankHeroTrainAwardCell>();
+        _cell.Display(cell.index);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankHeroTrainAwardWin.cs.meta b/Main/System/OSActivity/OSRankHeroTrainAwardWin.cs.meta
new file mode 100644
index 0000000..ccf7ac2
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainAwardWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5d0f7383e172ba1479bd29fa004f952f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroTrainGiftCell.cs b/Main/System/OSActivity/OSRankHeroTrainGiftCell.cs
new file mode 100644
index 0000000..cb5f6cb
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainGiftCell.cs
@@ -0,0 +1,8 @@
+using UnityEngine;
+
+public class OSRankHeroTrainGiftCell : OSRankGiftBaseCell
+{
+    protected override int GetGiftId(int index) => OSActivityManager.Instance.osHeroTrainGiftSortList[index];
+    
+    protected override int GetActivityFuncId() => 7; 
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankHeroTrainGiftCell.cs.meta b/Main/System/OSActivity/OSRankHeroTrainGiftCell.cs.meta
new file mode 100644
index 0000000..97e4bc9
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainGiftCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 38e95d017835dd648afc115072b85c31
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroTrainGiftWin.cs b/Main/System/OSActivity/OSRankHeroTrainGiftWin.cs
new file mode 100644
index 0000000..527e51c
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainGiftWin.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+// 寮�鏈嶆椿鍔�-姝﹀皢鍐叉 绀煎寘鐣岄潰
+public class OSRankHeroTrainGiftWin : OSRankGiftBaseWin
+{
+    protected override void RefreshManagerSortList() => OSActivityManager.Instance.RefreshGiftSortList();
+    
+    protected override IList<int> GetGiftSortList() => OSActivityManager.Instance.osHeroTrainGiftSortList;
+
+    protected override void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as OSRankHeroTrainGiftCell;
+        _cell.Display(cell.index);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankHeroTrainGiftWin.cs.meta b/Main/System/OSActivity/OSRankHeroTrainGiftWin.cs.meta
new file mode 100644
index 0000000..370e1be
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainGiftWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 21d442383c4ea6846bca35096f7d38b5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroTrainWin.cs b/Main/System/OSActivity/OSRankHeroTrainWin.cs
new file mode 100644
index 0000000..893330f
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainWin.cs
@@ -0,0 +1,20 @@
+using UnityEngine;
+
+// 寮�鏈嶆椿鍔�-姝﹀皢鍐叉 鎺掕姒滅晫闈�
+public class OSRankHeroTrainWin : OSRankBaseWin
+{
+    [SerializeField] ButtonEx rule;
+    [SerializeField] TextEx title;
+
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+        rule.AddListener(() =>
+        {
+            OSRankTipWin.infoTextKey = "OSActivityHeroTrainRankTip";
+            OSRankTipWin.isDownShow = true;
+            OSRankTipWin.worldPos = title.transform.position;
+            UIManager.Instance.OpenWindow<OSRankTipWin>();
+        });
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankHeroTrainWin.cs.meta b/Main/System/OSActivity/OSRankHeroTrainWin.cs.meta
new file mode 100644
index 0000000..c041cdb
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroTrainWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f45bd7a3a06d7984db7e8be475988387
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankMinggeAwardCell.cs b/Main/System/OSActivity/OSRankMinggeAwardCell.cs
new file mode 100644
index 0000000..cd45eee
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeAwardCell.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class OSRankMinggeAwardCell : OSRankAwardBaseCell
+{
+    protected override Dictionary<int, int[][]> GetRankAwards()
+    {
+        return OSActivityManager.Instance.minggeRankAwards;
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankMinggeAwardCell.cs.meta b/Main/System/OSActivity/OSRankMinggeAwardCell.cs.meta
new file mode 100644
index 0000000..2ac590f
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeAwardCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71ff4f534dbed074f8cb364e370af500
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankMinggeAwardWin.cs b/Main/System/OSActivity/OSRankMinggeAwardWin.cs
new file mode 100644
index 0000000..fe00b67
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeAwardWin.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+// 寮�鏈嶆椿鍔�-鍛芥牸鍐叉 鎺掕濂栧姳
+public class OSRankMinggeAwardWin : OSRankAwardBaseWin
+{
+    protected override int GetRankType() => 9; 
+    
+    protected override ICollection<int> GetAwardKeys() => OSActivityManager.Instance.minggeRankAwards.Keys;
+
+    protected override void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell.GetComponent<OSRankMinggeAwardCell>();
+        _cell.Display(cell.index);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankMinggeAwardWin.cs.meta b/Main/System/OSActivity/OSRankMinggeAwardWin.cs.meta
new file mode 100644
index 0000000..9035783
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeAwardWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a231c309850cec941ae052a5b63759aa
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankMinggeGiftCell.cs b/Main/System/OSActivity/OSRankMinggeGiftCell.cs
new file mode 100644
index 0000000..2793205
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeGiftCell.cs
@@ -0,0 +1,8 @@
+using UnityEngine;
+
+public class OSRankMinggeGiftCell : OSRankGiftBaseCell
+{
+    protected override int GetGiftId(int index) => OSActivityManager.Instance.osMinggeGiftSortList[index];
+    
+    protected override int GetActivityFuncId() => 9; 
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankMinggeGiftCell.cs.meta b/Main/System/OSActivity/OSRankMinggeGiftCell.cs.meta
new file mode 100644
index 0000000..a0d8a05
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeGiftCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b76c8d10a8833af4283ec5019d7eb1a8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankMinggeGiftWin.cs b/Main/System/OSActivity/OSRankMinggeGiftWin.cs
new file mode 100644
index 0000000..9ca5c2b
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeGiftWin.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+// 寮�鏈嶆椿鍔�-鍛芥牸鍐叉 绀煎寘鐣岄潰
+public class OSRankMinggeGiftWin : OSRankGiftBaseWin
+{
+    protected override void RefreshManagerSortList() => OSActivityManager.Instance.RefreshGiftSortList();
+    
+    protected override IList<int> GetGiftSortList() => OSActivityManager.Instance.osMinggeGiftSortList;
+
+    protected override void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as OSRankMinggeGiftCell;
+        _cell.Display(cell.index);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankMinggeGiftWin.cs.meta b/Main/System/OSActivity/OSRankMinggeGiftWin.cs.meta
new file mode 100644
index 0000000..ae54344
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeGiftWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fef31dcb5d0ae29429d43002f1fc9127
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankMinggeWin.cs b/Main/System/OSActivity/OSRankMinggeWin.cs
new file mode 100644
index 0000000..fa89578
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeWin.cs
@@ -0,0 +1,20 @@
+using UnityEngine;
+
+// 寮�鏈嶆椿鍔�-鍛芥牸鍐叉 鎺掕姒滅晫闈�
+public class OSRankMinggeWin : OSRankBaseWin
+{
+    [SerializeField] ButtonEx rule;
+    [SerializeField] TextEx title;
+
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+        rule.AddListener(() =>
+        {
+            OSRankTipWin.infoTextKey = "OSActivityMinggeRankTip";
+            OSRankTipWin.isDownShow = true;
+            OSRankTipWin.worldPos = title.transform.position;
+            UIManager.Instance.OpenWindow<OSRankTipWin>();
+        });
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankMinggeWin.cs.meta b/Main/System/OSActivity/OSRankMinggeWin.cs.meta
new file mode 100644
index 0000000..37e17ea
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMinggeWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: aff3625b0c94913478e9bfffcedf3e86
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankTipWin.cs b/Main/System/OSActivity/OSRankTipWin.cs
new file mode 100644
index 0000000..f801f92
--- /dev/null
+++ b/Main/System/OSActivity/OSRankTipWin.cs
@@ -0,0 +1,98 @@
+using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
+using UnityEngine;
+
+public class OSRankTipWin : UIBase
+{
+
+    [SerializeField] RectTransform rectTransform;
+    [SerializeField] RectTransform arrowImage;
+    [SerializeField] RectTransform arrowUpImage;
+    [SerializeField] RichText txtInfo;
+
+    public static Vector3 worldPos; //涓栫晫鍧愭爣绯讳綅缃�
+    public static bool isDownShow = false;  // 鏄惁鍚戜笅鏄剧ず
+    public static string infoTextKey;
+    public const int rowCountMax = 4;
+    protected override void OnPreOpen()
+    {
+
+        rectTransform.position = new Vector3(100, 100, 100);   //鍒濆鍖栨椂锛屽睆骞曡寖鍥村
+        arrowImage.SetActive(!isDownShow);
+        arrowUpImage.SetActive(isDownShow);
+        txtInfo.text = Language.Get(infoTextKey);
+    }
+
+    protected override void OnPreClose()
+    {
+        isDownShow = false;
+    }
+
+    protected override void OnOpen()
+    {
+        UpdatePos().Forget();
+    }
+
+    async UniTask UpdatePos()
+    {
+        await UniTask.DelayFrame(3);
+        // 闄愬埗鍦ㄥ睆骞曡寖鍥村唴
+        Vector3[] corners = new Vector3[4];
+        rectTransform.GetWorldCorners(corners);
+
+        float minY = corners[0].y;
+        float maxY = corners[0].y;
+
+        for (int i = 1; i < corners.Length; i++)
+        {
+            if (corners[i].y < minY) minY = corners[i].y;
+            if (corners[i].y > maxY) maxY = corners[i].y;
+        }
+
+
+        float screenHeight = maxY - minY;
+        Vector2 adjustedPos = new Vector2(worldPos.x, worldPos.y + (!isDownShow ? screenHeight * 0.5f : -screenHeight * 0.5f));
+
+        Vector2 screenAdjustedPos = CameraManager.uiCamera.WorldToScreenPoint(adjustedPos);
+        var rectWidth = rectTransform.rect.width * Screen.width / canvasScaler.referenceResolution.x;
+        screenAdjustedPos.x = Mathf.Clamp(screenAdjustedPos.x, rectWidth * 0.5f, Screen.width - rectWidth * 0.5f);
+        screenAdjustedPos.y = Mathf.Clamp(screenAdjustedPos.y, rectTransform.rect.height * 0.5f, Screen.height - rectTransform.rect.height * 0.5f - 15);
+
+        adjustedPos = CameraManager.uiCamera.ScreenToWorldPoint(screenAdjustedPos);
+        rectTransform.position = adjustedPos;
+
+        if (!isDownShow)
+        {
+            rectTransform.localPosition = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y + 15, rectTransform.localPosition.z);
+        }
+        else
+        {
+            rectTransform.localPosition = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y - 15, rectTransform.localPosition.z);
+        }
+
+        rectTransform.GetWorldCorners(corners);
+        float minX = corners[0].x;
+        float maxX = corners[0].x;
+
+        for (int i = 1; i < corners.Length; i++)
+        {
+            if (corners[i].x < minX) minX = corners[i].x;
+            if (corners[i].x > maxX) maxX = corners[i].x;
+        }
+
+        //鏄剧ずarrowImage 鐨剎杞翠笂鐨勪綅缃紝鍜寃orldPos鍚屾锛屼絾涓嶈秴杩噈inX 鍜� maxX鑼冨洿
+        if (!isDownShow)
+        {
+            Vector3 arrowImagePosition = arrowImage.position;
+            arrowImagePosition.x = Mathf.Clamp(worldPos.x, minX, maxX);
+            arrowImage.position = arrowImagePosition;
+        }
+        else
+        {
+            Vector3 arrowUpImagePosition = arrowUpImage.position;
+            arrowUpImagePosition.x = Mathf.Clamp(worldPos.x, minX, maxX);
+            arrowUpImage.position = arrowUpImagePosition;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSRankTipWin.cs.meta b/Main/System/OSActivity/OSRankTipWin.cs.meta
new file mode 100644
index 0000000..a1041b1
--- /dev/null
+++ b/Main/System/OSActivity/OSRankTipWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d1b835694fcab6a4d886be2ee0b640d2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Redpoint/MainRedDot.cs b/Main/System/Redpoint/MainRedDot.cs
index 9f17683..645f78e 100644
--- a/Main/System/Redpoint/MainRedDot.cs
+++ b/Main/System/Redpoint/MainRedDot.cs
@@ -152,6 +152,9 @@
     public const int TimeRushRepoint = 478; //杞洖娈�
     public const int HeroDebutRepoint = 479; //姝﹀皢鐧诲満
     public const int Qunying = 480; //缇よ嫳姒�
+    public const int RedPoint_OSHeroTrain = 481;
+    public const int RedPoint_OSBeautyMM = 482;
+    public const int RedPoint_OSMingge = 483;
     public void Register()
     {
 
diff --git a/Main/System/Store/StoreModel.cs b/Main/System/Store/StoreModel.cs
index 027a8b5..e782e62 100644
--- a/Main/System/Store/StoreModel.cs
+++ b/Main/System/Store/StoreModel.cs
@@ -597,6 +597,9 @@
     DailySpecialsFree = 8, //8: 姣忔棩鐗规儬-姣忔棩鐗规儬鍏嶈垂
     DailyGiftFree = 9, //9: 姣忔棩鐗规儬-姣忔棩绀煎寘鍏嶈垂
     WeeklyGiftFree = 10, //10: 姣忔棩鐗规儬-姣忓懆绀煎寘鍏嶈垂
+    OSBeautyMM = 17, //17: 绾㈤鍐叉绀煎寘
+    OSHeroTrain = 18, //18: 姝﹀皢鍐叉绀煎寘
+    OSMingge = 19, //19: 鍛芥牸鍐叉绀煎寘
 }
 
 
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index d8b1303..28ba0f9 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -855,6 +855,9 @@
     TimeRush = 58, //闄愭椂鍐插埡
     Qunying = 62, //缇よ嫳姒�
     HeroDebut = 63,//姝﹀皢鐧诲満
+    OSHeroTrain = 64, //寮�鏈嶆灏嗗煿鍏绘娲诲姩
+    OSBeautyMM = 65, //寮�鏈嶇孩棰滄娲诲姩
+    OSMingge = 66, //寮�鏈嶅懡鏍煎煿鍏绘娲诲姩
 }
 
 

--
Gitblit v1.8.0