lcy
3 天以前 87418260630d087e961055d28971a7b08c65cc7b
475 时机礼包-客户端
8个文件已添加
8个文件已修改
377 ■■■■ 已修改文件
Main/Config/Configs/TimingGiftConfig.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ClientPack/CA1_Sys/CA131_tagCSSettingData.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ClientPack/CA1_Sys/CA131_tagCSSettingData.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA131_tagSCSettingDataInfo.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA131_tagSCSettingDataInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HA1_Sys/HA131_tagSCSettingDataInfo.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HA1_Sys/HA131_tagSCSettingDataInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Main.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/TimingGift/SettingDataManager.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/TimingGift/SettingDataManager.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/TimingGift/TimingGiftCell.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/TimingGift/TimingGiftCtgIdCell.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/TimingGift/TimingGiftManager.cs 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/TimingGift/TimingGiftTabCell.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/TimingGift/TimingGiftWin.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/TimingGiftConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:           YYL
//    [  Date ]:           2026年2月5日
//    [  Date ]:           2026年2月7日
//--------------------------------------------------------
using System.Collections.Generic;
@@ -20,6 +20,9 @@
    public string GiftName;
    public int GiftType;
    public int[] CTGIDs;
    public int[] TopColor;
    public int[] BottomColor;
    public int[] OutlineColor;
    public override int LoadKey(string _key)
    {
@@ -50,6 +53,48 @@
                     int.TryParse(CTGIDsStringArray[i],out CTGIDs[i]);
                }
            }
            if (tables[4].Contains("["))
            {
                TopColor = JsonMapper.ToObject<int[]>(tables[4]);
            }
            else
            {
                string[] TopColorStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                TopColor = new int[TopColorStringArray.Length];
                for (int i=0;i<TopColorStringArray.Length;i++)
                {
                     int.TryParse(TopColorStringArray[i],out TopColor[i]);
                }
            }
            if (tables[5].Contains("["))
            {
                BottomColor = JsonMapper.ToObject<int[]>(tables[5]);
            }
            else
            {
                string[] BottomColorStringArray = tables[5].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                BottomColor = new int[BottomColorStringArray.Length];
                for (int i=0;i<BottomColorStringArray.Length;i++)
                {
                     int.TryParse(BottomColorStringArray[i],out BottomColor[i]);
                }
            }
            if (tables[6].Contains("["))
            {
                OutlineColor = JsonMapper.ToObject<int[]>(tables[6]);
            }
            else
            {
                string[] OutlineColorStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                OutlineColor = new int[OutlineColorStringArray.Length];
                for (int i=0;i<OutlineColorStringArray.Length;i++)
                {
                     int.TryParse(OutlineColorStringArray[i],out OutlineColor[i]);
                }
            }
        }
        catch (Exception exception)
        {
Main/Core/NetworkPackage/ClientPack/CA1_Sys/CA131_tagCSSettingData.cs
New file
@@ -0,0 +1,22 @@
using UnityEngine;
using System.Collections;
// A1 31 前端自定义保存设置内容 #tagCSSettingData
public class CA131_tagCSSettingData : GameNetPackBasic {
    public byte KeyNum;    // 自定义key编号,后端使用数字key存储,前端自行进行转换定义,限制100个
    public byte DataLen;
    public string SetData;    //自定义保存的内容
    public CA131_tagCSSettingData () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA131;
    }
    public override void WriteToBytes () {
        WriteBytes (KeyNum, NetDataType.BYTE);
        WriteBytes (DataLen, NetDataType.BYTE);
        WriteBytes (SetData, NetDataType.Chars, DataLen);
    }
}
Main/Core/NetworkPackage/ClientPack/CA1_Sys/CA131_tagCSSettingData.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f237c6f43939ca64894d301a44913fa7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA131_tagSCSettingDataInfo.cs
New file
@@ -0,0 +1,12 @@
using UnityEngine;
using System.Collections;
// A1 31 前端自定义保存的设置内容信息 #tagSCSettingDataInfo
public class DTCA131_tagSCSettingDataInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HA131_tagSCSettingDataInfo vNetData = vNetPack as HA131_tagSCSettingDataInfo;
        SettingDataManager.Instance.UpdateSettingData(vNetData);
    }
}
Main/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA131_tagSCSettingDataInfo.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0eed7575356cfc54f9665f3f7653c520
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -150,6 +150,7 @@
        Register(typeof(HB163_tagSCBatPresetSwitchInfo), typeof(DTCB163_tagSCBatPresetSwitchInfo));
        Register(typeof(HA001_tagBroadCastInfo), typeof(DTCA001_tagBroadCastInfo));
        Register(typeof(HA519_tagSCTagFamilyInfo), typeof(DTCA519_tagSCTagFamilyInfo));
        Register(typeof(HA131_tagSCSettingDataInfo), typeof(DTCA131_tagSCSettingDataInfo));
    }
    //主工程注册封包
