少年修仙传客户端代码仓库
client_linchunjie
2019-01-29 bb98d8ae9ff4d799bd8e2c11ddf3335ab4e0b017
6086 【前端】【1.5.200】春节红包雨活动
2个文件已添加
16个文件已修改
670 ■■■■■ 已修改文件
Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/PlayerRedPacketDatas.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/RedBagScripts.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/RedBagTipsWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/RedpackOpenWin.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/MainInterfaceWin.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalAchievementCell.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalAchievementCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackBehaviour.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackModel.cs 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackWin.cs 218 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OSRedEnvelopeCell.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OSRedEnvelopeModel.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OSRedEnvelopeSendWin.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OpenServerRedEnvelopeWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OperationFestivalRedpack.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/RedEnvelopeModel.cs 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/RedPackBehaviour.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs
@@ -5,6 +5,7 @@
public class CAB12_tagCMGrabFamilyRedPacket : GameNetPackBasic {
    public uint RedPaketID;    // 红包ID
    public byte GetWay;    //获得途径
    public CAB12_tagCMGrabFamilyRedPacket () {
        combineCmd = (ushort)0x03FE;
@@ -13,6 +14,7 @@
    public override void WriteToBytes () {
        WriteBytes (RedPaketID, NetDataType.DWORD);
        WriteBytes (GetWay, NetDataType.BYTE);
    }
}
System/FairyAu/PlayerRedPacketDatas.cs
@@ -91,7 +91,7 @@
            var list = _DicRedBag.Values.ToList();
            for (int i = 0; i < list.Count; i++)
            {
                if (list[i].GetWay != 5)
                if (IsDisplayInFamily(list[i].GetWay))
                {
                    _DicRedBag.Remove(list[i].RedPacketID);
                }
@@ -196,7 +196,7 @@
        if (_DicRedBag.ContainsKey(RedEnvelopeID) && WindowCenter.Instance.IsOpen<RedBagTipsWin>())
        {
            var redBag = _DicRedBag[RedEnvelopeID];
            if (redBag.GetWay != 5 && redBag.GetWay != 0 && redBag.PlayerID == PlayerDatas.Instance.PlayerId && redBag.State == 1)
            if (IsDisplayInFamily(redBag.GetWay) && redBag.GetWay != 0 && redBag.PlayerID == PlayerDatas.Instance.PlayerId && redBag.State == 1)
            {
                RedBagId = RedEnvelopeID;
                WindowCenter.Instance.Open<RedpackOpenWin>();//打开领取界面
@@ -238,11 +238,11 @@
        foreach (var value in _DicRedBag.Values)
        {
            if (value.PlayerID == PlayerDatas.Instance.baseData.PlayerID && value.State == 0 && value.GetWay != 5)
            if (value.PlayerID == PlayerDatas.Instance.baseData.PlayerID && value.State == 0 && IsDisplayInFamily(value.GetWay))
            {
                _bool = true;
            }
            if (value.State == 1 && value.GetWay != 5)
            if (value.State == 1 && IsDisplayInFamily(value.GetWay))
            {
                _bool = true;
            }
@@ -292,5 +292,19 @@
    }
    public bool IsDisplayInFamily(int getWay)
    {
        if (getWay == 5)
        {
            return false;
        }
        if (getWay == FestivalRedpackModel.FESTIVALSYSTEMREDPACK1
            || getWay == FestivalRedpackModel.FESTIVALSYSTEMREDPACK2
            || getWay == FestivalRedpackModel.FESTIVALTASKREDPACKTYPE)
        {
            return false;
        }
        return true;
    }
   
}
System/FairyAu/RedBagScripts.cs
@@ -57,6 +57,8 @@
                m_TextMatter.text = RedEnvelopeContent(redPacket._DicRedBag[redPackeIndex].GetWay);
            }
          
            var redpackInfo = redPacket._DicRedBag[redPackeIndex];
            switch (State)
            {
                case 0://未发放
@@ -109,7 +111,7 @@
                    RedBagBtn.AddListener(()=> 
                    {
                        redPacket.RedBagId = redPacket._DicRedBag[redPackeIndex].RedPacketID;
                        RedPacketInquire(redPacket.RedBagId);
                        RedPacketInquire(redPacket.RedBagId, redpackInfo.GetWay);
                    });
                    break;
                case 3://红包派完了
@@ -121,7 +123,7 @@
                    RedBagBtn.AddListener(() =>
                    {
                        redPacket.RedBagId = redPacket._DicRedBag[redPackeIndex].RedPacketID;
                        RedPacketInquire(redPacket.RedBagId);
                        RedPacketInquire(redPacket.RedBagId, redpackInfo.GetWay);
                    });
                    break;
                default:
@@ -153,11 +155,12 @@
            return _str;
        }
        private void RedPacketInquire(int redbagID)//红包查询
        private void RedPacketInquire(int redbagID, int getWay)//红包查询
        {
            ModelCenter.Instance.GetModel<RedEnvelopeModel>().cacheEnvelopeId = redbagID;
            CAB12_tagCMGrabFamilyRedPacket _CA404 = new CAB12_tagCMGrabFamilyRedPacket();
            _CA404.RedPaketID = (uint)redbagID;
            _CA404.GetWay = (byte)getWay;
            GameNetSystem.Instance.SendInfo(_CA404);
        }
    }
System/FairyAu/RedBagTipsWin.cs
@@ -99,7 +99,7 @@
            gridCtrl.Refresh();
            foreach (int key in redPacket._DicRedBag.Keys)
            {
                if (redPacket._DicRedBag[key].GetWay != 5)
                if (redPacket.IsDisplayInFamily(redPacket._DicRedBag[key].GetWay))
                {
                    gridCtrl.AddCell(ScrollerDataType.Header, key);
                }       
@@ -199,7 +199,7 @@
            foreach (int key in redPacket._DicRedBag.Keys)
            {
                if (redPacket._DicRedBag[key].GetWay != 5)
                if (redPacket.IsDisplayInFamily(redPacket._DicRedBag[key].GetWay))
                {
                    _list.Add(key);
                }
System/FairyAu/RedpackOpenWin.cs
@@ -103,6 +103,7 @@
                    envelopeModel.cacheEnvelopeId = redpackServerId;
                    CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket();
                    _pak.RedPaketID = (uint)redpackServerId;
                    _pak.GetWay = (byte)redpack.GetWay;
                    GameNetSystem.Instance.SendInfo(_pak);
                    Close();
                    break;
@@ -111,6 +112,7 @@
                    envelopeModel.cacheEnvelopeId = redpackServerId;
                    CAB12_tagCMGrabFamilyRedPacket _CA404 = new CAB12_tagCMGrabFamilyRedPacket();
                    _CA404.RedPaketID = (uint)redpackServerId;
                    _CA404.GetWay = (byte)redpack.GetWay;
                    GameNetSystem.Instance.SendInfo(_CA404);
                    Close();
                    break;
System/MainInterfacePanel/MainInterfaceWin.cs
@@ -136,6 +136,7 @@
        PKModel m_PKModel;
        PKModel pKModel { get { return m_PKModel ?? (m_PKModel = ModelCenter.Instance.GetModel<PKModel>()); } }
        OSRedEnvelopeModel OSEnvelopeModel { get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); } }
        FestivalRedpackModel festivalRedpackModel { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        RuneTowerModel runeTowerModel { get { return ModelCenter.Instance.GetModel<RuneTowerModel>(); } }
        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
        DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }
@@ -464,7 +465,8 @@
        private void RedpointValueChangeEvent(int _id)
        {
            if (_id == OSEnvelopeModel.m_RedAchieveRedpoint.id)
            if (_id == OSEnvelopeModel.m_RedAchieveRedpoint.id
                || _id == festivalRedpackModel.taskRedpoint.id)
            {
                CheckSendRedpackBtn();
            }
@@ -477,7 +479,8 @@
                m_RedpackGetSfx.StopImediatly();
            }
            var requireRedpack = (OSEnvelopeModel.CanGetEnvelope()
                || redPacket.IsRedBagGetBool) && !CrossServerUtility.IsCrossServer();
                || redPacket.IsRedBagGetBool || festivalRedpackModel.redpoint.state == RedPointState.GetReward)
                && !CrossServerUtility.IsCrossServer();
            if (requireRedpack)
            {
                m_RedBag.gameObject.SetActive(true);
@@ -495,7 +498,8 @@
        private void CheckSendRedpackBtn()
        {
            m_SendRedbagBtn.gameObject.SetActive(!m_RedBag.gameObject.activeSelf && OSEnvelopeModel.m_RedAchieveRedpoint.state == RedPointState.Simple);
            m_SendRedbagBtn.gameObject.SetActive(!m_RedBag.gameObject.activeSelf && OSEnvelopeModel.m_RedAchieveRedpoint.state == RedPointState.Simple
                && festivalRedpackModel.taskRedpoint.state == RedPointState.Simple);
        }
        private void OnGuideBegin()//引导开始
System/OpenServerActivity/FestivalAchievementCell.cs
New file
@@ -0,0 +1,86 @@
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class FestivalAchievementCell : CellView
    {
        [SerializeField] Image m_AchieveIcon;
        [SerializeField] Text m_AchieveName;
        [SerializeField] Button m_AchiveGoto;
        [SerializeField] Image m_AchiveComplete;
        [SerializeField] Text m_AchieveDesc;
        [SerializeField] Text m_AchieveProgress;
        [SerializeField] Button m_RedPack;
        FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        AchievementModel achieveModel
        {
            get
            {
                return ModelCenter.Instance.GetModel<AchievementModel>();
            }
        }
        public void Display(int index)
        {
            m_AchiveGoto.onClick.RemoveAllListeners();
            m_RedPack.onClick.RemoveAllListeners();
            FestivalRedpackAchievement festivalRedpackAchievement = null;
            if (index < model.displayAchievements.Count && index >= 0)
            {
                festivalRedpackAchievement = model.displayAchievements[index];
            }
            if (festivalRedpackAchievement != null)
            {
                var config = Config.Instance.Get<FestivalRedpackTaskConfig>(festivalRedpackAchievement.id);
                m_AchieveIcon.SetSprite(config.Icon);
                m_AchieveName.text = config.typeName;
                var achievementId = festivalRedpackAchievement.CurrentAchieve;
                bool _isReach = false;
                var _achieveCfg = Config.Instance.Get<SuccessConfig>(achievementId);
                Achievement achievement;
                if (achieveModel.TryGetAchievement(achievementId, out achievement))
                {
                    _isReach = Achievement.IsReach(achievementId, achievement.progress) || achievement.completed;
                    m_AchieveDesc.text = _achieveCfg.Describe;
                    var _progress = achievement.completed ? _achieveCfg.NeedCnt : achievement.progress;
                    m_AchieveProgress.text = StringUtility.Contact(Mathf.Min(_progress, _achieveCfg.NeedCnt),
                        "/", _achieveCfg.NeedCnt);
                    m_AchiveComplete.gameObject.SetActive(achievement.completed);
                    m_AchiveGoto.gameObject.SetActive(!_isReach);
                    m_RedPack.gameObject.SetActive(_isReach && !achievement.completed);
                    if (_isReach && !achievement.completed)
                    {
                        m_RedPack.onClick.AddListener(() =>
                        {
                            if (!WindowCenter.Instance.IsOpen<OSRedEnvelopeSendWin>())
                            {
                                OSRedEnvelopeSendWin.achievementId = achievementId;
                                WindowCenter.Instance.Open<OSRedEnvelopeSendWin>();
                            }
                        });
                    }
                }
                if (!_isReach)
                {
                    m_AchiveGoto.onClick.AddListener(() =>
                    {
                        if (!model.IsOpen)
                        {
                            SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                            return;
                        }
                        achieveModel.GotoCompleteAchievement(achievementId);
                        WindowCenter.Instance.CloseImmediately<OpenServerActivityWin>();
                    });
                }
            }
        }
    }
}
System/OpenServerActivity/FestivalAchievementCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 12564f8eddbe819479abc2549db5487c
timeCreated: 1548727585
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/OpenServerActivity/FestivalRedpackBehaviour.cs
@@ -95,7 +95,7 @@
                            break;
                        case 2:
                        case 3:
                            envelopeModel.SendOpenRedpackPackage(redpackServerId);
                            envelopeModel.SendOpenRedpackPackage(redpackServerId, envelope.type);
                            break;
                    }
                }
