From bb98d8ae9ff4d799bd8e2c11ddf3335ab4e0b017 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 29 一月 2019 14:09:29 +0800
Subject: [PATCH] 6086 【前端】【1.5.200】春节红包雨活动

---
 System/OpenServerActivity/FestivalAchievementCell.cs                                            |   86 ++++++
 System/FairyAu/RedBagTipsWin.cs                                                                 |    4 
 Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs |    2 
 System/OpenServerActivity/RedPackBehaviour.cs                                                   |    2 
 System/OpenServerActivity/FestivalRedpackBehaviour.cs                                           |    2 
 System/OpenServerActivity/OSRedEnvelopeCell.cs                                                  |   80 +++--
 System/FairyAu/RedBagScripts.cs                                                                 |   11 
 System/FairyAu/RedpackOpenWin.cs                                                                |    2 
 System/OpenServerActivity/FestivalRedpackWin.cs                                                 |  218 ++++++++++++++++
 System/OpenServerActivity/OSRedEnvelopeModel.cs                                                 |    3 
 System/OpenServerActivity/OpenServerRedEnvelopeWin.cs                                           |    2 
 System/OpenServerActivity/RedEnvelopeModel.cs                                                   |   80 +++++
 System/OpenServerActivity/OperationFestivalRedpack.cs                                           |   13 +
 System/OpenServerActivity/FestivalRedpackModel.cs                                               |  109 +++++++-
 System/OpenServerActivity/OSRedEnvelopeSendWin.cs                                               |   70 +++--
 System/OpenServerActivity/FestivalAchievementCell.cs.meta                                       |   12 
 System/FairyAu/PlayerRedPacketDatas.cs                                                          |   24 +
 System/MainInterfacePanel/MainInterfaceWin.cs                                                   |   10 
 18 files changed, 633 insertions(+), 97 deletions(-)

diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs b/Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs
index a5790dd..ce376bc 100644
--- a/Core/NetworkPackage/ClientPack/ClientToMapServer/CAB_Activity/CAB12_tagCMGrabFamilyRedPacket.cs
+++ b/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);

     }

 

 }

diff --git a/System/FairyAu/PlayerRedPacketDatas.cs b/System/FairyAu/PlayerRedPacketDatas.cs
index 9bf5cd5..3b3862b 100644
--- a/System/FairyAu/PlayerRedPacketDatas.cs
+++ b/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;
+    }
+
 }
diff --git a/System/FairyAu/RedBagScripts.cs b/System/FairyAu/RedBagScripts.cs
index 6e67dfc..848bfbd 100644
--- a/System/FairyAu/RedBagScripts.cs
+++ b/System/FairyAu/RedBagScripts.cs
@@ -56,7 +56,9 @@
             {
                 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);
         }
     }
diff --git a/System/FairyAu/RedBagTipsWin.cs b/System/FairyAu/RedBagTipsWin.cs
index 1f5ce21..a262c8d 100644
--- a/System/FairyAu/RedBagTipsWin.cs
+++ b/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);
                 }
diff --git a/System/FairyAu/RedpackOpenWin.cs b/System/FairyAu/RedpackOpenWin.cs
index b64654d..d565cab 100644
--- a/System/FairyAu/RedpackOpenWin.cs
+++ b/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;
diff --git a/System/MainInterfacePanel/MainInterfaceWin.cs b/System/MainInterfacePanel/MainInterfaceWin.cs
index 620f784..10a561e 100644
--- a/System/MainInterfacePanel/MainInterfaceWin.cs
+++ b/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()//寮曞寮�濮�
diff --git a/System/OpenServerActivity/FestivalAchievementCell.cs b/System/OpenServerActivity/FestivalAchievementCell.cs
new file mode 100644
index 0000000..fac4998
--- /dev/null
+++ b/System/OpenServerActivity/FestivalAchievementCell.cs
@@ -0,0 +1,86 @@
+锘縰sing 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>();
+                    });
+                }
+            }
+        }
+    }
+}
+
diff --git a/System/OpenServerActivity/FestivalAchievementCell.cs.meta b/System/OpenServerActivity/FestivalAchievementCell.cs.meta
new file mode 100644
index 0000000..d816d9e
--- /dev/null
+++ b/System/OpenServerActivity/FestivalAchievementCell.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 12564f8eddbe819479abc2549db5487c
+timeCreated: 1548727585
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/OpenServerActivity/FestivalRedpackBehaviour.cs b/System/OpenServerActivity/FestivalRedpackBehaviour.cs
index 08c54e3..b4e7fe8 100644
--- a/System/OpenServerActivity/FestivalRedpackBehaviour.cs
+++ b/System/OpenServerActivity/FestivalRedpackBehaviour.cs
@@ -95,7 +95,7 @@
                             break;
                         case 2:
                         case 3:
