yyl
6 天以前 aee07e17664b4e598f4bc54460cffce26b8b823f
Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
15个文件已修改
240 ■■■■ 已修改文件
Main/System/Achievement/AchievementManager.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BaseBattleWin.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleManager.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleWin.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Chat/ChatManager.cs 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Chat/ChatPlayerOtherCell.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Chat/ChatWin.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildManager.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroTrainWin.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroUIManager.Reborn.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroUIManager.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Login/LoginWin.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Message/SysNotifyMgr.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/OSActivity/OSGalaMissionWin.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Achievement/AchievementManager.cs
@@ -163,6 +163,8 @@
    };
    public static int[] galaTypes = new int[] { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
    void UpdateRedpoint(List<int> _types)
    {
        if (_types.IsNullOrEmpty())
@@ -171,6 +173,13 @@
        }
        bool isGalaRed = false;
        if (_types.Count == 1)
        {
            if (galaTypes.Contains(_types[0]))
            {
                _types = galaTypes.ToList();
            }
        }
        foreach (var type in _types)
        {
Main/System/Battle/BaseBattleWin.cs
@@ -194,14 +194,15 @@
    {
        if (null == battleField)
            return;
        if (!FuncOpen.Instance.IsFuncOpen(BattleManager.Instance.passFuncId, true))
        // 检查是否为永久特权卡玩家
        bool hasForeverPrivilege = InvestModel.Instance.IsInvested(InvestModel.foreverCardType);
        if (!hasForeverPrivilege && !FuncOpen.Instance.IsFuncOpen(BattleManager.Instance.passFuncId, true))
            return;
        int passRound = BattleManager.Instance.defaultPassRound;
        var name = battleField.ToString();
        // 检查是否为永久特权卡玩家
        bool hasForeverPrivilege = InvestModel.Instance.IsInvested(InvestModel.foreverCardType);
        if (hasForeverPrivilege)
        {
@@ -240,12 +241,15 @@
            // 如果战场类型不在 FieldNameToIndex 中,使用默认配置
        }
        if (passRound != 0)
        {
        int nowRound = battleField.round;   
        int realPassRound = passRound + 1;  // 配置是超过x回合可以跳,意味着x+1回合可以跳
        if (nowRound < realPassRound)
        {
            SysNotifyMgr.Instance.ShowTip("BattlePass", realPassRound - nowRound);
            return;
            }
        }
        battleField.ForceFinish();
    }
@@ -260,16 +264,25 @@
    {
        if (null == battleField)
            return;
        // 计算下一个速度档位的索引
        int nextSpeedIndex = (BattleManager.Instance.speedIndex + 1) % BattleManager.Instance.speedGear.Length;
        bool isOpen = false;
        if (InvestModel.Instance.IsActiveFightSpeed(3))
        {
            isOpen = true;
        }
        else
        {
        // 检查下一档倍速功能是否开启
        int nextSpeedFuncId = BattleManager.Instance.speedIndexfuncIdArr[nextSpeedIndex];
        bool isOpen = FuncOpen.Instance.IsFuncOpen(nextSpeedFuncId);
            isOpen = FuncOpen.Instance.IsFuncOpen(nextSpeedFuncId);
        if (!isOpen && FuncOpenLVConfig.HasKey(nextSpeedFuncId))
        {
            var config = FuncOpenLVConfig.Get(nextSpeedFuncId);
            SysNotifyMgr.Instance.ShowTip("BattleSpeedTip", TaskManager.Instance.GetNeedFinishTaskCount(config.LimitMissionID), nextSpeedIndex + 1);
        }
        }
        BattleManager.Instance.speedIndex = !isOpen ? 0 : nextSpeedIndex;
        battleField.SetSpeedRatio(BattleManager.Instance.speedGear[BattleManager.Instance.speedIndex]);
        if (textSpeed != null)
Main/System/Battle/BattleManager.cs
@@ -632,8 +632,7 @@
        float currentTime = Time.time;
        if (currentTime - lastTime < turnCoolDown)
        {
            SysNotifyMgr.Instance.ShowTip("BattleCoolDown");
            Debug.Log("BattleCoolDown tip");
            SysNotifyMgr.Instance.ShowTip("BattleCoolDownClient");
            return;
        }
        lastTime = currentTime;
Main/System/Battle/BattleWin.cs
@@ -48,7 +48,9 @@
    protected override void OnPreOpen()
    {
        // lastClickTime = Time.realtimeSinceStartup;
        lastClickTime = Time.realtimeSinceStartup;
        UIManager.Instance.OnCloseWindow += OnCloseWindow;
        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
        needGuide = !MainLevelManager.Instance.IsPassedByMainLevelID(BattleManager.Instance.fightGuideMainLevelLimit);
        // SetBattleField(BattleManager.Instance.storyBattleField);
@@ -58,6 +60,8 @@
    protected override void OnPreClose()
    {
        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
        UIManager.Instance.CloseWindow<BattleHUDWin>();
        BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
        UIManager.Instance.OnOpenWindow -= OnOpenWindow;
@@ -71,10 +75,6 @@
        }
    }
    protected override void OnOpen()
    {
        base.OnOpen();
    }
    protected override void OnClose()
    {
@@ -89,15 +89,37 @@
        battleField = null;
    }
    protected override void NextFrameAfterOpen()
    void OnCloseWindow(UIBase ui)
    {
        base.NextFrameAfterOpen();
        if (ui is NewBieWin)
        {
            lastClickTime = Time.realtimeSinceStartup;
        }
    }
    protected override void CompleteClose()
    bool lastIsBoss = false;
    void OnPlayerDataRefresh(PlayerDataType type)
    {
        base.CompleteClose();
        switch (type)
        {
            case PlayerDataType.ExAttr1:
            case PlayerDataType.ExAttr2:
                if (!lastIsBoss && MainLevelManager.Instance.CanChallengeBoss())
                {
                    //可挑战的时候也要等CD
                    lastClickTime = Time.realtimeSinceStartup;
                    lastIsBoss = true;
    }
                break;
        }
    }
    public void SetBattleField(BattleField _battleField)
    {
Main/System/Chat/ChatManager.cs
@@ -11,6 +11,9 @@
    //<ChannelType,TalkData>
    public Dictionary<ChatChannel, List<TalkData>> talkDict = new Dictionary<ChatChannel, List<TalkData>>();
    //用于缓存玩家的外观信息
    public Dictionary<uint, TalkData> playerInfoDict = new Dictionary<uint, TalkData>();
    public Dictionary<int, ChatBubbleData> chatBubbles = new Dictionary<int, ChatBubbleData>();
    //<ChannelType,时间戳>
    public Dictionary<int, int> chatChannelSendTime = new Dictionary<int, int>();
@@ -119,6 +122,8 @@
    private void OnBeforePlayerDataInitializeEvent()
    {
        talkDict.Clear();
        playerInfoDict.Clear();
        currentDay = -1;
        ParseChatBubbleConfig();
        nowChatChannel = ChatChannel.World;
        nowChatTab = ChatTab.World;
@@ -185,6 +190,11 @@
    public static int GetUTF8InfoLen(string msg)
    {
        return Encoding.UTF8.GetBytes(msg).Length;
    }
    public bool TryGetNewPlayerInfoByPlayerID(uint playerID, out TalkData talkData)
    {
        return playerInfoDict.TryGetValue(playerID, out talkData);
    }
    public bool TryGetBubble(int id, out ChatBubbleData bubble)
@@ -351,7 +361,7 @@
    }
    public int currentDay = -1;
    public void AddTalkData(ChatChannel type, TalkData data)
    public void AddTalkData(ChatChannel type, TalkData data, bool isSend)
    {
        //如果超过限制先删除旧数据
        TryDeleteTalkData(type);
@@ -360,10 +370,13 @@
            talkDict[type] = new List<TalkData>();
        }
        talkDict[type].Add(data);
        if (isSend)
        {
        OnUpdateTalkEvent?.Invoke(type, data);
    }
    }
    public bool TryAddDate(int allSeconds, ChatChannel type)
    public bool TryAddDate(int allSeconds, ChatChannel type, bool isSend)
    {
        DateTime talkTime = TimeUtility.GetTime((uint)allSeconds);
        if (talkTime.Day != currentDay)
@@ -375,17 +388,17 @@
                isDate = true,
                Content = Language.Get("Chat09", talkTime.Month, talkTime.Day),
                TalkTime = (uint)allSeconds,
            });
            }, isSend);
            return true;
        }
        return false;
    }
    public void AddSysData(string msg, ArrayList infoList, ChatChannel type)
    public void AddSysData(string msg, ArrayList infoList, ChatChannel type, bool isSend)
    {
        int allSeconds = TimeUtility.AllSeconds;
        // 如果隔天,增加日期行
        TryAddDate(allSeconds, type);
        TryAddDate(allSeconds, type, isSend);
        if (!talkDict.ContainsKey(type))
        {
@@ -399,7 +412,7 @@
            BubbleBox = 1,
            TalkTime = (uint)allSeconds,
            InfoList = new ArrayList(infoList),
        });
        }, isSend);
    }
    public void UpdateTalk(HB310_tagMCTalk vNetData)
