From 51b0f6ed9f4e1d3bb6f8144470b46908c7699a96 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 11 五月 2026 16:20:37 +0800
Subject: [PATCH] Merge branch 'master' into h5version

---
 Main/Utility/EnumHelper.cs                                            |   15 
 Main/Component/UI/Core/TextLanguageAdapter.cs                         |   85 ++--
 Main/Core/GameEngine/Launch/InitSettingTask.cs                        |    3 
 Main/Component/UI/Core/ImageLanguageAdapter.cs.meta                   |   11 
 Main/System/CustomizedGift/CustomizedGiftModel.cs                     |    4 
 Main/System/HeroDebut/HeroDebutManager.cs                             |    3 
 Main/System/TimeRush/TimeRushManager.cs                               |    5 
 Main/System/FestivalActivity/FestivalActivityRechargeTotalManager.cs  |    3 
 Main/System/FestivalActivity/FestivalActivityMissionManager.cs        |    3 
 Main/System/HeroUI/HeroBestWin.cs                                     |   34 +
 Main/System/BeautyMM/BeautyMMShowWin.cs                               |   18 +
 Main/System/FestivalActivity/FestivalActivityRechargeTotDayManager.cs |    3 
 Main/System/OpenServerActivity/OpenServerActivityCenter.cs            |  322 ++++++++------------
 Main/System/FestivalActivity/FestivalActivityManager.cs               |    3 
 Main/System/HeroUI/HeroUIManager.Collect.cs                           |   55 +++
 Main/System/FestivalActivity/FestivalActivityCheckInManager.cs        |    3 
 Main/Utility/UIHelper.cs                                              |   30 +
 Main/System/HeroReturn/HeroReturnManager.cs                           |    3 
 Main/System/TotDayRecharge/TotDayRechargeManager.cs                   |    3 
 Main/System/TotalRecharge/TotalRechargeManager.cs                     |    3 
 Main/Component/UI/Core/ImageLanguageAdapter.cs                        |  279 +++++++++++++++++
 Main/System/HeroUI/HeroTrainWin.cs                                    |   23 +
 22 files changed, 619 insertions(+), 292 deletions(-)

