From fbc2b42630bd7675370eade11f4b350ff9ede741 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 08 十二月 2025 23:03:32 +0800
Subject: [PATCH] 364 【活动内容】开服冲榜

---
 Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs                   |    2 
 Main/System/OSActivity/OSRankHeroCallGiftCell.cs                                                 |  120 ++++++
 Main/System/OSActivity/OSRankHeroCallAwardCell.cs.meta                                           |   11 
 Main/System/MainLevel/MainBossEnterWin.cs                                                        |    3 
 Main/System/OSActivity/OSHeroCallBaseWin.cs.meta                                                 |   11 
 Main/System/GeneralConfig/DayRemind.cs                                                           |    2 
 Main/System/OSActivity/OSRankMainLeveAwardWin.cs                                                 |   82 ++++
 Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs                |   19 
 Main/System/OSActivity/OSRankMainLeveAwardWin.cs.meta                                            |   11 
 Main/System/OSActivity/OSRankWin.cs                                                              |   61 +++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs.meta |   11 
 Main/System/OSActivity/OSRankHeroCallAwardWin.cs.meta                                            |   11 
 Main/System/BillboardRank/PlayerTop3Cell.cs                                                      |    8 
 Main/System/FirstCharge/FirstChargeWin.cs                                                        |    4 
 Main/System/OSActivity/OSRankHeroCallGiftWin.cs                                                  |   63 +++
 Main/System/Main/HomeWin.cs                                                                      |   41 +
 Main/System/BillboardRank/PlayerRankWin.cs                                                       |   25 
 Main/Main.cs                                                                                     |    1 
 Main/Config/Configs/StoreConfig.cs                                                               |    5 
 Main/System/Store/StoreModel.cs                                                                  |   17 
 Main/System/OSActivity/OSMainLevelBaseWin.cs                                                     |   53 ++
 Main/System/OSActivity/OSRankHeroCallAwardCell.cs                                                |   58 ++
 Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs.meta           |   11 
 Main/System/OSActivity/OSActivityManager.cs.meta                                                 |   11 
 Main/System/BillboardRank/RankModel.cs                                                           |   35 +
 Main/System/OSActivity/OSRankHeroCallAwardWin.cs                                                 |   83 ++++
 Main/System/OSActivity/OSActivityManager.cs                                                      |  190 +++++++++
 Main/System/OSActivity/OSRankMainLeveAwardCell.cs.meta                                           |   11 
 Main/System/BillboardRank/PlayerRankCell.cs                                                      |   17 
 Main/System/OSActivity/OSRankHeroCallGiftWin.cs.meta                                             |   11 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity.meta                                    |    8 
 Main/Core/NetworkPackage/ServerPack/HAB_Activity.meta                                            |    8 
 Main/System/OSActivity/OSHeroCallBaseWin.cs                                                      |   46 ++
 Main/System/OSActivity/OSRankHeroCallGiftCell.cs.meta                                            |   11 
 Main/System/OSActivity.meta                                                                      |    8 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs      |   11 
 Main/System/OSActivity/OSRankWin.cs.meta                                                         |   11 
 Main/System/OSActivity/OSRankMainLeveAwardCell.cs                                                |   58 ++
 Main/System/OSActivity/OSMainLevelBaseWin.cs.meta                                                |   11 
 39 files changed, 1,107 insertions(+), 53 deletions(-)

diff --git a/Main/Config/Configs/StoreConfig.cs b/Main/Config/Configs/StoreConfig.cs
index 26eb7c6..5f4f915 100644
--- a/Main/Config/Configs/StoreConfig.cs
+++ b/Main/Config/Configs/StoreConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�10鏈�28鏃�
+//    [  Date ]:           2025骞�12鏈�8鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
@@ -29,6 +29,7 @@
 	public int MoneyOriginal;
 	public int UnlockType;
 	public int UnlockValue;