@@ -415,7 +428,7 @@
        int allSeconds = TimeUtility.AllSeconds;
        // 如果隔天,增加日期行
        TryAddDate(allSeconds, type);
        TryAddDate(allSeconds, type, true);
        TalkData talkData = new TalkData()
        {
@@ -433,7 +446,9 @@
            ServerID = vNetData.ServerID,
            TalkTime = (uint)allSeconds,
        };
        AddTalkData(type, talkData);
        AddPlayerInfo(talkData);
        AddTalkData(type, talkData, true);
    }
    public void UpdateTalkCacheList(HB311_tagMCTalkCacheList vNetData)
@@ -453,13 +468,13 @@
        foreach (var info in vNetData.InfoList)
        {
            // 如果隔天,增加日期行
            TryAddDate((int)info.TalkTime, type);
            AddTalkData(type, new TalkData()
            TryAddDate((int)info.TalkTime, type, false);
            TalkData talkData = new TalkData()
            {
                ChannelType = vNetData.ChannelType,
                Name = info.Name,
                Name = UIHelper.ServerStringTrim(info.Name),
                PlayerID = info.PlayerID,
                Content = info.Content,
                Content = UIHelper.ServerStringTrim(info.Content),
                BubbleBox = info.BubbleBox,
                LV = info.LV,
                Job = info.Job,
@@ -469,9 +484,33 @@
                FacePic = info.FacePic,
                ServerID = info.ServerID,
                TalkTime = info.TalkTime,
            });
            };
            AddPlayerInfo(talkData);
            AddTalkData(type, talkData, false);
        }
        OnUpdateTalkCacheListEvent?.Invoke();
    }
    public event Action OnUpdatePlayerInfoEvent;
    public void AddPlayerInfo(TalkData data)
    {
        bool isChange = false;
        if (playerInfoDict.ContainsKey(data.PlayerID))
        {
            if (data.Name != playerInfoDict[data.PlayerID].Name||
            data.BubbleBox != playerInfoDict[data.PlayerID].BubbleBox||
            data.LV != playerInfoDict[data.PlayerID].LV||
            data.Job != playerInfoDict[data.PlayerID].Job||
            data.RealmLV != playerInfoDict[data.PlayerID].RealmLV||
            data.TitleID != playerInfoDict[data.PlayerID].TitleID||
            data.Face != playerInfoDict[data.PlayerID].Face||
            data.FacePic != playerInfoDict[data.PlayerID].FacePic)
            isChange = true;
        }
        playerInfoDict[data.PlayerID] = data;
        if (isChange)
            OnUpdatePlayerInfoEvent?.Invoke();
    }
    #region 标签页
    // 当前展示的频道入口