diff --git a/Main/Component/UI/Core/ImageLanguageAdapter.cs b/Main/Component/UI/Core/ImageLanguageAdapter.cs
new file mode 100644
index 0000000..be81e62
--- /dev/null
+++ b/Main/Component/UI/Core/ImageLanguageAdapter.cs
@@ -0,0 +1,279 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鍥剧墖缁勪欢绫诲瀷鏋氫妇
+/// </summary>
+public enum ImageComponentType
+{
+    None = 0,
+    Image = 1,
+    ImageEx = 2
+}
+
+/// <summary>
+/// 鍗曚釜璇█鐨勫浘鐗囨帓鐗堝拰閫傞厤鏁版嵁鑺傜偣
+/// </summary>
+[Serializable]
+public class ImageLanguageConfigItem
+{
+    [Header("RectTransform 閰嶇疆")]
+    public Vector2 anchoredPosition = Vector2.zero;
+    public Vector2 sizeDelta = new Vector2(100f, 100f);
+    public Vector2 anchorMin = new Vector2(0.5f, 0.5f);
+    public Vector2 anchorMax = new Vector2(0.5f, 0.5f);
+    public Vector2 pivot = new Vector2(0.5f, 0.5f);
+    public Vector3 localScale = Vector3.one;
+    public Vector3 localRotation = Vector3.zero;
+
+    [Header("Image 閰嶇疆")]
+    public bool enabled = true;
+    public Color color = Color.white;
+    public Image.Type type = Image.Type.Simple;
+    public bool fillCenter = true;
+    public Image.FillMethod fillMethod = Image.FillMethod.Horizontal;
+    public float fillAmount = 1f;
+    public int fillOrigin = 0;
+    public bool preserveAspect = true;
+    public float alphaHitTestMinimumThreshold = 0f;
+    public bool useSpriteMesh = false;
+    public float pixelsPerUnitMultiplier = 1f;
+
+    public void ApplyToRectTransform(RectTransform rt)
+    {
+        if (rt == null) return;
+        rt.anchorMin = anchorMin;
+        rt.anchorMax = anchorMax;
+        rt.pivot = pivot;
+        rt.anchoredPosition = anchoredPosition;
+        rt.sizeDelta = sizeDelta;
+        rt.localScale = localScale;
+        rt.localRotation = Quaternion.Euler(localRotation);
+    }
+
+    public void ReadFromRectTransform(RectTransform rt)
+    {
+        if (rt == null) return;
+        anchorMin = rt.anchorMin;
+        anchorMax = rt.anchorMax;
+        pivot = rt.pivot;
+        anchoredPosition = rt.anchoredPosition;
+        sizeDelta = rt.sizeDelta;
+        localScale = rt.localScale;
+        localRotation = rt.localRotation.eulerAngles;
+    }
+
+    public void ApplyToImage(Image img)
+    {
+        if (img == null) return;
+        img.color = color;
+        img.type = type;
+        img.fillCenter = fillCenter;
+        img.fillMethod = fillMethod;
+        img.fillAmount = fillAmount;
+        img.fillOrigin = fillOrigin;
+        img.preserveAspect = preserveAspect;
+        img.alphaHitTestMinimumThreshold = alphaHitTestMinimumThreshold;
+        img.useSpriteMesh = useSpriteMesh;
+        img.pixelsPerUnitMultiplier = pixelsPerUnitMultiplier;
+    }
+
+    public void ReadFromImage(Image img)
+    {
+        if (img == null) return;
+        color = img.color;
+        type = img.type;
+        fillCenter = img.fillCenter;
+        fillMethod = img.fillMethod;
+        fillAmount = img.fillAmount;
+        fillOrigin = img.fillOrigin;
+        preserveAspect = img.preserveAspect;
+        alphaHitTestMinimumThreshold = img.alphaHitTestMinimumThreshold;
+        useSpriteMesh = img.useSpriteMesh;
+        pixelsPerUnitMultiplier = img.pixelsPerUnitMultiplier;
+    }
+
+    public ImageLanguageConfigItem Clone() => (ImageLanguageConfigItem)MemberwiseClone();
+}
+
+/// <summary>
+/// 鏀寔 Unity 搴忓垪鍖栫殑瀛楀吀
+/// </summary>
+[Serializable]
+public class ImageLanguageConfigDictionary
+{
+    public List<string> keys = new List<string>();
+    public List<ImageLanguageConfigItem> values = new List<ImageLanguageConfigItem>();
+
+    public ImageLanguageConfigItem Get(string key)
+    {
+        if (string.IsNullOrEmpty(key)) return null;
+        int index = keys.IndexOf(key);
+        return index >= 0 ? values[index] : null;
+    }
+
+    public void Set(string key, ImageLanguageConfigItem value)
+    {
+        int index = keys.IndexOf(key);
+        if (index >= 0) values[index] = value;
+        else
+        {
+            keys.Add(key);
+            values.Add(value);
+        }
+    }
+
+    public bool ContainsKey(string key) => keys.Contains(key);
+
+    public void Remove(string key)
+    {
+        int index = keys.IndexOf(key);
+        if (index >= 0)
+        {
+            keys.RemoveAt(index);
+            values.RemoveAt(index);
+        }
+    }
+}
+
+/// <summary>
+/// 澶氳瑷�鍥剧墖鎺掔増閫傞厤鍣�
+/// </summary>
+[RequireComponent(typeof(RectTransform))]
+public class ImageLanguageAdapter : MonoBehaviour
+{
+    public const string DefaultLangId = "default";
+
+    [SerializeField, Tooltip("璇█閰嶇疆瀛楀吀")]
+    private ImageLanguageConfigDictionary m_LanguageConfigs = new ImageLanguageConfigDictionary();
+
+    [SerializeField, Tooltip("鐩爣鍥剧墖缁勪欢绫诲瀷")]
+    private ImageComponentType m_TargetImageType = ImageComponentType.None;
+
+    [SerializeField, Tooltip("鍏宠仈鐨勫浘鐗囩粍浠跺紩鐢�")]
+    private Component m_TargetImageComponent;
+
+    private bool m_IsApplied = false;
+
+    public ImageComponentType TargetImageType
+    {
+        get => m_TargetImageType;
+        set => m_TargetImageType = value;
+    }
+    public Component TargetImageComponent
+    {
+        get => m_TargetImageComponent;
+        set => m_TargetImageComponent = value;
+    }
+    public ImageLanguageConfigDictionary LanguageConfigs => m_LanguageConfigs;
+
+    private void Awake() => DetectTargetComponent();
+
+    private void OnEnable()
+    {
+        if (!Application.isPlaying || !m_IsApplied)
+        {
+            string langId = Application.isPlaying ? Language.Id : DefaultLangId;
+            ApplyConfig(langId);
+        }
+    }
+
+#if UNITY_EDITOR
+    private void Reset()
+    {
+        DetectTargetComponent();
+        if (!HasConfig(DefaultLangId)) ReadCurrentToConfig(DefaultLangId);
+    }
+#endif
+
+    public ImageLanguageConfigItem GetConfig(string languageId) => m_LanguageConfigs.Get(languageId);
+    public void SetConfig(string languageId, ImageLanguageConfigItem config) => m_LanguageConfigs.Set(languageId, config);
+    public void RemoveConfig(string languageId) => m_LanguageConfigs.Remove(languageId);
+    public bool HasConfig(string languageId) => m_LanguageConfigs.ContainsKey(languageId);
+    public List<string> GetConfiguredLanguages() => new List<string>(m_LanguageConfigs.keys);
+
+    public void ApplyConfig(string languageId)
+    {
+        var config = GetConfig(languageId);
+        if (config == null) return;
+
+        config.ApplyToRectTransform(GetComponent<RectTransform>());
+
+        if (m_TargetImageComponent != null)
+        {
+            m_TargetImageComponent.gameObject.SetActive(config.enabled);
+        }
+
+        if (m_TargetImageComponent is Image img)
+        {
+            config.ApplyToImage(img);
+        }
+
+        m_IsApplied = true;
+    }
+
+    public void ReadCurrentToConfig(string languageId)
+    {
+        var config = new ImageLanguageConfigItem();
+        config.ReadFromRectTransform(GetComponent<RectTransform>());
+
+        if (m_TargetImageComponent is Image img)
+        {
+            config.ReadFromImage(img);
+        }
+
+        SetConfig(languageId, config);
+    }
+
+    public static string GetLanguageShowName(string languageId)
+    {
+        if (Language.languageShowDict != null && Language.languageShowDict.TryGetValue(languageId, out string showName))
+            return showName;
+        return languageId;
+    }
+
+    private void DetectTargetComponent()
+    {
+        if (m_TargetImageComponent != null)
+        {
+            DetermineImageType(m_TargetImageComponent);
+            return;
+        }
+
+        m_TargetImageComponent = GetComponent<ImageEx>() ?? GetComponentInChildren<ImageEx>(true) as Component
+                                ?? GetComponent<Image>() ?? GetComponentInChildren<Image>(true) as Component;
+
+        DetermineImageType(m_TargetImageComponent);
+    }
+
+    private void DetermineImageType(Component component)
+    {
+        m_TargetImageType = component switch
+        {
+            ImageEx _ => ImageComponentType.ImageEx,
+            Image _ => ImageComponentType.Image,
+            _ => ImageComponentType.None
+        };
+    }
+
+#if UNITY_EDITOR
+    [ContextMenu("鍒锋柊缁勪欢妫�娴�")]
+    public void Editor_ForceRefreshDetection()
+    {
+        DetectTargetComponent();
+        UnityEditor.EditorUtility.SetDirty(this);
+    }
+
+    [ContextMenu("璇诲彇褰撳墠閰嶇疆")]
+    public void Editor_ReadCurrentConfig()
+    {
+        ReadCurrentToConfig(DefaultLangId);
+        UnityEditor.EditorUtility.SetDirty(this);
+    }
+
+    [ContextMenu("搴旂敤榛樿閰嶇疆")]
+    public void Editor_ApplyDefaultConfig() => ApplyConfig(DefaultLangId);
+#endif
+}
\ No newline at end of file
diff --git a/Main/Component/UI/Core/ImageLanguageAdapter.cs.meta b/Main/Component/UI/Core/ImageLanguageAdapter.cs.meta
new file mode 100644
index 0000000..080d21a
--- /dev/null
+++ b/Main/Component/UI/Core/ImageLanguageAdapter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3ca83c0f98acaca459051c33bb4270dd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Component/UI/Core/TextLanguageAdapter.cs b/Main/Component/UI/Core/TextLanguageAdapter.cs
index edcd1c2..fea97e7 100644
--- a/Main/Component/UI/Core/TextLanguageAdapter.cs
+++ b/Main/Component/UI/Core/TextLanguageAdapter.cs
@@ -156,11 +156,22 @@
 
     private bool m_IsApplied = false;
 
-    public TextComponentType TargetTextType => m_TargetTextType;
-    public Component TargetTextComponent => m_TargetTextComponent;
-    public LanguageConfigDictionary LanguageConfigs => m_LanguageConfigs;
-
     private void Awake() => DetectTargetComponent();