System/OpenServerActivity/FestivalRedpackModel.cs
@@ -14,6 +14,8 @@
        bool serverInited = false;
        public List<int> systemDisplayRedpacks = new List<int>();
        public List<FestivalRedpackAchievement> displayAchievements = new List<FestivalRedpackAchievement>();
        public List<int> taskDisplayRedpacks = new List<int>();
        int m_SelectType;
        public int selectType
@@ -51,6 +53,9 @@
        public int jumpType { get; set; }
        public bool autoOpen { get; set; }
        public bool IsOpen
        {
            get
@@ -82,6 +87,10 @@
        public int grabTotalJade { get; private set; }
        public float redpackVoiceInterval { get; private set; }
        DateTime voicePlayTime = DateTime.Now;
        public const int FESTIVALTASKREDPACKTYPE = 33;
        public const int FESTIVALSYSTEMREDPACK1 = 31;
        public const int FESTIVALSYSTEMREDPACK2 = 32;
@@ -99,6 +108,7 @@
        public event Action selectTypeRefresh;
        public event Action selectDateIndexRefresh;
        public event Action<int> achievementRefresh;
        public event Action taskRedpackRefresh;
        RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
        AchievementModel achievementModel { get { return ModelCenter.Instance.GetModel<AchievementModel>(); } }
@@ -110,7 +120,6 @@
            OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
            envelopeModel.EnvelopeUpdateEvent += EnvelopeUpdateEvent;
            envelopeModel.EnvelopeDelEvent += EnvelopeDelEvent;
            envelopeModel.EnvelopeGetEvent += EnvelopeGetEvent;
            achievementModel.achievementCompletedEvent += AchievementCompletedEvent;
            achievementModel.achievementProgressUpdateEvent += AchievementProgressUpdateEvent;
            ParseConfig();
@@ -137,7 +146,6 @@
            OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
            envelopeModel.EnvelopeUpdateEvent -= EnvelopeUpdateEvent;
            envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent;
            envelopeModel.EnvelopeGetEvent -= EnvelopeGetEvent;
            achievementModel.achievementCompletedEvent -= AchievementCompletedEvent;
            achievementModel.achievementProgressUpdateEvent -= AchievementProgressUpdateEvent;
        }