Main/Core/NetworkPackage/ServerPack/HA1_Sys/HA131_tagSCSettingDataInfo.cs
New file
@@ -0,0 +1,31 @@
using UnityEngine;
using System.Collections;
// A1 31 前端自定义保存的设置内容信息 #tagSCSettingDataInfo
public class HA131_tagSCSettingDataInfo : GameNetPackBasic {
    public ushort DataCnt;
    public  tagSCSettingData[] SettingDataList;
    public HA131_tagSCSettingDataInfo () {
        _cmd = (ushort)0xA131;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out DataCnt, vBytes, NetDataType.WORD);
        SettingDataList = new tagSCSettingData[DataCnt];
        for (int i = 0; i < DataCnt; i ++) {
            SettingDataList[i] = new tagSCSettingData();
            TransBytes (out SettingDataList[i].KeyNum, vBytes, NetDataType.BYTE);
            TransBytes (out SettingDataList[i].DataLen, vBytes, NetDataType.BYTE);
            TransBytes (out SettingDataList[i].SetData, vBytes, NetDataType.Chars, SettingDataList[i].DataLen);
        }
    }
    public class tagSCSettingData {
        public byte KeyNum;        // 自定义key编号,后端使用数字key存储,前端自行进行转换定义,限制100个
        public byte DataLen;
        public string SetData;        //自定义保存的内容
    }
}
Main/Core/NetworkPackage/ServerPack/HA1_Sys/HA131_tagSCSettingDataInfo.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 19c12567a8e6d994b823f21885a07bc2
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Main.cs
@@ -105,6 +105,7 @@
        managers.Add(FuncPresetManager.Instance);
        managers.Add(GMNotifyManager.Instance);
        managers.Add(TimingGiftManager.Instance);
        managers.Add(SettingDataManager.Instance);
        foreach (var manager in managers)
        {
Main/System/TimingGift/SettingDataManager.cs
New file
@@ -0,0 +1,75 @@
using System;
using System.Collections.Generic;
using UnityEngine;
public class SettingDataManager : GameSystemManager<SettingDataManager>
{
    public override void Init()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
    }
    public override void Release()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin;
    }
    private void OnBeforePlayerDataInitializeEventOnRelogin()
    {
        settingDataDict.Clear();
    }
    public event Action OnUpdateSettingDataEvent;
    Dictionary<int, string> settingDataDict = new Dictionary<int, string>();
    public bool TryGetSettingData(int keyNum, out string setData)
    {
        return settingDataDict.TryGetValue(keyNum, out setData);
    }
    public Dictionary<int, string> GetSettingData()
    {
        return settingDataDict;
    }
    public void UpdateSettingData(HA131_tagSCSettingDataInfo pack)
    {
        if (pack == null || pack.SettingDataList.IsNullOrEmpty())
            return;
        for (int i = 0; i < pack.SettingDataList.Length; i++)
        {
            var info = pack.SettingDataList[i];
            settingDataDict[info.KeyNum] = info.SetData;
        }
        OnUpdateSettingDataEvent?.Invoke();
    }
    public void ClearSettingData(int keyNum)
    {
        SendSettingData(keyNum, string.Empty);
    }
    public void SendSettingData(SettingDataKeyNum keyNum, string setData)
    {
        SendSettingData((int)keyNum, setData);
    }
    public void SendSettingData(int keyNum, string setData)
    {
        // 检查数据长度是否超过byte最大值
        if (setData.Length > byte.MaxValue)
        {
            Debug.LogError($"设置数据长度({setData.Length})超过byte最大值({byte.MaxValue})");
            return;
        }
        CA131_tagCSSettingData pack = new CA131_tagCSSettingData();
        pack.KeyNum = (byte)keyNum;
        pack.SetData = setData;
        pack.DataLen = (byte)setData.Length;
        GameNetSystem.Instance.SendInfo(pack);
    }
}
public enum SettingDataKeyNum
{
    TimingGiftType = 1,
}
Main/System/TimingGift/SettingDataManager.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 11efe5307ce944149977d11036bcd76a
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/TimingGift/TimingGiftCell.cs
@@ -106,7 +106,7 @@
        {
            int times = manager.GetRemainingSecondsByType(type);
            time.text = times <= 0 ? Language.Get("TimingGift04") : TimeUtility.SecondsToHMS(times);
            time.colorType = times <= 0 ? TextColType.Red : TextColType.DarkGreen;
            time.colorType = times <= 0 ? TextColType.Red : TextColType.LightGreen;
        }
    }
