From e5889e8e468247097ed9f1e9b2a5ef9cb88c6569 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期二, 21 四月 2026 19:30:24 +0800
Subject: [PATCH] 609 新增累充活动

---
 Main/System/OSActivity/OperationTotalRechargeInfo.cs.meta                                                     |   11 
 Main/System/TotDayRecharge/TotDayRechargeCell.cs                                                              |   74 ++
 Main/Config/Configs/ActTotDayRechargeTempConfig.cs.meta                                                       |   11 
 Main/Config/PartialConfigs/ActTotalRechargeTempConfig.cs.meta                                                 |   11 
 Main/Config/Configs/ActTotDayRechargeConfig.cs                                                                |   44 +
 Main/System/TotDayRecharge/TotDayRechargeManager.cs.meta                                                      |   11 
 Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagSCActTotalRechargeInfo.cs.meta                  |   11 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagSCActTotalRechargePlayerInfo.cs       |   12 
 Main/System/OSActivity/OSGalaTabCell.cs                                                                       |   32 +
 Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1B_tagSCActTotDayRechargeInfo.cs                      |   23 
 Main/System/TotDayRecharge/TotDayRechargeCell.cs.meta                                                         |   11 
 Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagSCActTotDayRechargePlayerInfo.cs.meta           |   11 
 Main/System/TotDayRecharge/TotDayRechargeWin.cs                                                               |   51 +
 Main/System/TotalRecharge/TotalRechargeManager.cs                                                             |  252 +++++++
 Main/Config/Configs/ActTotDayRechargeConfig.cs.meta                                                           |   11 
 Main/Utility/EnumHelper.cs                                                                                    |    2 
 Main/System/OSActivity/OSActivityManager.cs                                                                   |    2 
 Main/System/TotDayRecharge/TotDayRechargeWin.cs.meta                                                          |   11 
 Main/System/TotalRecharge/TotalRechargeCell.cs.meta                                                           |   11 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1B_tagSCActTotDayRechargeInfo.cs.meta       |   11 
 Main/Config/PartialConfigs/ActTotalRechargeTempConfig.cs                                                      |   59 +
 Main/System/TotDayRecharge.meta                                                                               |    8 
 Main/System/OSActivity/OperationTotalRechargeInfo.cs                                                          |   21 
 Main/System/OSActivity/OperationTotDayRechargeInfo.cs.meta                                                    |   11 
 Main/System/OSActivity/OSGalaBaseWin.cs                                                                       |  232 ++++++
 Main/Config/Configs/ActTotalRechargeTempConfig.cs                                                             |   50 +
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagSCActTotalRechargeInfo.cs.meta        |   11 
 Main/System/OpenServerActivity/OperationTimeHepler.cs                                                         |   72 ++
 Main/Config/PartialConfigs/ActTotDayRechargeTempConfig.cs.meta                                                |   11 
 Main/Config/PartialConfigs/ActTotDayRechargeTempConfig.cs                                                     |   58 +
 Main/System/TotalRecharge.meta                                                                                |    8 
 Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagSCActTotDayRechargePlayerInfo.cs                |   21 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagSCActTotalRechargeInfo.cs             |   14 
 Main/System/OSActivity/OSGalaTabCell.cs.meta                                                                  |   11 
 Main/Config/ConfigManager.cs                                                                                  |   12 
 Main/System/OSActivity/OperationTotDayRechargeInfo.cs                                                         |   21 
 Main/System/TotalRecharge/TotalRechargeManager.cs.meta                                                        |   11 
 Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagSCActTotalRechargePlayerInfo.cs.meta            |   11 
 Main/System/TotalRecharge/TotalRechargeWin.cs.meta                                                            |   11 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagSCActTotDayRechargePlayerInfo.cs.meta |   11 
 Main/Config/Configs/ActTotDayRechargeTempConfig.cs                                                            |   47 +
 Main/Config/Configs/ActTotalRechargeConfig.cs.meta                                                            |   11 
 Main/System/Main/HomeWin.cs                                                                                   |   13 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagSCActTotDayRechargePlayerInfo.cs      |   14 
 Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1B_tagSCActTotDayRechargeInfo.cs.meta                 |   11 
 Main/Main.cs                                                                                                  |    3 
 Main/System/TotDayRecharge/TotDayRechargeManager.cs                                                           |  251 +++++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagSCActTotalRechargePlayerInfo.cs.meta  |   11 
 Main/System/TotalRecharge/TotalRechargeWin.cs                                                                 |   51 +
 Main/System/TotalRecharge/TotalRechargeCell.cs                                                                |   74 ++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1B_tagSCActTotDayRechargeInfo.cs            |   12 
 Main/Config/Configs/ActTotalRechargeConfig.cs                                                                 |   47 +
 Main/Config/Configs/ActTotalRechargeTempConfig.cs.meta                                                        |   11 
 Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagSCActTotalRechargeInfo.cs                       |   23 
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                                          |    4 
 Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagSCActTotalRechargePlayerInfo.cs                 |   21 
 56 files changed, 1,868 insertions(+), 13 deletions(-)

diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 9c732d4..2852c9d 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -45,6 +45,10 @@
             typeof(ActHeroReturnArtConfig),
             typeof(ActLunhuidianTypeConfig),
             typeof(ActSignAwardConfig),
+            typeof(ActTotalRechargeConfig),
+            typeof(ActTotalRechargeTempConfig),
+            typeof(ActTotDayRechargeConfig),
+            typeof(ActTotDayRechargeTempConfig),
             typeof(ADAwardConfig),
             typeof(BattleMapConfig),
             typeof(BeautyConfig),
@@ -283,6 +287,14 @@
         ClearConfigDictionary<ActLunhuidianTypeConfig>();
         // 娓呯┖ ActSignAwardConfig 瀛楀吀
         ClearConfigDictionary<ActSignAwardConfig>();
+        // 娓呯┖ ActTotalRechargeConfig 瀛楀吀
+        ClearConfigDictionary<ActTotalRechargeConfig>();
+        // 娓呯┖ ActTotalRechargeTempConfig 瀛楀吀
+        ClearConfigDictionary<ActTotalRechargeTempConfig>();
+        // 娓呯┖ ActTotDayRechargeConfig 瀛楀吀
+        ClearConfigDictionary<ActTotDayRechargeConfig>();
+        // 娓呯┖ ActTotDayRechargeTempConfig 瀛楀吀
+        ClearConfigDictionary<ActTotDayRechargeTempConfig>();
         // 娓呯┖ ADAwardConfig 瀛楀吀
         ClearConfigDictionary<ADAwardConfig>();
         // 娓呯┖ BattleMapConfig 瀛楀吀