@@ -179,6 +187,14 @@
                        });
                    }
                }
            }
            {
                var config = Config.Instance.Get<FuncConfigConfig>("FeastRedPacket");
                grabRedpackLimitTimes = int.Parse(config.Numerical1);
                config = Config.Instance.Get<FuncConfigConfig>("RedEnvelopeVoiceCd");
                redpackVoiceInterval = float.Parse(config.Numerical1) / 1000;
            }
        }
@@ -260,7 +276,7 @@
            return festivalRedpacks.TryGetValue(id, out redpack);
        }
        public bool TryGetAchievements(out List<FestivalRedpackAchievement> list)
        public bool TryGetAchievements(int index, out List<FestivalRedpackAchievement> list)
        {
            return achievements.TryGetValue(festivalDay + 1, out list);
        }
@@ -294,6 +310,22 @@
                }
            }
            return lhs.id.CompareTo(rhs.id);
        }
        public int CompareEnvelope(int x, int y)
        {
            RedEnvelopeModel.RedEnvelope xEnvelope;
            RedEnvelopeModel.RedEnvelope yEnvelope;
            if (envelopeModel.TryGetEnvelope(x, out xEnvelope)
                && envelopeModel.TryGetEnvelope(y, out yEnvelope))
            {
                if (xEnvelope.state.CompareTo(yEnvelope.state) != 0)
                {
                    return xEnvelope.state.CompareTo(yEnvelope.state);
                }
                return -xEnvelope.time.CompareTo(yEnvelope.time);
            }
            return -x.CompareTo(y);
        }
        public void OnReceivePackage(HAB25_tagMCFeastRedPackInfo package)
