From a974a2621a6dcb90b8fe52b23d075814873c0960 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期二, 23 十月 2018 20:53:49 +0800
Subject: [PATCH] Merge branch 'master' into leonard

---
 System/OpenServerActivity/WishingPoolModel.cs |  266 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 246 insertions(+), 20 deletions(-)

diff --git a/System/OpenServerActivity/WishingPoolModel.cs b/System/OpenServerActivity/WishingPoolModel.cs
index 5272159..f3de045 100644
--- a/System/OpenServerActivity/WishingPoolModel.cs
+++ b/System/OpenServerActivity/WishingPoolModel.cs
@@ -6,14 +6,18 @@
 namespace Snxxz.UI
 {
     [XLua.LuaCallCSharp]
-	public class WishingPoolModel : Model,IBeforePlayerDataInitialize,IPlayerLoginOk
+    public class WishingPoolModel : Model,IBeforePlayerDataInitialize,IPlayerLoginOk,IOpenServerActivity
     {
         public event Action<int> UpdateWishingDataEvent;
         public event Action<int> UpdatePoolDataEvent;
-
+        public event Action<int> onStateUpate;
+        public const int WishRedKey = 20915;
         public override void Init()
         {
-            
+            OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
+            OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
+            OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
+            OpenServerActivityCenter.Instance.Register((int)OpenServerActivityCenter.OSActivityType.FlashRushToBuy, this);
         }
 
         public void OnBeforePlayerDataInitialize()
@@ -24,13 +28,100 @@
 
         public void OnPlayerLoginOk()
         {
-            SetWishingPoolData();
+            UpdateRedpoint();
         }
 
         public override void UnInit()
         {
             
         }
+
+        public bool IsOpen
+        {
+            get
+            {
+                return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.WishingWellInfo);
+            }
+        }
+
+        public bool priorityOpen
+        {
+            get
+            {
+                return wishPoolRedpoint.state == RedPointState.Simple;
+            }
+        }
+
+        public bool IsAdvance
+        {
+            get
+            {
+                return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.WishingWellInfo);
+            }
+        }
+
+        private void OperationEndEvent(Operation type, int state)
+        {
+            if (type == Operation.WishingWellInfo && state == 1)
+            {
+                UpdateRedpoint();
+                if (onStateUpate != null)
+                {
+                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.WishingPool);
+                }
+            }
+        }
+
+        private void OperationAdvanceEvent(Operation type)
+        {
+            if (type == Operation.WishingWellInfo)
+            {
+                if (onStateUpate != null)
+                {
+                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.WishingPool);
+                }
+            }
+        }
+
+        private void OperationStartEvent(Operation type, int state)
+        {
+            if (type == Operation.WishingWellInfo && state == 1)
+            {
+                UpdateRedpoint();
+                if (onStateUpate != null)
+                {
+                    onStateUpate((int)OpenServerActivityCenter.OSActivityType.WishingPool);
+                }
+            }
+        }
+
+        public OperationWishingWellInfo GetOperationWishing()
+        {
+            OperationBase operationBase;
+            if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.WishingWellInfo, out operationBase))
+            {
+                return operationBase as OperationWishingWellInfo;
+            }
+
+            return null;
+        }
+
+        public bool TryGetFreeWishCoolTime(out int second)
+        {
+            second = 0;
+            if (freeStartTime == 25) return false;
+
+            int endhour = freeStartTime + 2;
+            int nowHour = TimeUtility.ServerNow.Hour;
+            second = (endhour - nowHour) * 3600;
+            if(second > 0)
+            {
+                return true;
+            }
+            return false;
+        }
+
+
 
         #region 鏈湴鏁版嵁
         public bool isDraging { get; set; }
@@ -43,25 +134,47 @@
         #endregion
 
         #region 鍗忚
-        Dictionary<int, int> poolDataDict = new Dictionary<int, int>();
-        public void SetWishingPoolData()
+        Dictionary<int, WishingWellItem> poolDataDict = new Dictionary<int, WishingWellItem>();
+        public int freeStartTime { get; private set; }// 鍏嶈垂寮�濮嬪�掕鏃舵椂闂�
+        public int alreadyWishNum { get; private set; } // 璁告効浠樿垂鍒锋柊娆℃暟
+
+        public void SetWishingWellPlayerInfo(HAA1A_tagMCActWishingWellPlayerInfo wishInfo)
         {
-            for(int i = 0; i< 8; i++)
+            freeStartTime = (int)wishInfo.FreeStartTime;
+            alreadyWishNum = (int)wishInfo.WishCnt;
+            for(int i = 0; i < wishInfo.WellItemCnt; i++)
             {
-                int itemId = 1 + i;
-                SetWishingPoolData(i,itemId);
+                var itemInfo = wishInfo.WellItemInfo[i];
+                WishingWellItem wellItem = new WishingWellItem((int)itemInfo.ItemID,itemInfo.ItemCnt,itemInfo.IsBind);
+                SetWishingPoolData(i,wellItem);
             }
+
+            for(int i = 0; i < wishInfo.CurAwardCnt; i++)
+            {
+                var itemInfo = wishInfo.CurAwardItemInfo[i];
+                WishingWellItem wellItem = new WishingWellItem((int)itemInfo.ItemID, itemInfo.ItemCnt, itemInfo.IsBind);
+                SetWishingData(i, wellItem);
+            }
+
+            wishingAwardDict.Clear();
+            for (int i = 0; i < wishInfo.LastAwardCnt; i++)
+            {
+                var itemInfo = wishInfo.LastAwardItemInfo[i];
+                WishingWellItem wellItem = new WishingWellItem((int)itemInfo.ItemID, itemInfo.ItemCnt, itemInfo.IsBind);
+                SetWishingAwardData(i, wellItem);
+            }
+            UpdateRedpoint();
         }
 