+	public string Name;
 
     public override int LoadKey(string _key)
     {
@@ -65,6 +66,8 @@
 			int.TryParse(tables[11],out UnlockType); 
 
 			int.TryParse(tables[12],out UnlockValue); 
+
+			Name = tables[13];
         }
         catch (Exception exception)
         {
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
index 6b5f439..19f1016 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
@@ -7,7 +7,7 @@
 
     public static event Action beforePlayerDataInitializeEvent; //閲嶇櫥鍒囨崲璐﹀彿 鎴栬�� 鐭殏鐨勬柇绾块噸杩� 閮戒細瑙﹀彂
     public static event Action beforePlayerDataInitializeEventOnRelogin;    //閲嶇櫥鍒囨崲璐﹀彿瑙﹀彂
-    public static event Action beforePlayerDataInitializeEventOnReconnect;    //鏂嚎閲嶈繛瑙﹀彂
+    public static event Action beforePlayerDataInitializeEventOnReconnect;    //鍚岃处鍙锋柇绾块噸杩炶Е鍙�
     public static event Action afterPlayerDataInitializeEvent;
     public static event Action switchAccountEvent;
     public static bool isAfterPlayerDataInitialize = false; //鍙尯鍒嗘柇绾块噸杩炶繕鏄畬鍏ㄩ噸鐧�; 鍒囧埌鐧诲綍鍦烘櫙浼氶噸缃负false锛屾晠鍙垽鏂柇绾块噸杩�
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity.meta
new file mode 100644
index 0000000..3249a71
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6941d0f549d09534083b125a3f958bf6
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs
new file mode 100644
index 0000000..6715c77
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs
@@ -0,0 +1,11 @@
+using UnityEngine;
+using System.Collections;
+
+// AB 05 寮�鏈嶅簡鍏镐俊鎭� #tagSCOSACelebrationInfo
+
+public class DTCAB05_tagSCOSACelebrationInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HAB05_tagSCOSACelebrationInfo vNetData = vNetPack as HAB05_tagSCOSACelebrationInfo;
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs.meta
new file mode 100644
index 0000000..7250985
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB05_tagSCOSACelebrationInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dde0a532fce9aff41bd468e6a0b87511
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ServerPack/HAB_Activity.meta b/Main/Core/NetworkPackage/ServerPack/HAB_Activity.meta
new file mode 100644
index 0000000..a22ac7b
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAB_Activity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 87a175e0ef9386646a517dc77118c1ca
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs b/Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs
new file mode 100644
index 0000000..629eea4
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs
@@ -0,0 +1,19 @@
+using UnityEngine;
+using System.Collections;
+
+// AB 05 寮�鏈嶅簡鍏镐俊鎭� #tagSCOSACelebrationInfo
+
+public class HAB05_tagSCOSACelebrationInfo : GameNetPackBasic {
+    public uint PointTotal;    // 绱搴嗗吀绉垎
+    public uint PointAward;    // 绉垎闃舵濂栧姳璁板綍锛屾寜闃舵绉垎鎺掑簭鍚庣储寮曚簩杩涘埗瀛樺偍鏄惁宸查鍙�
+
+    public HAB05_tagSCOSACelebrationInfo () {
+        _cmd = (ushort)0xAB05;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out PointTotal, vBytes, NetDataType.DWORD);
+        TransBytes (out PointAward, vBytes, NetDataType.DWORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs.meta
new file mode 100644
index 0000000..a1b87c8
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAB_Activity/HAB05_tagSCOSACelebrationInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4b88c80b8a2f30e429deefeacba13d72
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Main.cs b/Main/Main.cs
index c01f11b..c8845f3 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -93,6 +93,7 @@
         managers.Add(FuncNPCManager.Instance);
         managers.Add(GuildBossManager.Instance);
         managers.Add(LineupRecommendManager.Instance);
+        managers.Add(OSActivityManager.Instance);
 
         foreach (var manager in managers)
         {
diff --git a/Main/System/BillboardRank/PlayerRankCell.cs b/Main/System/BillboardRank/PlayerRankCell.cs
index e9bc30d..7748a7e 100644
--- a/Main/System/BillboardRank/PlayerRankCell.cs
+++ b/Main/System/BillboardRank/PlayerRankCell.cs
@@ -8,16 +8,15 @@
 //鐜╁閫氱敤鎺掑悕
 public class PlayerRankCell : MonoBehaviour
 {
-    [SerializeField] AvatarCell avatarCell;
+    [SerializeField] AvatarCell avatarCell; // 澶村儚涓偣鍑绘煡璇㈢帺瀹惰鎯�
     [SerializeField] Text rankText;
     [SerializeField] Text rankValueText;    //鎺掑悕姣旇緝鍐呭
     [SerializeField] Text nameText;
     [SerializeField] OfficialTitleCell officialTitleCell;
-    [SerializeField] Button queryPlayerBtn; //鍚庣画娣诲姞鐐瑰嚮鏌ョ湅鐜╁璇︽儏
 
 
     // rank 涓�0 浠h〃鐜╁鑷繁
-    public void Display(int rankType, int rank, string valueFormat)
+    public void Display(int rankType, int rank)
     {
         RankData rankData = null;
         if (rank != 0)
@@ -34,7 +33,7 @@
                                                 PlayerDatas.Instance.baseData.face,
                                                 PlayerDatas.Instance.baseData.facePic));
                 rankText.text = Language.Get("L1045");
-                rankValueText.text = "1-1";//Language.Get("L1125");
+                rankValueText.text = "";//Language.Get("L1125");
                 nameText.text = PlayerDatas.Instance.baseData.PlayerName;
                 officialTitleCell.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
                 return;
@@ -46,7 +45,7 @@
             officialTitleCell.SetActive(false);
             avatarCell.SetActive(false);
             nameText.text = Language.Get("L1124");
-            rankValueText.text = "1-1";//Language.Get("L1125");
+            rankValueText.text = "";//Language.Get("L1125");
         }
         else
         {
@@ -55,17 +54,11 @@
             avatarCell.SetActive(true);
             avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)rankData.id, (int)rankData.value3, (int)rankData.value4));
             nameText.text = rankData.name1;
-            rankValueText.text = RankModel.Instance.GetStoryInfo(rankData.cmpValue); ;
+            rankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue); ;
         }
 
         rankText.text = rank.ToString();
-        if (queryPlayerBtn != null)
-        {
-            queryPlayerBtn.AddListener(() =>
-            {
 
-            });
-        }
     }
 }
 
diff --git a/Main/System/BillboardRank/PlayerRankWin.cs b/Main/System/BillboardRank/PlayerRankWin.cs
index c58478c..a4628ca 100644
--- a/Main/System/BillboardRank/PlayerRankWin.cs
+++ b/Main/System/BillboardRank/PlayerRankWin.cs
@@ -9,7 +9,7 @@
 using UnityEngine.UI;
 
 