@@ -345,23 +377,74 @@
        private void EnvelopeUpdateEvent()
        {
            bool rewardable = receiveRedpoint.state == RedPointState.GetReward;
            UpdateRedpoint();
            if (taskRedpackRefresh != null)
            {
                taskRedpackRefresh();
            }
            if (!rewardable && receiveRedpoint.state == RedPointState.GetReward
                && serverInited && !ExistSelfTaskRedpack())
            {
                PlayRedpackVoice();
            }
        }
        public bool ExistSelfTaskRedpack()
        {
            List<int> list;
            if (envelopeModel.TryGetEnvelopes(FESTIVALTASKREDPACKTYPE, out list))
            {
                foreach (var id in list)
                {
                    RedEnvelopeModel.RedEnvelope envelope;
                    if (envelopeModel.TryGetEnvelope(id, out envelope))
                    {
                        if (envelope.player == PlayerDatas.Instance.PlayerId
                            && envelope.state == 1)
                        {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
        public void JudgePlayRedpackVoice(int type)
        {
            if (type == FESTIVALSYSTEMREDPACK1
                || type == FESTIVALSYSTEMREDPACK2)
            {
                PlayRedpackVoice();
            }
        }
        void PlayRedpackVoice()
        {
            if ((DateTime.Now - voicePlayTime).TotalSeconds < redpackVoiceInterval)
            {
                return;
            }
            SoundPlayer.Instance.PlayUIAudio(632);
            voicePlayTime = DateTime.Now;
        }
        private void EnvelopeDelEvent()
        {
            UpdateRedpoint();
        }
        private void EnvelopeGetEvent(int id)
            if (taskRedpackRefresh != null)
        {
                taskRedpackRefresh();
            }
        }
        private void AchievementCompletedEvent(int _achieve)
        {
            List<FestivalRedpackAchievement> list;
            if (TryGetAchievements(out list) && IsContainsAchievement(list, _achieve))
            if (TryGetAchievements(festivalDay + 1, out list) && IsContainsAchievement(list, _achieve))
            {
                if (achievementRefresh != null)
                {
@@ -374,7 +457,7 @@
        private void AchievementProgressUpdateEvent(int _achieve)
        {
            List<FestivalRedpackAchievement> list;
            if (TryGetAchievements(out list) && IsContainsAchievement(list, _achieve))
            if (TryGetAchievements(festivalDay + 1, out list) && IsContainsAchievement(list, _achieve))
            {
                if (achievementRefresh != null)
                {
@@ -420,7 +503,7 @@
                }
                List<FestivalRedpackAchievement> list;
                if (TryGetAchievements(out list))
                if (TryGetAchievements(festivalDay + 1, out list))
                {
                    foreach (var festivalRedpackAchievement in list)
                    {
@@ -461,9 +544,9 @@
                    }
                }
            }
            systemRedpoint.state = existSystemRedpack ? RedPointState.Simple : RedPointState.None;
            systemRedpoint.state = existSystemRedpack ? RedPointState.GetReward : RedPointState.None;
            taskRedpoint.state = existFinishTask ? RedPointState.Simple : RedPointState.None;
            receiveRedpoint.state = existUnGetRedpack ? RedPointState.Simple : RedPointState.None;
            receiveRedpoint.state = existUnGetRedpack ? RedPointState.GetReward : RedPointState.None;
        }
    }
System/OpenServerActivity/FestivalRedpackWin.cs
@@ -15,6 +15,25 @@
    public class FestivalRedpackWin : Window
    {
        [SerializeField] FestivalRedpackSystemBehaviour m_FestivalSystemBehaviour;
        [SerializeField] Transform m_ContainerAchievement;
        [SerializeField] ScrollerController m_AchievementController;
        [SerializeField] Transform m_ContainerRedEnvelope;
        [SerializeField] ScrollerController m_RedEnvelopeControl;
        [SerializeField] Transform m_ContainerNoEnvelope;
        [SerializeField] Text m_OpenTime;
        [SerializeField] Transform m_ContainerGrab;
        [SerializeField] Text m_GrabCount;
        [SerializeField] Text m_GrabJade;
        FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        AchievementModel achieveModel
        {
            get { return ModelCenter.Instance.GetModel<AchievementModel>(); }
        }
        RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
        #region Built-in
        protected override void BindController()
        {
@@ -22,10 +41,20 @@
        protected override void AddListeners()
        {
            m_AchievementController.OnRefreshCell += OnRefreshAchievementCell;
            m_RedEnvelopeControl.OnRefreshCell += OnRefreshRedEnvelopeCell;
        }
        protected override void OnPreOpen()
        {
            model.selectTypeRefresh += SelectTypeRefresh;
            model.redpackGrabRefresh += RedpackGrabRefresh;
            WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
            OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
            achieveModel.achievementCompletedEvent += FestivalAchievementRefresh;
            achieveModel.achievementProgressUpdateEvent += FestivalAchievementRefresh;
            model.taskRedpackRefresh += TaskRedpackRefresh;
            Display();
        }
        protected override void OnAfterOpen()
@@ -34,6 +63,14 @@
        protected override void OnPreClose()
        {
            model.selectTypeRefresh -= SelectTypeRefresh;
            model.redpackGrabRefresh -= RedpackGrabRefresh;
            WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent;
            OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
            achieveModel.achievementCompletedEvent -= FestivalAchievementRefresh;
            achieveModel.achievementProgressUpdateEvent -= FestivalAchievementRefresh;
            model.taskRedpackRefresh -= TaskRedpackRefresh;
            m_FestivalSystemBehaviour.Dispose();
        }
        protected override void OnAfterClose()
@@ -41,6 +78,187 @@
        }
        #endregion
        void Display()
        {
            DisplayType();
            DisplayOpenTime();
        }
        void DisplayType()
        {
            m_FestivalSystemBehaviour.gameObject.SetActive(model.selectType == 1);
            m_ContainerAchievement.gameObject.SetActive(model.selectType == 2);
            m_ContainerRedEnvelope.gameObject.SetActive(model.selectType == 3);
            m_ContainerGrab.gameObject.SetActive(model.selectType != 2);
            switch (model.selectType)
            {
                case 1:
                    m_FestivalSystemBehaviour.Display();
                    break;
                case 2:
                    m_FestivalSystemBehaviour.Dispose();
                    DisplayAchievements();
                    break;
                case 3:
                    m_FestivalSystemBehaviour.Dispose();
                    DisplayRedpacks();
                    break;
            }
        }
        void DisplayAchievements()
        {
            m_AchievementController.Refresh();
            model.displayAchievements.Clear();
            List<FestivalRedpackAchievement> list;
            if (model.TryGetAchievements(model.festivalDay + 1, out list))
            {
                model.displayAchievements.AddRange(list);
                model.displayAchievements.Sort(model.AchievementSort);
            }
            for (int i = 0; i < model.displayAchievements.Count; i++)
            {
                m_AchievementController.AddCell(ScrollerDataType.Header, i);
            }
            m_AchievementController.Restart();
        }
        void DisplayRedpacks()
        {
            m_RedEnvelopeControl.Refresh();
            model.taskDisplayRedpacks.Clear();
            List<int> list;
            if (envelopeModel.TryGetEnvelopes(FestivalRedpackModel.FESTIVALTASKREDPACKTYPE, out list))
            {
                model.taskDisplayRedpacks.AddRange(list);
            }
            model.taskDisplayRedpacks.Sort(model.CompareEnvelope);
            var _line = Mathf.CeilToInt((float)model.taskDisplayRedpacks.Count / 5);
            for (int i = 0; i < _line; i++)
            {
                m_RedEnvelopeControl.AddCell(ScrollerDataType.Header, i);
            }
            m_RedEnvelopeControl.Restart();
            m_ContainerNoEnvelope.gameObject.SetActive(model.taskDisplayRedpacks.Count == 0);
        }
        void DisplayOpenTime()
        {
            OperationFestivalRedpack operation;
            if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
            {
                m_OpenTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime());
            }
        }
        void DisplayGrab()
        {
            m_GrabCount.text = Mathf.Max(0, model.grabRedpackLimitTimes - model.grabRedpackTimes).ToString();
            m_GrabJade.text = model.grabTotalJade.ToString();
        }
        private void OnRefreshAchievementCell(ScrollerDataType type, CellView cell)
        {
            var achievementCell = cell as FestivalAchievementCell;
            achievementCell.Display(cell.index);
        }
        private void OnRefreshRedEnvelopeCell(ScrollerDataType type, CellView cell)
        {
            var redpackCell = cell as OSRedEnvelopeCell;
            redpackCell.Display(cell.index);
        }
        private void SelectTypeRefresh()
        {
            DisplayType();
        }
        private void RedpackGrabRefresh()
        {
            DisplayGrab();
        }
        private void WindowAfterOpenEvent(Window win)
        {
            if (win is OpenServerActivityWin)
            {
                AutoOpenRedpack();
            }
        }
        void AutoOpenRedpack()
        {
            if (model.autoOpen && model.selectType == 3)
            {
                for (int i = 0; i < model.taskDisplayRedpacks.Count; i++)
                {
                    RedEnvelopeModel.RedEnvelope envelope;
                    if (envelopeModel.TryGetEnvelope(model.taskDisplayRedpacks[i], out envelope)
                        && envelope.state == 1)
                    {
                        if (PlayerDatas.Instance.PlayerId == envelope.player
                            || model.grabRedpackLimitTimes - model.grabRedpackTimes > 0)
                        {
                            ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = envelope.id;
                            WindowCenter.Instance.Open<RedpackOpenWin>();
                        }
                    }
                }
            }
            model.autoOpen = false;
        }
        private void DayResetEvent(int resetType)
        {
            OperationFestivalRedpack operation;
            if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
            {
                if (resetType == operation.resetType)
                {
                    if (model.selectType == 2)
                    {
                        DisplayAchievements();
                    }
                }
            }
        }
        private void FestivalAchievementRefresh(int id)
        {
            if (model.selectType != 2)
            {
                return;
            }
            Achievement achievement;
            if (model.IsContainsAchievement(model.displayAchievements, id))
            {
                FestivalRedpackAchievement festivalRedpackAchievement = model.displayAchievements.Find((x) =>
                {
                    return x.Contains(id);
                });
                if (festivalRedpackAchievement != null)
                {
                    if (achieveModel.TryGetAchievement(festivalRedpackAchievement.CurrentAchieve, out achievement))
                    {
                        if (Achievement.IsReach(achievement.id, achievement.progress))
                        {
                            DisplayAchievements();
                            return;
                        }
                    }
                }
            }
            m_AchievementController.m_Scorller.RefreshActiveCellViews();
        }
        private void TaskRedpackRefresh()
        {
            if (model.selectType == 3)
            {
                DisplayRedpacks();
            }
        }
    }
}
System/OpenServerActivity/OSRedEnvelopeCell.cs
@@ -7,16 +7,17 @@
    {
        [SerializeField] RedPackBehaviour[] m_RedEnvelopes;
        OSRedEnvelopeModel m_Model;
        OSRedEnvelopeModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>());
            }
            get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); }
        }
        public void Init(int _line)
        FestivalRedpackModel festivalRedpackModel
        {
            get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); }
        }
        public void Display(int _line)
        {
            for (int i = 0; i < m_RedEnvelopes.Length; i++)
            {
@@ -28,6 +29,19 @@
                }
            }
        }
        public void DisplayFestivalRedpacks(int _line)
        {
            for (int i = 0; i < m_RedEnvelopes.Length; i++)
            {
                var _index = _line * 5 + i;
                m_RedEnvelopes[i].gameObject.SetActive(_index < festivalRedpackModel.taskDisplayRedpacks.Count);
                if (_index < festivalRedpackModel.taskDisplayRedpacks.Count)
                {
                    m_RedEnvelopes[i].Init(festivalRedpackModel.taskDisplayRedpacks[_index]);
                }
            }
        }
    }
}
System/OpenServerActivity/OSRedEnvelopeModel.cs
@@ -336,6 +336,7 @@
                    envelopeModel.envelopeSfx = _envelope.id;
                    CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket();
                    _pak.RedPaketID = (uint)_envelope.id;
                    _pak.GetWay = 5;
                    GameNetSystem.Instance.SendInfo(_pak);
                }
            }