@@ -647,7 +686,6 @@
    public byte ChannelType;    // 0-世界;1-跨服;3- 仙盟    
    public bool isSystem = false;       //系统消息
    public bool isDate = false;          //分割日期
    public byte NameLen;
    public string Name;
    public uint PlayerID;
    public string Content;
Main/System/Chat/ChatPlayerOtherCell.cs
@@ -13,19 +13,20 @@
    ChatManager manager { get { return ChatManager.Instance; } }
    public void Refresh(CellView cell)
    {
        if (!manager.TryGetChatData(ChatManager.Instance.nowChatChannel, cell.index, out TalkData data))
        if (!manager.TryGetChatData(ChatManager.Instance.nowChatChannel, cell.index, out TalkData nowData) || nowData == null)
            return;
        avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)data.PlayerID, (int)data.Face, (int)data.PlayerID, data.Job));
        m_ChatBubble.DisplayContent(nowData.Content, true);
        bool hasNewPlayerInfo = manager.TryGetNewPlayerInfoByPlayerID(nowData.PlayerID, out TalkData newPlayerInfo);
        TalkData data = hasNewPlayerInfo ? newPlayerInfo : nowData;
        avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)data.PlayerID, (int)data.Face, (int)data.FacePic, data.Job));
        avatarCell.button.SetListener(() =>
        {
        });
        title.InitUI(data.RealmLV, (int)data.TitleID);
        m_ChatBubble.DisplayContent(data.Content, true);
        int bubbleID = ChatBubbleHelper.GetOtherChatBubbleID(data.Job, (int)data.BubbleBox);
        m_ChatBubble.DisplayBubble(bubbleID, (int)data.PlayerID);