+
+    // 寮�鏀� set 鏉冮檺锛屽厑璁稿閮ㄦ垨缂栬緫鍣ㄦ墜鍔ㄨ祴鍊�
+    public TextComponentType TargetTextType 
+    { 
+        get => m_TargetTextType; 
+        set => m_TargetTextType = value; 
+    }
+    
+    public Component TargetTextComponent 
+    { 
+        get => m_TargetTextComponent; 
+        set => m_TargetTextComponent = value; 
+    }
+    
+    public LanguageConfigDictionary LanguageConfigs => m_LanguageConfigs;
 
     private void OnEnable()
     {
@@ -171,19 +182,37 @@
         }
     }
 
-#if UNITY_EDITOR
-    private void Reset()
-    {
-        DetectTargetComponent();
-        if (!HasConfig(DefaultLangId)) ReadCurrentToConfig(DefaultLangId);
-    }
-#endif
-
     public LanguageConfigItem GetConfig(string languageId) => m_LanguageConfigs.Get(languageId);
     public void SetConfig(string languageId, LanguageConfigItem config) => m_LanguageConfigs.Set(languageId, config);
     public void RemoveConfig(string languageId) => m_LanguageConfigs.Remove(languageId);
     public bool HasConfig(string languageId) => m_LanguageConfigs.ContainsKey(languageId);
     public List<string> GetConfiguredLanguages() => new List<string>(m_LanguageConfigs.keys);
+
+    private void DetectTargetComponent()
+    {
+        if (m_TargetTextComponent != null)
+        {
+            DetermineTextType(m_TargetTextComponent);
+            return;
+        }
+
+        m_TargetTextComponent = GetComponent<TextEx>() ?? GetComponentInChildren<TextEx>(true) as Component
+                                ?? GetComponent<GradientText>() ?? GetComponentInChildren<GradientText>(true) as Component
+                                ?? GetComponent<Text>() ?? GetComponentInChildren<Text>(true) as Component;
+
+        DetermineTextType(m_TargetTextComponent);
+    }
+
+    private void DetermineTextType(Component component)
+    {
+        m_TargetTextType = component switch
+        {
+            TextEx _ => TextComponentType.TextEx,
+            GradientText _ => TextComponentType.GradientText,
+            Text _ => TextComponentType.Text,
+            _ => TextComponentType.None
+        };
+    }
 
     public void ApplyConfig(string languageId)
     {
@@ -212,33 +241,13 @@
         return languageId;
     }
 
-    private void DetectTargetComponent()
-    {
-        if (m_TargetTextComponent != null)
-        {
-            DetermineTextType(m_TargetTextComponent);
-            return;
-        }
-
-        m_TargetTextComponent = GetComponent<GradientText>() ?? GetComponentInChildren<GradientText>(true) as Component
-                                ?? GetComponent<TextEx>() ?? GetComponentInChildren<TextEx>(true) as Component
-                                ?? GetComponent<Text>() ?? GetComponentInChildren<Text>(true) as Component;
-
-        DetermineTextType(m_TargetTextComponent);
-    }
-
-    private void DetermineTextType(Component component)
-    {
-        m_TargetTextType = component switch
-        {
-            GradientText _ => TextComponentType.GradientText,
-            TextEx _ => TextComponentType.TextEx,
-            Text _ => TextComponentType.Text,
-            _ => TextComponentType.None
-        };
-    }
-
 #if UNITY_EDITOR
+    private void Reset()
+    {
+        DetectTargetComponent();
+        if (!HasConfig(DefaultLangId)) ReadCurrentToConfig(DefaultLangId);
+    }
+
     [ContextMenu("鍒锋柊缁勪欢妫�娴�")]
     public void Editor_ForceRefreshDetection()
     {
diff --git a/Main/Core/GameEngine/Launch/InitSettingTask.cs b/Main/Core/GameEngine/Launch/InitSettingTask.cs
index ee29e0f..e9b6b13 100644
--- a/Main/Core/GameEngine/Launch/InitSettingTask.cs
+++ b/Main/Core/GameEngine/Launch/InitSettingTask.cs
@@ -21,11 +21,14 @@
 
             SystemSetting.Instance.SetSoundVolume(SystemSetting.Instance.GetSoundVolume());
             SystemSetting.Instance.SetSoundEffect(SystemSetting.Instance.GetSoundEffect());
+            SystemSetting.Instance.SetMuteMusic(SystemSetting.Instance.GetMuteMusic());
+            SystemSetting.Instance.SetMuteSoundEffect(SystemSetting.Instance.GetMuteSoundEffect());
         }).Forget();
         
         // SoundPlayer.Instance.PlayBackGroundMusic(41);
 
 
+
         SystemSetting.Instance.SetGameFps(SystemSetting.Instance.GetGameFps());
         SystemSetting.Instance.LetFPSUnLimit();
 
diff --git a/Main/System/BeautyMM/BeautyMMShowWin.cs b/Main/System/BeautyMM/BeautyMMShowWin.cs
index a009e78..bd907c6 100644
--- a/Main/System/BeautyMM/BeautyMMShowWin.cs
+++ b/Main/System/BeautyMM/BeautyMMShowWin.cs
@@ -11,6 +11,7 @@
     [SerializeField] Image qualityImg;
     [SerializeField] Text qualityText1; // 鍝佽川鍒嗕袱瀛楁樉绀猴紝娉ㄦ剰娴峰鐗堟湰
     [SerializeField] Text qualityText2;
+    [SerializeField] Text qualityText3;
     [SerializeField] Text nameText;
     [SerializeField] Button descBtn;
     [SerializeField] ImageEx roleImg;
@@ -158,8 +159,21 @@
         mmConfig = BeautyConfig.Get(mmID);
         qualityImg.SetSprite($"mmMark{mmConfig.BeautyQuality}");
         string qualityStr = Language.Get($"CommonQuality{mmConfig.BeautyQuality}");
-        qualityText1.text = qualityStr[0].ToString();
-        qualityText2.text = qualityStr.Substring(1);
+        string langId = Language.Id;
+        bool isChinese = langId == "zh" || langId == "ft";
+        qualityText1.SetActive(isChinese);
+        qualityText2.SetActive(isChinese);
+        qualityText3.SetActive(!isChinese);
+
+        if (isChinese)
+        {
+            qualityText1.text = qualityStr[0].ToString();
+            qualityText2.text = qualityStr.Substring(1);
+        }
+        else
+        {
+            qualityText3.text = qualityStr;
+        }
         nameText.text = mmConfig.Name;
         var skinID = BeautyMMManager.Instance.GetUsedSkinID(mmID);
         var skinConfig = BeautySkinConfig.Get(skinID);
