少年修仙传客户端代码仓库
client_linchunjie
2019-01-28 316392fc7db70f82c5da0badee782a03e73c5d50
6086 【前端】【1.5.200】春节红包雨活动
5 文件已复制
4个文件已删除
2 文件已重命名
5个文件已添加
14个文件已修改
1021 ■■■■ 已修改文件
Core/GameEngine/DataToCtl/PackageRegedit.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/RedPackConfig.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/RedPackConfig.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB26_tagMCFeastRedPackTaskInfo.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB26_tagMCFeastRedPackTaskInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAB_Activity/HAB26_tagMCFeastRedPackTaskInfo.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAB_Activity/HAB26_tagMCFeastRedPackTaskInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/SnxxzUIRedEnvelopeModelWrap.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/PlayerRedPacketDatas.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/RedBagScripts.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/RedpackOpenWin.cs 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/RedpackOpenWin.cs.meta 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackBehaviour.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackBehaviour.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackCell.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackCell.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackDate.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackDate.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackModel.cs 285 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackSystemBehaviour.cs 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackSystemBehaviour.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackWin.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackWin.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OpenServerActivityWin.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OpenServerRedEnvelopeWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/RedEnvelopeModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/RedPackBehaviour.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -26,7 +26,6 @@
    {
        // 登记相应的数据体及对应的数据转逻辑类
        Register(typeof(HAC11_tagGCFeastRedPacketInfo), typeof(DTCAC11_tagGCFeastRedPacketInfo));
        Register(typeof(HAB26_tagMCFeastRedPackTaskInfo), typeof(DTCAB26_tagMCFeastRedPackTaskInfo));
        Register(typeof(HAB25_tagMCFeastRedPackInfo), typeof(DTCAB25_tagMCFeastRedPackInfo));
        Register(typeof(HB213_tagMCZhuXianTowerInfo), typeof(DTCB213_tagMCZhuXianTowerInfo));
        Register(typeof(HB413_tagMCPlayerSkills), typeof(DTCB413_tagMCPlayerSkills));
Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs
@@ -13,10 +13,7 @@
        public int ID { get ; private set ; }
        public int FeastDay { get ; private set ; }
        public int FeastTaskType { get ; private set ; }
        public int FeastTaskData { get ; private set ; }
        public int TotalTimes { get ; private set ; }
        public string TaskDes { get ; private set; }
        public int achievementId { get ; private set ; }
        public override string getKey()
        {
@@ -30,13 +27,7 @@
            
                FeastDay=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; 
            
                FeastTaskType=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
                FeastTaskData=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0;
                TotalTimes=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0;
                TaskDes = rawContents[5].Trim();
                achievementId=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
            }
            catch (Exception ex)
            {
Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 92740fe211606b3409ddae7876e3b8d0
timeCreated: 1548643881
timeCreated: 1548680690
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Core/GameEngine/Model/Config/RedPackConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Saturday, July 28, 2018
//    [  Date ]:           Monday, January 28, 2019
//--------------------------------------------------------
using UnityEngine;
@@ -9,8 +9,8 @@
namespace TableConfig {
    
    public partial class RedPackConfig : ConfigBase {
    public partial class RedPackConfig : ConfigBase {
        public int id { get ; private set ; }
        public int RedEnvelopeType { get ; private set ; }
        public int RedEnvelopeAmount { get ; private set ; }
@@ -18,15 +18,17 @@
        public int PacketCnt { get ; private set ; }
        public int LeaderOwn { get ; private set ; }
        public string content { get ; private set; } 
        public string PacketOpenTime { get ; private set; }
        public int ValidMinutes { get ; private set ; }
        public override string getKey()
        {
            return id.ToString();
        public override string getKey()
        {
            return id.ToString();
        }
        public override void Parse() {
            try
            {
            try
            {
                id=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; 
            
                RedEnvelopeType=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; 
@@ -40,10 +42,14 @@
                LeaderOwn=IsNumeric(rawContents[5]) ? int.Parse(rawContents[5]):0; 
            
                content = rawContents[6].Trim();
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
                PacketOpenTime = rawContents[7].Trim();
                ValidMinutes=IsNumeric(rawContents[8]) ? int.Parse(rawContents[8]):0;
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
            }
        }
    
Core/GameEngine/Model/Config/RedPackConfig.cs.meta
@@ -1,7 +1,7 @@
fileFormatVersion: 2
guid: b7df6e148f51472428641d400c1ad3b1
timeCreated: 1532745429
licenseType: Free
timeCreated: 1548663425
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB26_tagMCFeastRedPackTaskInfo.cs
File was deleted
Core/NetworkPackage/DTCFile/ServerPack/HAB_Activity/DTCAB26_tagMCFeastRedPackTaskInfo.cs.meta
File was deleted
Core/NetworkPackage/ServerPack/HAB_Activity/HAB26_tagMCFeastRedPackTaskInfo.cs
File was deleted
Core/NetworkPackage/ServerPack/HAB_Activity/HAB26_tagMCFeastRedPackTaskInfo.cs.meta
File was deleted
Lua/Gen/SnxxzUIRedEnvelopeModelWrap.cs
@@ -443,7 +443,7 @@
                {
                    int __id = LuaAPI.xlua_tointeger(L, 2);
                    
                    gen_to_be_invoked.RequestDetail( __id );
                    gen_to_be_invoked.SendOpenRedpackPackage( __id );
                    
                    
                    
System/FairyAu/PlayerRedPacketDatas.cs
@@ -199,7 +199,7 @@
            if (redBag.GetWay != 5 && redBag.GetWay != 0 && redBag.PlayerID == PlayerDatas.Instance.PlayerId && redBag.State == 1)
            {
                RedBagId = RedEnvelopeID;
                WindowCenter.Instance.Open<RedOPenBGMWin>();//打开领取界面
                WindowCenter.Instance.Open<RedpackOpenWin>();//打开领取界面
            }
        }
System/FairyAu/RedBagScripts.cs
@@ -97,7 +97,7 @@
                    RedBagBtn.AddListener(() =>
                    {
                        redPacket.RedBagId = redPacket._DicRedBag[redPackeIndex].RedPacketID;
                        WindowCenter.Instance.Open<RedOPenBGMWin>();//打开领取界面
                        WindowCenter.Instance.Open<RedpackOpenWin>();//打开领取界面
                    });
                    break;
                case 2://已领取
System/FairyAu/RedpackOpenWin.cs
File was renamed from System/FairyAu/RedOPenBGMWin.cs
@@ -8,18 +8,21 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI {
    public class RedOPenBGMWin : Window
namespace Snxxz.UI
{
    public class RedpackOpenWin : Window
    {
        private int _redBagID;//获取点击红包的ID
        [SerializeField] Image _HeadshotImage;//人物头像
        [SerializeField] Text _NameText;//红包发放人
        [SerializeField] Button _CloseBtn;//红包关闭
        [SerializeField] Button _OpenBtn;//红包打开
        [SerializeField] Text _TopText;//祝福语
        PlayerRedPacketDatas m_RedPacket;
        PlayerRedPacketDatas redPacket { get { return m_RedPacket ?? (m_RedPacket = ModelCenter.Instance.GetModel<PlayerRedPacketDatas>()); } }
        PlayerRedPacketDatas redpackModel { get { return ModelCenter.Instance.GetModel<PlayerRedPacketDatas>(); } }
        RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
        private int redpackServerId;
        #region Built-in
        protected override void BindController()
        {
@@ -33,34 +36,34 @@
        protected override void OnPreOpen()
        {
            _redBagID = redPacket.RedBagId;
            if (!redPacket._DicRedBag.ContainsKey(_redBagID))
            redpackServerId = redpackModel.RedBagId;
            if (!redpackModel._DicRedBag.ContainsKey(redpackServerId))
            {
                return;
            }
            if (redPacket._DicRedBag[_redBagID].PlayeJob > 10)
            if (redpackModel._DicRedBag[redpackServerId].PlayeJob > 10)
            {
                _HeadshotImage.SetSprite(GeneralDefine.GetJobHeadPortrait(redPacket._DicRedBag[_redBagID].PlayeJob % 10, 0));
                _HeadshotImage.SetSprite(GeneralDefine.GetJobHeadPortrait(redpackModel._DicRedBag[redpackServerId].PlayeJob % 10, 0));
            }
            else
            {
                _HeadshotImage.SetSprite(GeneralDefine.GetJobHeadPortrait(redPacket._DicRedBag[_redBagID].PlayeJob, 0));
                _HeadshotImage.SetSprite(GeneralDefine.GetJobHeadPortrait(redpackModel._DicRedBag[redpackServerId].PlayeJob, 0));
            }
            _NameText.text = redPacket._DicRedBag[_redBagID].Name + Language.Get("Z1056");
            var _wish = UIHelper.ServerStringTrim(redPacket._DicRedBag[_redBagID].Wish);
            _NameText.text = redpackModel._DicRedBag[redpackServerId].Name + Language.Get("Z1056");
            var _wish = UIHelper.ServerStringTrim(redpackModel._DicRedBag[redpackServerId].Wish);
            if (_wish.Equals(string.Empty))
            {
                _TopText.text = Language.Get("Z1057");
            }
            else
            {
                _TopText.text = redPacket._DicRedBag[_redBagID].Wish;
                _TopText.text = redpackModel._DicRedBag[redpackServerId].Wish;
            }
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
@@ -80,34 +83,34 @@
        void OpenButton()
        {
            if (!redPacket._DicRedBag.ContainsKey(_redBagID))
            if (!redpackModel._DicRedBag.ContainsKey(redpackServerId))
            {
                CloseImmediately();
                return;
            }
            var _data = redPacket._DicRedBag[_redBagID];
            switch (_data.GetWay)
            var redpack = redpackModel._DicRedBag[redpackServerId];
            switch (redpack.GetWay)
            {
                case 5:
                    var OSRedModel = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>();
                    if (_data.PlayerID != PlayerDatas.Instance.PlayerId
                    if (redpack.PlayerID != PlayerDatas.Instance.PlayerId
                        && OSRedModel.getEnvelopeTimes <= 0)
                    {
                        SysNotifyMgr.Instance.ShowTip("OpenRedBag4");
                        return;
                    }
                    ModelCenter.Instance.GetModel<RedEnvelopeModel>().envelopeSfx = _redBagID;
                    ModelCenter.Instance.GetModel<RedEnvelopeModel>().cacheEnvelopeId = _redBagID;
                    envelopeModel.envelopeSfx = redpackServerId;
                    envelopeModel.cacheEnvelopeId = redpackServerId;
                    CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket();
                    _pak.RedPaketID = (uint)_redBagID;
                    _pak.RedPaketID = (uint)redpackServerId;
                    GameNetSystem.Instance.SendInfo(_pak);
                    Close();
                    break;
                default:
                    ModelCenter.Instance.GetModel<RedEnvelopeModel>().envelopeSfx = _redBagID;
                    ModelCenter.Instance.GetModel<RedEnvelopeModel>().cacheEnvelopeId = _redBagID;
                    envelopeModel.envelopeSfx = redpackServerId;
                    envelopeModel.cacheEnvelopeId = redpackServerId;
                    CAB12_tagCMGrabFamilyRedPacket _CA404 = new CAB12_tagCMGrabFamilyRedPacket();
                    _CA404.RedPaketID = (uint)_redBagID;
                    _CA404.RedPaketID = (uint)redpackServerId;
                    GameNetSystem.Instance.SendInfo(_CA404);
                    Close();
                    break;
System/FairyAu/RedpackOpenWin.cs.meta
File was renamed from System/FairyAu/RedOPenBGMWin.cs.meta
@@ -1,12 +1,12 @@
fileFormatVersion: 2
guid: 8e73bc96e7892ae48a4a26678a965eab
timeCreated: 1505195500
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
fileFormatVersion: 2
guid: 8e73bc96e7892ae48a4a26678a965eab
timeCreated: 1505195500
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/FestivalRedpackBehaviour.cs
New file
@@ -0,0 +1,107 @@
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class FestivalRedpackBehaviour : MonoBehaviour
    {
        [SerializeField] Text m_RedpackName;
        [SerializeField] Text m_Wish;
        [SerializeField] Transform m_ContainerPreview;
        [SerializeField] Text m_Time;
        [SerializeField] Transform m_ContainerOpen;
        [SerializeField] Button m_Open;
        [SerializeField] Transform m_ContainerGot;
        [SerializeField] Transform m_ContainerEnd;
        int redpackServerId = 0;
        FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
        private void Awake()
        {
            m_Open.onClick.AddListener(Open);
        }
        public void DisplaySystemRedpack(int id)
        {
            var existServerRedpack = model.IsExistSystemRedpack(id, out redpackServerId);
            m_ContainerPreview.gameObject.SetActive(!existServerRedpack);
            m_ContainerOpen.gameObject.SetActive(false);
            m_ContainerGot.gameObject.SetActive(false);
            m_ContainerEnd.gameObject.SetActive(false);
            var config = Config.Instance.Get<RedPackConfig>(id);
            if (config != null)
            {
                m_RedpackName.text = config.content;
            }
            FestivalRedpack festivalRedpack;
            if (model.TryGetRedpack(id, out festivalRedpack))
            {
                m_Time.text = StringUtility.Contact(festivalRedpack.endTime.ToString("HH:mm"), "\n", Language.Get("FestivalOpenGrab"));
            }
            if (existServerRedpack)
            {
                DisplayBase(id);
            }
            else
            {
                redpackServerId = 0;
            }
        }
        public void DisplayTaskRedpack(int id)
        {
            redpackServerId = id;
        }
        void DisplayBase(int id)
        {
            redpackServerId = id;
            RedEnvelopeModel.RedEnvelope envelope;
            if (envelopeModel.TryGetEnvelope(redpackServerId, out envelope))
            {
                m_ContainerOpen.gameObject.SetActive(envelope.state == 1);
                m_ContainerGot.gameObject.SetActive(envelope.state == 2);
                m_ContainerEnd.gameObject.SetActive(envelope.state == 3);
            }
        }
        private void Open()
        {
            if (redpackServerId == 0)
            {
                SysNotifyMgr.Instance.ShowTip("FestivalSystemOpenError");
            }
            else
            {
                RedEnvelopeModel.RedEnvelope envelope;
                if (envelopeModel.TryGetEnvelope(redpackServerId, out envelope))
                {
                    switch (envelope.state)
                    {
                        case 1:
                            ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = redpackServerId;
                            WindowCenter.Instance.Open<RedpackOpenWin>();
                            break;
                        case 2:
                        case 3:
                            envelopeModel.SendOpenRedpackPackage(redpackServerId);
                            break;
                    }
                }
            }
        }
    }
}
System/OpenServerActivity/FestivalRedpackBehaviour.cs.meta
copy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackBehaviour.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 8e73bc96e7892ae48a4a26678a965eab
timeCreated: 1505195500
guid: 7db5e4c8e72bb9b449726b66369a4b80
timeCreated: 1548663268
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/OpenServerActivity/FestivalRedpackCell.cs
New file
@@ -0,0 +1,31 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class FestivalRedpackCell : CellView
    {
        [SerializeField] FestivalRedpackBehaviour[] m_FestivalRedpacks;
        FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        public void DisplaySystemRedpacks(int line)
        {
            var list = model.systemDisplayRedpacks;
            for (int i = 0; i < m_FestivalRedpacks.Length; i++)
            {
                var index = line * m_FestivalRedpacks.Length + i;
                if (index < list.Count)
                {
                    m_FestivalRedpacks[i].DisplaySystemRedpack(list[index]);
                    m_FestivalRedpacks[i].gameObject.SetActive(true);
                }
                else
                {
                    m_FestivalRedpacks[i].gameObject.SetActive(false);
                }
            }
        }
    }
}
System/OpenServerActivity/FestivalRedpackCell.cs.meta
copy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackCell.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 8e73bc96e7892ae48a4a26678a965eab
timeCreated: 1505195500
guid: f0fd0333471bc144eb0c1643f5c2484d
timeCreated: 1548667396
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/OpenServerActivity/FestivalRedpackDate.cs
New file
@@ -0,0 +1,59 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class FestivalRedpackDate : CellView
    {
        [SerializeField] Transform m_ContainerNormal;
        [SerializeField] Transform m_ContainerSelect;
        [SerializeField] Text m_Date;
        [SerializeField] DateFontStyle m_NormalFontStyle;
        [SerializeField] DateFontStyle m_SelectFontStyle;
        [SerializeField] Button m_Select;
        FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        int dateIndex = 0;
        private void Awake()
        {
            m_Select.onClick.AddListener(Select);
        }
        public void Display(int index)
        {
            dateIndex = index;
            m_ContainerNormal.gameObject.SetActive(model.selectDateIndex != index);
            m_ContainerSelect.gameObject.SetActive(model.selectDateIndex == index);
            OperationFestivalRedpack operation;
            if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
            {
                var date = operation.startDate.AddDays(index);
                m_Date.text = StringUtility.Contact(Language.Get("FestivalTraditionalDate_" + index),
                    "\n", Language.Get("FestivalDate", date.month, date.day));
            }
            m_Date.color = model.selectDateIndex == index ? m_SelectFontStyle.fontColor : m_NormalFontStyle.fontColor;
            m_Date.fontSize = model.selectDateIndex == index ? m_SelectFontStyle.fontSize : m_NormalFontStyle.fontSize;
        }
        private void Select()
        {
            model.selectDateIndex = dataIndex;
        }
        [Serializable]
        public class DateFontStyle
        {
            public Color fontColor;
            public int fontSize;
        }
    }
}
System/OpenServerActivity/FestivalRedpackDate.cs.meta
copy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackDate.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 8e73bc96e7892ae48a4a26678a965eab
timeCreated: 1505195500
guid: e64f25694220d424eb7e5aaeddc11043
timeCreated: 1548661142
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/OpenServerActivity/FestivalRedpackModel.cs
@@ -7,9 +7,49 @@
{
    public class FestivalRedpackModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
    {
        Dictionary<int, List<FestivalRedpackTask>> taskDict = new Dictionary<int, List<FestivalRedpackTask>>();
        Dictionary<int, List<FestivalRedpackTaskProgress>> taskProgressDict = new Dictionary<int, List<FestivalRedpackTaskProgress>>();
        Dictionary<int, FestivalRedpack> festivalRedpacks = new Dictionary<int, FestivalRedpack>();
        Dictionary<int, List<int>> achievements = new Dictionary<int, List<int>>();
        List<int> taskRedpacks = new List<int>();
        bool serverInited = false;
        public List<int> systemDisplayRedpacks = new List<int>();
        int m_SelectType;
        public int selectType
        {
            get { return m_SelectType; }
            set
            {
                if (m_SelectType != value)
                {
                    m_SelectType = value;
                    if (selectTypeRefresh != null)
                    {
                        selectTypeRefresh();
                    }
                }
            }
        }
        int m_SelectDateIndex;
        public int selectDateIndex
        {
            get { return m_SelectDateIndex; }
            set
            {
                if (m_SelectDateIndex != value)
                {
                    m_SelectDateIndex = value;
                    if (selectDateIndexRefresh != null)
                    {
                        selectDateIndexRefresh();
                    }
                }
            }
        }
        public int jumpType { get; set; }
        public bool IsOpen
        {
@@ -30,7 +70,7 @@
                OperationFestivalRedpack operation;
                if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
                {
                    return operation.GetCurrentDay();
                    return IsOpen ? operation.GetCurrentDay() : operation.totalDays;
                }
                return 0;
            }
@@ -43,6 +83,9 @@
        public int grabTotalJade { get; private set; }
        public const int FESTIVALTASKREDPACKTYPE = 33;
        public const int FESTIVALSYSTEMREDPACK1 = 31;
        public const int FESTIVALSYSTEMREDPACK2 = 32;
        const int REDPOINTID = 20919;
@@ -53,8 +96,12 @@
        public event Action<int> onStateUpate;
        public event Action redpackGrabRefresh;
        public event Action selectTypeRefresh;
        public event Action selectDateIndexRefresh;
        public event Action<int> achievementRefresh;
        RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
        AchievementModel achievementModel { get { return ModelCenter.Instance.GetModel<AchievementModel>(); } }
        public override void Init()
        {
@@ -64,20 +111,23 @@
            envelopeModel.EnvelopeUpdateEvent += EnvelopeUpdateEvent;
            envelopeModel.EnvelopeDelEvent += EnvelopeDelEvent;
            envelopeModel.EnvelopeGetEvent += EnvelopeGetEvent;
            achievementModel.achievementCompletedEvent += AchievementCompletedEvent;
            achievementModel.achievementProgressUpdateEvent += AchievementProgressUpdateEvent;
            ParseConfig();
            OpenServerActivityCenter.Instance.Register((int)OpenServerActivityCenter.OSActivityType.FestivalRedpack, this);
        }
        public void OnBeforePlayerDataInitialize()
        {
            taskProgressDict.Clear();
            grabRedpackTimes = 0;
            grabTotalJade = 0;
            serverInited = false;
        }
        public void OnPlayerLoginOk()
        {
            UpdateRedpoint();
            serverInited = true;
        }
        public override void UnInit()
@@ -88,93 +138,125 @@
            envelopeModel.EnvelopeUpdateEvent -= EnvelopeUpdateEvent;
            envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent;
            envelopeModel.EnvelopeGetEvent -= EnvelopeGetEvent;
            achievementModel.achievementCompletedEvent -= AchievementCompletedEvent;
            achievementModel.achievementProgressUpdateEvent -= AchievementProgressUpdateEvent;
        }
        void ParseConfig()
        {
            var configs = Config.Instance.GetAllValues<FestivalRedpackTaskConfig>();
            foreach (var config in configs)
            {
                List<FestivalRedpackTask> list;
                if (!taskDict.TryGetValue(config.FeastDay, out list))
                var configs = Config.Instance.GetAllValues<FestivalRedpackTaskConfig>();
                foreach (var config in configs)
                {
                    list = new List<FestivalRedpackTask>();
                    taskDict.Add(config.FeastDay, list);
                    List<int> list;
                    if (!achievements.TryGetValue(config.FeastDay, out list))
                    {
                        list = new List<int>();
                        achievements.Add(config.FeastDay, list);
                    }
                    list.Add(config.achievementId);
                }
                list.Add(new FestivalRedpackTask()
            }
            {
                var configs = Config.Instance.GetAllValues<RedPackConfig>();
                foreach (var config in configs)
                {
                    day = config.FeastDay,
                    description = config.TaskDes,
                    helpData = config.FeastTaskData,
                    type = config.FeastTaskType,
                    totalTimes = config.TotalTimes,
                });
                    if (config.RedEnvelopeType == FESTIVALSYSTEMREDPACK1
                        || config.RedEnvelopeType == FESTIVALSYSTEMREDPACK2)
                    {
                        var openTime = ParseTime(config.PacketOpenTime);
                        festivalRedpacks.Add(config.id, new FestivalRedpack()
                        {
                            id = config.id,
                            openTime = openTime,
                            endTime = openTime.AddTicks(config.ValidMinutes * TimeSpan.TicksPerMinute),
                            type = config.RedEnvelopeType,
                        });
                    }
                }
            }
        }
        public FestivalRedpackTaskState GetTaskState(FestivalRedpackTask task)
        DateTime ParseTime(string timeString)
        {
            FestivalRedpackTaskProgress progress;
            if (TryGetTaskProgress(task.day, task.type, task.helpData, out progress))
            var year = 2018;
            var month = 1;
            var day = 1;
            var hour = 1;
            var minute = 20;
            var array = timeString.Split(' ');
            if (array != null && array.Length == 2)
            {
                if (progress.completed)
                var dateArray = array[0].Split('-');
                if (dateArray != null && dateArray.Length == 3)
                {
                    return FestivalRedpackTaskState.Completed;
                    year = int.Parse(dateArray[0].Trim());
                    month = int.Parse(dateArray[1].Trim());
                    day = int.Parse(dateArray[2].Trim());
                }
                else if (progress.times >= task.totalTimes)
                var timeArray = array[0].Split(':');
                if (timeArray != null && timeArray.Length == 2)
                {
                    return FestivalRedpackTaskState.ReceiveReward;
                    hour = int.Parse(timeArray[0].Trim());
                    minute = int.Parse(timeArray[1].Trim());
                }
            }
            return FestivalRedpackTaskState.Doing;
            return new DateTime(year, month, day, hour, minute, 0);
        }
        public bool TryGetTasks(int dayIndex, out List<FestivalRedpackTask> list)
        public bool IsSystemRedpackOverdue(int id)
        {
            return taskDict.TryGetValue(dayIndex, out list);
        }
        public bool TryGetTaskProgress(int dayIndex, int type, int helpData, out FestivalRedpackTaskProgress progress)
        {
            progress = default(FestivalRedpackTaskProgress);
            if (taskProgressDict.ContainsKey(dayIndex))
            if (festivalRedpacks.ContainsKey(id))
            {
                var list = taskProgressDict[dayIndex];
                var index = list.FindIndex((x) =>
                {
                    return x.helpData == helpData && x.type == type;
                });
                if (index != -1)
                {
                    progress = list[index];
                }
                return index != -1;
                return TimeUtility.ServerNow < festivalRedpacks[id].endTime;
            }
            return false;
        }
        public void OnReceivePackage(HAB26_tagMCFeastRedPackTaskInfo package)
        public bool IsExistSystemRedpack(int id, out int redpackId)
        {
            List<FestivalRedpackTaskProgress> list;
            if (!taskProgressDict.TryGetValue(package.FeastDay, out list))
            redpackId = 0;
            if (festivalRedpacks.ContainsKey(id))
            {
                list = new List<FestivalRedpackTaskProgress>();
                taskProgressDict.Add(package.FeastDay, list);
            }
            list.Clear();
            for (int i = 0; i < package.TaskCount; i++)
            {
                var data = package.TaskProgressList[i];
                list.Add(new FestivalRedpackTaskProgress()
                List<int> redpacks = null;
                if (envelopeModel.TryGetEnvelopes(festivalRedpacks[id].type, out redpacks))
                {
                    type = data.TaskType,
                    times = data.CurTimes,
                    helpData = (int)data.TaskData,
                    completed = false,
                });
                    foreach (var serverId in redpacks)
                    {
                        RedEnvelopeModel.RedEnvelope envelope;
                        if (envelopeModel.TryGetEnvelope(serverId, out envelope))
                        {
                            if (TimeUtility.GetTime(envelope.time).Equals(festivalRedpacks[id].openTime))
                            {
                                redpackId = serverId;
                                return true;
                            }
                        }
                    }
                }
            }
            return false;
        }
            UpdateRedpoint();
        public bool TryGetRedpack(int id, out FestivalRedpack redpack)
        {
            return festivalRedpacks.TryGetValue(id, out redpack);
        }
        public bool TryGetAchievements(out List<int> list)
        {
            return achievements.TryGetValue(festivalDay + 1, out list);
        }
        public int SystemRedpackSort(int lhs, int rhs)
        {
            if (festivalRedpacks.ContainsKey(lhs)
                && festivalRedpacks.ContainsKey(rhs))
            {
                return festivalRedpacks[lhs].openTime.CompareTo(festivalRedpacks[rhs].openTime);
            }
            return 0;
        }
        public void OnReceivePackage(HAB25_tagMCFeastRedPackInfo package)
@@ -239,6 +321,32 @@
        }
        private void AchievementCompletedEvent(int _achieve)
        {
            List<int> list;
            if (TryGetAchievements(out list) && list.Contains(_achieve))
            {
                if (achievementRefresh != null)
                {
                    achievementRefresh(_achieve);
                }
                UpdateRedpoint();
            }
        }
        private void AchievementProgressUpdateEvent(int _achieve)
        {
            List<int> list;
            if (TryGetAchievements(out list) && list.Contains(_achieve))
            {
                if (achievementRefresh != null)
                {
                    achievementRefresh(_achieve);
                }
                UpdateRedpoint();
            }
        }
        private void UpdateRedpoint()
        {
            var existSystemRedpack = false;
@@ -249,18 +357,44 @@
                OperationFestivalRedpack operation;
                if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
                {
                    var index = festivalDay;
                    var systemRedpacks = index < operation.redpacks.Count && index >= 0 ?
                        operation.redpacks[index].redpacks : operation.redpacks[0].redpacks;
                    foreach (var redpackId in systemRedpacks)
                    {
                        if (IsSystemRedpackOverdue(redpackId))
                        {
                            continue;
                        }
                        var redpackServerId = 0;
                        if (IsExistSystemRedpack(redpackId, out redpackServerId))
                        {
                            RedEnvelopeModel.RedEnvelope envelope;
                            if (envelopeModel.TryGetEnvelope(redpackServerId, out envelope))
                            {
                                if (envelope.state == 1)
                                {
                                    existSystemRedpack = true;
                                    break;
                                }
                            }
                        }
                    }
                }
                List<FestivalRedpackTask> list;
                if (TryGetTasks(festivalDay, out list))
                List<int> list;
                if (TryGetAchievements(out list))
                {
                    foreach (var task in list)
                    foreach (var achievementId in list)
                    {
                        if (GetTaskState(task) == FestivalRedpackTaskState.ReceiveReward)
                        Achievement achievement;
                        if (achievementModel.TryGetAchievement(achievementId, out achievement))
                        {
                            existFinishTask = true;
                            break;
                            if (Achievement.IsReach(achievementId, achievement.progress) && !achievement.completed)
                            {
                                existFinishTask = true;
                                break;
                            }
                        }
                    }
                }
@@ -296,21 +430,12 @@
        }
    }
    public struct FestivalRedpackTask
    public struct FestivalRedpack
    {
        public int day;
        public int id;
        public int type;
        public int helpData;
        public int totalTimes;
        public string description;
    }
    public struct FestivalRedpackTaskProgress
    {
        public int type;
        public int helpData;
        public int times;
        public bool completed;
        public DateTime openTime;
        public DateTime endTime;
    }
    public enum FestivalRedpackTaskState
System/OpenServerActivity/FestivalRedpackSystemBehaviour.cs
New file
@@ -0,0 +1,166 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Snxxz.UI
{
    public class FestivalRedpackSystemBehaviour : MonoBehaviour
    {
        [SerializeField] Transform m_ContainerEmpty;
        [SerializeField] ScrollerController m_DateController;
        [SerializeField] ScrollerController m_RedpackController;
        [SerializeField] int m_LineCount = 5;
        FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
        private void Awake()
        {
            m_DateController.lockType = EnhanceLockType.KeepHorizon;
            m_DateController.OnRefreshCell += OnRefreshDateCell;
            m_RedpackController.lockType = EnhanceLockType.KeepVertical;
            m_RedpackController.OnRefreshCell += OnRefreshRedpackCell;
        }
        public void Display()
        {
            model.selectDateIndex = model.festivalDay;
            OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
            model.selectDateIndexRefresh -= SelectDateIndexRefresh;
            TimeMgr.Instance.OnMinuteEvent -= PerMinute;
            envelopeModel.EnvelopeUpdateEvent -= RedpackRefresh;
            envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent;
            OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
            model.selectDateIndexRefresh += SelectDateIndexRefresh;
            TimeMgr.Instance.OnMinuteEvent += PerMinute;
            envelopeModel.EnvelopeUpdateEvent += RedpackRefresh;
            envelopeModel.EnvelopeDelEvent += EnvelopeDelEvent;
            DisplayDates();
            DisplayRedpacks();
        }
        public void Dispose()
        {
            OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
            model.selectDateIndexRefresh -= SelectDateIndexRefresh;
            TimeMgr.Instance.OnMinuteEvent -= PerMinute;
            envelopeModel.EnvelopeUpdateEvent -= RedpackRefresh;
            envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent;
        }
        private void SelectDateIndexRefresh()
        {
            DisplayRedpacks();
        }
        private void RedpackRefresh()
        {
            m_RedpackController.m_Scorller.RefreshActiveCellViews();
        }
        private void EnvelopeDelEvent()
        {
            DisplayRedpacks();
        }
        private void PerMinute()
        {
            var count = 0;
            OperationFestivalRedpack operation;
            if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
            {
                var index = model.selectDateIndex;
                var systemRedpacks = index < operation.redpacks.Count && index >= 0 ?
                    operation.redpacks[index].redpacks : operation.redpacks[0].redpacks;
                var list = model.systemDisplayRedpacks;
                for (int i = 0; i < systemRedpacks.Count; i++)
                {
                    if (model.IsSystemRedpackOverdue(systemRedpacks[i]))
                    {
                        count++;
                    }
                }
            }
            if (count != model.systemDisplayRedpacks.Count)
            {
                DisplayRedpacks();
            }
        }
        private void DayResetEvent(int resetType)
        {
            OperationFestivalRedpack operation;
            if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
            {
                if (operation.resetType == resetType)
                {
                    if (model.selectDateIndex < model.festivalDay)
                    {
                        model.selectDateIndex = model.festivalDay;
                    }
                    DisplayDates();
                }
            }
        }
        public void DisplayDates()
        {
            m_DateController.Refresh();
            OperationFestivalRedpack operation;
            if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
            {
                var index = model.festivalDay;
                for (int i = index; i <= operation.totalDays; i++)
                {
                    m_DateController.AddCell(ScrollerDataType.Header, i);
                }
            }
            m_DateController.Restart();
        }
        public void DisplayRedpacks()
        {
            m_RedpackController.Refresh();
            OperationFestivalRedpack operation;
            if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
            {
                var index = model.selectDateIndex;
                var systemRedpacks = index < operation.redpacks.Count && index >= 0 ?
                    operation.redpacks[index].redpacks : operation.redpacks[0].redpacks;
                var list = model.systemDisplayRedpacks;
                for (int i = 0; i < systemRedpacks.Count; i++)
                {
                    if (model.IsSystemRedpackOverdue(systemRedpacks[i]))
                    {
                        list.Add(systemRedpacks[i]);
                    }
                }
                list.Sort(model.SystemRedpackSort);
                var line = Mathf.CeilToInt((float)list.Count / m_LineCount);
                for (int i = 0; i < line; i++)
                {
                    m_RedpackController.AddCell(ScrollerDataType.Header, i);
                }
            }
            m_RedpackController.Restart();
            m_ContainerEmpty.gameObject.SetActive(model.systemDisplayRedpacks.Count == 0);
        }
        private void OnRefreshRedpackCell(ScrollerDataType type, CellView cell)
        {
            var redpackCell = cell as FestivalRedpackCell;
            redpackCell.DisplaySystemRedpacks(cell.index);
        }
        private void OnRefreshDateCell(ScrollerDataType type, CellView cell)
        {
            var dateCell = cell as FestivalRedpackDate;
            dateCell.Display(cell.index);
        }
    }
}
System/OpenServerActivity/FestivalRedpackSystemBehaviour.cs.meta
copy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackSystemBehaviour.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 8e73bc96e7892ae48a4a26678a965eab
timeCreated: 1505195500
guid: 14445a3dbb11eaf4fa4a3f4e4aabfd61
timeCreated: 1548662028
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/OpenServerActivity/FestivalRedpackWin.cs
New file
@@ -0,0 +1,50 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 28, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class FestivalRedpackWin : Window
    {
        [SerializeField] FestivalRedpackSystemBehaviour m_FestivalSystemBehaviour;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
        }
        protected override void OnPreOpen()
        {
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
    }
}
System/OpenServerActivity/FestivalRedpackWin.cs.meta
copy from System/FairyAu/RedOPenBGMWin.cs.meta copy to System/OpenServerActivity/FestivalRedpackWin.cs.meta
File was copied from System/FairyAu/RedOPenBGMWin.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 8e73bc96e7892ae48a4a26678a965eab
timeCreated: 1505195500
guid: 597353ed16cf43445be664529daedc36
timeCreated: 1548659227
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/OpenServerActivity/OpenServerActivityWin.cs
@@ -37,6 +37,7 @@
        FairyLeagueModel fairyLeagueModel { get { return ModelCenter.Instance.GetModel<FairyLeagueModel>(); } }
        FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
        OSGiftModel giftModel { get { return ModelCenter.Instance.GetModel<OSGiftModel>(); } }
        FestivalRedpackModel festivalRedpackModel { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        List<int> openActivitys = new List<int>();
        List<int> priorityActivitys = new List<int>();
@@ -122,6 +123,11 @@
                {
                    giftModel.selectIndex = giftModel.GetDefaultSelect();
                }
                if (functionOrder == 19)
                {
                    festivalRedpackModel.selectType = festivalRedpackModel.jumpType != 0 ? festivalRedpackModel.jumpType : 1;
                    festivalRedpackModel.jumpType = 0;
                }
                UpdateFunctionBtns();
            }
            OnOpenActivity(functionOrder);
@@ -203,6 +209,24 @@
                            case OpenServerActivityCenter.OSActivityType.OSGift:
                                giftModel.selectIndex = giftModel.GetDefaultSelect();
                                break;
                            case OpenServerActivityCenter.OSActivityType.FestivalRedpack:
                                if (festivalRedpackModel.systemRedpoint.state == RedPointState.Simple)
                                {
                                    festivalRedpackModel.selectType = 1;
                                    break;
                                }
                                else if (festivalRedpackModel.taskRedpoint.state == RedPointState.Simple)
                                {
                                    festivalRedpackModel.selectType = 2;
                                    break;
                                }
                                else if (festivalRedpackModel.receiveRedpoint.state == RedPointState.Simple)
                                {
                                    festivalRedpackModel.selectType = 3;
                                    break;
                                }
                                festivalRedpackModel.selectType = 1;
                                break;
                        }
                    }
                }
@@ -280,7 +304,7 @@
            if (type == ScrollerDataType.Header)
            {
                if (!m_ActivitySpreadDict.ContainsKey(sort) || !m_ActivitySpreadDict[sort]
                    || (sort != 2 && sort != 0))
                    || (sort != 2 && sort != 0 && sort != 19))
                {
                    height = 80;
                    return true;
@@ -397,7 +421,7 @@
            _cell.downArrow.gameObject.SetActive(false);
            _cell.upArrow.gameObject.SetActive(false);
            if (_cell.activityType == 0 || _cell.activityType == 2)
            if (_cell.activityType == 0 || _cell.activityType == 2 || _cell.activityType == 19)
            {
                _cell.downArrow.gameObject.SetActive(m_ActivitySpreadDict[_cell.activityType]);
                _cell.upArrow.gameObject.SetActive(!m_ActivitySpreadDict[_cell.activityType]);
@@ -431,6 +455,11 @@
                    _cell.redpoint.redpointId = 20902 * 100 + _type;
                    _cell.titleTxt.text = Language.Get(StringUtility.Contact("OSRedEnvelopeType_", _type));
                    _cell.ChangeState(_type == envelopeModel.selectType ? TitleBtnState.Click : TitleBtnState.Normal);
                    break;
                case 19:
                    _cell.redpoint.redpointId = 20919 * 100 + _type;
                    _cell.titleTxt.text = Language.Get(StringUtility.Contact("FestivalRedpackType_", _type));
                    _cell.ChangeState(_type == festivalRedpackModel.selectType ? TitleBtnState.Click : TitleBtnState.Normal);
                    break;
            }
            _cell.functionBtn.onClick.RemoveAllListeners();
@@ -487,6 +516,17 @@
                        {
                            m_ActivityCtrl.AddCell(ScrollerDataType.Header, sort * 1000 + giftModel.alreadyOpens[k]);
                        }
                        break;
                    case 19:
                        m_ActivityCtrl.AddCell(ScrollerDataType.Header, sort);
                        if (!m_ActivitySpreadDict[sort])
                        {
                            m_ActivitySpreadDict[sort] = false;
                            break;
                        }
                        m_ActivityCtrl.AddCell(ScrollerDataType.Normal, sort * 100 + 1);
                        m_ActivityCtrl.AddCell(ScrollerDataType.Normal, sort * 100 + 2);
                        m_ActivityCtrl.AddCell(ScrollerDataType.Normal, sort * 100 + 3);
                        break;
                    default:
                        m_ActivityCtrl.AddCell(ScrollerDataType.Header, sort);
@@ -589,6 +629,9 @@
                case 18:
                    WindowCenter.Instance.Open<MysticalPurchaseWin>(true);
                    break;
                case 19:
                    WindowCenter.Instance.Open<FestivalRedpackWin>(true);
                    break;
            }
        }
@@ -604,6 +647,9 @@
                case 2:
                    envelopeModel.selectType = _type;
                    break;
                case 19:
                    festivalRedpackModel.selectType = _type;
                    break;
            }
            m_ActivityCtrl.m_Scorller.RefreshActiveCellViews();
        }
System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
@@ -129,7 +129,7 @@
                            || model.getEnvelopeTimes > 0)
                        {
                            ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = envelope.id;
                            WindowCenter.Instance.Open<RedOPenBGMWin>();
                            WindowCenter.Instance.Open<RedpackOpenWin>();
                        }
                    }
                }