@@ -452,7 +453,7 @@
        {
            if (!WindowCenter.Instance.IsOpen<OSRedEnvelopeSendWin>())
            {
                cacheAchievement = _id;
                OSRedEnvelopeSendWin.achievementId = _id;
                WindowCenter.Instance.Open<OSRedEnvelopeSendWin>();
            }
        }
System/OpenServerActivity/OSRedEnvelopeSendWin.cs
@@ -9,7 +9,8 @@
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI {
namespace Snxxz.UI
{
    public class OSRedEnvelopeSendWin : Window
    {
@@ -18,21 +19,14 @@
        [SerializeField] Text m_Count;
        [SerializeField] Button m_SendBtn;
        [SerializeField] Button m_CloseBtn;
        OSRedEnvelopeModel m_Model;
        OSRedEnvelopeModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>());
            }
        }
        AchievementModel m_AchievementModel;
        AchievementModel achieveModel
        public static int achievementId = 0;
        AchievementModel model
        {
            get
            {
                return m_AchievementModel ?? (m_AchievementModel = ModelCenter.Instance.GetModel<AchievementModel>());
                return ModelCenter.Instance.GetModel<AchievementModel>();
            }
        }
        #region Built-in
@@ -43,17 +37,7 @@
        protected override void AddListeners()
        {
            m_SendBtn.onClick.AddListener(() =>
            {
                var _outDay = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>().openDays;
                if (TimeUtility.OpenDay >= _outDay)
                {
                    SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                    return;
                }
                achieveModel.GetAchievementReward(model.cacheAchievement);
                CloseImmediately();
            });
            m_SendBtn.onClick.AddListener(Send);
            m_CloseBtn.onClick.AddListener(CloseClick);
        }