diff --git a/Main/System/CustomizedGift/CustomizedGiftModel.cs b/Main/System/CustomizedGift/CustomizedGiftModel.cs
index 87ba3c5..f3159dd 100644
--- a/Main/System/CustomizedGift/CustomizedGiftModel.cs
+++ b/Main/System/CustomizedGift/CustomizedGiftModel.cs
@@ -12,9 +12,7 @@
 
     private int GiftAwardRecord; //棰嗗彇鐘舵��
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
     public const int activityID = 99999;
-    //public const int activityID = (int)NewDayActivityID.CustomizedGiftWin;
     public static OperationType operaType = (OperationType)99999999;
     //public static OperationType operaType = OperationType.CustomizedGift;
 
@@ -27,7 +25,7 @@
         OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
         OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
         OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
-        OpenServerActivityCenter.Instance.Register(activityID, this, activityType);
+        OpenServerActivityCenter.Instance.Register(activityID, this);
 
     }
 
diff --git a/Main/System/FestivalActivity/FestivalActivityCheckInManager.cs b/Main/System/FestivalActivity/FestivalActivityCheckInManager.cs
index 26e4a0f..176f2f2 100644
--- a/Main/System/FestivalActivity/FestivalActivityCheckInManager.cs
+++ b/Main/System/FestivalActivity/FestivalActivityCheckInManager.cs
@@ -49,8 +49,7 @@
         UpdateRedPoint();
     }
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.FestivalActivityCheckInAct;
+    public const int activityID = (int)OperationType.FestivalActivity_CheckIn;
     public static OperationType operaType = OperationType.FestivalActivity_CheckIn;
 
     public Redpoint redPoint = new Redpoint(MainRedDot.FestivalActivityRepoint,
diff --git a/Main/System/FestivalActivity/FestivalActivityManager.cs b/Main/System/FestivalActivity/FestivalActivityManager.cs
index 1e2af89..48ad503 100644
--- a/Main/System/FestivalActivity/FestivalActivityManager.cs
+++ b/Main/System/FestivalActivity/FestivalActivityManager.cs
@@ -81,8 +81,7 @@
         TryPopWin();
     }
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.FestivalActivityAct;
+    public const int activityID = (int)OperationType.FestivalActivity;
     public static OperationType operaType = OperationType.FestivalActivity;
     public Redpoint redPoint = new Redpoint(MainRedDot.FestivalActivityRepoint);
 
diff --git a/Main/System/FestivalActivity/FestivalActivityMissionManager.cs b/Main/System/FestivalActivity/FestivalActivityMissionManager.cs
index d506b38..df5ac5d 100644
--- a/Main/System/FestivalActivity/FestivalActivityMissionManager.cs
+++ b/Main/System/FestivalActivity/FestivalActivityMissionManager.cs
@@ -65,8 +65,7 @@
         UpdateRedPoint();
     }
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.FestivalActivityMissionAct;
+    public const int activityID = (int)OperationType.FestivalActivity_Mission;
     public static OperationType operaType = OperationType.FestivalActivity_Mission;
 
     public Redpoint redPoint = new Redpoint(MainRedDot.FestivalActivityRepoint, FestivalActivityManager.Instance.GetRedPointId(FestivalActivityRepointType.Mission));
diff --git a/Main/System/FestivalActivity/FestivalActivityRechargeTotDayManager.cs b/Main/System/FestivalActivity/FestivalActivityRechargeTotDayManager.cs
index 0299911..aec7749 100644
--- a/Main/System/FestivalActivity/FestivalActivityRechargeTotDayManager.cs
+++ b/Main/System/FestivalActivity/FestivalActivityRechargeTotDayManager.cs
@@ -47,8 +47,7 @@
         awardRecord = 0;
     }
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.FestivalActivityRechargeTotDayAct;
+    public const int activityID = (int)OperationType.FestivalActivity_RechargeTotDay;
     public static OperationType operaType = OperationType.FestivalActivity_RechargeTotDay;
     // 鎬诲鍔�
     public Redpoint redPoint = new Redpoint(
diff --git a/Main/System/FestivalActivity/FestivalActivityRechargeTotalManager.cs b/Main/System/FestivalActivity/FestivalActivityRechargeTotalManager.cs
index 70fc403..88272bb 100644
--- a/Main/System/FestivalActivity/FestivalActivityRechargeTotalManager.cs
+++ b/Main/System/FestivalActivity/FestivalActivityRechargeTotalManager.cs
@@ -48,8 +48,7 @@
         awardRecord = 0;
     }
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.FestivalActivityRechargeTotalAct;
+    public const int activityID = (int)OperationType.FestivalActivity_RechargeTotal;
     public static OperationType operaType = OperationType.FestivalActivity_RechargeTotal;
     // 鎬诲鍔�
     public Redpoint redPoint = new Redpoint(
diff --git a/Main/System/HeroDebut/HeroDebutManager.cs b/Main/System/HeroDebut/HeroDebutManager.cs
index 0935c63..8358e25 100644
--- a/Main/System/HeroDebut/HeroDebutManager.cs
+++ b/Main/System/HeroDebut/HeroDebutManager.cs
@@ -105,8 +105,7 @@
     }
     public readonly int sendRankType = 6;
     public int loadRankType => actNum * 1000 + sendRankType;
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.HeroDebutAct;
+    public const int activityID = (int)OperationType.HeroDebut;
     public static OperationType operaType = OperationType.HeroDebut;
     public Redpoint redPoint = new Redpoint(MainRedDot.HeroDebutRepoint);
 
diff --git a/Main/System/HeroReturn/HeroReturnManager.cs b/Main/System/HeroReturn/HeroReturnManager.cs
index 1d1d3d8..a17df79 100644
--- a/Main/System/HeroReturn/HeroReturnManager.cs
+++ b/Main/System/HeroReturn/HeroReturnManager.cs
@@ -105,8 +105,7 @@
     }
     public readonly int sendRankType = 6;
     public int loadRankType => actNum * 1000 + sendRankType;
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.HeroReturnAct;
+    public const int activityID = (int)OperationType.HeroReturn;
     public static OperationType operaType = OperationType.HeroReturn;
     public Redpoint redPoint = new Redpoint(MainRedDot.HeroReturnRepoint);
 
diff --git a/Main/System/HeroUI/HeroBestWin.cs b/Main/System/HeroUI/HeroBestWin.cs
index 4d180ee..f36291c 100644
--- a/Main/System/HeroUI/HeroBestWin.cs
+++ b/Main/System/HeroUI/HeroBestWin.cs
@@ -127,7 +127,7 @@
         allAttrScroll.verticalNormalizedPosition = 1;
         Display();
         HeroUIManager.Instance.skinRedpoint.state = HeroUIManager.Instance.HeroAllSkinStateForRedpoint(HeroUIManager.Instance.selectForPreviewHeroID, true) > 0 ? RedPointState.Simple : RedPointState.None;
