| | |
| | |
|
| | | 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()
|
| | |
| | |
|
| | | 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 本地数据
|
| | |
| | | #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)
|
| | | {
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | 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)
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | 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;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|