@@ -77,11 +61,41 @@
        private void DisplayRedEnvelope()
        {
            var _achieveCfg = Config.Instance.Get<SuccessConfig>(model.cacheAchievement);
            var _cfg = Config.Instance.Get<RedPackConfig>(_achieveCfg.RedPacketID);
            m_MoneyValue.text = _cfg.RedEnvelopeAmount.ToString();
            m_MoneyRealValue.text = _cfg.RedEnvelopeAmount.ToString();
            m_Count.text = _cfg.PacketCnt.ToString();
            var successConfig = Config.Instance.Get<SuccessConfig>(achievementId);
            var config = Config.Instance.Get<RedPackConfig>(successConfig.RedPacketID);
            m_MoneyValue.text = config.RedEnvelopeAmount.ToString();
            m_MoneyRealValue.text = config.RedEnvelopeAmount.ToString();
            m_Count.text = config.PacketCnt.ToString();
        }
        private void Send()
        {
            var successConfig = Config.Instance.Get<SuccessConfig>(achievementId);
            var config = Config.Instance.Get<RedPackConfig>(successConfig.RedPacketID);
            if (config != null)
            {
                switch (config.RedEnvelopeType)
                {
                    case 5:
                        var _outDay = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>().openDays;
                        if (TimeUtility.OpenDay >= _outDay)
                        {
                            SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                            return;
                        }
                        break;
                    case FestivalRedpackModel.FESTIVALTASKREDPACKTYPE:
                        var isOpen = ModelCenter.Instance.GetModel<FestivalRedpackModel>().IsOpen;
                        if (!isOpen)
                        {
                            SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
                            return;
                        }
                        break;
                }
            }
            model.GetAchievementReward(achievementId);
            CloseImmediately();
        }
    }