-    
+
     }
 
 
@@ -143,7 +143,7 @@
         jobPosNameText.text = HeroUIManager.Instance.GetJobName(heroConfig.Class);
         descText.text = heroConfig.Desc;
         HeroUIManager.Instance.PlayerLHSound(skinID);
-        
+
         RefreshConn();
         normalSkillCell.Init(heroConfig.AtkSkillID, () =>
         {
@@ -195,8 +195,17 @@
     {
         if (heroConfig.FetterIDList.Length > 0)
         {
-            connetionForm.SetActive(true);
-            connetionForm.Display(heroConfig.FetterIDList[0], Language.Get("herocard38") + "\n", true);
+            int fetterID = heroConfig.FetterIDList[0];
+            HeroFetterConfig fetterConfig = HeroFetterConfig.Get(fetterID);
+            if (fetterConfig != null && HeroUIManager.IsFetterAllHeroOpen(fetterConfig))
+            {
+                connetionForm.SetActive(true);
+                connetionForm.Display(fetterID, Language.Get("herocard38") + "\n", true);
+            }
+            else
+            {
+                connetionForm.SetActive(false);
+            }
         }
         else
         {
@@ -223,7 +232,7 @@
         }
         HeroUIManager.Instance.selectForPreviewHeroID = HeroUIManager.Instance.heroCollectList[resultIndex];
         Display();
-        
+
         //鎺у埗涓�绾у姛鑳界晫闈㈢殑鐨偆鎸夐挳
         var ui = UIManager.Instance.GetUI<HeroBestBaseWin>();
         if (ui != null)
@@ -332,7 +341,7 @@
 
     }
 
-    
+
 
     void RefreshAllPotential()
     {
@@ -396,11 +405,21 @@
     //缇佺粖
     void RefreshFetter()
     {
-        if (heroConfig.FetterIDList.Length == 0)
+        if (heroConfig.FetterIDList.IsNullOrEmpty())
         {
             fetterGo.SetActive(false);
             return;
         }
+
+        // 妫�鏌ョ涓�涓緛缁婄粍鍚堟槸鍚︽弧瓒冲紑鏈嶅ぉ鏉′欢锛屼笉婊¤冻鍒欓殣钘忔暣涓緛缁婂尯鍩�
+        int firstFetterID = heroConfig.FetterIDList[0];
+        HeroFetterConfig firstFetterConfig = HeroFetterConfig.Get(firstFetterID);
+        if (firstFetterConfig == null || !HeroUIManager.IsFetterAllHeroOpen(firstFetterConfig))
+        {
+            fetterGo.SetActive(false);
+            return;
+        }
+
         fetterGo.SetActive(true);
 
         for (int i = 0; i < fetterText.Length; i++)
@@ -528,6 +547,5 @@
             }
         }
     }
-
 
 }
\ No newline at end of file
diff --git a/Main/System/HeroUI/HeroTrainWin.cs b/Main/System/HeroUI/HeroTrainWin.cs
index e34b969..c6daefa 100644
--- a/Main/System/HeroUI/HeroTrainWin.cs
+++ b/Main/System/HeroUI/HeroTrainWin.cs
@@ -373,8 +373,17 @@
     {
         if (hero.heroConfig.FetterIDList.Length > 0)
         {
-            connetionForm.SetActive(true);
-            connetionForm.Display(hero.heroConfig.FetterIDList[0], Language.Get("herocard38") + "\n", true, guid);
+            int fetterID = hero.heroConfig.FetterIDList[0];
+            HeroFetterConfig fetterConfig = HeroFetterConfig.Get(fetterID);
+            if (fetterConfig != null && HeroUIManager.IsFetterAllHeroOpen(fetterConfig))
+            {
+                connetionForm.SetActive(true);
+                connetionForm.Display(fetterID, Language.Get("herocard38") + "\n", true, guid);
+            }
+            else
+            {
+                connetionForm.SetActive(false);
+            }
         }
         else
         {
@@ -696,6 +705,16 @@
             fetterGo.SetActive(false);
             return;
         }
+
+        // 妫�鏌ョ涓�涓緛缁婄粍鍚堟槸鍚︽弧瓒冲紑鏈嶅ぉ鏉′欢锛屼笉婊¤冻鍒欓殣钘忔暣涓緛缁婂尯鍩�
+        int firstFetterID = hero.heroConfig.FetterIDList[0];
+        HeroFetterConfig firstFetterConfig = HeroFetterConfig.Get(firstFetterID);
+        if (firstFetterConfig == null || !HeroUIManager.IsFetterAllHeroOpen(firstFetterConfig))
+        {
+            fetterGo.SetActive(false);
+            return;
+        }
+
         fetterGo.SetActive(true);
 
         for (int i = 0; i < fetterText.Length; i++)
diff --git a/Main/System/HeroUI/HeroUIManager.Collect.cs b/Main/System/HeroUI/HeroUIManager.Collect.cs
index 924e3a2..06a977c 100644
--- a/Main/System/HeroUI/HeroUIManager.Collect.cs
+++ b/Main/System/HeroUI/HeroUIManager.Collect.cs
@@ -162,8 +162,8 @@
             HeroConfig heroConfig = HeroConfig.Get(heroID);
             if (heroConfig.PlayerCanUse == 0)
                 continue;
-            // 鏂板锛氬紑鏈嶇x澶╂樉绀哄浘閴达紝0琛ㄧず涓嶉檺鍒跺紑鏈嶅ぉ
-            if (heroConfig.OpenCollectionDay > 0 && TimeUtility.OpenDay + 1 < heroConfig.OpenCollectionDay)
+            // 寮�鏈嶇x澶╂樉绀哄浘閴达紝0琛ㄧず涓嶉檺鍒跺紑鏈嶅ぉ
+            if (HasOpenCollectionDayLimit(heroID) && !IsOpenCollectionDayMet(heroID))
                 continue;
             if (!heroCollectDict.ContainsKey(heroConfig.Quality))
             {
@@ -414,6 +414,57 @@
 
     }
 
+    #region 寮�鏈嶅ぉ鏁扮浉鍏虫柟娉�
+
+    /// <summary>
+    /// 妫�鏌ユ灏嗘槸鍚﹂厤缃簡寮�鏈嶅睍绀哄ぉ鏁伴檺鍒�
+    /// </summary>
+    /// <param name="heroID">姝﹀皢ID</param>
+    /// <returns>true: 鏈夊紑鏈嶅ぉ闄愬埗; false: 鏃犻檺鍒讹紙OpenCollectionDay==0 鎴栭厤缃笉瀛樺湪锛�</returns>
+    public static bool HasOpenCollectionDayLimit(int heroID)
+    {
+        HeroConfig heroConfig = HeroConfig.Get(heroID);
+        if (heroConfig == null)
+            return false;
+        return heroConfig.OpenCollectionDay > 0;
+    }
+
+    /// <summary>
+    /// 妫�鏌ユ灏嗘槸鍚﹀凡婊¤冻寮�鏈嶅睍绀哄ぉ鏁拌姹傦紙浠呭湪鏈夐檺鍒舵椂璋冪敤鏈夋剰涔夛級
+    /// </summary>
+    /// <param name="heroID">姝﹀皢ID</param>
+    /// <returns>true: 宸叉弧瓒冲睍绀哄ぉ鏁�; false: 灏氭湭婊¤冻</returns>
+    public static bool IsOpenCollectionDayMet(int heroID)
+    {
+        HeroConfig heroConfig = HeroConfig.Get(heroID);
+        if (heroConfig == null)
+            return false;
+        // OpenCollectionDay==0 鏃犻檺鍒讹紝瑙嗕负宸叉弧瓒�
+        if (heroConfig.OpenCollectionDay <= 0)
+            return true;
+        return TimeUtility.OpenDay + 1 >= heroConfig.OpenCollectionDay;
+    }
+
+    /// <summary>
+    /// 妫�鏌ョ緛缁婄粍鍚堜腑鎵�鏈夋灏嗘槸鍚﹂兘婊¤冻寮�鏈嶅睍绀哄ぉ鏁�
+    /// 鍙湁閰嶇疆浜嗗紑鏈嶅ぉ闄愬埗鐨勬灏嗘墠闇�瑕佹鏌ワ紝鏈厤缃檺鍒剁殑姝﹀皢瑙嗕负婊¤冻
+    /// </summary>
+    /// <param name="fetterConfig">缇佺粖閰嶇疆</param>
+    /// <returns>true: 鎵�鏈夋灏嗛兘婊¤冻; false: 鏈夋灏嗕笉婊¤冻</returns>
+    public static bool IsFetterAllHeroOpen(HeroFetterConfig fetterConfig)
+    {
+        for (int i = 0; i < fetterConfig.HeroIDList.Length; i++)
+        {
+            int heroID = fetterConfig.HeroIDList[i];
+            // 鏈夐檺鍒朵絾鏈弧瓒� -> 璇ョ緛缁婁笉鍙樉绀�
+            if (HasOpenCollectionDayLimit(heroID) && !IsOpenCollectionDayMet(heroID))
+                return false;
+        }
+        return true;
+    }
+
+    #endregion
+
     #endregion
 }
 