Main/System/Chat/ChatWin.cs
@@ -96,10 +96,12 @@
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
        manager.OnChatTabChangeEvent += OnChatTabChange;
        manager.OnUpdateTalkEvent += OnUpdateTalkEvent;
        manager.OnUpdateTalkCacheListEvent += OnUpdateTalkCacheList;
        manager.OnDeleteTalkEvent += OnDeleteTalkEvent;
        manager.OnUpdatePlayerInfoEvent += OnUpdatePlayerInfoEvent;
        scrChatTab.OnRefreshCell += OnRefreshChatTabCell;
        scrWorld.OnGetDynamicSize += OnGetWorldChatDynamicSize;
@@ -126,10 +128,12 @@
    protected override void OnPreClose()
    {
        base.OnPreClose();
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
        manager.OnChatTabChangeEvent -= OnChatTabChange;
        manager.OnUpdateTalkEvent -= OnUpdateTalkEvent;
        manager.OnUpdateTalkCacheListEvent -= OnUpdateTalkCacheList;
        manager.OnDeleteTalkEvent -= OnDeleteTalkEvent;
        manager.OnUpdatePlayerInfoEvent -= OnUpdatePlayerInfoEvent;
        scrChatTab.OnRefreshCell -= OnRefreshChatTabCell;
        scrWorld.OnGetDynamicSize -= OnGetWorldChatDynamicSize;
@@ -140,6 +144,16 @@
        scrGuild.mScrollRect.onValueChanged.RemoveListener(OnGuildScrollValChange);
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
        clickScreenOtherSpace.RemoveAllListeners();
    }
    private void OnBeforePlayerDataInitializeEvent()
    {
        CreaterAll(manager.nowChatTab);
    }
    private void OnUpdatePlayerInfoEvent()
    {
        RefreshAll(manager.nowChatChannel, isUpdatePlayerInfo: true);
    }
    private void OnDeleteTalkEvent(ChatChannel channel)
@@ -330,21 +344,21 @@
        return 0;
    }
    private void RefreshAll(ChatChannel type, uint playerId = 0)
    private void RefreshAll(ChatChannel type, uint playerId = 0, bool isUpdatePlayerInfo = false)
    {
        scrChatTab.m_Scorller.RefreshActiveCellViews();
        if (type == ChatChannel.World)
        {
            RefreshChat(type, scrWorld, playerId);
            RefreshChat(type, scrWorld, playerId, isUpdatePlayerInfo);
        }
        else if (type == ChatChannel.Guild)
        {
            RefreshChat(type, scrGuild, playerId);
            RefreshChat(type, scrGuild, playerId, isUpdatePlayerInfo);
        }
    }
    private void RefreshChat(ChatChannel type, ScrollerController scroller, uint playerId = 0)
    private void RefreshChat(ChatChannel type, ScrollerController scroller, uint playerId = 0, bool isUpdatePlayerInfo = false)
    {
        if (!manager.TryGetTalkData(type, out List<TalkData> datas) || datas == null)
            return;
@@ -361,6 +375,11 @@
                float height = GetHeight(talkDataType, data.Content, data.InfoList);
                scroller.m_Scorller.AddHeight(true, height);
                //Debug.Log($"ChatWin AddCell i {i} AddHeight {height}");
            }
            if (isUpdatePlayerInfo)
            {
                scroller.m_Scorller.RefreshActiveCellViews();
            }
        }
        else