System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
@@ -239,7 +239,7 @@
        private void OnRefreshCell(ScrollerDataType type, CellView _cell)
        {
            OSRedEnvelopeCell cell = _cell as OSRedEnvelopeCell;
            cell.Init(_cell.index);
            cell.Display(_cell.index);
        }
        private void OSRedEnvelopeInfoEnvent()
System/OpenServerActivity/OperationFestivalRedpack.cs
@@ -39,6 +39,19 @@
            m_Redpacks.Clear();
        }
        public override string ToDisplayTime()
        {
            var textBuilder = OperationTimeHepler.textBuilder;
            textBuilder.Length = 0;
            textBuilder.Append(startDate.ToDisplay());
            if (startDate != endDate)
            {
                textBuilder.Append("—");
                textBuilder.Append(endDate.ToDisplay());
            }
            return textBuilder.ToString();
        }
        public class RedpackInfo
        {
            public List<int> redpacks = new List<int>();
System/OpenServerActivity/RedEnvelopeModel.cs
@@ -8,8 +8,11 @@
    [XLua.LuaCallCSharp]
    public class RedEnvelopeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
    {
        Dictionary<int, string> redpackSfxDict = new Dictionary<int, string>();
        PlayerRedPacketDatas redPackdata { get { return ModelCenter.Instance.GetModel<PlayerRedPacketDatas>(); } }
        OSRedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); } }
        FestivalRedpackModel festivalRedpackModel { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
        public override void Init()
        {
@@ -174,7 +177,7 @@
            }
        }
        public void SendGetEnvelope(int _id)
        public void SendGetEnvelope(int _id,int getWay)
        {
            RedEnvelope _envelope;
            if(m_RedEnvelopeDict.TryGetValue(_id,out _envelope))
@@ -183,6 +186,7 @@
                {
                    CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket();
                    _pak.RedPaketID = (uint)_id;
                    _pak.GetWay = (byte)getWay;
                    GameNetSystem.Instance.SendInfo(_pak);
                }
            }