diff --git a/Main/System/OpenServerActivity/OpenServerActivityCenter.cs b/Main/System/OpenServerActivity/OpenServerActivityCenter.cs
index 079d10c..7dc7d84 100644
--- a/Main/System/OpenServerActivity/OpenServerActivityCenter.cs
+++ b/Main/System/OpenServerActivity/OpenServerActivityCenter.cs
@@ -1,193 +1,129 @@
-锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-//淇敼鎴愭帶鍒跺涓椿鍔ㄦā鍧楋紝濡傜簿褰╂椿鍔ㄦā鏉�1锛岀簿褰╂椿鍔ㄦā鏉�2
-
-public class OpenServerActivityCenter : Singleton<OpenServerActivityCenter>
-{
-    public event Action openServerActivityStateChange;
-
-    //{娲诲姩妯℃澘锛歿娲诲姩ID锛氭椿鍔ㄦ帴鍙}
-    Dictionary<int, Dictionary<int, IOpenServerActivity>> GameServerActivitys = new Dictionary<int, Dictionary<int, IOpenServerActivity>>();
-
-    public int selectFuncOrder = -1;
-
-    public enum ActivityType
-    {
-        AT_JCHD = 0,    //绮惧僵娲诲姩
-        AT_DateActivity,   //鏃ユ湡鍨嬫椿鍔�- 鎸夋棩鏈熷紑鏀剧殑鎺掕姒滅郴鍒楁椿鍔ㄧ浉鍏� id浠�200寮�濮嬶紙涓庡叾浠栨椿鍔ㄥ尯鍒嗭紝铏界劧id閲嶅骞舵病鏈夊叧绯伙級锛� 绫诲悓鑺傛棩娲诲姩
-    }
-
-    public OpenServerActivityCenter()
-    {
-        TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
-        TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
-    }
-
-    public void Register(int funcOrder, IOpenServerActivity activity, int activityType = (int)ActivityType.AT_JCHD)
-    {
-        if (!GameServerActivitys.ContainsKey(activityType))
-        {
-            GameServerActivitys.Add(activityType, new Dictionary<int, IOpenServerActivity>());
-        }
-
-        var openServerActivitys = GameServerActivitys[activityType];
-        if (!openServerActivitys.ContainsKey(funcOrder))
-        {
-            openServerActivitys.Add(funcOrder, activity);
-            activity.onStateUpdate -= OnStateUpdate;
-            activity.onStateUpdate += OnStateUpdate;
-        }
-    }
-
-    private void OnStateUpdate(int _order)
-    {
-        if (openServerActivityStateChange != null)
-        {
-            openServerActivityStateChange();
-        }
-    }
-
-    private void OnServerOpenDayRefresh()
-    {
-        if (openServerActivityStateChange != null)
-        {
-            openServerActivityStateChange();
-        }
-    }
-
-    public bool IsAnyActivityOpen(out int _functionOrder, int activityType = (int)ActivityType.AT_JCHD)
-    {
-        if (!GameServerActivitys.ContainsKey(activityType))
-        {
-            GameServerActivitys.Add(activityType, new Dictionary<int, IOpenServerActivity>());
-        }
-
-        var openServerActivitys = GameServerActivitys[activityType];
-        _functionOrder = 0;
-        foreach (var _order in openServerActivitys.Keys)
-        {
-            if (openServerActivitys[_order].IsOpen || openServerActivitys[_order].IsAdvance)
-            {
-                _functionOrder = _order;
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public bool IsActivityOpen(int _funcOrder, int activityType = (int)ActivityType.AT_JCHD)
-    {
-        if (!GameServerActivitys.ContainsKey(activityType))
-        {
-            GameServerActivitys.Add(activityType, new Dictionary<int, IOpenServerActivity>());
-        }
-        
-        bool isOpen = false;
-        var openServerActivitys = GameServerActivitys[activityType];
-        if (openServerActivitys.ContainsKey(_funcOrder))
-        {
-            isOpen = openServerActivitys[_funcOrder].IsOpen || openServerActivitys[_funcOrder].IsAdvance;
-        }
-
-        return isOpen;
-    }
-
-    public bool IsPriorityOpenOpen(int _funcOrder, int activityType = (int)ActivityType.AT_JCHD)
-    {
-        if (!GameServerActivitys.ContainsKey(activityType))
-        {
-            GameServerActivitys.Add(activityType, new Dictionary<int, IOpenServerActivity>());
-        }
-
-        var openServerActivitys = GameServerActivitys[activityType];
-        if (openServerActivitys.ContainsKey(_funcOrder))
-        {
-            return openServerActivitys[_funcOrder].priorityOpen;
-        }
-        return false;
-    }
-
-
-
-
-    public void ProcessErrorTip()
-    {
-        SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
-    }
-
-    //AT_Activity2 鏃ユ湡鍨嬫椿鍔�-榛樿璁捐閮芥槸鍚屼竴涓叆鍙o紝鏍规嵁娲诲姩鏇挎崲鍥炬爣鍜屽悕绉帮紝鎵撳紑涓嶅悓鐣岄潰
-    public NewDayActivityInfo GetNewDayActionEnterInfo()
-    {
-        // if (IsActivityOpen((int)NewDayActivityID.BossTrial, (int)ActivityType.AT_Activity2))
-        // {
-        //     return new NewDayActivityInfo() { activityID = (int)NewDayActivityID.BossTrial, redpointID = MainRedDot.BossTrialRepoint, winName = "BossTrialActWin" };
-        // }
-        // else if (IsActivityOpen((int)NewDayActivityID.SecretPlaceXB, (int)ActivityType.AT_Activity2))
-        // {
-        //     return new NewDayActivityInfo() { activityID = (int)NewDayActivityID.SecretPlaceXB, redpointID = MainRedDot.MjxbRedpoint, winName = "SecretPlaceActWin" };
-        // }
-        // else if (IsActivityOpen((int)NewDayActivityID.PetHorseAct, (int)ActivityType.AT_Activity2))
-        // {
-        //     return new NewDayActivityInfo() { activityID = (int)NewDayActivityID.PetHorseAct, redpointID = MainRedDot.QCTrainActRedpoint, winName = "PetHorseActWin" };
-        // }
-        // else if (IsActivityOpen((int)NewDayActivityID.TreasurePavilionAct, (int)ActivityType.AT_Activity2))
-        // {
-        //     return new NewDayActivityInfo() { activityID = (int)NewDayActivityID.TreasurePavilionAct, redpointID = MainRedDot.TreasurePavilionRankActRepoint, winName = "TreasurePavilionRankActWin" };
-        // }
-
-        return new NewDayActivityInfo() { activityID = 0 };
-    }
-
-    //AT_Activity2 鍏ュ彛淇℃伅
-    public struct NewDayActivityInfo
-    {
-        public int activityID;
-        public int redpointID;
-        public string winName;
-    }
-}
-
-public interface IOpenServerActivity
-{
-    bool IsOpen { get; }
-    bool IsAdvance { get; }
-    bool priorityOpen { get; }
-
-    event Action<int> onStateUpdate;
-}
-
-public class ILOpenServerActivityProxy : IOpenServerActivity
-{
-    public bool IsOpen => funcIsOpen();
-
-    public bool IsAdvance => funcIsAdvance();
-
-    public bool priorityOpen => funcPriorityOpen();
-
-    public event Action<int> onStateUpdate;
-
-    private Func<bool> funcIsOpen;
-    private Func<bool> funcIsAdvance;
-    private Func<bool> funcPriorityOpen;
-
-    public ILOpenServerActivityProxy(Func<bool> isOpen, Func<bool> isAdvance, Func<bool> priorityOpen)
-    {
-        funcIsOpen = isOpen;
-        funcIsAdvance = isAdvance;
-        funcPriorityOpen = priorityOpen;
-    }
-
-
-    public void StateUpdate(int id)
-    {
-        if (onStateUpdate != null)
-        {
-            onStateUpdate(id);
-        }
-    }
-
-}
-
-
+锘縰sing System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+//淇敼鎴愭帶鍒跺涓椿鍔ㄦā鍧楋紝濡傜簿褰╂椿鍔ㄦā鏉�1锛岀簿褰╂椿鍔ㄦā鏉�2
+
+public class OpenServerActivityCenter : Singleton<OpenServerActivityCenter>
+{
+    public event Action openServerActivityStateChange;
+
+    //{娲诲姩ID锛氭椿鍔ㄦ帴鍙
+    Dictionary<int, IOpenServerActivity> GameServerActivitys = new Dictionary<int, IOpenServerActivity>();
+
+    public int selectFuncOrder = -1;
+
+    public OpenServerActivityCenter()
+    {
+        TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
+        TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
+    }
+
+    public void Register(int funcOrder, IOpenServerActivity activity)
+    {
+        if (!GameServerActivitys.ContainsKey(funcOrder))
+        {
+            GameServerActivitys.Add(funcOrder, activity);
+            activity.onStateUpdate -= OnStateUpdate;
+            activity.onStateUpdate += OnStateUpdate;
+        }
+    }
+
+    private void OnStateUpdate(int _order)
+    {
+        if (openServerActivityStateChange != null)
+        {
+            openServerActivityStateChange();
+        }
+    }
+
+    private void OnServerOpenDayRefresh()
+    {
+        if (openServerActivityStateChange != null)
+        {
+            openServerActivityStateChange();
+        }
+    }
+
+    public bool IsAnyActivityOpen(out int _functionOrder)
+    {
+        _functionOrder = 0;
+        foreach (var _order in GameServerActivitys.Keys)
+        {
+            if (GameServerActivitys[_order].IsOpen || GameServerActivitys[_order].IsAdvance)
+            {
+                _functionOrder = _order;
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public bool IsActivityOpen(int _funcOrder)
+    {
+        bool isOpen = false;
+        if (GameServerActivitys.ContainsKey(_funcOrder))
+        {
+            isOpen = GameServerActivitys[_funcOrder].IsOpen || GameServerActivitys[_funcOrder].IsAdvance;
+        }
+
+        return isOpen;
+    }
+
+    public bool IsPriorityOpenOpen(int _funcOrder)
+    {
+        if (GameServerActivitys.ContainsKey(_funcOrder))
+        {
+            return GameServerActivitys[_funcOrder].priorityOpen;
+        }
+        return false;
+    }
+
+
+
+    public void ProcessErrorTip()
+    {
+        SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
+    }
+}
+
+public interface IOpenServerActivity
+{
+    bool IsOpen { get; }
+    bool IsAdvance { get; }
+    bool priorityOpen { get; }
+
+    event Action<int> onStateUpdate;
+}
+
+public class ILOpenServerActivityProxy : IOpenServerActivity
+{
+    public bool IsOpen => funcIsOpen();
+
+    public bool IsAdvance => funcIsAdvance();
+
+    public bool priorityOpen => funcPriorityOpen();
+
+    public event Action<int> onStateUpdate;
+
+    private Func<bool> funcIsOpen;
+    private Func<bool> funcIsAdvance;
+    private Func<bool> funcPriorityOpen;
+
+    public ILOpenServerActivityProxy(Func<bool> isOpen, Func<bool> isAdvance, Func<bool> priorityOpen)
+    {
+        funcIsOpen = isOpen;
+        funcIsAdvance = isAdvance;
+        funcPriorityOpen = priorityOpen;
+    }
+
+
+    public void StateUpdate(int id)
+    {
+        if (onStateUpdate != null)
+        {
+            onStateUpdate(id);
+        }
+    }
+
+}
diff --git a/Main/System/TimeRush/TimeRushManager.cs b/Main/System/TimeRush/TimeRushManager.cs
index 364d752..5b803f9 100644
--- a/Main/System/TimeRush/TimeRushManager.cs
+++ b/Main/System/TimeRush/TimeRushManager.cs
@@ -26,8 +26,7 @@
         }
     }
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.TimeRushAct;
+    public const int activityID = (int)OperationType.TimeRush;
     public int actNum = 10;
     public static OperationType operaType = OperationType.TimeRush;
     public Redpoint redPoint = new Redpoint(MainRedDot.TimeRushRepoint);
@@ -68,7 +67,7 @@
         OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
         StoreModel.Instance.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent;
         //storeModel.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent;
-        OpenServerActivityCenter.Instance.Register(activityID, this, activityType);
+        OpenServerActivityCenter.Instance.Register(activityID, this);
 
         var config = FuncConfigConfig.Get("TimeRush");
         windowIDDict = ConfigParse.ParseIntDict(config.Numerical1);
diff --git a/Main/System/TotDayRecharge/TotDayRechargeManager.cs b/Main/System/TotDayRecharge/TotDayRechargeManager.cs
index b2a7871..78bb223 100644
--- a/Main/System/TotDayRecharge/TotDayRechargeManager.cs
+++ b/Main/System/TotDayRecharge/TotDayRechargeManager.cs
@@ -47,8 +47,7 @@
         awardRecord = 0;
     }
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.TotDayRechargeAct;
+    public const int activityID = (int)OperationType.TotDayRecharge;
     public static OperationType operaType = OperationType.TotDayRecharge;
     // 鎬诲鍔�
     public Redpoint redPoint = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 6);
diff --git a/Main/System/TotalRecharge/TotalRechargeManager.cs b/Main/System/TotalRecharge/TotalRechargeManager.cs
index 2a23413..c78de92 100644
--- a/Main/System/TotalRecharge/TotalRechargeManager.cs
+++ b/Main/System/TotalRecharge/TotalRechargeManager.cs
@@ -48,8 +48,7 @@
         awardRecord = 0;
     }
 
-    public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
-    public const int activityID = (int)NewDayActivityID.TotalRechargeAct;
+    public const int activityID = (int)OperationType.TotalRecharge;
     public static OperationType operaType = OperationType.TotalRecharge;
     // 鎬诲鍔�
     public Redpoint redPoint = new Redpoint(MainRedDot.RedPoint_OSGala, MainRedDot.RedPoint_OSGala * 10 + 5);
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index a0618e8..845f48a 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -1810,21 +1810,6 @@
     Mount,
 }
 