-                            envelopeModel.SendOpenRedpackPackage(redpackServerId);
+                            envelopeModel.SendOpenRedpackPackage(redpackServerId, envelope.type);
                             break;
                     }
                 }
diff --git a/System/OpenServerActivity/FestivalRedpackModel.cs b/System/OpenServerActivity/FestivalRedpackModel.cs
index 4481cd5..f5594e4 100644
--- a/System/OpenServerActivity/FestivalRedpackModel.cs
+++ b/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;
         }
     }
 
diff --git a/System/OpenServerActivity/FestivalRedpackWin.cs b/System/OpenServerActivity/FestivalRedpackWin.cs
index 602f65c..6c02673 100644
--- a/System/OpenServerActivity/FestivalRedpackWin.cs
+++ b/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();
+            }
+        }
     }
 
 }
diff --git a/System/OpenServerActivity/OSRedEnvelopeCell.cs b/System/OpenServerActivity/OSRedEnvelopeCell.cs
index a6c4936..1426311 100644
--- a/System/OpenServerActivity/OSRedEnvelopeCell.cs
+++ b/System/OpenServerActivity/OSRedEnvelopeCell.cs
@@ -1,33 +1,47 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-namespace Snxxz.UI
-{
-    public class OSRedEnvelopeCell : CellView
-    {
-        [SerializeField] RedPackBehaviour[] m_RedEnvelopes;
-
-        OSRedEnvelopeModel m_Model;
-        OSRedEnvelopeModel model
-        {
-            get
-            {
-                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>());
-            }
-        }
-
-        public void Init(int _line)
-        {
-            for (int i = 0; i < m_RedEnvelopes.Length; i++)
-            {
-                var _index = _line * 5 + i;
-                m_RedEnvelopes[i].gameObject.SetActive(_index < model.m_OSRedEnvelopes.Count);
-                if (_index < model.m_OSRedEnvelopes.Count)
-                {
-                    m_RedEnvelopes[i].Init(model.m_OSRedEnvelopes[_index]);
-                }
-            }
-        }
-    }
-}
-
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+namespace Snxxz.UI
+{
+    public class OSRedEnvelopeCell : CellView
+    {
+        [SerializeField] RedPackBehaviour[] m_RedEnvelopes;
+
+        OSRedEnvelopeModel model
+        {
+            get { return ModelCenter.Instance.GetModel<OSRedEnvelopeModel>(); }
+        }
+
+        FestivalRedpackModel festivalRedpackModel
+        {
+            get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); }
+        }
+
+        public void Display(int _line)
+        {
+            for (int i = 0; i < m_RedEnvelopes.Length; i++)
+            {
+                var _index = _line * 5 + i;
+                m_RedEnvelopes[i].gameObject.SetActive(_index < model.m_OSRedEnvelopes.Count);
+                if (_index < model.m_OSRedEnvelopes.Count)
+                {
+                    m_RedEnvelopes[i].Init(model.m_OSRedEnvelopes[_index]);
+                }
+            }
+        }
+
+        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]);
+                }
+            }
+        }
+    }
+}
+
diff --git a/System/OpenServerActivity/OSRedEnvelopeModel.cs b/System/OpenServerActivity/OSRedEnvelopeModel.cs
index 83aafaf..c7b6982 100644
--- a/System/OpenServerActivity/OSRedEnvelopeModel.cs
+++ b/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>();
             }
         }
diff --git a/System/OpenServerActivity/OSRedEnvelopeSendWin.cs b/System/OpenServerActivity/OSRedEnvelopeSendWin.cs
index 1cde511..2bd0aa7 100644
--- a/System/OpenServerActivity/OSRedEnvelopeSendWin.cs
+++ b/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();
         }
     }
 
diff --git a/System/OpenServerActivity/OpenServerRedEnvelopeWin.cs b/System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
index 0d0a202..5ee9356 100644
--- a/System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
+++ b/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()
diff --git a/System/OpenServerActivity/OperationFestivalRedpack.cs b/System/OpenServerActivity/OperationFestivalRedpack.cs
index 628515f..6981fcc 100644
--- a/System/OpenServerActivity/OperationFestivalRedpack.cs
+++ b/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>();
diff --git a/System/OpenServerActivity/RedEnvelopeModel.cs b/System/OpenServerActivity/RedEnvelopeModel.cs
index 8b69e2d..3080175 100644
--- a/System/OpenServerActivity/RedEnvelopeModel.cs
+++ b/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
diff --git a/System/OpenServerActivity/RedPackBehaviour.cs b/System/OpenServerActivity/RedPackBehaviour.cs
index 0d335f1..7221a5d 100644
--- a/System/OpenServerActivity/RedPackBehaviour.cs
+++ b/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);
                     }
                 });
             }

--
Gitblit v1.8.0