diff --git a/Main/Config/Configs/ActTotDayRechargeConfig.cs b/Main/Config/Configs/ActTotDayRechargeConfig.cs
new file mode 100644
index 0000000..2ab126e
--- /dev/null
+++ b/Main/Config/Configs/ActTotDayRechargeConfig.cs
@@ -0,0 +1,44 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2026骞�4鏈�20鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class ActTotDayRechargeConfig : ConfigBase<int, ActTotDayRechargeConfig>
+{
+    static ActTotDayRechargeConfig()
+    {
+        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
+        visit = true; 
+    }
+
+    public int CfgID;
+	public int TemplateID;
+	public int ActShopType;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out CfgID); 
+
+			int.TryParse(tables[1],out TemplateID); 
+
+			int.TryParse(tables[2],out ActShopType); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/ActTotDayRechargeConfig.cs.meta b/Main/Config/Configs/ActTotDayRechargeConfig.cs.meta
new file mode 100644
index 0000000..1618988
--- /dev/null
+++ b/Main/Config/Configs/ActTotDayRechargeConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 76b774172f2c1ec41852272287e4b25c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/Configs/ActTotDayRechargeTempConfig.cs b/Main/Config/Configs/ActTotDayRechargeTempConfig.cs
new file mode 100644
index 0000000..29d5cc7
--- /dev/null
+++ b/Main/Config/Configs/ActTotDayRechargeTempConfig.cs
@@ -0,0 +1,47 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2026骞�4鏈�20鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class ActTotDayRechargeTempConfig : ConfigBase<int, ActTotDayRechargeTempConfig>
+{
+    static ActTotDayRechargeTempConfig()
+    {
+        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
+        visit = true; 
+    }
+
+    public int AwardID;
+	public int TemplateID;
+	public int NeedDay;
+	public int[][] AwardItemList;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out AwardID); 
+
+			int.TryParse(tables[1],out TemplateID); 
+
+			int.TryParse(tables[2],out NeedDay); 
+
+			AwardItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/ActTotDayRechargeTempConfig.cs.meta b/Main/Config/Configs/ActTotDayRechargeTempConfig.cs.meta
new file mode 100644
index 0000000..c92212a
--- /dev/null
+++ b/Main/Config/Configs/ActTotDayRechargeTempConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b6d7d5571b6413f489eb78b5fe653a5f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/Configs/ActTotalRechargeConfig.cs b/Main/Config/Configs/ActTotalRechargeConfig.cs
new file mode 100644
index 0000000..03e5cff
--- /dev/null
+++ b/Main/Config/Configs/ActTotalRechargeConfig.cs
@@ -0,0 +1,47 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2026骞�4鏈�20鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class ActTotalRechargeConfig : ConfigBase<int, ActTotalRechargeConfig>
+{
+    static ActTotalRechargeConfig()
+    {
+        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
+        visit = true; 
+    }
+
+    public int CfgID;
+	public int IsDayReset;
+	public int CTGTempID;
+	public int CTGShopType;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out CfgID); 
+
+			int.TryParse(tables[1],out IsDayReset); 
+
+			int.TryParse(tables[2],out CTGTempID); 
+
+			int.TryParse(tables[3],out CTGShopType); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/ActTotalRechargeConfig.cs.meta b/Main/Config/Configs/ActTotalRechargeConfig.cs.meta
new file mode 100644
index 0000000..af9d069
--- /dev/null
+++ b/Main/Config/Configs/ActTotalRechargeConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a27d596fa4a6e284c90afe1cb0e50d5b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/Configs/ActTotalRechargeTempConfig.cs b/Main/Config/Configs/ActTotalRechargeTempConfig.cs
new file mode 100644
index 0000000..520f4c4
--- /dev/null
+++ b/Main/Config/Configs/ActTotalRechargeTempConfig.cs
@@ -0,0 +1,50 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2026骞�4鏈�20鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class ActTotalRechargeTempConfig : ConfigBase<int, ActTotalRechargeTempConfig>
+{
+    static ActTotalRechargeTempConfig()
+    {
+        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
+        visit = true; 
+    }
+
+    public int AwardID;
+	public int TemplateID;
+	public float NeedAmount;
+	public int AwardIndex;
+	public int[][] AwardItemList;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out AwardID); 
+
+			int.TryParse(tables[1],out TemplateID); 
+
+			float.TryParse(tables[2],out NeedAmount); 
+
+			int.TryParse(tables[3],out AwardIndex); 
+
+			AwardItemList = JsonMapper.ToObject<int[][]>(tables[4].Replace("(", "[").Replace(")", "]")); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/ActTotalRechargeTempConfig.cs.meta b/Main/Config/Configs/ActTotalRechargeTempConfig.cs.meta
new file mode 100644
index 0000000..6c66a76
--- /dev/null
+++ b/Main/Config/Configs/ActTotalRechargeTempConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f90ea937d9f96a549a3f2f9c9ce1c59b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/ActTotDayRechargeTempConfig.cs b/Main/Config/PartialConfigs/ActTotDayRechargeTempConfig.cs
new file mode 100644
index 0000000..825dceb
--- /dev/null
+++ b/Main/Config/PartialConfigs/ActTotDayRechargeTempConfig.cs
@@ -0,0 +1,58 @@
+using System.Collections.Generic;
+
+public partial class ActTotDayRechargeTempConfig : ConfigBase<int, ActTotDayRechargeTempConfig>
+{
+    // 妯℃澘缂栧彿: 鎵�闇�绱厖澶� :濂栧姳ID
+    private static Dictionary<int, Dictionary<int, int>> infoDict = new Dictionary<int, Dictionary<int, int>>();
+    // 妯℃澘缂栧彿 鎵�闇�绱厖澶�
+    private static Dictionary<int, List<int>> sortDict = new Dictionary<int, List<int>>();
+    protected override void OnConfigParseCompleted()
+    {
+        if (!infoDict.TryGetValue(TemplateID, out var dict))
+        {
+            dict = new Dictionary<int, int>();
+            infoDict[TemplateID] = dict;
+        }
+        dict[NeedDay] = AwardID;
+    }
+
+    private static void LoadSortList()
+    {
+        if (!sortDict.IsNullOrEmpty()) return;
+        foreach (var kvp in infoDict)
+        {
+            int templateID = kvp.Key;
+            List<int> list = new List<int>(kvp.Value.Keys);
+            list.Sort();
+            sortDict[templateID] = list;
+        }
+    }
+
+    public static List<int> GetNeedDaySortList(int templateID)
+    {
+        LoadSortList();
+        sortDict.TryGetValue(templateID, out var list);
+        return list;
+    }
+
+    public static Dictionary<int, int> GetTemplateIDDict(int templateID)
+    {
+        infoDict.TryGetValue(templateID, out var dict);
+        return dict;
+    }
+
+    public static int GetID(int templateID, int needDay)
+    {
+        var dict = GetTemplateIDDict(templateID);
+        if (dict == null) return 0;
+
+        dict.TryGetValue(needDay, out var id);
+        return id;
+    }
+
+    public static ActTotDayRechargeTempConfig GetConfig(int templateID, int needDay)
+    {
+        int id = GetID(templateID, needDay);
+        return Get(id);
+    }
+}
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/ActTotDayRechargeTempConfig.cs.meta b/Main/Config/PartialConfigs/ActTotDayRechargeTempConfig.cs.meta
new file mode 100644
index 0000000..c6fa559
--- /dev/null
+++ b/Main/Config/PartialConfigs/ActTotDayRechargeTempConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 200643bb4766ae74fbb865f9583a43e0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/ActTotalRechargeTempConfig.cs b/Main/Config/PartialConfigs/ActTotalRechargeTempConfig.cs
new file mode 100644
index 0000000..1c36c9e
--- /dev/null
+++ b/Main/Config/PartialConfigs/ActTotalRechargeTempConfig.cs
@@ -0,0 +1,59 @@
+using System.Collections.Generic;
+
+public partial class ActTotalRechargeTempConfig : ConfigBase<int, ActTotalRechargeTempConfig>
+{
+    // 妯℃澘缂栧彿: 濂栧姳绱㈠紩 :濂栧姳ID
+    private static Dictionary<int, Dictionary<int, int>> infoDict = new Dictionary<int, Dictionary<int, int>>();
+    // 妯℃澘缂栧彿 濂栧姳绱㈠紩
+    private static Dictionary<int, List<int>> sortDict = new Dictionary<int, List<int>>();
+    protected override void OnConfigParseCompleted()
+    {
+        if (!infoDict.TryGetValue(TemplateID, out var dict))
+        {
+            dict = new Dictionary<int, int>();
+            infoDict[TemplateID] = dict;
+        }
+        dict[AwardIndex] = AwardID;
+    }
+
+    private static void LoadSortList()
+    {
+        if (!sortDict.IsNullOrEmpty()) return;
+        foreach (var kvp in infoDict)
+        {
+            int templateID = kvp.Key;
+            List<int> list = new List<int>(kvp.Value.Keys);
+            list.Sort();
+            sortDict[templateID] = list;
+        }
+    }
+
+    public static List<int> GetAwardIndexSortList(int templateID)
+    {
+        LoadSortList();
+        sortDict.TryGetValue(templateID, out var list);
+        return list;
+    }
+    
+    public static Dictionary<int, int> GetTemplateIDDict(int templateID)
+    {
+        infoDict.TryGetValue(templateID, out var dict);
+        return dict;
+    }
+
+    public static int GetID(int templateID, int awardIndex)
+    {
+        var dict = GetTemplateIDDict(templateID);
+        if (dict == null) return 0;
+
+        dict.TryGetValue(awardIndex, out var id);
+        return id;
+    }
+
+    public static ActTotalRechargeTempConfig GetConfig(int templateID, int awardIndex)
+    {
+        int id = GetID(templateID, awardIndex);
+        return Get(id);
+    }
+
+}
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/ActTotalRechargeTempConfig.cs.meta b/Main/Config/PartialConfigs/ActTotalRechargeTempConfig.cs.meta
new file mode 100644
index 0000000..fd9d204
--- /dev/null
+++ b/Main/Config/PartialConfigs/ActTotalRechargeTempConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c6b8fcbcc60e80f459e9b25121ff4f34
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagSCActTotDayRechargePlayerInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagSCActTotDayRechargePlayerInfo.cs
new file mode 100644
index 0000000..58c7e01
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagSCActTotDayRechargePlayerInfo.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using System.Collections;
+
+// AA 1A 绱厖澶╂椿鍔ㄧ帺瀹朵俊鎭� #tagSCActTotDayRechargePlayerInfo
+
+public class DTCAA1A_tagSCActTotDayRechargePlayerInfo : DtcBasic
+{
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        HAA1A_tagSCActTotDayRechargePlayerInfo vNetData = vNetPack as HAA1A_tagSCActTotDayRechargePlayerInfo;
+        TotDayRechargeManager.Instance.UpdateTotDayRechargePlayerInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagSCActTotDayRechargePlayerInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagSCActTotDayRechargePlayerInfo.cs.meta
new file mode 100644
index 0000000..8001d55
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1A_tagSCActTotDayRechargePlayerInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ff910fd4544f88147a8ac9ebe5d54a6c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1B_tagSCActTotDayRechargeInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1B_tagSCActTotDayRechargeInfo.cs
new file mode 100644
index 0000000..0d452f5
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1B_tagSCActTotDayRechargeInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// AA 1B 绱厖澶╂椿鍔ㄤ俊鎭� #tagSCActTotDayRechargeInfo
+
+public class DTCAA1B_tagSCActTotDayRechargeInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HAA1B_tagSCActTotDayRechargeInfo vNetData = vNetPack as HAA1B_tagSCActTotDayRechargeInfo;
+        OperationTimeHepler.Instance.UpdateActTotDayRechargeInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1B_tagSCActTotDayRechargeInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1B_tagSCActTotDayRechargeInfo.cs.meta
new file mode 100644
index 0000000..60e3430
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1B_tagSCActTotDayRechargeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2ab40d2df9df70846b324d89389c5fb7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagSCActTotalRechargePlayerInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagSCActTotalRechargePlayerInfo.cs
new file mode 100644
index 0000000..15cb47b
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagSCActTotalRechargePlayerInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// AA 1C 绱厖娲诲姩鐜╁淇℃伅 #tagSCActTotalRechargePlayerInfo
+
+public class DTCAA1C_tagSCActTotalRechargePlayerInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HAA1C_tagSCActTotalRechargePlayerInfo vNetData = vNetPack as HAA1C_tagSCActTotalRechargePlayerInfo;
+        TotalRechargeManager.Instance.UpdateTotalRechargePlayerInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagSCActTotalRechargePlayerInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagSCActTotalRechargePlayerInfo.cs.meta
new file mode 100644
index 0000000..b3e6cd0
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1C_tagSCActTotalRechargePlayerInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8bf165379885e0a4685dd17c772c34c2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagSCActTotalRechargeInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagSCActTotalRechargeInfo.cs
new file mode 100644
index 0000000..779c964
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagSCActTotalRechargeInfo.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using System.Collections;
+
+// AA 1D 绱厖娲诲姩淇℃伅 #tagSCActTotalRechargeInfo
+
+public class DTCAA1D_tagSCActTotalRechargeInfo : DtcBasic
+{
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        HAA1D_tagSCActTotalRechargeInfo vNetData = vNetPack as HAA1D_tagSCActTotalRechargeInfo;
+        OperationTimeHepler.Instance.UpdateActTotalRechargeInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagSCActTotalRechargeInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagSCActTotalRechargeInfo.cs.meta
new file mode 100644
index 0000000..aab4fce
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HAA_SaleActivity/DTCAA1D_tagSCActTotalRechargeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a9b1c15e1cc65e940a9e3c967001c7cd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
index 2fdaf6a..270cccc 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -163,6 +163,10 @@
         Register(typeof(HA925_tagSCQunyingPlayerInfo), typeof(DTCA925_tagSCQunyingPlayerInfo));
         Register(typeof(HC010_tagSCCrossZoneInfo), typeof(DTCC010_tagSCCrossZoneInfo));
         Register(typeof(HA305_tagSCHorseIDInfo), typeof(DTCA305_tagSCHorseIDInfo));
+        Register(typeof(HAA1A_tagSCActTotDayRechargePlayerInfo), typeof(DTCAA1A_tagSCActTotDayRechargePlayerInfo));
+        Register(typeof(HAA1B_tagSCActTotDayRechargeInfo), typeof(DTCAA1B_tagSCActTotDayRechargeInfo));
+        Register(typeof(HAA1C_tagSCActTotalRechargePlayerInfo), typeof(DTCAA1C_tagSCActTotalRechargePlayerInfo));
+        Register(typeof(HAA1D_tagSCActTotalRechargeInfo), typeof(DTCAA1D_tagSCActTotalRechargeInfo));
     }
 
     //涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagSCActTotDayRechargePlayerInfo.cs b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagSCActTotDayRechargePlayerInfo.cs
new file mode 100644
index 0000000..bae4046
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagSCActTotDayRechargePlayerInfo.cs
@@ -0,0 +1,21 @@
+using UnityEngine;
+using System.Collections;
+
+// AA 1A 绱厖澶╂椿鍔ㄧ帺瀹朵俊鎭� #tagSCActTotDayRechargePlayerInfo
+
+public class HAA1A_tagSCActTotDayRechargePlayerInfo : GameNetPackBasic {
+    public byte ActNum;    //娲诲姩缂栧彿
+    public byte TotalDays;    //娲诲姩绱厖澶╂暟
+    public uint AwardRecord;    //绱厖澶╁鍔遍濂栬褰曪紝鎸夊ぉ浜岃繘鍒朵綅瀛樺偍鏄惁宸查鍙�
+
+    public HAA1A_tagSCActTotDayRechargePlayerInfo () {
+        _cmd = (ushort)0xAA1A;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out ActNum, vBytes, NetDataType.BYTE);
+        TransBytes (out TotalDays, vBytes, NetDataType.BYTE);
+        TransBytes (out AwardRecord, vBytes, NetDataType.DWORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagSCActTotDayRechargePlayerInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagSCActTotDayRechargePlayerInfo.cs.meta
new file mode 100644
index 0000000..e95cb46
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1A_tagSCActTotDayRechargePlayerInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d69e237c7851de84ab85e666d561e809
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1B_tagSCActTotDayRechargeInfo.cs b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1B_tagSCActTotDayRechargeInfo.cs
new file mode 100644
index 0000000..2eb3f93
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1B_tagSCActTotDayRechargeInfo.cs
@@ -0,0 +1,23 @@
+using UnityEngine;
+using System.Collections;
+
+// AA 1B 绱厖澶╂椿鍔ㄤ俊鎭� #tagSCActTotDayRechargeInfo
+
+public class HAA1B_tagSCActTotDayRechargeInfo : GameNetPackBasic {
+    public byte ActNum;    // 娲诲姩缂栧彿
+    public string StartDate;    // 寮�濮嬫棩鏈� y-m-d
+    public string EndtDate;    // 缁撴潫鏃ユ湡 y-m-d
+    public ushort CfgID;    // 娲诲姩鏃堕棿琛ㄩ厤缃甀D
+
+    public HAA1B_tagSCActTotDayRechargeInfo () {
+        _cmd = (ushort)0xAA1B;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out ActNum, vBytes, NetDataType.BYTE);
+        TransBytes (out StartDate, vBytes, NetDataType.Chars, 10);
+        TransBytes (out EndtDate, vBytes, NetDataType.Chars, 10);
+        TransBytes (out CfgID, vBytes, NetDataType.WORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1B_tagSCActTotDayRechargeInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1B_tagSCActTotDayRechargeInfo.cs.meta
new file mode 100644
index 0000000..37561d1
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1B_tagSCActTotDayRechargeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 98ba7407ed7fd9e4eac77a6e39e53bce
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagSCActTotalRechargePlayerInfo.cs b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagSCActTotalRechargePlayerInfo.cs
new file mode 100644
index 0000000..e9e5af8
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagSCActTotalRechargePlayerInfo.cs
@@ -0,0 +1,21 @@
+using UnityEngine;
+using System.Collections;
+
+// AA 1C 绱厖娲诲姩鐜╁淇℃伅 #tagSCActTotalRechargePlayerInfo
+
+public class HAA1C_tagSCActTotalRechargePlayerInfo : GameNetPackBasic {
+    public byte ActNum;    //娲诲姩缂栧彿
+    public uint CoinTotal;    //娲诲姩绱鍏呭�奸coin鍊�
+    public uint AwardRecord;    //绱厖濂栧姳棰嗗璁板綍锛屾寜濂栧姳绱㈠紩浜岃繘鍒朵綅瀛樺偍鏄惁宸查鍙�
+
+    public HAA1C_tagSCActTotalRechargePlayerInfo () {
+        _cmd = (ushort)0xAA1C;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out ActNum, vBytes, NetDataType.BYTE);
+        TransBytes (out CoinTotal, vBytes, NetDataType.DWORD);
+        TransBytes (out AwardRecord, vBytes, NetDataType.DWORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagSCActTotalRechargePlayerInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagSCActTotalRechargePlayerInfo.cs.meta
new file mode 100644
index 0000000..f24772e
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1C_tagSCActTotalRechargePlayerInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 041f64014b18e6340be4b4c2f63f2a8d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagSCActTotalRechargeInfo.cs b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagSCActTotalRechargeInfo.cs
new file mode 100644
index 0000000..87d4722
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagSCActTotalRechargeInfo.cs
@@ -0,0 +1,23 @@
+using UnityEngine;
+using System.Collections;
+
+// AA 1D 绱厖娲诲姩淇℃伅 #tagSCActTotalRechargeInfo
+
+public class HAA1D_tagSCActTotalRechargeInfo : GameNetPackBasic {
+    public byte ActNum;    // 娲诲姩缂栧彿
+    public string StartDate;    // 寮�濮嬫棩鏈� y-m-d
+    public string EndtDate;    // 缁撴潫鏃ユ湡 y-m-d
+    public ushort CfgID;    // 娲诲姩鏃堕棿琛ㄩ厤缃甀D
+
+    public HAA1D_tagSCActTotalRechargeInfo () {
+        _cmd = (ushort)0xAA1D;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out ActNum, vBytes, NetDataType.BYTE);
+        TransBytes (out StartDate, vBytes, NetDataType.Chars, 10);
+        TransBytes (out EndtDate, vBytes, NetDataType.Chars, 10);
+        TransBytes (out CfgID, vBytes, NetDataType.WORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagSCActTotalRechargeInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagSCActTotalRechargeInfo.cs.meta
new file mode 100644
index 0000000..75b10b3
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA1D_tagSCActTotalRechargeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8e1a6e96357ef3e4e91707b9a141f552
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Main.cs b/Main/Main.cs
index 7b4ad88..a8e0fc9 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -114,6 +114,9 @@
         managers.Add(ViewBuffManager.Instance);
         managers.Add(HeroReturnManager.Instance);
         managers.Add(CrossServerBaseManager.Instance);
+        managers.Add(TotalRechargeManager.Instance);
+        managers.Add(TotDayRechargeManager.Instance);
+
 
         foreach (var manager in managers)
         {
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index d0abef8..076820e 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -342,7 +342,10 @@
         {
             DisplayHeroReturn();
         }
-
+        else if (type == OperationType.TotalRecharge || type == OperationType.TotDayRecharge)
+        {
+            DisplayGalaBtn();
+        }
     }
 
     private void OpenServerActivityStateChange()
@@ -350,6 +353,7 @@
         DisplayTimeRush();
         DisplayHeroDebut();
         DisplayHeroReturn();
+        DisplayGalaBtn();
     }
 
     private void OnShowGiftIdListAddEvent()
@@ -915,7 +919,7 @@
         osHeroTrainBtn.SetActive(OSActivityManager.Instance.IsOpened(7));
         osBeautyMMBtn.SetActive(OSActivityManager.Instance.IsOpened(8));
         osMinggeBtn.SetActive(OSActivityManager.Instance.IsOpened(9));
-        osGalaBtn.SetActive(OSActivityManager.Instance.IsOpenedOSGala());
+        DisplayGalaBtn();
     }
 
     void OnDayEvent()
@@ -923,6 +927,11 @@
         DisplayOSActivity();
     }
 
+    void DisplayGalaBtn()
+    {
+        bool isGalaOpen = TotDayRechargeManager.Instance.IsOpen || TotalRechargeManager.Instance.IsOpen;
+        osGalaBtn.SetActive(OSActivityManager.Instance.IsOpenedOSGala() || isGalaOpen);
+    }
 
     void DisplayTimeRush()
     {
diff --git a/Main/System/OSActivity/OSActivityManager.cs b/Main/System/OSActivity/OSActivityManager.cs
index c2ca0a3..56002d0 100644
--- a/Main/System/OSActivity/OSActivityManager.cs
+++ b/Main/System/OSActivity/OSActivityManager.cs
@@ -232,7 +232,7 @@
     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;
+        osGalaRedpoint2.state = IsOpenedOSGala() && !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;
diff --git a/Main/System/OSActivity/OSGalaBaseWin.cs b/Main/System/OSActivity/OSGalaBaseWin.cs
index 1482eec..90e5b32 100644
--- a/Main/System/OSActivity/OSGalaBaseWin.cs
+++ b/Main/System/OSActivity/OSGalaBaseWin.cs
@@ -4,6 +4,7 @@
 //--------------------------------------------------------
 
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using UnityEngine;
@@ -11,36 +12,170 @@
 
 
 ////寮�鏈嶇洓鍏�
-public class OSGalaBaseWin : FunctionsBaseWin
+public class OSGalaBaseWin : UIBase
 {
+    [SerializeField] Transform moneyTrans2;
+    [SerializeField] Transform galaTrans;
+    [SerializeField] ScrollerController tabScroller;
     [SerializeField] Image processImg;
-    [SerializeField] Text timeText;
+    [SerializeField] Text galaTimeText;
     [SerializeField] Text totalScoreText;
     [SerializeField] ItemCell[] itemCells;
     [SerializeField] Image[] gotImgs;
     [SerializeField] Text[] scoreTexts;
     [SerializeField] UIEffectPlayer[] effectPlayers;
 
+    [SerializeField] Transform totalRechargeTrans;
+    [SerializeField] Text totalRechargeTimeText;
+    [SerializeField] ItemCell totalRechargeItemCell;
+    [SerializeField] Text totalRechargeScoreText;
+    [SerializeField] RotationTween totalRechargeRotationTween;
+    [SerializeField] Image totalRechargeFreeRedImage;
+    [SerializeField] Image totalRechargeHaveImage;
+
+    [SerializeField] Transform totDayRechargeTrans;
+    [SerializeField] Text totDayRechargeTimeText;
+    [SerializeField] ItemCell totDayRechargeItemCell;
+    [SerializeField] Text totDayRechargeScoreText;
+    [SerializeField] RotationTween totDayRechargeRotationTween;
+    [SerializeField] Image totDayRechargeFreeRedImage;
+    [SerializeField] Image totDayRechargeHaveImage;
+
+    private int nowTabId = 0;
+    private UIBase currentSubUI;
+    private List<int> tabIdList = new List<int> { 0, 1, 2, 3, 4 };
+    private Dictionary<int, string> tabTitleKeys = new Dictionary<int, string>
+    {
+        { 0, "DayMission1" },
+        { 1, "OSActivity9" },
+        { 2, "OSActivity3" },
+        { 3, "TotalRecharge04" },
+        { 4, "TotalRecharge05" },
+    };
+    private Dictionary<int, int> tabRedpointKeys = new Dictionary<int, int>
+    {
+        { 0, 1131 },
+        { 1, 1132 },
+        { 2, 1133 },
+        { 3, 1135 },
+        { 4, 1136 },
+    };
 
     protected override void OnPreOpen()
     {
-        base.OnPreOpen();
+        tabScroller.OnRefreshCell += OnRefreshTabCell;
         OSActivityManager.Instance.OnOSGalaDataChangeEvent += OnOSGalaDataChangeEvent;
         GlobalTimeEvent.Instance.secondEvent += ShowTime;
+        StoreModel.Instance.RefreshBuyShopLimitEvent += OnRefreshBuyShopLimitEvent;
+        TotalRechargeManager.Instance.OnTotalRechargePlayerInfoEvent += OnTotalRechargePlayerInfoEvent;
+        TotDayRechargeManager.Instance.OnTotDayRechargePlayerInfoEvent += OnTotDayRechargePlayerInfoEvent;
+        CreateTabScroller();
         Display();
     }
 
     protected override void OnPreClose()
     {
-        base.OnPreClose();
+        tabScroller.OnRefreshCell -= OnRefreshTabCell;
         OSActivityManager.Instance.OnOSGalaDataChangeEvent -= OnOSGalaDataChangeEvent;
         GlobalTimeEvent.Instance.secondEvent -= ShowTime;
+        StoreModel.Instance.RefreshBuyShopLimitEvent -= OnRefreshBuyShopLimitEvent;
+        TotalRechargeManager.Instance.OnTotalRechargePlayerInfoEvent -= OnTotalRechargePlayerInfoEvent;
+        TotDayRechargeManager.Instance.OnTotDayRechargePlayerInfoEvent -= OnTotDayRechargePlayerInfoEvent;
+        CloseCurrentSubUI();
     }
 
-
-    protected override void OpenSubUIByTabIndex()
+    private void OnTotDayRechargePlayerInfoEvent()
     {
-        switch (functionOrder)
+        tabScroller.m_Scorller.RefreshActiveCellViews();
+        SelectBottomTab(nowTabId);
+        Display();
+    }
+
+    private void OnTotalRechargePlayerInfoEvent()
+    {
+        tabScroller.m_Scorller.RefreshActiveCellViews();
+        SelectBottomTab(nowTabId);
+        Display();
+    }
+
+    private void OnRefreshBuyShopLimitEvent()
+    {
+        tabScroller.m_Scorller.RefreshActiveCellViews();
+        SelectBottomTab(nowTabId);
+        Display();
+    }
+
+    private void CreateTabScroller()
+    {
+        tabScroller.Refresh();
+        bool isOSGalaOpen = OSActivityManager.Instance.IsOpenedOSGala();
+        bool isTotDayRechargeOpen = TotDayRechargeManager.Instance.IsOpen;
+        bool isTotalRechargeOpen = TotalRechargeManager.Instance.IsOpen;
+        List<int> visibleTabs = new List<int>();
+        for (int i = 0; i < tabIdList.Count; i++)
+        {
+            int tabId = tabIdList[i];
+            bool canShow = false;
+            if (tabId == 0 || tabId == 1 || tabId == 2)
+            {
+                canShow = isOSGalaOpen;
+            }
+            else if (tabId == 3)
+            {
+                canShow = isTotalRechargeOpen;
+            }
+            else if (tabId == 4)
+            {
+                canShow = isTotDayRechargeOpen;
+            }
+            if (canShow)
+            {
+                visibleTabs.Add(tabId);
+                tabScroller.AddCell(ScrollerDataType.Header, tabId);
+            }
+        }
+        if (visibleTabs.Count > 0)
+        {
+            nowTabId = visibleTabs[0];
+        }
+        tabScroller.Restart();
+        SelectBottomTab(nowTabId);
+    }
+
+    private void OnRefreshTabCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell.GetComponent<OSGalaTabCell>();
+        string titleKey = tabTitleKeys.ContainsKey(cell.index) ? tabTitleKeys[cell.index] : "";
+        int redpointId = tabRedpointKeys.ContainsKey(cell.index) ? tabRedpointKeys[cell.index] : 0;
+        _cell?.Display(cell.index, nowTabId, titleKey, redpointId, OnTabClicked);
+    }
+
+    private void OnTabClicked(int index)
+    {
+        if (nowTabId == index)
+        {
+            return;
+        }
+        nowTabId = index;
+        tabScroller.m_Scorller.RefreshActiveCellViews();
+        SelectBottomTab(index);
+    }
+
+    private void SelectBottomTab(int index)
+    {
+        if (currentSubUI != null)
+        {
+            currentSubUI.CloseWindow();
+            currentSubUI = null;
+        }
+
+        galaTrans.SetActive(index == 0 || index == 1 || index == 2);
+        moneyTrans2.SetActive(index == 0 || index == 1 || index == 2);
+
+        totalRechargeTrans.SetActive(index == 3);
+        totDayRechargeTrans.SetActive(index == 4);
+
+        switch (index)
         {
             case 0:
                 currentSubUI = UIManager.Instance.OpenWindow<OSGalaMissionWin>();
@@ -51,6 +186,81 @@
             case 2:
                 currentSubUI = UIManager.Instance.OpenWindow<OSGalaGiftWin>();
                 break;
+            case 3:
+                currentSubUI = UIManager.Instance.OpenWindow<TotalRechargeWin>();
+
+                var data = TotalRechargeManager.Instance.GetStoreData();
+                bool isReceived = TotalRechargeManager.Instance.IsReceived(data.shopId);
+                totalRechargeItemCell.Init(new ItemCellModel(data.storeConfig.ItemID, false, data.storeConfig.ItemCnt));
+                totalRechargeItemCell.button.SetListener(() =>
+                {
+                    if (!isReceived)
+                    {
+                        StoreModel.Instance.SendBuyShopItem(data.storeConfig, 1);
+                    }
+                    else
+                    {
+                        ItemTipUtility.Show(data.storeConfig.ItemID);
+                    }
+
+                });
+
+                totalRechargeHaveImage.SetActive(isReceived);
+                totalRechargeFreeRedImage.SetActive(!isReceived);
+                totalRechargeTimeText.text = TotalRechargeManager.Instance.GetActTimeStr();
+                totalRechargeScoreText.text = Language.Get("TotalRecharge06", TotalRechargeManager.Instance.coinTotal);
+                if (!isReceived)
+                {
+                    totalRechargeRotationTween.Play();
+                }
+                else
+                {
+                    totalRechargeRotationTween.Stop();
+                    totalRechargeRotationTween.SetStartState();
+                }
+                break;
+            case 4:
+                currentSubUI = UIManager.Instance.OpenWindow<TotDayRechargeWin>();
+
+                var data1 = TotDayRechargeManager.Instance.GetStoreData();
+                bool isReceived1 = TotDayRechargeManager.Instance.IsReceived(data1.shopId);
+                totDayRechargeItemCell.Init(new ItemCellModel(data1.storeConfig.ItemID, false, data1.storeConfig.ItemCnt));
+                totDayRechargeItemCell.button.SetListener(() =>
+                {
+                    if (!isReceived1)
+                    {
+                        StoreModel.Instance.SendBuyShopItem(data1.storeConfig, 1);
+                    }
+                    else
+                    {
+                        ItemTipUtility.Show(data1.storeConfig.ItemID);
+                    }
+
+                });
+
+                totDayRechargeHaveImage.SetActive(isReceived1);
+                totDayRechargeFreeRedImage.SetActive(!isReceived1);
+                totDayRechargeTimeText.text = TotDayRechargeManager.Instance.GetActTimeStr();
+                totDayRechargeScoreText.text = Language.Get("TotalRecharge07", TotDayRechargeManager.Instance.totalDays);
+                if (!isReceived1)
+                {
+                    totDayRechargeRotationTween.Play();
+                }
+                else
+                {
+                    totDayRechargeRotationTween.Stop();
+                    totDayRechargeRotationTween.SetStartState();
+                }
+                break;
+        }
+    }
+
+    private void CloseCurrentSubUI()
+    {
+        if (currentSubUI != null)
+        {
+            currentSubUI.CloseWindow();
+            currentSubUI = null;
         }
     }
 
@@ -123,17 +333,19 @@
             }
         }
     }
-    
+
     void ShowTime()
     {
         if (TimeUtility.OpenDay >= OSActivityManager.Instance.osGalaOpenDays)
         {
-            timeText.text = Language.Get("OSActivity6");
+            galaTimeText.text = Language.Get("OSActivity6");
         }
         else
         {
-            timeText.text = Language.Get("OSActivity10") + TimeUtility.SecondsToShortDHMS(TimeUtility.GetRemindTimeByOpenDay(OSActivityManager.Instance.osGalaOpenDays));
+            galaTimeText.text = Language.Get("OSActivity10") + TimeUtility.SecondsToShortDHMS(TimeUtility.GetRemindTimeByOpenDay(OSActivityManager.Instance.osGalaOpenDays));
         }
+        totalRechargeTimeText.text = TotalRechargeManager.Instance.GetActTimeStr();
+        totDayRechargeTimeText.text = TotDayRechargeManager.Instance.GetActTimeStr();
     }
 }
 
diff --git a/Main/System/OSActivity/OSGalaTabCell.cs b/Main/System/OSActivity/OSGalaTabCell.cs
new file mode 100644
index 0000000..fbc9916
--- /dev/null
+++ b/Main/System/OSActivity/OSGalaTabCell.cs
@@ -0,0 +1,32 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class OSGalaTabCell : MonoBehaviour
+{
+    [SerializeField] Color unSelectColor;
+    [SerializeField] Color selectColor;
+    [SerializeField] ImageEx bgImage;
+    [SerializeField] TextEx titleText;
+    [SerializeField] RedpointBehaviour redpoint;
+    [SerializeField] ButtonEx tabButton;
+
+    private Action<int> onClick;
+
+    public void Display(int index, int selectedIndex, string title, int redpointId, Action<int> onClick)
+    {
+        this.onClick = onClick;
+        bool isSelected = index == selectedIndex;
+
+        bgImage.SetSprite(isSelected ? "TimeRushTabSelect" : "TimeRushTabUnSelect");
+        titleText.text = Language.Get(title);
+        titleText.color = isSelected ? selectColor : unSelectColor;
+
+        redpoint.redpointId = redpointId;
+
+        tabButton.SetListener(() =>
+        {
+            onClick?.Invoke(index);
+        });
+    }
+}
\ No newline at end of file
diff --git a/Main/System/OSActivity/OSGalaTabCell.cs.meta b/Main/System/OSActivity/OSGalaTabCell.cs.meta
new file mode 100644
index 0000000..2c193e5
--- /dev/null
+++ b/Main/System/OSActivity/OSGalaTabCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3e7742ee2b0612c43bac55038ea42ed0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OperationTotDayRechargeInfo.cs b/Main/System/OSActivity/OperationTotDayRechargeInfo.cs
new file mode 100644
index 0000000..d81f74c
--- /dev/null
+++ b/Main/System/OSActivity/OperationTotDayRechargeInfo.cs
@@ -0,0 +1,21 @@
+锘縰sing System.Collections.Generic;
+
+
+//绱厖娲诲姩
+public class OperationTotDayRechargeInfo : OperationBase
+{
+    public int CfgID;   // 娲诲姩鏃堕棿琛ㄩ厤缃甀D
+
+    public override string ToDisplayTime()
+    {
+        var textBuilder = OperationTimeHepler.textBuilder;
+        textBuilder.Length = 0;
+        textBuilder.Append(startDate.ToDisplay());
+        if (startDate != endDate)
+        {
+            textBuilder.Append("鈥�");
+            textBuilder.Append(endDate.ToDisplay());
+        }
+        return textBuilder.ToString();
+    }
+}
diff --git a/Main/System/OSActivity/OperationTotDayRechargeInfo.cs.meta b/Main/System/OSActivity/OperationTotDayRechargeInfo.cs.meta
new file mode 100644
index 0000000..e41ce3b
--- /dev/null
+++ b/Main/System/OSActivity/OperationTotDayRechargeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ed77821f2b2191d49b55143750ec812c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OSActivity/OperationTotalRechargeInfo.cs b/Main/System/OSActivity/OperationTotalRechargeInfo.cs
new file mode 100644
index 0000000..196de07
--- /dev/null
+++ b/Main/System/OSActivity/OperationTotalRechargeInfo.cs
@@ -0,0 +1,21 @@
+锘縰sing System.Collections.Generic;
+
+
+//绱厖娲诲姩
+public class OperationTotalRechargeInfo : OperationBase
+{
+    public int CfgID;   // 娲诲姩鏃堕棿琛ㄩ厤缃甀D
+
+    public override string ToDisplayTime()
+    {
+        var textBuilder = OperationTimeHepler.textBuilder;
+        textBuilder.Length = 0;
+        textBuilder.Append(startDate.ToDisplay());
+        if (startDate != endDate)
+        {
+            textBuilder.Append("鈥�");
+            textBuilder.Append(endDate.ToDisplay());
+        }
+        return textBuilder.ToString();
+    }
+}
diff --git a/Main/System/OSActivity/OperationTotalRechargeInfo.cs.meta b/Main/System/OSActivity/OperationTotalRechargeInfo.cs.meta
new file mode 100644
index 0000000..570b29f
--- /dev/null
+++ b/Main/System/OSActivity/OperationTotalRechargeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2ca29732cd569824088e31f2f83bdbfb
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/OpenServerActivity/OperationTimeHepler.cs b/Main/System/OpenServerActivity/OperationTimeHepler.cs
index 18a98ec..0738659 100644
--- a/Main/System/OpenServerActivity/OperationTimeHepler.cs
+++ b/Main/System/OpenServerActivity/OperationTimeHepler.cs
@@ -495,6 +495,76 @@
         operationTimeUpdateEvent?.Invoke(opreationType);
     }
 
+    public void UpdateActTotalRechargeInfo(HAA1D_tagSCActTotalRechargeInfo package)
+    {
+        OperationBase operationBase = null;
+        operationDict.TryGetValue(OperationType.TotalRecharge, out operationBase);
+        if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate))
+        {
+            ForceStopOperation(OperationType.TotalRecharge);
+        }
+        else
+        {
+            if (operationBase == null)
+            {
+                operationBase = new OperationTotalRechargeInfo();
+                operationDict.Add(OperationType.TotalRecharge, operationBase);
+            }
+            OperationTotalRechargeInfo operation = operationBase as OperationTotalRechargeInfo;
+            operation.Reset();
+            operation.startDate = ParseOperationDate(package.StartDate);
+            operation.endDate = ParseOperationDate(package.EndtDate);
+            operation.ActNum = package.ActNum;
+            operation.CfgID = package.CfgID;
+            
+            var config = ActTotalRechargeConfig.Get(package.CfgID);
+            if (config == null)
+            {
+                SysNotifyMgr.Instance.ShowTip("LoadConfigErr");
+                return;
+            }
+
+            if (operationTimeUpdateEvent != null)
+            {
+                operationTimeUpdateEvent(OperationType.TotalRecharge);
+            }
+        }
+    }
+
+    public void UpdateActTotDayRechargeInfo(HAA1B_tagSCActTotDayRechargeInfo package)
+    {
+        OperationBase operationBase = null;
+        operationDict.TryGetValue(OperationType.TotDayRecharge, out operationBase);
+        if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate))
+        {
+            ForceStopOperation(OperationType.TotDayRecharge);
+        }
+        else
+        {
+            if (operationBase == null)
+            {
+                operationBase = new OperationTotDayRechargeInfo();
+                operationDict.Add(OperationType.TotDayRecharge, operationBase);
+            }
+            OperationTotDayRechargeInfo operation = operationBase as OperationTotDayRechargeInfo;
+            operation.Reset();
+            operation.startDate = ParseOperationDate(package.StartDate);
+            operation.endDate = ParseOperationDate(package.EndtDate);
+            operation.ActNum = package.ActNum;
+            operation.CfgID = package.CfgID;
+
+            var config = ActTotalRechargeConfig.Get(package.CfgID);
+            if (config == null)
+            {
+                SysNotifyMgr.Instance.ShowTip("LoadConfigErr");
+                return;
+            }
+            
+            operation.dayReset = config.IsDayReset == 1;
+            operationTimeUpdateEvent?.Invoke(OperationType.TotDayRecharge);
+        }
+    }
+
     // public void UpdateActYunShiInfo(HAA87_tagMCActYunshiInfo package)
     // {
     //     Operation operationType = Operation.default48;