Main/System/TimingGift/TimingGiftCtgIdCell.cs
@@ -17,11 +17,15 @@
        bool isChoose = manager.selectCtgIdIndex == index;
        tabIcon.SetSprite(isChoose ? "TimingGiftTab2_Select" : "TimingGiftTab2_UnSelect");
        moneyText.colorType = isChoose ? TextColType.NavyBrown : TextColType.LightWhite;
        moneyButton.SetListener(() =>
        {
            manager.selectCtgId = ctgId;
            if (!CTGConfig.HasKey(manager.selectCtgId))
                return;
            CTGConfig ctgConfig = CTGConfig.Get(manager.selectCtgId);
            manager.selectGainItemList = ctgConfig.GainItemList;
            manager.selectCtgIdIndex = index;
        });
    }
}
Main/System/TimingGift/TimingGiftManager.cs
@@ -54,10 +54,13 @@
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
    }
    private void OnBeforePlayerDataInitializeEventOnRelogin()
    {
        showGiftIdList.Clear();
        lastTriggerTimeDict.Clear();
    }
    private void OnPlayerLoginOk()
@@ -68,6 +71,19 @@
    private void OnSecondEvent()
    {
        RemoveExpired();
    }
    public Color32 GetColor32(int[] colorArr)
    {
        if (colorArr == null || colorArr.Length < 3)
            return Color.white;
        return new Color32()
        {
            r = (byte)(colorArr.Length > 0 ? colorArr[0] : 0),
            g = (byte)(colorArr.Length > 1 ? colorArr[1] : 0),
            b = (byte)(colorArr.Length > 2 ? colorArr[2] : 0),
            a = (byte)(colorArr.Length > 3 ? colorArr[3] : 255),
        };
    }
    public static bool TryGetTimingGiftTypeConfig(int giftType, out TimingGiftTypeConfig config)