-//閫氱敤鐜╁涓汉鎺掕姒�
+//閫氱敤鐜╁涓汉鎺掕姒�; cell鏁伴噺鏄浐瀹氱殑 闈炲姩鎬佸彉鍖�
 public class PlayerRankWin : UIBase
 {
     [SerializeField] List<PlayerTop3Cell> playerTop3Cells;
@@ -18,26 +18,23 @@
     [SerializeField] PlayerRankCell myRankCell;
     [SerializeField] Button btnClose;
 
-
-    [HideInInspector] public int rankType;
-    [HideInInspector] public string valueFormat = "{0}";
+    //鏁版嵁鍚庣画浠巑anager涓褰曡幏鍙�
     [HideInInspector] public int groupValue1 = 0;   //涓�鑸敤浜庤法鏈�
     [HideInInspector] public int groupValue2 = 0;   //涓�鑸敤浜庤法鏈�
+    protected int rankType; //浠巉unctionOrder鑾峰彇
 
     protected override void InitComponent()
     {
-        btnClose.AddListener(()=>
-        {
-            CloseWindow();
-        });
+        btnClose?.AddListener(CloseWindow);
     }
 
-    protected override void NextFrameAfterOpen()
+    
+    protected override void OnPreOpen()
     {
+        rankType = functionOrder;
         RankModel.Instance.onRankRefresh += OnRankRefresh;
         scrollerController.OnRefreshCell += OnRefreshCell;
         Refresh();
-        
     }
 
     protected override void OnPreClose()
@@ -53,7 +50,7 @@
 
     public override void Refresh()
     {
-        cmpStrText.text = Language.Get("RankTypeName_1");
+        cmpStrText.text = RankModel.Instance.GetCmpTabStr(rankType);
         ShowTop3();
         CreateScroller();
         ShowMyRank();
@@ -73,7 +70,7 @@
     void OnRefreshCell(ScrollerDataType type, CellView cell)
     {
         var _cell = cell.GetComponent<PlayerRankCell>();
-        _cell.Display(rankType, cell.index + 1, valueFormat);
+        _cell.Display(rankType, cell.index + 1);
         RankModel.Instance.ListenRankPage(rankType, cell.index, groupValue1, groupValue2);
     }
 
@@ -82,13 +79,13 @@
     { 
         for (int i = 0; i < playerTop3Cells.Count; i++)
         {
-            playerTop3Cells[i].Display(functionOrder, i + 1);
+            playerTop3Cells[i].Display(rankType, i + 1);
         }
     }
 
     void ShowMyRank()
     {
-        myRankCell.Display(rankType, 0, valueFormat);
+        myRankCell.Display(rankType, 0);
     }
 
 
diff --git a/Main/System/BillboardRank/PlayerTop3Cell.cs b/Main/System/BillboardRank/PlayerTop3Cell.cs
index 610fe84..d67b702 100644
--- a/Main/System/BillboardRank/PlayerTop3Cell.cs
+++ b/Main/System/BillboardRank/PlayerTop3Cell.cs
@@ -8,26 +8,24 @@
 //鐜╁閫氱敤鐨勫墠3鎺掑悕
 public class PlayerTop3Cell : MonoBehaviour
 {
-    //[SerializeField] Model 鏄剧ずNPC 姝﹀皢妯″瀷
     [SerializeField] Text rankValueText;    //鎺掑悕姣旇緝鍐呭
     [SerializeField] Text nameText;
     [SerializeField] OfficialTitleCell officialTitleCell;
-    [SerializeField] Button queryPlayerBtn; //鍚庣画娣诲姞鐐瑰嚮鏌ョ湅鐜╁璇︽儏
     [SerializeField] HorseController model;
 
-    public void Display(int rankType, int rank, string valueFormat = "{0}")
+    public void Display(int rankType, int rank)
     {
         var rankData = RankModel.Instance.GetRankDataByRank(rankType, rank);
         if (rankData == null)
         {
-            rankValueText.text = "1-1";//Language.Get("L1125");
+            rankValueText.text = "";//Language.Get("L1125");
             nameText.text = Language.Get("L1124");
             officialTitleCell.SetActive(false);
             return;
         }
         officialTitleCell.SetActive(true);
         //rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue2 + rankData.cmpValue * Constants.ExpPointValue));
-        rankValueText.text = RankModel.Instance.GetStoryInfo(rankData.cmpValue);
+        rankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue);
         nameText.text = rankData.name1;
         officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2);
         model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, 1);
diff --git a/Main/System/BillboardRank/RankModel.cs b/Main/System/BillboardRank/RankModel.cs
index 318e713..5e8df5e 100644
--- a/Main/System/BillboardRank/RankModel.cs
+++ b/Main/System/BillboardRank/RankModel.cs
@@ -333,13 +333,36 @@
     }
     #endregion
 
-    public string GetStoryInfo(uint cmpValue)
+    //鑾峰彇鎺掑悕姣旇緝鍊煎瓧绗︿覆
+    public string GetCmpValueStr(int rankType, uint cmpValue)
     {
-        int value = (int)cmpValue;
-        if (!MainLevelConfig.HasKey(value))
-            return string.Empty;
-        MainLevelConfig config = MainLevelConfig.Get(value);
-        return Language.Get("Arena15", config.ChapterID, config.LevelNum);
+        switch (rankType)
+        {
+            case 0:
+            case 3:
+                int value = (int)cmpValue;
+                if (!MainLevelConfig.HasKey(value))
+                    return string.Empty;
+                MainLevelConfig config = MainLevelConfig.Get(value);
+                return Language.Get("Arena15", config.ChapterID, config.LevelNum);
+            case 4:
+                return cmpValue.ToString();
+        }
+        return string.Empty;
+    }
+
+    //鑾峰彇鎺掑悕鏍囩
+    public string GetCmpTabStr(int rankType)
+    {
+        switch (rankType)
+        {
+            case 0:
+            case 3:
+                return Language.Get("RankTypeName_1");
+            case 4:
+                return Language.Get("OSActivity5");
+        }
+        return string.Empty;
     }
 }
 
diff --git a/Main/System/FirstCharge/FirstChargeWin.cs b/Main/System/FirstCharge/FirstChargeWin.cs
index a5daae2..6f2c5fa 100644
--- a/Main/System/FirstCharge/FirstChargeWin.cs
+++ b/Main/System/FirstCharge/FirstChargeWin.cs
@@ -256,7 +256,7 @@
             OrderInfoConfig orderInfoConfig;
             if (model.TryGetOrderInfoConfigByFirstID(firstID, out orderInfoConfig))
             {
-                txtTabTitles[i].text = Language.Get("PayMoneyNum", orderInfoConfig.PayRMBNum);
+                txtTabTitles[i].text = Language.Get("PayMoneyNum", orderInfoConfig.PayRMBNumOnSale);
             }
         }
     }
@@ -279,7 +279,7 @@
         bool isBuy = firstChargeData.IsBuy();
         btnBuy.SetActive(!isBuy);
         btnHave.SetActive(isBuy);
-        txtBuy.text = Language.Get("PayMoneyNum", orderInfo.PayRMBNum);
+        txtBuy.text = Language.Get("PayMoneyNum", orderInfo.PayRMBNumOnSale);
         //棰嗗彇
         int day = firstChargeData.GetNowBuyDay();
         //0: 宸查鍙� 1: 涓嶅彲棰嗗彇 2: 鍙鍙� 
diff --git a/Main/System/GeneralConfig/DayRemind.cs b/Main/System/GeneralConfig/DayRemind.cs
index 107b885..a1debbd 100644
--- a/Main/System/GeneralConfig/DayRemind.cs
+++ b/Main/System/GeneralConfig/DayRemind.cs
@@ -33,6 +33,7 @@
     }
 
     public const string DJQTip = "DJQTip"; // 浠i噾鍒告彁绀�
+    public const string OSMainLevel = "OSMainLevel"; // 寮�鏈嶄富绾垮叧鍗℃椿鍔ㄦ彁绀�
 
     public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>();
 