-//OpenServerActivityCenter.ActivityType.AT_Activity2鐨勬椿鍔�  鍘嗗彶鍘熷洜涓嶈鐢�100
-public enum NewDayActivityID
-{
-    TimeRushAct = 200,  //杞洖娈�(姝﹀皢鍐插埡)
-    HeroDebutAct = 201,  //鑻遍泟鐧诲満娲诲姩
-    HeroReturnAct = 202,  //鑻遍泟杩斿満娲诲姩
-    TotalRechargeAct = 203,   //绱厖娲诲姩
-    TotDayRechargeAct = 204,  //绱厖澶╂椿鍔�
-    FestivalActivityAct = 205,  //鑺傛棩娲诲姩
-    FestivalActivityRechargeTotalAct = 206,
-    FestivalActivityRechargeTotDayAct = 207,
-    FestivalActivityCheckInAct = 208,
-    FestivalActivityMissionAct = 209,   //鑺傛棩娲诲姩-浠诲姟
-}
-
 //浠欑帀璐拱鐨勪簩娆$‘璁ゆ绫诲瀷
 public enum BuyStoreItemCheckType
 {
diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index 8cb49c4..43a23f7 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -237,10 +237,17 @@
     /// </summary>
     public static string ReplaceLargeNum(double num, int decimalPlaces = 1)
     {
-        const long K = 10000;    //鍥藉唴涓轰竾锛屾捣澶栦负鍗�
-        const long M = K * 10000;
-        const long B = M * 10000;
-        const long T = B * 10000;
+        // 鑾峰彇褰撳墠璇█鐘舵��
+        string langId = Language.Id;
+        bool isChinese = langId == "zh" || langId == "ft";
+
+        // 绠�绻佷腑鏂囦竾杩涘埗 (10000)锛屽叾浠栧崈杩涘埗 (1000)
+        long baseUnit = isChinese ? 10000 : 1000;
+
+        long K = baseUnit;
+        long M = K * baseUnit;
+        long B = M * baseUnit;
+        long T = B * baseUnit;
 
         if (num >= T)
         {
@@ -267,10 +274,17 @@
     //鐢ㄤ簬缇庢湳瀛� 缁熶竴鐢ㄥ瓧姣岾MBT浠h〃浣跨敤锛屽皬鏁扮偣鐢�.
     public static string ReplaceLargeArtNum(double num)
     {
-        const long K = 10000;    //鍥藉唴涓轰竾锛屾捣澶栦负鍗�
-        const long M = K * 10000;
-        const long B = M * 10000;
-        const long T = B * 10000;
+        // 鑾峰彇褰撳墠璇█鐘舵��
+        string langId = Language.Id;
+        bool isChinese = langId == "zh" || langId == "ft";
+
+        // 绠�绻佷腑鏂囦竾杩涘埗 (10000)锛屽叾浠栧崈杩涘埗 (1000)
+        long baseUnit = isChinese ? 10000 : 1000;
+
+        long K = baseUnit;
+        long M = K * baseUnit;
+        long B = M * baseUnit;
+        long T = B * baseUnit;
 
         if (num >= T)
         {

--
Gitblit v1.8.0