@@ -253,11 +257,12 @@
        public int cacheEnvelopeId = 0;
        public int envelopeSfx { get; set; }
        public void SendOpenRedpackPackage(int _id)
        public void SendOpenRedpackPackage(int _id,int getWay)
        {
            cacheEnvelopeId = _id;
            CAB12_tagCMGrabFamilyRedPacket _pak = new CAB12_tagCMGrabFamilyRedPacket();
            _pak.RedPaketID = (uint)_id;
            _pak.GetWay = (byte)getWay;
            GameNetSystem.Instance.SendInfo(_pak);
        }
@@ -267,13 +272,36 @@
        private void OnSystemNotifyEvent(string _key)
        {
            if (_key.Equals("OSRedpackSfx"))
            var config = Config.Instance.Get<SysInfoConfig>(_key);
            var type = 0;
            if (config != null && string.IsNullOrEmpty(config.richText))
            {
                CheckRedpackSfx();
                foreach (var key in redpackSfxDict.Keys)
                {
                    if (_key.Equals(redpackSfxDict[key]))
                    {
                        type = key;
                        break;
                    }
                }
            }
            if (type != 0)
            {
                switch (type)
                {
                    case 5:
                        CheckRedpackSfx(type);
                        break;
                    case FestivalRedpackModel.FESTIVALSYSTEMREDPACK1:
                    case FestivalRedpackModel.FESTIVALSYSTEMREDPACK2:
                    case FestivalRedpackModel.FESTIVALTASKREDPACKTYPE:
                        CheckFestivalRedpackSfx(type);
                        break;
                }
            }
        }
        public void CheckRedpackSfx()
        public void CheckRedpackSfx(int type)
        {
            if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.OpenServerRedEnvelope))
            {
@@ -298,10 +326,52 @@
                sfxRedpackTime = sfxRedpackTime.AddSeconds(_effect != null ? _effect.duration : 0);
            }
        }
        public void CheckFestivalRedpackSfx(int type)
        {
            if (!festivalRedpackModel.IsOpen)
            {
                return;
            }
            if (type == FestivalRedpackModel.FESTIVALTASKREDPACKTYPE)
            {
                if (festivalRedpackModel.grabRedpackTimes >= festivalRedpackModel.grabRedpackLimitTimes)
                {
                    return;
                }
            }
            if (!serverInited)
            {
                return;
            }
            festivalRedpackModel.JudgePlayRedpackVoice(type);
            if (!(StageManager.Instance.CurrentStage is DungeonStage)
                || WindowCenter.Instance.IsOpen<LoadingWin>())
            {
                return;
            }
            if (DateTime.Now >= sfxRedpackTime)
            {
                var effectId = type == FestivalRedpackModel.FESTIVALSYSTEMREDPACK1 ? 5217 : 5162;
                var _effect = EffectMgr.Instance.PlayUIEffect(effectId, 4500, WindowCenter.Instance.uiRoot.tipsCanvas, false);
                sfxRedpackTime = sfxRedpackTime.AddSeconds(2f);
            }
        }
        #endregion
        void ParseConfig()
        {
            var config = Config.Instance.Get<FuncConfigConfig>("OpenServerRedPacketRain");
            var json = LitJson.JsonMapper.ToObject(config.Numerical2);
            foreach (var key in json.Keys)
            {
                var type = int.Parse(key);
                redpackSfxDict.Add(type, json[key].ToString());
            }
            if (!redpackSfxDict.ContainsKey(5))
            {
                redpackSfxDict.Add(5, "OSRedpackSfx");
            }
        }
        public struct RedEnvelope
System/OpenServerActivity/RedPackBehaviour.cs
@@ -60,7 +60,7 @@
                    }
                    if (_envelope.state == 2 || _envelope.state == 3)
                    {
                        model.SendOpenRedpackPackage(_envelope.id);
                        model.SendOpenRedpackPackage(_envelope.id, _envelope.type);
                    }
                });
            }