-        public void SetWishingPoolData(int index, int id)
+        public void SetWishingPoolData(int index, WishingWellItem wellItem)
         {
             if (!poolDataDict.ContainsKey(index))
             {
-                poolDataDict.Add(index, id);
+                poolDataDict.Add(index,wellItem);
             }
             else
             {
-                poolDataDict[index] = id;
+                poolDataDict[index] = wellItem;
             }
             if(UpdatePoolDataEvent != null)
             {
@@ -81,16 +194,16 @@
             }
         }
 
-        Dictionary<int, int> wishingDataDict = new Dictionary<int, int>();
-        public void SetWishingData(int index,int id)
+        Dictionary<int, WishingWellItem> wishingDataDict = new Dictionary<int, WishingWellItem>();
+        public void SetWishingData(int index, WishingWellItem wellItem)
         {
             if(!wishingDataDict.ContainsKey(index))
             {
-                wishingDataDict.Add(index,id);
+                wishingDataDict.Add(index,wellItem);
             }
             else
             {
-                wishingDataDict[index] = id;
+                wishingDataDict[index] = wellItem;
             }
 
             if(UpdateWishingDataEvent != null)
@@ -99,21 +212,134 @@
             }
         }
 
-        public bool TryGetPoolDataByIndex(int index,out int id)
+        Dictionary<int, WishingWellItem> wishingAwardDict = new Dictionary<int, WishingWellItem>();
+        public void SetWishingAwardData(int index, WishingWellItem wellItem)
         {
-           return  poolDataDict.TryGetValue(index,out id);
+            if (!wishingAwardDict.ContainsKey(index))
+            {
+                wishingAwardDict.Add(index, wellItem);
+            }
+            else
+            {
+                wishingAwardDict[index] = wellItem;
+            }
+        }
+        
+        public bool IsBetterItem()
+        {
+            return false;
         }
 
-        public bool TryGetWishDataByIndex(int index, out int id)
+        public bool TryGetPoolDataByIndex(int index,out WishingWellItem wellItem)
         {
-            return wishingDataDict.TryGetValue(index, out id);
+            if(poolDataDict.TryGetValue(index, out wellItem))
+            {
+                if(wellItem.itemId != 0)
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public bool TryGetWishDataByIndex(int index, out WishingWellItem wellItem)
+        {
+            if(wishingDataDict.TryGetValue(index, out wellItem))
+            {
+                if(wellItem.itemId != 0)
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public void SendRefreshPoolInfo(int refreshType)
+        {
+            CAA07_tagCMActWishingRefresh wishingRefresh = new CAA07_tagCMActWishingRefresh();
+            wishingRefresh.IsFree = (byte)refreshType;
+            GameNetSystem.Instance.SendInfo(wishingRefresh);
+        }
+
+        public void SendRefreshWishInfo(int poolIndex,int wishIndex)
+        {
+            CAA06_tagCMActWishing actWishing = new CAA06_tagCMActWishing();
+            actWishing.SrcWellType = 0;
+            actWishing.SrcIndex = (byte)poolIndex;
+            actWishing.DesWellType = 1;
+            actWishing.DesIndex = (byte)wishIndex;
+            GameNetSystem.Instance.SendInfo(actWishing);
+
+        }
+        #endregion
+
+        #region 绾㈢偣
+        public Redpoint wishPoolRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, WishRedKey);
+        public const int FREEWISH_REDKEY = 2091501;
+        public Redpoint freeWishRedpoint = new Redpoint(WishRedKey, FREEWISH_REDKEY);
+        public List<Redpoint> wishPointlist = new List<Redpoint>();
+        public void SetWishRedpoint()
+        {
+            wishPointlist.Clear();
+            for (int i = 0; i < 5; i++)
+            {
+                int redKey = WishRedKey * 100 + (i + 2);
+                Redpoint redpoint = new Redpoint(WishRedKey,redKey);
+                wishPointlist.Add(redpoint);
+            }
+        }
+        private void UpdateRedpoint()
+        {
+            int second = 0;
+            bool isCool = TryGetFreeWishCoolTime(out second);
+            if(IsOpen && !isCool)
+            {
+                freeWishRedpoint.state = RedPointState.Simple;
+            }
+            else
+            {
+                freeWishRedpoint.state = RedPointState.None;
+            }
+
+            for (int i = 0; i < wishPointlist.Count; i++)
+            {
+                var wishPoint = wishPointlist[i];
+                wishPoint.state = RedPointState.None;
+            }
+
+            for (int i = 0; i < wishPointlist.Count; i++)
+            {
+                var wishPoint = wishPointlist[i];
+                WishingWellItem wellItem = null;
+                bool isWishData = TryGetWishDataByIndex(i,out wellItem);
+                if(!isWishData)
+                {
+                    wishPoint.state = RedPointState.Simple;
+                    return;
+                }
+            }
         }
         #endregion
 
         public void ResetPoolData()
         {
+            freeStartTime = 25;
             poolDataDict.Clear();
             wishingDataDict.Clear();
+            wishingAwardDict.Clear();
+        }
+
+        public class WishingWellItem
+        {
+            public int itemId;
+            public int itemCount;
+            public int isBind;
+            public WishingWellItem(int id,int count,int isBind)
+            {
+                this.itemId = id;
+                this.itemCount = count;
+                this.isBind = isBind;
+            }
         }
     }
 }

--
Gitblit v1.8.0