@@ -74,6 +75,7 @@
     private void GetPlayerDayRemind()
     {
         SetDayRemind(DJQTip);
+        SetDayRemind(OSMainLevel);
     }
 
     public void SetDayRemind(string _key)
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index bdd24a0..599bafc 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -61,6 +61,8 @@
     [SerializeField] RightFuncInHome rightFuncInHome;
 
     [SerializeField] Button FirstChargeBtn;
+    [SerializeField] Button osMainLevelBtn;
+    [SerializeField] Button osHeroCallBtn;
 
     //鍧愰獞
     [SerializeField] Image horseBGImg;
@@ -187,6 +189,15 @@
             UpdateSendButton();
             inputFastChat.text = string.Empty;
         });
+
+        osMainLevelBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<OSMainLevelBaseWin>();
+        });
+        osHeroCallBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<OSHeroCallBaseWin>();
+        });
     }
 
 
@@ -234,8 +245,10 @@
         HorseManager.Instance.OnHorseUpdateEvent += DisplayHorse;
         ChatManager.Instance.OnChatTabChangeEvent += OnChatTabChangeEvent;
         GuildManager.Instance.EnterOrQuitGuildEvent += EnterOrQuitGuildEvent;
+        TimeMgr.Instance.OnDayEvent += OnDayEvent;
         Display();
         DisplayFirstChargeBtn();
+        DisplayOSActivity();
 
         // var battleWin = UIManager.Instance.OpenWindow<BattleWin>();
         // battleWin.SetBattleField(BattleManager.Instance.storyBattleField);
@@ -264,6 +277,7 @@
         HorseManager.Instance.OnHorseUpdateEvent -= DisplayHorse;
         ChatManager.Instance.OnChatTabChangeEvent -= OnChatTabChangeEvent;
         GuildManager.Instance.EnterOrQuitGuildEvent -= EnterOrQuitGuildEvent;
+        TimeMgr.Instance.OnDayEvent -= OnDayEvent;
 
         //  鍏抽棴鐨勬椂鍊欐妸鎴樻枟鐣岄潰涔熺粰鍏充簡 铏界劧鏄湪澶栭潰寮�鐨�
         UIManager.Instance.CloseWindow<BattleWin>();
@@ -277,6 +291,7 @@
         txtFastChatSend.text = isCanSend ? Language.Get("Chat11") : Language.Get("Chat14", remainingSeconds);
         txtFastChatSend.colorType = isCanSend ? TextColType.NavyBrown : TextColType.LightWhite;
     }
+
 
 
     private void EnterOrQuitGuildEvent(bool obj)
@@ -319,11 +334,10 @@
 
     async UniTask DelayPlayMusic()
     {
-        await UniTask.Delay(2000);
+        await UniTask.Delay(1200);
         if (!SoundPlayer.Instance.IsPlayBackGroundMuisic())
             SoundPlayer.Instance.PlayBackGroundMusic(38);
     }
-
 
 
     private void OnClickEnterBoss()
@@ -597,6 +611,10 @@
         }
     }
 
+
+
+
+
     private void OnFirstChargeTaskUpdateEvent()
     {
         DisplayFirstChargeBtn();
@@ -611,6 +629,10 @@
         else if (funcId == (int)FuncOpenEnum.Horse)
         {
             DisplayHorse();
+        }
+        else if (funcId == (int)FuncOpenEnum.OSMainLevl || funcId == (int)FuncOpenEnum.OSHeroCall)
+        {
+            DisplayOSActivity();
         }
     }
 
@@ -654,4 +676,17 @@
             UIManager.Instance.OpenWindow<HorseWin>();
         }
     }
-}
\ No newline at end of file
+
+    void DisplayOSActivity()
+    {
+        osMainLevelBtn.SetActive(OSActivityManager.Instance.IsOpened(3));
+        osHeroCallBtn.SetActive(OSActivityManager.Instance.IsOpened(4));
+    }
+
+    void OnDayEvent()
+    {
+        DisplayOSActivity();
+    }
+}
+
+
diff --git a/Main/System/MainLevel/MainBossEnterWin.cs b/Main/System/MainLevel/MainBossEnterWin.cs
index c86b5d5..c65170b 100644
--- a/Main/System/MainLevel/MainBossEnterWin.cs
+++ b/Main/System/MainLevel/MainBossEnterWin.cs
@@ -34,8 +34,7 @@
         {
             RankModel.Instance.ResetQueryParam();
             RankModel.Instance.QueryRankByPage(0, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
-            var win = UIManager.Instance.OpenWindow<PlayerRankWin>();
-            win.rankType = 0;
+            UIManager.Instance.OpenWindow<PlayerRankWin>(0);
 
         });
 
