少年修仙传客户端代码仓库
Client_PangDeRong
2018-10-22 f02e7141fcefa3337a173be530d7362b87ffa52a
System/OpenServerActivity/WishingPoolModel.cs
@@ -5,14 +5,18 @@
namespace Snxxz.UI
{
    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()
@@ -23,12 +27,97 @@
        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 本地数据
@@ -42,25 +131,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)
            {
@@ -80,16 +191,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)
@@ -98,21 +209,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;
            }
        }
    }
}