@@ -151,6 +167,18 @@
    public void TryAdd(int type)
    {
        if (NewBieCenter.Instance.inGuiding)
        {
#if UNITY_EDITOR
            if (isLogShow)
            {
                Debug.Log($"[TimingGift] TryPop:触发Return,正在引导中");
            }
#endif
            return;
        }
        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.TimingGift))
        {
@@ -437,22 +465,22 @@
    #endregion
    #region 数据保存
    private string saveKey { get { return StringUtility.Concat("TimingGift_LastTriggerTimeDict_", PlayerDatas.Instance.PlayerId.ToString()); } }
    private void LoadData()
    {
        lastTriggerTimeDict.Clear();
        // 使用 LocalSave 读取 JSON 字符串
        string jsonStr = LocalSave.GetString(saveKey);
        if (string.IsNullOrEmpty(jsonStr) || jsonStr == "{}")
        if (!SettingDataManager.Instance.TryGetSettingData((int)SettingDataKeyNum.TimingGiftType, out string data))
            return;
        Dictionary<int, int> loadDict = ConfigParse.ParseIntDict(jsonStr);
        // 使用 LocalSave 读取 JSON 字符串
        if (string.IsNullOrEmpty(data) || data == "{}")
            return;
        Dictionary<int, int> loadDict = ConfigParse.ParseIntDict(data);
        if (loadDict == null)
            return;
        lastTriggerTimeDict = loadDict;
        InitCurrectTimingGiftIdList(new List<int>(loadDict.Keys));
#if UNITY_EDITOR
        if (isLogShow)
        {
@@ -464,7 +492,7 @@
    private void SaveData()
    {
        string jsonStr = JsonMapper.ToJson(lastTriggerTimeDict);
        LocalSave.SetString(saveKey, jsonStr);
        SettingDataManager.Instance.SendSettingData(SettingDataKeyNum.TimingGiftType, jsonStr);
#if UNITY_EDITOR
        if (isLogShow)
        {
Main/System/TimingGift/TimingGiftTabCell.cs
@@ -2,9 +2,12 @@
public class TimingGiftTabCell : MonoBehaviour
{
    [SerializeField] Color selectColor;
    [SerializeField] Color unSelectColor;
    [SerializeField] TextEx tabNameText;
    [SerializeField] ButtonEx tabButton;
    [SerializeField] ImageEx tabIcon;
    [SerializeField] Transform line;
    TimingGiftManager manager { get { return TimingGiftManager.Instance; } }
    public void Display(int index)
    {
@@ -14,12 +17,13 @@
        int id = currectTimingGiftIdList[index];
        if (!TimingGiftConfig.HasKey(id))
            return;
        line.SetActive(currectTimingGiftIdList.Count > 1 && index < currectTimingGiftIdList.Count - 1);
        TimingGiftConfig config = TimingGiftConfig.Get(id);
        tabNameText.text = config.GiftName;
        bool isChoose = manager.selectTabIndex == index;
        tabIcon.SetSprite(isChoose ? "TimingGiftTab1_Select" : "TimingGiftTab1_UnSelect");
        tabNameText.colorType = isChoose ? TextColType.NavyBrown : TextColType.LightWhite;
        tabIcon.SetNativeSize();
        tabNameText.color = isChoose ? selectColor : unSelectColor;
        tabButton.SetListener(() =>
        {
            manager.selectTabGiftId = id;
Main/System/TimingGift/TimingGiftWin.cs
@@ -5,18 +5,24 @@
public class TimingGiftWin : UIBase
{
    [SerializeField] ScrollerController tabScroller;
    [SerializeField] ScrollerController ctgIdScroller;
    [SerializeField] ScrollerController awardScroller;
    [SerializeField] TimingGiftCtgIdCell[] ctgIdCells;
    [SerializeField] TextEx timeText;
    [SerializeField] TextEx rateText;
    [SerializeField] ImageEx bgImage;
    [SerializeField] ImageEx IconImage;
    [SerializeField] TextEx giftNameText;
    [SerializeField] GradientText giftText; //"礼包"
    [SerializeField] OutlineEx giftTextOutline;
    [SerializeField] GradientText giftNameText;
    [SerializeField] TextEx rateText;
    [SerializeField] GradientText rateNameText; //充值返利
    [SerializeField] ButtonEx buyButton;
    [SerializeField] ImageEx buyImage;
    [SerializeField] TextEx buyText;
    [SerializeField] ButtonEx leftButton;
    [SerializeField] ButtonEx rightButton;
    [SerializeField] ButtonEx closeButton;
    TimingGiftManager manager { get { return TimingGiftManager.Instance; } }
    int type;
@@ -30,6 +36,7 @@
        });
        leftButton.SetListener(() => UpdateTabSelection(-1));
        rightButton.SetListener(() => UpdateTabSelection(1));
        closeButton.SetListener(CloseWindow);
    }
    protected override void OnPreOpen()
@@ -42,7 +49,6 @@
        }
#endif
        tabScroller.OnRefreshCell += OnRefreshTabCell;
        ctgIdScroller.OnRefreshCell += OnRefreshCtgIdCell;
        awardScroller.OnRefreshCell += OnRefreshAwardCell;
        manager.OnSelectTabIndexChangeEvent += OnSelectTabIndexChangeEvent;
        manager.OnSelectCtgIdIndexChangeEvent += OnSelectCtgIdIndexChangeEvent;
@@ -55,7 +61,6 @@
    protected override void OnPreClose()
    {
        tabScroller.OnRefreshCell -= OnRefreshTabCell;
        ctgIdScroller.OnRefreshCell -= OnRefreshCtgIdCell;
        awardScroller.OnRefreshCell -= OnRefreshAwardCell;
        manager.OnSelectTabIndexChangeEvent -= OnSelectTabIndexChangeEvent;
        manager.OnSelectCtgIdIndexChangeEvent -= OnSelectCtgIdIndexChangeEvent;
@@ -88,21 +93,21 @@
    private void OnSelectTabIndexChangeEvent()
    {
        InitializeSelectedCtgConfig(manager.selectTabGiftId);
        InitializeSelectedCtgConfig();
        tabScroller.m_Scorller.RefreshActiveCellViews();
        CreateCtgIdScroller();
        DisplayCtgIdCells();
        CreateAwardScroller();
        DisplayGift();
    }
    private void OnSelectCtgIdIndexChangeEvent()
    {
        ctgIdScroller.m_Scorller.RefreshActiveCellViews();
        DisplayCtgIdCells();
        CreateAwardScroller();
        DisplayGift();
    }
    private void InitializeSelectedCtgConfig(int giftId)
    private void InitializeSelectedCtgConfig()
    {
        if (!TimingGiftConfig.TryGetTimingGiftConfig(manager.selectTabGiftId, out TimingGiftConfig config))
            return;
@@ -127,14 +132,14 @@
        manager.selectTabIndex = realIndex;
        tabScroller.JumpIndex(manager.selectTabIndex);
        InitializeSelectedCtgConfig(manager.selectTabGiftId);
        InitializeSelectedCtgConfig();
    }
    private void RefreshTime()
    {
        int times = manager.GetRemainingSeconds(manager.selectTabGiftId);
        timeText.text = times <= 0 ? Language.Get("TimingGift04") : Language.Get("TimingGift03", TimeUtility.SecondsToHMS(times));
        timeText.colorType = times <= 0 ? TextColType.Red : TextColType.DarkGreen;
        timeText.colorType = times <= 0 ? TextColType.Red : TextColType.LightGreen;
    }
    private int FindTypeIndex(int type)
@@ -157,12 +162,12 @@
        int index = FindTypeIndex(type);
        manager.selectTabGiftId = manager.GetListValue(index, currectTimingGiftIdList);
        manager.selectTabIndex = index;
        InitializeSelectedCtgConfig(manager.selectTabGiftId);
        InitializeSelectedCtgConfig();
        CreateTabScroller();
        tabScroller.JumpIndex(manager.selectTabIndex);
        CreateCtgIdScroller();
        DisplayCtgIdCells();
        CreateAwardScroller();
        DisplayGift();
    }
@@ -184,19 +189,6 @@
        tabScroller.Restart();
    }
    private void CreateCtgIdScroller()
    {
        ctgIdScroller.Refresh();
        if (!manager.selectCtgIds.IsNullOrEmpty())
        {
            for (int i = 0; i < manager.selectCtgIds.Length; i++)
            {
                ctgIdScroller.AddCell(ScrollerDataType.Header, i);
            }
        }
        ctgIdScroller.Restart();
    }
    private void CreateAwardScroller()
    {
        awardScroller.Refresh();
@@ -209,7 +201,30 @@
        }
        awardScroller.Restart();
    }
    public void DisplayCtgIdCells()
    {
        if (manager.selectCtgIds.IsNullOrEmpty())
        {
            for (int i = 0; i < ctgIdCells.Length; i++)
            {
                ctgIdCells[i].SetActive(false);
            }
            return;
        }
        for (int i = 0; i < ctgIdCells.Length; i++)
        {
            if (i < manager.selectCtgIds.Length)
            {
                ctgIdCells[i].SetActive(true);
                ctgIdCells[i].Display(i, manager.selectCtgIds);
            }
            else
            {
                ctgIdCells[i].SetActive(false);
            }
        }
    }
    private void DisplayGift()
    {
        if (!TimingGiftConfig.TryGetTimingGiftConfig(manager.selectTabGiftId, out TimingGiftConfig config))
@@ -225,12 +240,16 @@
        bgImage.SetSprite($"TimingGiftBg_{manager.selectTabGiftId}");
        IconImage.SetSprite($"TimingGiftIcon_{manager.selectTabGiftId}");
        giftNameText.text = Language.Get("TimingGift01", config.GiftName);
        giftNameText.text = config.GiftName;
        rateText.text = Language.Get("TimingGift02", ctgConfig.Percentage);
        rateNameText.text = Language.Get("TimingGift05");
        giftText.text = Language.Get("TimingGift01");
        giftText.SetVerticalGradient(manager.GetColor32(config.TopColor), manager.GetColor32(config.BottomColor));
        giftTextOutline.OutlineColor = manager.GetColor32(config.OutlineColor);
        bool isBuy = manager.IsBuy(manager.selectCtgId);
        buyText.text = !isBuy ? Language.Get("PayMoneyNum", orderInfoConfig.PayRMBNumOnSale) : Language.Get("storename11");
        buyButton.interactable = !isBuy;
        buyText.text = !isBuy ? Language.Get("PayMoneyNum", orderInfoConfig.PayRMBNumOnSale) : Language.Get("L1133");
        buyImage.SetSprite(isBuy ? "TimingGiftBuy" : "TimingGiftNoBuy");
        buyImage.raycastTarget = !isBuy;
        RefreshTime();
    }
@@ -239,13 +258,6 @@
        var _cell = cell.GetComponent<TimingGiftTabCell>();
        _cell?.Display(cell.index);
    }
    private void OnRefreshCtgIdCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<TimingGiftCtgIdCell>();
        _cell?.Display(cell.index, manager.selectCtgIds);
    }
    private void OnRefreshAwardCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<TimingGiftAwardCell>();