diff --git a/Main/System/OSActivity.meta b/Main/System/OSActivity.meta
new file mode 100644
index 0000000..8a7b5ba
--- /dev/null
+++ b/Main/System/OSActivity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c825c294184518b419d9d9fc80996f01
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSActivityManager.cs b/Main/System/OSActivity/OSActivityManager.cs
new file mode 100644
index 0000000..3c24867
--- /dev/null
+++ b/Main/System/OSActivity/OSActivityManager.cs
@@ -0,0 +1,190 @@
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class OSActivityManager : GameSystemManager<OSActivityManager>
+{
+    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 List<int> osHeroCallGiftSortList = new List<int>();    //寮�鏈嶆嫑鍕熺ぜ鍖� 鍏呭�糏D + 100000000
+
+    Dictionary<int, int> rankTypeToFuncID = new Dictionary<int, int>()
+    {
+        {3, 45},
+        {4, 46},
+    };
+
+    public override void Init()
+    {
+
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitialize;
+        StoreModel.Instance.RefreshBuyShopLimitEvent += RefreshStore;
+        FuncOpen.Instance.OnFuncStateChangeEvent += FuncStateChange;
+
+        ParseConfig();
+    }
+
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitialize;
+        StoreModel.Instance.RefreshBuyShopLimitEvent -= RefreshStore;
+        FuncOpen.Instance.OnFuncStateChangeEvent -= FuncStateChange;
+    }
+
+    void BeforePlayerDataInitialize()
+    {
+    }
+
+    void ParseConfig()
+    {
+        var config = FuncConfigConfig.Get("OSABillboard");
+        rankOpenDays = ConfigParse.ParseIntArrayDict(config.Numerical1);
+        mainLevelRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
+        heroCallRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical3);
+
+        var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSHeroCall];
+        var _list = RechargeManager.Instance.GetCTGIDListByType(18);
+
+        for (int i = 0; i < list.Count; i++)
+        {
+            var item = list[i];
+            osHeroCallGiftSortList.Add(item.shopId);
+        }
+        for (int i = 0; i < _list.Count; i++)
+        {
+            osHeroCallGiftSortList.Add(_list[i] + 100000000);
+        }
+
+    }
+
+    // 寮�鏈嶆帓琛屾椿鍔ㄦ槸鍚﹀紑鍚�
+    public bool IsOpened(int rankType)
+    {
+        if (!rankTypeToFuncID.ContainsKey(rankType))
+        {
+            return false;
+        }
+
+        if (!FuncOpen.Instance.IsFuncOpen(rankTypeToFuncID[rankType]))
+        {
+            return false;
+        }
+
+        //鍔熻兘寮�鍚噷鏈夊紑濮嬪ぉ浠ュ紑鍚负鍑嗭紝娲诲姩缁撴潫鍚庡欢杩熶竴澶╁叧闂睍绀�
+        if (!rankOpenDays.ContainsKey(rankType))
+        {
+            return false;
+        }
+
+        var openDays = rankOpenDays[rankType];
+        if (TimeUtility.OpenDay > openDays[1])
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    public int GetEndTime(int rankType)
+    {
+        if (!rankOpenDays.ContainsKey(rankType))
+        {
+            return 0;
+        }
+        var openDays = rankOpenDays[rankType];
+
+        return TimeUtility.GetRemindTimeByOpenDay(openDays[1]);
+    }
+
+    int CmpGift(int a, int b)
+    {
+        bool isSaleOutA = false;
+        bool isSaleOutB = false;
+
+        if (a < 100000000)
+        {
+            //鍟嗗簵
+            isSaleOutA = StoreModel.Instance.GetShopIDState(a) == 1;
+        }
+        else
+        {
+            RechargeManager.Instance.TryGetRechargeCount(a % 100000000, out RechargeCount countData);
+            if (countData.totalCount >= CTGConfig.Get(a % 100000000).DailyBuyCount)
+            {
+                isSaleOutA = true;
+            }
+        }
+        if (b < 100000000)
+        {
+            isSaleOutB = StoreModel.Instance.GetShopIDState(b) == 1;
+        }
+        else
+        {
+            RechargeManager.Instance.TryGetRechargeCount(b % 100000000, out RechargeCount countData);
+            if (countData.totalCount >= CTGConfig.Get(b % 100000000).DailyBuyCount)
+            {
+                isSaleOutB = true;
+            }
+        }
+        if (isSaleOutA != isSaleOutB)
+        {
+            return isSaleOutA ? 1 : -1;
+        }
+
+        return a.CompareTo(b);
+    }
+
+    public void RefreshGiftSortList()
+    {
+        osHeroCallGiftSortList.Sort(CmpGift);
+    }
+
+    void RefreshStore()
+    {
+        UpdateRedpoint();
+    }
+
+
+    Redpoint osMainLevelRedpoint = new Redpoint(MainRedDot.RedPoint_OSMainLevel);
+    Redpoint osHeroCallRedpoint = new Redpoint(MainRedDot.RedPoint_OSHeroCard);
+
+    public void UpdateRedpoint()
+    {
+        osMainLevelRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None;
+        osHeroCallRedpoint.state = RedPointState.None;
+
+        if (StoreModel.Instance.freeShopDict.Count == 0) return;
+
+        if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSHeroCall))
+        {
+            var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSHeroCall];
+
+            for (int i = 0; i < shopList.Count; i++)
+            {
+                var shopID = shopList[i];
+                var config = StoreConfig.Get(shopID);
+                if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt)
+                {
+                    osHeroCallRedpoint.state = RedPointState.Simple;
+                    break;
+                }
+            }
+        }
+    }
+
+    private void FuncStateChange(int funcId)
+    {
+        switch ((FuncOpenEnum)funcId)
+        {
+            case FuncOpenEnum.OSMainLevl:
+            case FuncOpenEnum.OSHeroCall:
+                UpdateRedpoint();
+                break;
+        }
+    }
+}
diff --git a/Main/System/OSActivity/OSActivityManager.cs.meta b/Main/System/OSActivity/OSActivityManager.cs.meta
new file mode 100644
index 0000000..8a4d24f
--- /dev/null
+++ b/Main/System/OSActivity/OSActivityManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c7dec13c51efdd541a8b7cfedcdc9d09
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSHeroCallBaseWin.cs b/Main/System/OSActivity/OSHeroCallBaseWin.cs
new file mode 100644
index 0000000..516b9ff
--- /dev/null
+++ b/Main/System/OSActivity/OSHeroCallBaseWin.cs
@@ -0,0 +1,46 @@
+锘�//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
+//    [  Date ]:           Tuesday, July 24, 2018
+//--------------------------------------------------------
+
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+////寮�鏈嶆椿鍔�-姝﹀皢鎷涘嫙娲诲姩
+public class OSHeroCallBaseWin : FunctionsBaseWin
+{
+    [SerializeField] Button closBtn;
+
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+        closBtn.AddListener(CloseWindow);
+    }
+    
+
+    protected override void OpenSubUIByTabIndex()
+    {
+        switch (functionOrder)
+        {
+            case 0:
+                RankModel.Instance.ResetQueryParam();
+                RankModel.Instance.QueryRankByPage(4, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
+                currentSubUI = UIManager.Instance.OpenWindow<OSRankWin>(4);
+                break;
+            case 1:
+                currentSubUI = UIManager.Instance.OpenWindow<OSRankHeroCallAwardWin>();
+                break;
+            case 2:
+                currentSubUI = UIManager.Instance.OpenWindow<OSRankHeroCallGiftWin>();
+                break;
+        }
+    }
+
+}
+
+
+
+
diff --git a/Main/System/OSActivity/OSHeroCallBaseWin.cs.meta b/Main/System/OSActivity/OSHeroCallBaseWin.cs.meta
new file mode 100644
index 0000000..d81f8ef
--- /dev/null
+++ b/Main/System/OSActivity/OSHeroCallBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 625a00313ed577e44b0fc884be1e90f2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSMainLevelBaseWin.cs b/Main/System/OSActivity/OSMainLevelBaseWin.cs
new file mode 100644
index 0000000..fb630d4
--- /dev/null
+++ b/Main/System/OSActivity/OSMainLevelBaseWin.cs
@@ -0,0 +1,53 @@
+锘�//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
+//    [  Date ]:           Tuesday, July 24, 2018
+//--------------------------------------------------------
+
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+////寮�鏈嶆椿鍔�-涓荤嚎鍏冲崱娲诲姩
+public class OSMainLevelBaseWin : FunctionsBaseWin
+{
+    [SerializeField] Button closBtn;
+
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+        closBtn.AddListener(CloseWindow);
+    }
+    
+    protected override void OnPreOpen()
+    {
+        base.OnPreOpen();
+        if (!DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel))
+        {
+            DayRemind.Instance.SetDayRemind(DayRemind.OSMainLevel, true);
+            OSActivityManager.Instance.UpdateRedpoint();
+        }
+    }
+
+    protected override void OpenSubUIByTabIndex()
+    {
+        switch (functionOrder)
+        {
+            case 0:
+                RankModel.Instance.ResetQueryParam();
+                RankModel.Instance.QueryRankByPage(3, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
+                currentSubUI = UIManager.Instance.OpenWindow<OSRankWin>(3);
+                break;
+            case 1:
+                currentSubUI = UIManager.Instance.OpenWindow<OSRankMainLeveAwardWin>();
+                break;
+        }
+    }
+
+
+}
+
+
+
+
diff --git a/Main/System/OSActivity/OSMainLevelBaseWin.cs.meta b/Main/System/OSActivity/OSMainLevelBaseWin.cs.meta
new file mode 100644
index 0000000..7797c91
--- /dev/null
+++ b/Main/System/OSActivity/OSMainLevelBaseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2e7af1c80e7f0cb4e803121c8107b934
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroCallAwardCell.cs b/Main/System/OSActivity/OSRankHeroCallAwardCell.cs
new file mode 100644
index 0000000..bef253b
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroCallAwardCell.cs
@@ -0,0 +1,58 @@
+锘縰sing System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class OSRankHeroCallAwardCell : CellView
+{
+    [SerializeField] Text rankText;
+    [SerializeField] Image rankImg;
+    [SerializeField] ItemCell[] itemCells;
+
+    public void Display(int index)
+    {
+        var rank = index + 1;
+        if (index < 3)
+        {
+            rankImg.SetActive(true);
+            rankText.SetActive(false);
+            rankImg.SetSprite(StringUtility.Contact("Rank", index + 1));
+        }
+        else
+        {
+            rankImg.SetActive(false);
+            rankText.SetActive(true);
+            var keys = OSActivityManager.Instance.heroCallRankAwards.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 = OSActivityManager.Instance.heroCallRankAwards[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);
+            }
+        }
+    }
+
+}
diff --git a/Main/System/OSActivity/OSRankHeroCallAwardCell.cs.meta b/Main/System/OSActivity/OSRankHeroCallAwardCell.cs.meta
new file mode 100644
index 0000000..691a197
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroCallAwardCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3efefc256362c9e4a9538ad84e522737
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroCallAwardWin.cs b/Main/System/OSActivity/OSRankHeroCallAwardWin.cs
new file mode 100644
index 0000000..911aa93
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroCallAwardWin.cs
@@ -0,0 +1,83 @@
+锘�//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
+//    [  Date ]:           Tuesday, July 24, 2018
+//--------------------------------------------------------
+
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+////寮�鏈嶆椿鍔�-姝﹀皢鎷涘嫙鎺掕姒滃鍔�
+public class OSRankHeroCallAwardWin : UIBase
+{
+    [SerializeField] ScrollerController scrollerController;
+    [SerializeField] Text myRankText;
+    [SerializeField] Text myRankValueText;
+
+
+    protected override void OnPreOpen()
+    {
+        scrollerController.OnRefreshCell += OnRefreshCell;
+        CreateScroller();
+        DisplayMyRank(4);
+    }
+
+    protected override void OnPreClose()
+    {
+        scrollerController.OnRefreshCell -= OnRefreshCell;
+    }
+
+
+
+
+    void CreateScroller()
+    {
+        var keys = OSActivityManager.Instance.heroCallRankAwards.Keys;
+
+        scrollerController.Refresh();
+        for (int i = 0; i < keys.Count; i++)
+        {
+            scrollerController.AddCell(ScrollerDataType.Header, i);
+        }
+        scrollerController.Restart();
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell.GetComponent<OSRankHeroCallAwardCell>();
+        _cell.Display(cell.index);
+    }
+
+    public void DisplayMyRank(int rankType)
+    {
+        RankData rankData = null;
+        rankData = RankModel.Instance.GetMyRank(rankType);
+        if (rankData == null)
+        {
+            myRankText.text = Language.Get("L1045");
+            myRankValueText.text = "";//Language.Get("L1125");
+            return;
+        }
+        int rank = rankData.rank;
+
+        if (rankData == null)
+        {
+            myRankValueText.text = "";//Language.Get("L1125");
+        }
+        else
+        {
+            myRankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue); ;
+        }
+
+        myRankText.text = Language.Get("L1126") + Language.Get("L1096") + rank.ToString();
+
+    }
+
+
+}
+
+
+
+
diff --git a/Main/System/OSActivity/OSRankHeroCallAwardWin.cs.meta b/Main/System/OSActivity/OSRankHeroCallAwardWin.cs.meta
new file mode 100644
index 0000000..f64d305
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroCallAwardWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4c95333a39a8daa4da8ab42140cda281
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroCallGiftCell.cs b/Main/System/OSActivity/OSRankHeroCallGiftCell.cs
new file mode 100644
index 0000000..6d66404
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroCallGiftCell.cs
@@ -0,0 +1,120 @@
+锘縰sing System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class OSRankHeroCallGiftCell : CellView
+{
+    [SerializeField] Text nameText;
+    [SerializeField] ItemCell[] itemCells;
+    [SerializeField] Button buyBtn;
+    [SerializeField] Text moneyText;
+    [SerializeField] Image moneyIcon;
+    [SerializeField] Transform saleOutRect;
+    [SerializeField] Image redImg;
+    [SerializeField] Text buyLimitText;
+    [SerializeField] Image maskImg;
+
+    public void Display(int index)
+    {
+        var id = OSActivityManager.Instance.osHeroCallGiftSortList[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(() =>
+                {
+                    RechargeManager.Instance.CTG(id);
+                });
+
+                RechargeManager.Instance.TryGetOrderInfo(id, out var orderInfo);
+
+                moneyText.text = Language.Get("PayMoneyNum", 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(() =>
+                {
+                    StoreModel.Instance.SendBuyShopItemWithPopCheck(storeConfig, 1);
+                });
+                moneyText.text = storeConfig.MoneyNum == 0 ? Language.Get("L1127") : storeConfig.MoneyNum.ToString();
+                moneyIcon.SetActive(storeConfig.MoneyNum != 0);
+                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);
+
+        }
+
+    }
+
+}
diff --git a/Main/System/OSActivity/OSRankHeroCallGiftCell.cs.meta b/Main/System/OSActivity/OSRankHeroCallGiftCell.cs.meta
new file mode 100644
index 0000000..88f7b73
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroCallGiftCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 002c4b8249e5e3c419d7146aaaa716b9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankHeroCallGiftWin.cs b/Main/System/OSActivity/OSRankHeroCallGiftWin.cs
new file mode 100644
index 0000000..e2deacd
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroCallGiftWin.cs
@@ -0,0 +1,63 @@
+锘�//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
+//    [  Date ]:           Tuesday, July 24, 2018
+//--------------------------------------------------------
+
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+//寮�鏈嶆椿鍔�-姝﹀皢鎷涘嫙绀煎寘
+public class OSRankHeroCallGiftWin : UIBase
+{
+    [SerializeField] ScrollerController scrollerController;
+
+    protected override void OnPreOpen()
+    {
+        scrollerController.OnRefreshCell += OnRefreshCell;
+        StoreModel.Instance.RefreshBuyShopLimitEvent += RefreshStore;
+        RechargeManager.Instance.rechargeCountEvent += OnRechargeCountEvent;
+        OSActivityManager.Instance.RefreshGiftSortList();
+        Display();
+    }
+
+    protected override void OnPreClose()
+    {
+        scrollerController.OnRefreshCell -= OnRefreshCell;
+        StoreModel.Instance.RefreshBuyShopLimitEvent -= RefreshStore;
+        RechargeManager.Instance.rechargeCountEvent -= OnRechargeCountEvent;
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as OSRankHeroCallGiftCell;
+        _cell.Display(cell.index);
+    }
+
+    void Display()
+    {
+        scrollerController.Refresh();
+        for (int i = 0; i < OSActivityManager.Instance.osHeroCallGiftSortList.Count; i++)
+        {
+            scrollerController.AddCell(ScrollerDataType.Header, i);
+        }
+        scrollerController.Restart();
+
+    }
+
+    void RefreshStore()
+    {
+        scrollerController.m_Scorller.RefreshActiveCellViews();
+    }
+
+    void OnRechargeCountEvent(int id)
+    {
+        scrollerController.m_Scorller.RefreshActiveCellViews();
+    }
+}
+
+
+
+
diff --git a/Main/System/OSActivity/OSRankHeroCallGiftWin.cs.meta b/Main/System/OSActivity/OSRankHeroCallGiftWin.cs.meta
new file mode 100644
index 0000000..4754706
--- /dev/null
+++ b/Main/System/OSActivity/OSRankHeroCallGiftWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a2f6ca07e3517cf4aac0abab1ce8a454
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankMainLeveAwardCell.cs b/Main/System/OSActivity/OSRankMainLeveAwardCell.cs
new file mode 100644
index 0000000..f367c7f
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMainLeveAwardCell.cs
@@ -0,0 +1,58 @@
+锘縰sing System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class OSRankMainLeveAwardCell : CellView
+{
+    [SerializeField] Text rankText;
+    [SerializeField] Image rankImg;
+    [SerializeField] ItemCell[] itemCells;
+
+    public void Display(int index)
+    {
+        var rank = index + 1;
+        if (index < 3)
+        {
+            rankImg.SetActive(true);
+            rankText.SetActive(false);
+            rankImg.SetSprite(StringUtility.Contact("Rank", index + 1));
+        }
+        else
+        {
+            rankImg.SetActive(false);
+            rankText.SetActive(true);
+            var keys = OSActivityManager.Instance.mainLevelRankAwards.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 = OSActivityManager.Instance.mainLevelRankAwards[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);
+            }
+        }
+    }
+
+}
diff --git a/Main/System/OSActivity/OSRankMainLeveAwardCell.cs.meta b/Main/System/OSActivity/OSRankMainLeveAwardCell.cs.meta
new file mode 100644
index 0000000..3ddceb6
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMainLeveAwardCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c7c89cdc2160945468c6bc1420bbf405
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankMainLeveAwardWin.cs b/Main/System/OSActivity/OSRankMainLeveAwardWin.cs
new file mode 100644
index 0000000..4e083fc
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMainLeveAwardWin.cs
@@ -0,0 +1,82 @@
+锘�//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
+//    [  Date ]:           Tuesday, July 24, 2018
+//--------------------------------------------------------
+
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+//寮�鏈嶆椿鍔�-涓荤嚎鍏冲崱鎺掕濂栧姳
+public class OSRankMainLeveAwardWin : UIBase
+{
+    [SerializeField] ScrollerController scrollerController;
+    [SerializeField] Text myRankText;
+    [SerializeField] Text myRankValueText;
+
+
+    protected override void OnPreOpen()
+    {
+        scrollerController.OnRefreshCell += OnRefreshCell;
+        CreateScroller();
+        DisplayMyRank(3);
+    }
+
+    protected override void OnPreClose()
+    {
+        scrollerController.OnRefreshCell -= OnRefreshCell;
+    }
+
+
+
+
+    void CreateScroller()
+    {
+        var keys = OSActivityManager.Instance.mainLevelRankAwards.Keys;
+
+        scrollerController.Refresh();
+        for (int i = 0; i < keys.Count; i++)
+        {
+            scrollerController.AddCell(ScrollerDataType.Header, i);
+        }
+        scrollerController.Restart();
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell.GetComponent<OSRankMainLeveAwardCell>();
+        _cell.Display(cell.index);
+    }
+
+    public void DisplayMyRank(int rankType)
+    {
+        RankData rankData = null;
+        rankData = RankModel.Instance.GetMyRank(rankType);
+        if (rankData == null)
+        {
+            myRankText.text = Language.Get("L1045");
+            myRankValueText.text = "";//Language.Get("L1125");
+            return;
+        }
+        int rank = rankData.rank;
+
+        if (rankData == null)
+        {
+            myRankValueText.text = "";//Language.Get("L1125");
+        }
+        else
+        {
+            myRankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue); ;
+        }
+
+        myRankText.text = Language.Get("L1126") + Language.Get("L1096") + rank.ToString();
+
+    }
+
+}
+
+
+
+
diff --git a/Main/System/OSActivity/OSRankMainLeveAwardWin.cs.meta b/Main/System/OSActivity/OSRankMainLeveAwardWin.cs.meta
new file mode 100644
index 0000000..db10689
--- /dev/null
+++ b/Main/System/OSActivity/OSRankMainLeveAwardWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 70dab80b73c888a4f9342841075f2c98
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OSRankWin.cs b/Main/System/OSActivity/OSRankWin.cs
new file mode 100644
index 0000000..273e303
--- /dev/null
+++ b/Main/System/OSActivity/OSRankWin.cs
@@ -0,0 +1,61 @@
+锘�//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
+//    [  Date ]:           Tuesday, July 24, 2018
+//--------------------------------------------------------
+
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+//寮�鏈嶆椿鍔�-鎺掕姒�  3 - 寮�鏈嶅叧鍗℃ 锛� 4 - 寮�鏈嶆嫑鍕熸
+public class OSRankWin : PlayerRankWin
+{
+
+    [SerializeField] Text timeText;
+    [SerializeField] Text overTimeText;
+
+
+
+
+    protected override void OnPreOpen()
+    {
+        base.OnPreOpen();
+        GlobalTimeEvent.Instance.secondEvent += OnSecond;
+        ShowTime();
+
+    }
+
+    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;
+    }
+
+    void OnSecond()
+    {
+        ShowTime();
+    }
+
+}
+
+
+
+
diff --git a/Main/System/OSActivity/OSRankWin.cs.meta b/Main/System/OSActivity/OSRankWin.cs.meta
new file mode 100644
index 0000000..2e0b234
--- /dev/null
+++ b/Main/System/OSActivity/OSRankWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0a29b5ea6f0229e45afdfecebbab816e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Store/StoreModel.cs b/Main/System/Store/StoreModel.cs
index d0b8220..35e8337 100644
--- a/Main/System/Store/StoreModel.cs
+++ b/Main/System/Store/StoreModel.cs
@@ -22,7 +22,7 @@
 
 public class StoreModel : GameSystemManager<StoreModel>
 {
-    public Dictionary<int, List<StoreData>> storeTypeDict { get; private set; } //鎵�鏈夋樉绀哄晢鍝�
+    public Dictionary<int, List<StoreData>> storeTypeDict { get; private set; } //鎵�鏈夋樉绀哄晢鍝� 鍟嗗簵绫诲瀷锛氬晢鍝佸垪琛�
     public Dictionary<int, int> shopRefreshCntDict = new Dictionary<int, int>();    //鍒锋柊娆℃暟
     private Dictionary<int, int> shopItemlimitDict = new Dictionary<int, int>();    //宸茶喘涔版鏁�
     public event Action RefreshBuyShopLimitEvent;
@@ -38,7 +38,7 @@
     public int heroSoulRefreshMoney;
     public int heroSoulRefreshFreeCount;
 
-    Dictionary<int, List<int>> freeShopDict = new Dictionary<int, List<int>>();
+    public Dictionary<int, List<int>> freeShopDict = new Dictionary<int, List<int>>();  //鍏嶈垂鍟嗗搧 鍟嗗簵绫诲瀷锛氬晢鍝佸垪琛�
     public Dictionary<int, int> shopMoneyTypeDict = new Dictionary<int, int>();
 
     public override void Init()
@@ -320,7 +320,7 @@
 
         if (storeConfig.ItemID != 0)
         {
-            ShopItemInfo shopItem = new ShopItemInfo(storeConfig.ID, storeConfig.ItemCnt);
+            ShopItemInfo shopItem = new ShopItemInfo(storeConfig.ItemID, storeConfig.ItemCnt);
             shopItemlist.Add(shopItem);
         }
         var extraItem = storeConfig.ItemListEx;
@@ -343,7 +343,7 @@
         List<int[]> shopItemlist = new List<int[]>();
         if (storeConfig.ItemID != 0)
         {
-            shopItemlist.Add(new int[] { storeConfig.ID, storeConfig.ItemCnt});
+            shopItemlist.Add(new int[] { storeConfig.ItemID, storeConfig.ItemCnt});
         }
         var extraItem = storeConfig.ItemListEx;
         for (int i = 0; i < extraItem.Length; i++)
@@ -372,8 +372,10 @@
 
     }
 
