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/FestivalRedpackModel.cs |  109 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 96 insertions(+), 13 deletions(-)

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;
         }
     }
 

--
Gitblit v1.8.0