Main/System/Guild/GuildManager.cs
@@ -80,6 +80,7 @@
    void ClearGuildData()
    {
        PlayerDatas.Instance.baseData.FamilyId = 0;
        m_FairyRequesteds.Clear();
        familyActions.Clear();
        guildChanged = false;
Main/System/HeroUI/HeroTrainWin.cs
@@ -95,6 +95,7 @@
    [SerializeField] Image redpointAwake;
    [SerializeField] Image redpointGift;
    [SerializeField] Image redpointLVUP;
    [SerializeField] Image redpointBreakLVUP; //突破红点
@@ -207,6 +208,7 @@
        {
            functionOrder = 0;
            DisplayTrainOrBreak(hero);
            ForceRefreshLayout();
        });
        breakMainButton.AddListener(() =>
@@ -838,13 +840,14 @@
        redpointLVUP.SetActive(false);
        trainMainRedImg.SetActive(false);
        breakMainRedImg.SetActive(false);
        redpointBreakLVUP.SetActive(false);
        var heroCnt = PackManager.Instance.GetItemCountByID(PackType.Hero, hero.heroId);
        var itemPack = PackManager.Instance.GetSinglePack(PackType.Item);
        if (heroCnt > 1)
        if (heroCnt > 1 && hero.heroStar < hero.GetCurMaxStar())
        {
            redpointGift.SetActive(true);
            trainMainRedImg.SetActive(true);
@@ -887,7 +890,7 @@
        if (HeroUIManager.Instance.IsCanBreak(hero))
        {
            redpointLVUP.SetActive(true);
            redpointBreakLVUP.SetActive(true);
            breakMainRedImg.SetActive(true);
        }
Main/System/HeroUI/HeroUIManager.Reborn.cs
@@ -119,14 +119,31 @@
        int specialAttrType = selectList[4];
        List<string> retGuidList = new List<string>();
        List<int> fullStarHeroIDList = new List<int>();
        foreach (var heroInfo in _list)
        {
            if (heroInfo.heroStar < heroInfo.GetCurMaxStar())
            {
                //相同武将中已经有满星的
                continue;
            }
            var heorID = heroInfo.heroId;
            if (fullStarHeroIDList.Contains(heorID))
                continue;
            fullStarHeroIDList.Add(heorID);
        }
        foreach (var heroInfo in _list)
        {
            if (heroInfo.isAttrActive)
                continue;
            if (heroInfo.heroStar < heroInfo.GetCurMaxStar())
            if (!fullStarHeroIDList.Contains(heroInfo.heroId))
            {
                //相同武将中已经有满星的
                continue;
            }
Main/System/HeroUI/HeroUIManager.cs
@@ -605,7 +605,7 @@
            if (HeroManager.Instance.GetHeroCountByID(hero.heroId) > 1)
            {
                heroEatRedPoint.state = RedPointState.Simple;
                heroEatRedPoint.state = RedPointState.GetReward;
                break;
            }
        }
Main/System/Login/LoginWin.cs
@@ -358,6 +358,10 @@
                    // 删除所有文件  
                    foreach (string file in files)
                    {
                        if (file.Contains(".txt"))
                        {
                            continue;
                        }
                        File.Delete(file);
                    }
@@ -365,9 +369,15 @@
                    // 递归删除所有文件夹  
                    foreach (string dir in dirs)
                    {
                        if (dir.Contains("config"))
                        {
                            continue;
                        }
                        Directory.Delete(dir, true);
                    }
                }
                catch (System.Exception e)
                {
Main/System/Message/SysNotifyMgr.cs
@@ -154,6 +154,10 @@
        SysInfoConfig cfg = SysInfoConfig.Get(key);
        if (cfg != null)
        {
            if (string.IsNullOrEmpty(cfg.richText))
            {
                return;
            }
            tipInfoList.Clear();
            tipInfoList.AddRange(msg);
            AnalysisSysmsg(cfg);
@@ -236,10 +240,10 @@
                    ServerTipDetails.ShowMarquee(msg, tipInfoList, order);
                    break;
                case SysNotifyType.ChatChannelWorld:
                    ChatManager.Instance.AddSysData(msg, tipInfoList, ChatChannel.World);
                    ChatManager.Instance.AddSysData(msg, tipInfoList, ChatChannel.World, true);
                    break;
                case SysNotifyType.ChatChannelGuild:
                    ChatManager.Instance.AddSysData(msg, tipInfoList, ChatChannel.Guild);
                    ChatManager.Instance.AddSysData(msg, tipInfoList, ChatChannel.Guild, true);
                    break;
                case SysNotifyType.SysRealmTip:
                    if (OnSysTipEvent != null)
Main/System/OSActivity/OSGalaMissionWin.cs
@@ -9,12 +9,12 @@
using UnityEngine.UI;
////开服活动-主线关卡活动
////开服活动-庆典
public class OSGalaMissionWin : UIBase
{
    [SerializeField] ScrollerController scroller;
    int[] types = new int[] { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
    List<int> ids = new List<int>();
    protected override void OnPreOpen()
@@ -38,14 +38,14 @@
        // -1 为所有类型
        if (type >= 2 && type <= 19 || type == -1)
        {
            ids = AchievementManager.Instance.GetAchievementIDsByTypes(types);
            ids = AchievementManager.Instance.GetAchievementIDsByTypes(AchievementManager.galaTypes);
            scroller.m_Scorller.RefreshActiveCellViews();
        }
    }
    void CreateScroller()
    {
        ids = AchievementManager.Instance.GetAchievementIDsByTypes(types);
        ids = AchievementManager.Instance.GetAchievementIDsByTypes(AchievementManager.galaTypes);
        var count = ids.Count;
        scroller.Refresh();
        for (int i = 0; i < count; i++)
Main/Utility/EnumHelper.cs
@@ -1109,8 +1109,8 @@
    Simple = 1,
    Quantity = 2,
    Full = 3,
    GetReward = 4,
    New = 5,
    New = 4,
    GetReward = 5,
}