-    //浠欑帀璐拱鐗╁搧鐨勪簩娆$‘璁ゆ锛屼竴绾ц揣甯佸彧鏈変粰鐜� 榛樿涓轰粰鐜夊嵆鍙�
+    //璐у竵璐拱鐨勪簩娆$‘璁ゆ鐨勭‘璁よ褰�
     Dictionary<int, bool> buyItemCheckDict = new Dictionary<int, bool>();   //璁板綍鍕鹃�変俊鎭�
+    
+    //璐拱鍟嗗簵鐗╁搧鐨勪簩娆$‘璁ゆ
     //eventType 浜屾纭妗嗙被鍨嬶紝瀵瑰簲鏋氫妇 BuyStoreItemCheckType
     public void SendBuyShopItemWithPopCheck(StoreConfig model, int count, int eventType = 0)
     {
@@ -390,7 +392,7 @@
             return;
         }
 
-        ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("CostMoney", model.MoneyNum, model.MoneyType),
+        ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("BuyStoreItem", model.MoneyNum, model.MoneyType, model.Name),
         Language.Get("ConfirmCancel102"), (bool isOk, bool isToggle) =>
         {
             if (isOk)
@@ -567,7 +569,8 @@
     Normal = 1, //1锛氬潑甯�
     Guild = 2, //2锛氬叕浼�
     Hero = 3, //3锛氬皢榄�
-    
+    OSHeroCall = 4, //4锛氬紑鏈嶆嫑鍕熺ぜ鍖�
+
 }
 
 

--
Gitblit v1.8.0