@@ -1085,5 +1155,7 @@
     TimeRush = 1,  //鏃ユ湡鍨嬫椿鍔� - 杞洖娈�
     HeroDebut = 2,  //鏃ユ湡鍨嬫椿鍔� - 姝﹀皢鐧诲満
     HeroReturn = 3, //鏃ユ湡鍨嬫椿鍔� - 姝﹀皢杩斿満
+    TotalRecharge = 4,//绱厖娲诲姩
+    TotDayRecharge = 5, //绱厖澶╂椿鍔�
     max,
 }
\ No newline at end of file
diff --git a/Main/System/TotDayRecharge.meta b/Main/System/TotDayRecharge.meta
new file mode 100644
index 0000000..9cbc8b9
--- /dev/null
+++ b/Main/System/TotDayRecharge.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 640279443a4eebc458a4b9a817e0fe2f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/TotDayRecharge/TotDayRechargeCell.cs b/Main/System/TotDayRecharge/TotDayRechargeCell.cs
new file mode 100644
index 0000000..10996a8
--- /dev/null
+++ b/Main/System/TotDayRecharge/TotDayRechargeCell.cs
@@ -0,0 +1,74 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class TotDayRechargeCell : CellView
+{
+    [SerializeField] Text nameText;
+    [SerializeField] Image processImage;
+    [SerializeField] Text processText;
+    [SerializeField] ItemCell[] itemCells;
+
+    [SerializeField] Button getBtn;
+    [SerializeField] Button gotoBtn;
+    [SerializeField] Transform gotRect;
+
+    TotDayRechargeManager manager { get { return TotDayRechargeManager.Instance; } }
+
+    public void Display(int index, List<int> list)
+    {
+        if (list.IsNullOrEmpty() || index < 0 || index >= list.Count)
+            return;
+        int awardID = list[index];
+        var config = ActTotDayRechargeTempConfig.Get(awardID);
+        if (config == null)
+            return;
+        nameText.text = Language.Get($"TotalRecharge03", config.NeedDay);
+
+        if (config.AwardItemList != null)
+        {
+            for (int i = 0; i < itemCells.Length; i++)
+            {
+                var cell = itemCells[i];
+
+                if (i < config.AwardItemList.Length)
+                {
+                    var item = config.AwardItemList[i];
+                    cell.SetActive(true);
+                    cell.Init(new ItemCellModel(item[0], false, item[1]));
+                    cell.button.AddListener(() => ItemTipUtility.Show(item[0]));
+                }
+                else
+                {
+                    cell.SetActive(false);
+                }
+            }
+        }
+
+        processText.text = Language.Get("BoneField09", manager.totalDays, config.NeedDay);
+        processImage.fillAmount = manager.totalDays / (float)config.NeedDay;
+
+        int state = manager.GetState(awardID);// 鑾峰彇濂栧姳鐘舵�� 0 涓嶅彲棰嗗彇 1 鏈鍙� 2 宸查鍙�
+
+        gotoBtn.SetActive(state == 0);
+        getBtn.SetActive(state == 1);
+        gotRect.SetActive(state == 2);
+
+        getBtn.SetListener(() => manager.SendGetReward(config.NeedDay));
+        gotoBtn.SetListener(() =>
+        {
+            if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Recharge, true))
+            {
+                RechargeManager.Instance.selectTabIndex = 1;
+                if (UIManager.Instance.IsOpened<StoreBaseWin>())
+                {
+                    UIManager.Instance.GetUI<StoreBaseWin>().ClickFuncBtn(2);
+                }
+                else
+                {
+                    UIManager.Instance.OpenWindow<StoreBaseWin>(2);
+                }
+            }
+        });
+    }
+}
diff --git a/Main/System/TotDayRecharge/TotDayRechargeCell.cs.meta b/Main/System/TotDayRecharge/TotDayRechargeCell.cs.meta
new file mode 100644
index 0000000..85749d4
--- /dev/null
+++ b/Main/System/TotDayRecharge/TotDayRechargeCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 731ccb7a2bf5d7e49bcd9379cad5ca55
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/TotDayRecharge/TotDayRechargeManager.cs b/Main/System/TotDayRecharge/TotDayRechargeManager.cs
new file mode 100644
index 0000000..b2a7871
--- /dev/null
+++ b/Main/System/TotDayRecharge/TotDayRechargeManager.cs
@@ -0,0 +1,251 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+public class TotDayRechargeManager : GameSystemManager<TotDayRechargeManager>, IOpenServerActivity
+{
+    public readonly int ActNum = 10;
+    public override void Init()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
+        OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent;
+        OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
+        OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
+        OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
+        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+        StoreModel.Instance.RefreshBuyShopLimitEvent += OnRefreshBuyShopLimitEvent;
+    }
+
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin;
+        OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent;
+        OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
+        OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
+        OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent;
+        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+        StoreModel.Instance.RefreshBuyShopLimitEvent -= OnRefreshBuyShopLimitEvent;
+
+    }
+
+    private void OnRefreshBuyShopLimitEvent()
+    {
+        UpdateRedPoint();
+    }
+
+
+    private void OnFuncStateChangeEvent(int obj)
+    {
+        if (obj != (int)FuncOpenEnum.OSGala)
+            return;
+        UpdateRedPoint();
+    }
+
+    private void OnBeforePlayerDataInitializeEventOnRelogin()
+    {
+        totalDays = 0;
+        awardRecord = 0;
+    }
+
+    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
+    public const int activityID = (int)NewDayActivityID.TotDayRechargeAct;
+    public static OperationType operaType = OperationType.TotDayRecharge;
+    // 鎬诲鍔�
+    public Redpoint redPoint = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 6);
+    public bool IsOpen => OperationTimeHepler.Instance.SatisfyOpenCondition(operaType);
+    public bool IsAdvance => OperationTimeHepler.Instance.SatisfyAdvanceCondition(operaType);
+    public bool priorityOpen => redPoint.state == RedPointState.Simple;
+    public readonly int actNum = 10;
+    public event Action<int> onStateUpdate;
+
+    private void OperationTimeUpdateEvent(OperationType type)
+    {
+        if (type == operaType)
+        {
+
+        }
+        if (UIManager.Instance.IsOpened<OSGalaBaseWin>())
+            UIManager.Instance.CloseWindow<OSGalaBaseWin>();
+        UpdateRedPoint();
+    }
+
+    private void OperationStartEvent(OperationType type, int state)
+    {
+        if (type == operaType && state == 0)
+        {
+            UpdateRedPoint();
+            onStateUpdate?.Invoke(activityID);
+        }
+    }
+
+    private void OperationEndEvent(OperationType type, int state)
+    {
+        if (type == operaType)
+        {
+            if (UIManager.Instance.IsOpened<OSGalaBaseWin>())
+                UIManager.Instance.CloseWindow<OSGalaBaseWin>();
+            UpdateRedPoint();
+            onStateUpdate?.Invoke(activityID);
+        }
+    }
+
+    private void OperationAdvanceEvent(OperationType type)
+    {
+        if (type == operaType)
+        {
+            UpdateRedPoint();
+            onStateUpdate?.Invoke(activityID);
+        }
+    }
+
+    public void UpdateRedPoint()
+    {
+        redPoint.state = RedPointState.None;
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OSGala))
+            return;
+        if (!IsOpen)
+            return;
+
+        var awardList = GetShowList();
+        if (awardList == null)
+            return;
+        for (int i = 0; i < awardList.Count; i++)
+        {
+            if (GetState(awardList[i]) == 1)
+            {
+                redPoint.state = RedPointState.Simple;
+                return;
+            }
+        }
+
+        var storeData = GetStoreData();
+        if (storeData != null && !IsReceived(storeData.shopId))
+        {
+            redPoint.state = RedPointState.Simple;
+        }
+    }
+
+    public bool GetActInfo(out OperationTotDayRechargeInfo act, out ActTotDayRechargeConfig config)
+    {
+        config = null;
+        if (!OperationTimeHepler.Instance.TryGetOperation(operaType, out act) || act == null)
+            return false;
+        config = ActTotDayRechargeConfig.Get(act.CfgID);
+        return config != null;
+    }
+
+    public List<int> GetShowList(bool isSort = false)
+    {
+        if (!GetActInfo(out var act, out var config))
+            return null;
+
+        int templateID = config.TemplateID;
+        var res = new List<int>();
+
+        var awardIndexSortList = ActTotDayRechargeTempConfig.GetNeedDaySortList(templateID);
+        for (int i = 0; i < awardIndexSortList.Count; i++)
+        {
+            var tempConfig = ActTotDayRechargeTempConfig.GetConfig(templateID, awardIndexSortList[i]);
+            if (tempConfig == null)
+                continue;
+            res.Add(tempConfig.AwardID);
+        }
+
+        if (isSort)
+        {
+            res = res.OrderBy(awardId =>
+            {
+                var tempConfig = ActTotDayRechargeTempConfig.Get(awardId);
+                return IsAwardHave(tempConfig.NeedDay);
+            })
+            .ThenBy(awardId => awardId)
+            .ToList();
+
+        }
+        return res;
+    }
+
+    public bool IsCanBuyShop(int shopID)
+    {
+        StoreConfig config = StoreConfig.Get(shopID);
+        if (config == null)
+            return false;
+        StoreModel.Instance.TryGetIsSellOut(config, out int remainNum);
+        return remainNum > 0;
+    }
+
+    public StoreModel.StoreData GetStoreData()
+    {
+        if (!GetActInfo(out var act, out var config))
+            return null;
+        int actShopType = config.ActShopType;
+        if (StoreModel.Instance.storeTypeDict == null)
+            return null;
+        if (!StoreModel.Instance.storeTypeDict.TryGetValue(actShopType, out var list))
+            return null;
+        if (list.IsNullOrEmpty())
+            return null;
+        return list[0];
+    }
+
+    bool IsAwardHave(int awardIndex)
+    {
+        if (awardIndex < 0 || awardIndex >= 32)
+            return false;
+        return (awardRecord & (1u << awardIndex)) != 0;
+    }
+
+    // 鑾峰彇濂栧姳鐘舵�� 0 涓嶅彲棰嗗彇 1 鏈鍙� 2 宸查鍙�
+    public int GetState(int awardID)
+    {
+        var config = ActTotDayRechargeTempConfig.Get(awardID);
+        if (config == null)
+            return 0;
+        if (totalDays < config.NeedDay)
+            return 0;
+        bool isAwardHave = IsAwardHave(config.NeedDay);
+        return isAwardHave ? 2 : 1;
+    }
+
+    public bool IsReceived(int shopId)
+    {
+        var config = StoreConfig.Get(shopId);
+        if (config == null)
+            return false;
+        int boughtCount = StoreModel.Instance.GetShopLimitBuyCount(shopId);
+        return boughtCount >= config.LimitCnt;
+    }
+
+    public string GetActTimeStr()
+    {
+        if (!GetActInfo(out var act, out var config))
+        {
+            return Language.Get("OSActivity6");
+        }
+        return Language.Get("TotalRecharge08", TimeUtility.SecondsToShortDHMS(act.GetResetSurplusTime()));
+    }
+
+    public byte totalDays;    //娲诲姩绱厖澶╂暟
+    public uint awardRecord;    //绱厖濂栧姳棰嗗璁板綍锛屾寜濂栧姳绱㈠紩浜岃繘鍒朵綅瀛樺偍鏄惁宸查鍙�
+    public event Action OnTotDayRechargePlayerInfoEvent;
+    public void UpdateTotDayRechargePlayerInfo(HAA1A_tagSCActTotDayRechargePlayerInfo vNetData)
+    {
+        if (ActNum != vNetData.ActNum)
+            return;
+        totalDays = vNetData.TotalDays;
+        awardRecord = vNetData.AwardRecord;
+        UpdateRedPoint();
+        OnTotDayRechargePlayerInfoEvent?.Invoke();
+    }
+
+    public void SendGetReward(int needDay)
+    {
+        string actStr = ActNum.ToString();
+        var pack = new CA504_tagCMPlayerGetReward();
+        pack.RewardType = 19;
+        pack.DataEx = (uint)needDay;
+        pack.DataExStr = actStr;
+        pack.DataExStrLen = (byte)actStr.Length;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/TotDayRecharge/TotDayRechargeManager.cs.meta b/Main/System/TotDayRecharge/TotDayRechargeManager.cs.meta
new file mode 100644
index 0000000..6fc9d93
--- /dev/null
+++ b/Main/System/TotDayRecharge/TotDayRechargeManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4231ac3f6f8d84f4189f5e0f55b93ca0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/TotDayRecharge/TotDayRechargeWin.cs b/Main/System/TotDayRecharge/TotDayRechargeWin.cs
new file mode 100644
index 0000000..c011d14
--- /dev/null
+++ b/Main/System/TotDayRecharge/TotDayRechargeWin.cs
@@ -0,0 +1,51 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+
+//寮�鏈嶆椿鍔�-绱厖
+public class TotDayRechargeWin : UIBase
+{
+    [SerializeField] ScrollerController scroller;
+
+    TotDayRechargeManager manager { get { return TotDayRechargeManager.Instance; } }
+    protected override void OnPreOpen()
+    {
+        scroller.OnRefreshCell += OnRefreshCell;
+        TotDayRechargeManager.Instance.OnTotDayRechargePlayerInfoEvent += OnTotDayRechargePlayerInfoEvent;
+        CreateScroller();
+    }
+
+    protected override void OnPreClose()
+    {
+        scroller.OnRefreshCell -= OnRefreshCell;
+        TotDayRechargeManager.Instance.OnTotDayRechargePlayerInfoEvent -= OnTotDayRechargePlayerInfoEvent;
+    }
+
+    private void OnTotDayRechargePlayerInfoEvent()
+    {
+        scroller.m_Scorller.RefreshActiveCellViews();
+    }
+
+    List<int> showList;
+    void CreateScroller()
+    {
+
+        showList = manager.GetShowList(true);
+        scroller.Refresh();
+        for (int i = 0; i < showList.Count; i++)
+        {
+            scroller.AddCell(ScrollerDataType.Header, i);
+        }
+        scroller.Restart();
+
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as TotDayRechargeCell;
+        _cell.Display(cell.index, showList);
+    }
+}
+
+
+
+
diff --git a/Main/System/TotDayRecharge/TotDayRechargeWin.cs.meta b/Main/System/TotDayRecharge/TotDayRechargeWin.cs.meta
new file mode 100644
index 0000000..82ee6bd
--- /dev/null
+++ b/Main/System/TotDayRecharge/TotDayRechargeWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7b483a9d19723db4da256313000559c0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/TotalRecharge.meta b/Main/System/TotalRecharge.meta
new file mode 100644
index 0000000..87f0866
--- /dev/null
+++ b/Main/System/TotalRecharge.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 027d9e03375d65d4197c9f4d1fefa8a5
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/TotalRecharge/TotalRechargeCell.cs b/Main/System/TotalRecharge/TotalRechargeCell.cs
new file mode 100644
index 0000000..789adfc
--- /dev/null
+++ b/Main/System/TotalRecharge/TotalRechargeCell.cs
@@ -0,0 +1,74 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class TotalRechargeCell : CellView
+{
+    [SerializeField] Text nameText;
+    [SerializeField] Image processImage;
+    [SerializeField] Text processText;
+    [SerializeField] ItemCell[] itemCells;
+
+    [SerializeField] Button getBtn;
+    [SerializeField] Button gotoBtn;
+    [SerializeField] Transform gotRect;
+
+    TotalRechargeManager manager { get { return TotalRechargeManager.Instance; } }
+
+    public void Display(int index, List<int> list)
+    {
+        if (list.IsNullOrEmpty() || index < 0 || index >= list.Count)
+            return;
+        int awardID = list[index];
+        var config = ActTotalRechargeTempConfig.Get(awardID);
+        if (config == null)
+            return;
+        nameText.text = Language.Get($"TotalRecharge02", config.NeedAmount);
+
+        if (config.AwardItemList != null)
+        {
+            for (int i = 0; i < itemCells.Length; i++)
+            {
+                var cell = itemCells[i];
+
+                if (i < config.AwardItemList.Length)
+                {
+                    var item = config.AwardItemList[i];
+                    cell.SetActive(true);
+                    cell.Init(new ItemCellModel(item[0], false, item[1]));
+                    cell.button.AddListener(() => ItemTipUtility.Show(item[0]));
+                }
+                else
+                {
+                    cell.SetActive(false);
+                }
+            }
+        }
+
+        processText.text = Language.Get("BoneField09", manager.coinTotal, config.NeedAmount);
+        processImage.fillAmount = manager.coinTotal / (float)config.NeedAmount;
+
+        int state = manager.GetState(awardID);// 鑾峰彇濂栧姳鐘舵�� 0 涓嶅彲棰嗗彇 1 鏈鍙� 2 宸查鍙�
+
+        gotoBtn.SetActive(state == 0);
+        getBtn.SetActive(state == 1);
+        gotRect.SetActive(state == 2);
+
+        getBtn.SetListener(() => manager.SendGetReward(config.AwardIndex));
+        gotoBtn.SetListener(() =>
+        {
+            if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Recharge, true))
+            {
+                RechargeManager.Instance.selectTabIndex = 1;
+                if (UIManager.Instance.IsOpened<StoreBaseWin>())
+                {
+                    UIManager.Instance.GetUI<StoreBaseWin>().ClickFuncBtn(2);
+                }
+                else
+                {
+                    UIManager.Instance.OpenWindow<StoreBaseWin>(2);
+                }
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/Main/System/TotalRecharge/TotalRechargeCell.cs.meta b/Main/System/TotalRecharge/TotalRechargeCell.cs.meta
new file mode 100644
index 0000000..e6153fb
--- /dev/null
+++ b/Main/System/TotalRecharge/TotalRechargeCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 133e398df7d3dcb408b3a7dcfb33f083
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/TotalRecharge/TotalRechargeManager.cs b/Main/System/TotalRecharge/TotalRechargeManager.cs
new file mode 100644
index 0000000..2a23413
--- /dev/null
+++ b/Main/System/TotalRecharge/TotalRechargeManager.cs
@@ -0,0 +1,252 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+public class TotalRechargeManager : GameSystemManager<TotalRechargeManager>, IOpenServerActivity
+{
+    public readonly int ActNum = 10;
+    public override void Init()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
+        OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent;
+        OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
+        OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
+        OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
+        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+        StoreModel.Instance.RefreshBuyShopLimitEvent += OnRefreshBuyShopLimitEvent;
+    }
+
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin;
+        OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent;
+        OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
+        OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
+        OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent;
+        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+        StoreModel.Instance.RefreshBuyShopLimitEvent -= OnRefreshBuyShopLimitEvent;
+
+    }
+
+    private void OnRefreshBuyShopLimitEvent()
+    {
+        UpdateRedPoint();
+    }
+
+
+    private void OnFuncStateChangeEvent(int obj)
+    {
+        if (obj != (int)FuncOpenEnum.OSGala)
+            return;
+        UpdateRedPoint();
+    }
+
+
+    private void OnBeforePlayerDataInitializeEventOnRelogin()
+    {
+        coinTotal = 0;
+        awardRecord = 0;
+    }
+
+    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
+    public const int activityID = (int)NewDayActivityID.TotalRechargeAct;
+    public static OperationType operaType = OperationType.TotalRecharge;
+    // 鎬诲鍔�
+    public Redpoint redPoint = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 5);
+    public bool IsOpen => OperationTimeHepler.Instance.SatisfyOpenCondition(operaType);
+    public bool IsAdvance => OperationTimeHepler.Instance.SatisfyAdvanceCondition(operaType);
+    public bool priorityOpen => redPoint.state == RedPointState.Simple;
+    public readonly int actNum = 10;
+    public event Action<int> onStateUpdate;
+
+    private void OperationTimeUpdateEvent(OperationType type)
+    {
+        if (type == operaType)
+        {
+
+        }
+        if (UIManager.Instance.IsOpened<OSGalaBaseWin>())
+            UIManager.Instance.CloseWindow<OSGalaBaseWin>();
+        UpdateRedPoint();
+    }
+
+    private void OperationStartEvent(OperationType type, int state)
+    {
+        if (type == operaType && state == 0)
+        {
+            UpdateRedPoint();
+            onStateUpdate?.Invoke(activityID);
+        }
+    }
+
+    private void OperationEndEvent(OperationType type, int state)
+    {
+        if (type == operaType)
+        {
+            if (UIManager.Instance.IsOpened<OSGalaBaseWin>())
+                UIManager.Instance.CloseWindow<OSGalaBaseWin>();
+            UpdateRedPoint();
+            onStateUpdate?.Invoke(activityID);
+        }
+    }
+
+    private void OperationAdvanceEvent(OperationType type)
+    {
+        if (type == operaType)
+        {
+            UpdateRedPoint();
+            onStateUpdate?.Invoke(activityID);
+        }
+    }
+
+    public void UpdateRedPoint()
+    {
+        redPoint.state = RedPointState.None;
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OSGala))
+            return;
+        if (!IsOpen)
+            return;
+
+        var awardList = GetShowList();
+        if (awardList == null)
+            return;
+        for (int i = 0; i < awardList.Count; i++)
+        {
+            if (GetState(awardList[i]) == 1)
+            {
+                redPoint.state = RedPointState.Simple;
+                return;
+            }
+        }
+
+        var storeData = GetStoreData();
+        if (storeData != null && !IsReceived(storeData.shopId))
+        {
+            redPoint.state = RedPointState.Simple;
+        }
+    }
+    public bool GetActInfo(out OperationTotalRechargeInfo act, out ActTotalRechargeConfig config)
+    {
+        config = null;
+        if (!OperationTimeHepler.Instance.TryGetOperation(operaType, out act) || act == null)
+            return false;
+        config = ActTotalRechargeConfig.Get(act.CfgID);
+        return config != null;
+    }
+
+    public List<int> GetShowList(bool isSort = false)
+    {
+        if (!GetActInfo(out var act, out var config))
+            return null;
+
+        int ctgTempID = config.CTGTempID;
+        int ctgShopType = config.CTGShopType;
+        var res = new List<int>();
+
+        var awardIndexSortList = ActTotalRechargeTempConfig.GetAwardIndexSortList(ctgTempID);
+        for (int i = 0; i < awardIndexSortList.Count; i++)
+        {
+            var tempConfig = ActTotalRechargeTempConfig.GetConfig(ctgTempID, awardIndexSortList[i]);
+            if (tempConfig == null)
+                continue;
+            res.Add(tempConfig.AwardID);
+        }
+
+        if (isSort)
+        {
+            res = res.OrderBy(awardId =>
+            {
+                var tempConfig = ActTotalRechargeTempConfig.Get(awardId);
+                return IsAwardHave(tempConfig.AwardIndex);
+            })
+            .ThenBy(awardId => awardId)
+            .ToList();
+
+        }
+        return res;
+    }
+
+    public bool IsCanBuyShop(int shopID)
+    {
+        StoreConfig config = StoreConfig.Get(shopID);
+        if (config == null)
+            return false;
+        StoreModel.Instance.TryGetIsSellOut(config, out int remainNum);
+        return remainNum > 0;
+    }
+
+    public StoreModel.StoreData GetStoreData()
+    {
+        if (!GetActInfo(out var act, out var config))
+            return null;
+        int ctgShopType = config.CTGShopType;
+        if (StoreModel.Instance.storeTypeDict == null)
+            return null;
+        if (!StoreModel.Instance.storeTypeDict.TryGetValue(ctgShopType, out var list))
+            return null;
+        if (list.IsNullOrEmpty())
+            return null;
+        return list[0];
+    }
+
+    public float coinTotal;    //娲诲姩绱鍏呭�奸coin鍊�
+    public uint awardRecord;    //绱厖濂栧姳棰嗗璁板綍锛屾寜濂栧姳绱㈠紩浜岃繘鍒朵綅瀛樺偍鏄惁宸查鍙�
+    public event Action OnTotalRechargePlayerInfoEvent;
+    public void UpdateTotalRechargePlayerInfo(HAA1C_tagSCActTotalRechargePlayerInfo vNetData)
+    {
+        if (ActNum != vNetData.ActNum)
+            return;
+        coinTotal = (float)vNetData.CoinTotal / (float)100;
+        awardRecord = vNetData.AwardRecord;
+        UpdateRedPoint();
+        OnTotalRechargePlayerInfoEvent?.Invoke();
+    }
+
+    bool IsAwardHave(int awardIndex)
+    {
+        if (awardIndex < 0 || awardIndex >= 32)
+            return false;
+        return (awardRecord & (1u << awardIndex)) != 0;
+    }
+
+    // 鑾峰彇濂栧姳鐘舵�� 0 涓嶅彲棰嗗彇 1 鏈鍙� 2 宸查鍙�
+    public int GetState(int awardID)
+    {
+        var config = ActTotalRechargeTempConfig.Get(awardID);
+        if (config == null)
+            return 0;
+        if (coinTotal < config.NeedAmount)
+            return 0;
+        bool isAwardHave = IsAwardHave(config.AwardIndex);
+        return isAwardHave ? 2 : 1;
+    }
+
+    public bool IsReceived(int shopId)
+    {
+        var config = StoreConfig.Get(shopId);
+        if (config == null)
+            return false;
+        int boughtCount = StoreModel.Instance.GetShopLimitBuyCount(shopId);
+        return boughtCount >= config.LimitCnt;
+    }
+
+    public string GetActTimeStr()
+    {
+        if (!GetActInfo(out var act, out var config))
+        {
+            return Language.Get("OSActivity6");
+        }
+        return Language.Get("TotalRecharge08", TimeUtility.SecondsToShortDHMS(act.GetResetSurplusTime()));
+    }
+
+    public void SendGetReward(int awardIndex)
+    {
+        string actStr = ActNum.ToString();
+        var pack = new CA504_tagCMPlayerGetReward();
+        pack.RewardType = 18;
+        pack.DataEx = (uint)awardIndex;
+        pack.DataExStr = actStr;
+        pack.DataExStrLen = (byte)actStr.Length;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+}
diff --git a/Main/System/TotalRecharge/TotalRechargeManager.cs.meta b/Main/System/TotalRecharge/TotalRechargeManager.cs.meta
new file mode 100644
index 0000000..f907fae
--- /dev/null
+++ b/Main/System/TotalRecharge/TotalRechargeManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2aa04ba840c15be45a5d2236db47addb
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/TotalRecharge/TotalRechargeWin.cs b/Main/System/TotalRecharge/TotalRechargeWin.cs
new file mode 100644
index 0000000..1d5fd9c
--- /dev/null
+++ b/Main/System/TotalRecharge/TotalRechargeWin.cs
@@ -0,0 +1,51 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine;
+
+//寮�鏈嶆椿鍔�-绱厖
+public class TotalRechargeWin : UIBase
+{
+    [SerializeField] ScrollerController scroller;
+
+    TotalRechargeManager manager { get { return TotalRechargeManager.Instance; } }
+    protected override void OnPreOpen()
+    {
+        scroller.OnRefreshCell += OnRefreshCell;
+        TotalRechargeManager.Instance.OnTotalRechargePlayerInfoEvent += OnTotalRechargePlayerInfoEvent;
+        CreateScroller();
+    }
+
+    protected override void OnPreClose()
+    {
+        scroller.OnRefreshCell -= OnRefreshCell;
+        TotalRechargeManager.Instance.OnTotalRechargePlayerInfoEvent -= OnTotalRechargePlayerInfoEvent;
+    }
+
+    private void OnTotalRechargePlayerInfoEvent()
+    {
+        scroller.m_Scorller.RefreshActiveCellViews();
+    }
+
+    List<int> showList;
+    void CreateScroller()
+    {
+
+        showList = manager.GetShowList(true);
+        scroller.Refresh();
+        for (int i = 0; i < showList.Count; i++)
+        {
+            scroller.AddCell(ScrollerDataType.Header, i);
+        }
+        scroller.Restart();
+
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as TotalRechargeCell;
+        _cell.Display(cell.index, showList);
+    }
+}
+
+
+
+
diff --git a/Main/System/TotalRecharge/TotalRechargeWin.cs.meta b/Main/System/TotalRecharge/TotalRechargeWin.cs.meta
new file mode 100644
index 0000000..0aa7a01
--- /dev/null
+++ b/Main/System/TotalRecharge/TotalRechargeWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c6c1822a2a0e67a428b6826bc212fd68
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index efc959a..65646a6 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -1815,6 +1815,8 @@
     TimeRushAct = 200,  //杞洖娈�(姝﹀皢鍐插埡)
     HeroDebutAct = 201,  //鑻遍泟鐧诲満娲诲姩
     HeroReturnAct = 202,  //鑻遍泟杩斿満娲诲姩
+    TotalRechargeAct = 4,   //绱厖娲诲姩
+    TotDayRechargeAct = 5,  //绱厖澶╂椿鍔�
 }
 
 //浠欑帀璐拱鐨勪簩娆$‘璁ゆ绫诲瀷

--
Gitblit v1.8.0