System/OpenServerActivity/RedEnvelopeModel.cs
@@ -31,11 +31,13 @@
        {
            serverInited = false;
            m_RedEnvelopeDict.Clear();
            redpacks.Clear();
        }
        bool serverInited = false;
        private Dictionary<int, RedEnvelope> m_RedEnvelopeDict = new Dictionary<int, RedEnvelope>();
        Dictionary<int, RedEnvelope> m_RedEnvelopeDict = new Dictionary<int, RedEnvelope>();
        Dictionary<int, List<int>> redpacks = new Dictionary<int, List<int>>();
        public event Action EnvelopeUpdateEvent;
        public event Action<int> EnvelopeGetEvent;
@@ -59,6 +61,18 @@
                    state = info.State,
                    Wish = UIHelper.ServerStringTrim(info.Wish)
                };
                List<int> list;
                if (!redpacks.TryGetValue(info.GetWay, out list))
                {
                    list = new List<int>();
                    redpacks.Add(info.GetWay, list);
                }
                if (!list.Contains((int)info.RedPacketID))
                {
                    list.Add((int)info.RedPacketID);
                }
                m_RedEnvelopeDict[(int)info.RedPacketID] = _envelope;
                if (EnvelopeGetEvent != null)
                {
@@ -141,6 +155,16 @@
                var _id = (int)_pak.DelRedPacketID[i];
                if (m_RedEnvelopeDict.ContainsKey(_id))
                {
                    var type = m_RedEnvelopeDict[_id].type;
                    if (redpacks.ContainsKey(type))
                    {
                        var list = redpacks[type];
                        if (list.Contains(_id))
                        {
                            list.Remove(_id);
                        }
                    }
                    m_RedEnvelopeDict.Remove(_id);
                }
            }
@@ -177,6 +201,11 @@
                }
            }
            return _has;
        }
        public bool TryGetEnvelopes(int type, out List<int> list)
        {
            return redpacks.TryGetValue(type, out list);
        }
        public void GetEnvelopes(int _type, ref List<int> _list)
@@ -224,7 +253,7 @@
        public int cacheEnvelopeId = 0;
        public int envelopeSfx { get; set; }
        public void RequestDetail(int _id)
        public void SendOpenRedpackPackage(int _id)
        {
            cacheEnvelopeId = _id;
            CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket();
System/OpenServerActivity/RedPackBehaviour.cs
@@ -56,11 +56,11 @@
                    if (_envelope.state == 1)
                    {
                        ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = _envelope.id;
                        WindowCenter.Instance.Open<RedOPenBGMWin>();
                        WindowCenter.Instance.Open<RedpackOpenWin>();
                    }
                    if (_envelope.state == 2 || _envelope.state == 3)
                    {
                        model.RequestDetail(_envelope.id);
                        model.SendOpenRedpackPackage(_envelope.id);
                    }
                });
            }
Utility/EnumHelper.cs
@@ -1133,6 +1133,7 @@
    Challenge,
    CastSoul,
    Potential,
    Complete,
}
public enum FunctionUnlockType