From 096bc211e02f3e010ada28ad5b67a687307382b7 Mon Sep 17 00:00:00 2001
From: client_Zxw <826696702@qq.com>
Date: 星期三, 21 十一月 2018 16:54:19 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts
---
System/OpenServerActivity/MysticalPurchaseModel.cs | 479 +++++++++++++----------------------------------------------
1 files changed, 108 insertions(+), 371 deletions(-)
diff --git a/System/OpenServerActivity/MysticalPurchaseModel.cs b/System/OpenServerActivity/MysticalPurchaseModel.cs
index 5830adc..9d33e00 100644
--- a/System/OpenServerActivity/MysticalPurchaseModel.cs
+++ b/System/OpenServerActivity/MysticalPurchaseModel.cs
@@ -3,436 +3,173 @@
using System.Linq;
using System.Text;
using UnityEngine;
+using TableConfig;
namespace Snxxz.UI
{
[XLua.LuaCallCSharp]
- public class MysticalPurchaseModel : Model,IBeforePlayerDataInitialize,IPlayerLoginOk,IOpenServerActivity
+ public class MysticalPurchaseModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk,IOpenServerActivity
{
+ public event Action UpdateMysticalShopEvent;
+ public event Action<int> onStateUpate;
+
StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
+
public override void Init()
{
- OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
- OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
- OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
OpenServerActivityCenter.Instance.Register((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase, this);
}
public void OnBeforePlayerDataInitialize()
{
- fullSeverBuyInfoDict.Clear();
+ storeModel.RefreshBuyShopLimitEvent -= UpdateBuyTimes;
+ mysticalShopDict.Clear();
}
public void OnPlayerLoginOk()
{
- UpdateRedpoint();
+ storeModel.RefreshBuyShopLimitEvent += UpdateBuyTimes;
}
public override void UnInit()
{
- OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
- OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
- OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent;
+
}
public bool IsOpen
{
get
{
- var operation = GetOperationFlashRushToBuy();
- if (operation != null)
+ List<MysticalShop> mysticalShops = null;
+ return TryGetCurSellShop(out mysticalShops);
+ }
+ }
+
+ public bool IsAdvance { get { return false; } }
+
+ public bool priorityOpen { get { return false; } }
+
+ /// <summary>
+ /// 鏇存柊鐗╁搧璐拱娆℃暟
+ /// </summary>
+ private void UpdateBuyTimes()
+ {
+ if (UpdateMysticalShopEvent != null)
+ {
+ UpdateMysticalShopEvent();
+ }
+
+ if (onStateUpate != null)
+ {
+ onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
+ }
+ }
+
+ public void UpdateSellTimeEnd()
+ {
+ if (UpdateMysticalShopEvent != null)
+ {
+ UpdateMysticalShopEvent();
+ }
+
+ if (onStateUpate != null)
+ {
+ onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
+ }
+ }
+
+ public bool TryGetCurSellShop(out List<MysticalShop> mysticals)
+ {
+ mysticals = new List<MysticalShop>();
+ var mysticalShops = mysticalShopDict.Values.ToList();
+ mysticalShops.Sort(CompareBySellTime);
+ for(int i = 0; i < mysticalShops.Count; i++)
+ {
+ var mystical = mysticalShops[i];
+ if (!mystical.IsSellOut() && mystical.GetRemainSellTime() > 0)
{
- return operation.SatisfyOpenCondition();
- }
- return false;
- }
- }
-
- public bool priorityOpen
- {
- get
- {
- return flashRushToBuyRedpoint.state == RedPointState.Simple;
- }
- }
-
- public bool IsAdvance
- {
- get
- {
- return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.MysticalPurchase);
- }
- }
-
- public void SetDefaultSelectSaleTime()
- {
- OperationFlashRushToBuy operation = GetOperationFlashRushToBuy();
- int seconds = 0;
- if (presentFlashShop != null)
- {
- int buyState = operation.GetBuyTimeState(TimeUtility.ServerNow,presentFlashShop.dayIndex,presentFlashShop.timeIndex, out seconds);
- if(buyState != 1)
- {
- return;
+ mysticals.Add(mystical);
}
}
- OperationTime operationTime;
- OperationFlashRushToBuy.FlashSaleShop saleShop = null;
- var flashRushToBuySate = GetActivityState(out seconds, out operationTime, out saleShop);
- if(flashRushToBuySate != FlashRushToBuySate.End)
- {
- presentFlashShop = saleShop;
- }
- else
- {
- presentFlashShop = null;
- }
+ return mysticals.Count > 0;
}
- public event Action UpdatePresentFlashShopCloseEvent;
- public void PresentFlashShopActivityClose()
+ public int CompareBySellTime(MysticalShop start, MysticalShop end)
{
- SetDefaultSelectSaleTime();
- if (UpdatePresentFlashShopCloseEvent != null)
- {
- UpdatePresentFlashShopCloseEvent();
- }
+ int x = start.GetRemainSellTime();
+ int y = end.GetRemainSellTime();
+ if (x.CompareTo(y) != 0) return x.CompareTo(y);
+
+ return 0;
}
-
- public void ResetFlashShop()
- {
- presentFlashShop = null;
- }
-
- #region 鏈湴鏁版嵁澶勭悊
- public OperationFlashRushToBuy.FlashSaleShop presentFlashShop { get; private set; }
- public event Action UpdateSelectSaleTimeEvent;
- public void UpdateSelectFlashSaleTime(int dayIndex,int timeIndex)
- {
- presentFlashShop = null;
- OperationFlashRushToBuy operation = GetOperationFlashRushToBuy();
- if(operation != null)
- {
- OperationFlashRushToBuy.FlashSaleShop flashShop;
- operation.TryGetFlashShop(dayIndex, timeIndex, out flashShop);
- presentFlashShop = flashShop;
- if(UpdateSelectSaleTimeEvent != null)
- {
- UpdateSelectSaleTimeEvent();
- }
- }
- }
-
- public OperationFlashRushToBuy GetOperationFlashRushToBuy()
- {
- OperationBase operationBase;
- if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.MysticalPurchase, out operationBase))
- {
- return operationBase as OperationFlashRushToBuy;
- }
-
- return null;
- }
- #endregion
-
#region 鍗忚
- public event Action UpdateAllAppointmentEvent;
- public event Action<int> UpdateAppointmentEvent;
- public void UpdateFlashSaleAppointmentInfo(HAA18_tagMCFlashSaleAppointmentInfo appointmentInfo)
+ private Dictionary<int, MysticalShop> mysticalShopDict = new Dictionary<int, MysticalShop>();
+ public void UpdateMysticalShopInfo(HA806_tagMCMysticalShopTimeInfo info)
{
- var operation = GetOperationFlashRushToBuy();
- if (operation == null) return;
-
- if (appointmentInfo.IsAll == 1)
+ mysticalShopDict.Clear();
+ for (int i = 0; i < info.Count; i++)
{
- for (int j = 0; j < operation.flashShops.Count; j++)
+ var shopInfo = info.ShopTimeList[i];
+ MysticalShop mystical = new MysticalShop((int)shopInfo.GoodsID,(int)shopInfo.StartTime);
+ if(!mysticalShopDict.ContainsKey((int)shopInfo.GoodsID))
{
- var saleItems = operation.flashShops[j].items;
- for (int k = 0; k < saleItems.Length; k++)
- {
- saleItems[k].isAppointment = 0;
- }
- }
- }
-
- for (int i = 0; i < appointmentInfo.GoodsCount; i++)
- {
- var saleItemInfo = appointmentInfo.GoodsList[i];
- if (appointmentInfo.GoodsCount < 2 && saleItemInfo.State == 1)
- {
- SysNotifyMgr.Instance.ShowTip("FlashRushToBuy1");
- }
- for (int j = 0; j < operation.flashShops.Count; j++)
- {
- var saleItems = operation.flashShops[j].items;
- for (int k = 0; k < saleItems.Length; k++)
- {
- if (saleItems[k].shopGuid == saleItemInfo.GoodsMark)
- {
-
- if(saleItems[k].isAppointment != saleItemInfo.State)
- {
- saleItems[k].isAppointment = saleItemInfo.State;
- if(UpdateAppointmentEvent != null && appointmentInfo.IsAll != 1)
- {
- UpdateAppointmentEvent((int)saleItemInfo.GoodsMark);
- }
- }
- }
- }
- }
- }
- if(appointmentInfo.IsAll == 1)
- {
- if (UpdateAllAppointmentEvent != null)
- {
- UpdateAllAppointmentEvent();
- }
- }
-
- }
-
- public event Action<int>UpdateFullSeverBuyEvent;
- private Dictionary<int, int> fullSeverBuyInfoDict = new Dictionary<int, int>();
- public void UpdateFullSeverBuyInfo(HA906_tagGCStoreServerBuyCntInfo buyCntInfo)
- {
- for(int i = 0; i < buyCntInfo.Count; i++)
- {
- var info = buyCntInfo.InfoList[i];
- if(!fullSeverBuyInfoDict.ContainsKey((int)info.GoodsID))
- {
- fullSeverBuyInfoDict.Add((int)info.GoodsID,(int)info.BuyCnt);
+ mysticalShopDict.Add((int)shopInfo.GoodsID,mystical);
}
else
{
- fullSeverBuyInfoDict[(int)info.GoodsID] = (int)info.BuyCnt;
- }
- if (UpdateFullSeverBuyEvent != null)
- {
- UpdateFullSeverBuyEvent((int)info.GoodsID);
+ mysticalShopDict[(int)shopInfo.GoodsID] = mystical;
}
}
- }
- public int GetFullServerBuyCntById(int goodsId)
- {
- int buyCnt = 0;
- fullSeverBuyInfoDict.TryGetValue(goodsId,out buyCnt);
- return buyCnt;
+ if(UpdateMysticalShopEvent != null)
+ {
+ UpdateMysticalShopEvent();
+ }
+ if (onStateUpate != null)
+ {
+ onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
+ }
}
- /// <summary>
- /// 闄愭椂鎶㈣喘棰勭害
- /// </summary>
- public void SendFlashSaleAppointment(int shopGuid,int state)
+ public MysticalShop GetMysticalShop(int shopId)
{
- CAA05_tagCMFlashSaleAppointment appointment = new CAA05_tagCMFlashSaleAppointment();
- appointment.GoodsID = (uint)shopGuid;
- appointment.State = (byte)state;
- GameNetSystem.Instance.SendInfo(appointment);
+ MysticalShop mystical = null;
+ mysticalShopDict.TryGetValue(shopId,out mystical);
+ return mystical;
}
+
#endregion
- /// <summary>
- /// 鑾峰緱闄愭椂鎶㈣喘娲诲姩鐘舵��
- /// </summary>
- /// <param name="seconds"></param>
- /// <returns></returns>
- public FlashRushToBuySate GetActivityState(out int seconds,out OperationTime operationTime,out OperationFlashRushToBuy.FlashSaleShop saleShop)
+ public class MysticalShop
{
- seconds = 0;
- saleShop = null;
- operationTime = default(OperationTime);
- var operation = GetOperationFlashRushToBuy();
- if (!IsOpen || operation == null) return FlashRushToBuySate.NoOpen;
+ public int shopdId;
+ public int sellTime;
+ public StoreConfig storeConfig;
+ StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
- int openState = 0;
- int endState = 0;
- int openSeconds = 0;
- int endSeconds = 0;
- for(int i = 0; i < operation.flashShops.Count;i++)
+ public MysticalShop(int id,int sellTime)
{
- OperationFlashRushToBuy.FlashSaleShop openSaleShop = operation.flashShops[i];
- operationTime = operation.times[openSaleShop.timeIndex];
- openState = operation.GetBuyTimeState(TimeUtility.ServerNow, openSaleShop.dayIndex, openSaleShop.timeIndex, out openSeconds);
- if(openState != 1)
- {
- saleShop = openSaleShop;
- break;
- }
- }
- if(operation.flashShops.Count > 0)
- {
- OperationFlashRushToBuy.FlashSaleShop endSaleShop = operation.flashShops[operation.flashShops.Count - 1];
- endState = operation.GetBuyTimeState(TimeUtility.ServerNow, endSaleShop.dayIndex, endSaleShop.timeIndex, out endSeconds);
+ this.shopdId = id;
+ this.sellTime = sellTime;
+ this.storeConfig = Config.Instance.Get<StoreConfig>(shopdId);
}
- switch(openState)
+ /// <summary>
+ ///鏄惁鍗栧厜
+ /// </summary>
+ /// <returns></returns>
+ public bool IsSellOut()
{
- case -1:
- seconds = openSeconds;
- return FlashRushToBuySate.InAdvance;
- case 0:
- return FlashRushToBuySate.Begining;
+ int remainNum = 0;
+ return storeModel.TryGetIsSellOut(storeConfig,out remainNum);
}
- switch(endState)
+ public int GetRemainSellTime()
{
- case -1:
- return FlashRushToBuySate.Begining;
- case 0:
- return FlashRushToBuySate.Begining;
- case 1:
- return FlashRushToBuySate.End;
- default:
- return FlashRushToBuySate.NoOpen;
+ int seconds = sellTime + storeConfig.LimitValue;
+ DateTime endTime = TimeUtility.GetTime((uint)seconds);
+ int endSec = Mathf.CeilToInt((float)(endTime - TimeUtility.ServerNow).TotalSeconds);
+ return endSec > 0 ? endSec : 0;
}
- }
-
- public bool CheckIsPush(out OperationFlashRushToBuy.FlashSaleShop saleShop)
- {
- int seconds = 0;
- OperationTime operationTime;
- saleShop = null;
- var buyState = GetActivityState(out seconds,out operationTime,out saleShop);
- switch (buyState)
- {
- case FlashRushToBuySate.NoOpen:
- break;
- case FlashRushToBuySate.InAdvance:
- if(saleShop != null && seconds <= 180)
- {
- for(int i = 0; i < saleShop.items.Length; i++)
- {
- if(saleShop.items[i].isAppointment == 1)
- {
- return true;
- }
- }
- }
- break;
- case FlashRushToBuySate.Begining:
- if (saleShop != null)
- {
- for (int i = 0; i < saleShop.items.Length; i++)
- {
- var saleItem = saleShop.items[i];
- if(GetSellSate(saleItem) == 0)
- {
- return true;
- }
- }
- }
- break;
- case FlashRushToBuySate.End:
- break;
- }
- return false;
- }
-
- /// <summary>
- /// 0 绉掓潃 1 宸蹭拱鍒� 2 宸叉姠鍏�
- /// </summary>
- /// <returns></returns>
- private int GetSellSate(OperationFlashRushToBuy.FlashSaleItem saleItem)
- {
- var buyInfo = storeModel.GetBuyShopLimit((uint)saleItem.shopId);
- var buyCount = 0;
- int fullRemainNum = saleItem.fullServerLimitNum - GetFullServerBuyCntById(saleItem.shopId);
- if (buyInfo != null)
- {
- buyCount = buyInfo.BuyCnt;
- }
- if (buyCount >= saleItem.limitNum)
- {
- return 1;
- }
-
- if (fullRemainNum <= 0)
- {
- return 2;
- }
- return 0;
- }
-
- private void OperationEndEvent(Operation type, int state)
- {
- if (type == Operation.MysticalPurchase && state == 0)
- {
- UpdateRedpoint();
- if (onStateUpate != null)
- {
- onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
- }
- }
- }
-
- private void OperationAdvanceEvent(Operation type)
- {
- if (type == Operation.MysticalPurchase)
- {
- if (onStateUpate != null)
- {
- onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
- }
- }
- }
-
- private void OperationStartEvent(Operation type, int state)
- {
- if (type == Operation.MysticalPurchase && state == 0)
- {
- UpdateRedpoint();
- if (onStateUpate != null)
- {
- onStateUpate((int)OpenServerActivityCenter.OSActivityType.MysticalPurchase);
- }
- }
- }
-
- public void SetDayRemind()
- {
- if (flashRushToBuyRedpoint.state == RedPointState.Simple)
- {
- SetAlreadyOpenSaleTime();
- UpdateRedpoint();
- }
- }
-
- public Redpoint flashRushToBuyRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20914);
-
- public event Action<int> onStateUpate;
- public void SetAlreadyOpenSaleTime()
- {
- int seconds = 0;
- OperationTime operationTime;
- OperationFlashRushToBuy.FlashSaleShop saleShop = null;
- var buyState = GetActivityState(out seconds, out operationTime, out saleShop);
- if(buyState == FlashRushToBuySate.Begining)
- {
- int key = saleShop.dayIndex * 100 + saleShop.timeIndex;
- }
- }
-
- private void UpdateRedpoint()
- {
- flashRushToBuyRedpoint.state = RedPointState.None;
- int seconds = 0;
- OperationTime operationTime;
- OperationFlashRushToBuy.FlashSaleShop saleShop = null;
- var buyState = GetActivityState(out seconds, out operationTime, out saleShop);
- if(buyState == FlashRushToBuySate.Begining)
- {
- int key = saleShop.dayIndex * 100 + saleShop.timeIndex;
- }
-
- }
-
- public enum FlashRushToBuySate
- {
- NoOpen, //娲诲姩鏈紑鍚�
- InAdvance,//鎻愬墠
- Begining, //娲诲姩涓�
- End, //缁撴潫
}
}
}
--
Gitblit v1.8.0