Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA11_tagMCSpringSaleInfo.cs
@@ -6,6 +6,7 @@ public class HAA11_tagMCSpringSaleInfo : GameNetPackBasic { public string StartDate; // 开始日期 y-m-d public string EndtDate; // 结束日期 y-m-d public ushort AdvanceMinutes; // 提前显示分钟 public byte ActivityTimeCount; public tagMCSpringSaleTime[] ActivityTime; //活动时间 public byte IsDayReset; //是否每天重置 @@ -20,6 +21,7 @@ public override void ReadFromBytes (byte[] vBytes) { TransBytes (out StartDate, vBytes, NetDataType.Chars, 10); TransBytes (out EndtDate, vBytes, NetDataType.Chars, 10); TransBytes (out AdvanceMinutes, vBytes, NetDataType.WORD); TransBytes (out ActivityTimeCount, vBytes, NetDataType.BYTE); ActivityTime = new tagMCSpringSaleTime[ActivityTimeCount]; for (int i = 0; i < ActivityTimeCount; i ++) { Core/NetworkPackage/ServerPack/HAA_SaleActivity/HAA12_tagMCFlashGiftbagInfo.cs
@@ -6,6 +6,7 @@ public class HAA12_tagMCFlashGiftbagInfo : GameNetPackBasic { public string StartDate; // 开始日期 y-m-d public string EndtDate; // 结束日期 y-m-d public ushort AdvanceMinutes; // 提前显示分钟 public byte ActivityTimeCount; public tagMCFlashGiftbagTime[] ActivityTime; //活动时间 public byte IsDayReset; //是否每天重置 @@ -20,6 +21,7 @@ public override void ReadFromBytes (byte[] vBytes) { TransBytes (out StartDate, vBytes, NetDataType.Chars, 10); TransBytes (out EndtDate, vBytes, NetDataType.Chars, 10); TransBytes (out AdvanceMinutes, vBytes, NetDataType.WORD); TransBytes (out ActivityTimeCount, vBytes, NetDataType.BYTE); ActivityTime = new tagMCFlashGiftbagTime[ActivityTimeCount]; for (int i = 0; i < ActivityTimeCount; i ++) { Core/NetworkPackage/ServerPack/HAB_Activity/HAB04_tagMCBossRebornInfo.cs
@@ -1,60 +1,55 @@ using UnityEngine; using System.Collections; // AB 04 Boss复活活动信息 #tagMCBossRebornInfo public class HAB04_tagMCBossRebornInfo : GameNetPackBasic { public string StartDate; // 开始日期 y-m-d public string EndtDate; // 结束日期 y-m-d public ushort LimitLV; // 限制等级 public byte TaskCnt; public tagMCBossRebornTaskInfo[] TaskInfo = null; public HAB04_tagMCBossRebornInfo() { _cmd = (ushort)0xAB04; } public override void ReadFromBytes(byte[] vBytes) { TransBytes(out StartDate, vBytes, NetDataType.Chars, 10); TransBytes(out EndtDate, vBytes, NetDataType.Chars, 10); TransBytes(out LimitLV, vBytes, NetDataType.WORD); TransBytes(out TaskCnt, vBytes, NetDataType.BYTE); TaskInfo = new tagMCBossRebornTaskInfo[TaskCnt]; for (int i = 0; i < TaskCnt; i++) { TaskInfo[i] = new tagMCBossRebornTaskInfo(); TransBytes(out TaskInfo[i].TaskID, vBytes, NetDataType.BYTE); TransBytes(out TaskInfo[i].TotalTimes, vBytes, NetDataType.BYTE); TransBytes(out TaskInfo[i].SingleTimes, vBytes, NetDataType.BYTE); TransBytes(out TaskInfo[i].AwardItemCount, vBytes, NetDataType.BYTE); TaskInfo[i].AwardItem = new tagMCBossRebornAwardItem[TaskInfo[i].AwardItemCount]; for (int j = 0; j < TaskInfo[i].AwardItemCount; j++) { TaskInfo[i].AwardItem[j] = new tagMCBossRebornAwardItem(); TransBytes(out TaskInfo[i].AwardItem[j].ItemID, vBytes, NetDataType.DWORD); TransBytes(out TaskInfo[i].AwardItem[j].ItemCount, vBytes, NetDataType.WORD); TransBytes(out TaskInfo[i].AwardItem[j].IsBind, vBytes, NetDataType.BYTE); } } } public struct tagMCBossRebornAwardItem { public uint ItemID; public ushort ItemCount; public byte IsBind; } public struct tagMCBossRebornTaskInfo { public byte TaskID; // id public byte TotalTimes; // 可完成总次数,0表示不限次数 public byte SingleTimes; // 单次领奖需要次数 public byte AwardItemCount; // 奖励物品数 public tagMCBossRebornAwardItem[] AwardItem; // 奖励物品信息 } } using UnityEngine; using System.Collections; // AB 04 Boss复活活动信息 #tagMCBossRebornInfo public class HAB04_tagMCBossRebornInfo : GameNetPackBasic { public string StartDate; // 开始日期 y-m-d public string EndtDate; // 结束日期 y-m-d public byte ResetType; // 重置类型,0-0点重置;1-5点重置 public ushort LimitLV; // 限制等级 public byte TaskCnt; public tagMCBossRebornTaskInfo[] TaskInfo; public HAB04_tagMCBossRebornInfo () { _cmd = (ushort)0xAB04; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out StartDate, vBytes, NetDataType.Chars, 10); TransBytes (out EndtDate, vBytes, NetDataType.Chars, 10); TransBytes (out ResetType, vBytes, NetDataType.BYTE); TransBytes (out LimitLV, vBytes, NetDataType.WORD); TransBytes (out TaskCnt, vBytes, NetDataType.BYTE); TaskInfo = new tagMCBossRebornTaskInfo[TaskCnt]; for (int i = 0; i < TaskCnt; i ++) { TaskInfo[i] = new tagMCBossRebornTaskInfo(); TransBytes (out TaskInfo[i].TaskID, vBytes, NetDataType.BYTE); TransBytes (out TaskInfo[i].TotalTimes, vBytes, NetDataType.BYTE); TransBytes (out TaskInfo[i].SingleTimes, vBytes, NetDataType.BYTE); TransBytes (out TaskInfo[i].AwardItemCount, vBytes, NetDataType.BYTE); TaskInfo[i].AwardItem = new tagMCBossRebornAwardItem[TaskInfo[i].AwardItemCount]; for (int j = 0; j < TaskInfo[i].AwardItemCount; j ++) { TaskInfo[i].AwardItem[j] = new tagMCBossRebornAwardItem(); TransBytes (out TaskInfo[i].AwardItem[j].ItemID, vBytes, NetDataType.DWORD); TransBytes (out TaskInfo[i].AwardItem[j].ItemCount, vBytes, NetDataType.WORD); TransBytes (out TaskInfo[i].AwardItem[j].IsBind, vBytes, NetDataType.BYTE); } } } public struct tagMCBossRebornAwardItem { public uint ItemID; public ushort ItemCount; public byte IsBind; } public struct tagMCBossRebornTaskInfo { public byte TaskID; // id public byte TotalTimes; // 可完成总次数,0表示不限次数 public byte SingleTimes; // 单次领奖需要次数 public byte AwardItemCount; // 奖励物品数 public tagMCBossRebornAwardItem[] AwardItem; // 奖励物品信息 } } System/BossReborn/BossRebornModel.cs
@@ -101,8 +101,16 @@ get { return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.BossReborn); } } } public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.BossReborn); } } public void UpdateTaskBaseInfos(HAB04_tagMCBossRebornInfo.tagMCBossRebornTaskInfo[] _tasks) { foreach (var task in _tasks) System/OpenServerActivity/FlashSaleBehaviour.cs
@@ -20,14 +20,13 @@ StoreModel storeModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } } FlashSaleModel model { get { return ModelCenter.Instance.GetModel<FlashSaleModel>(); } } public void Display(int index, int _id) public void Display(OperationFlashSale.FlashSaleGift gift) { m_BuyButton.RemoveAllListeners(); OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase)) { OperationFlashSale operation = operationBase as OperationFlashSale; var gift = operation.GetFlashSaleGift(index, _id); if (!gift.Equals(default(OperationFlashSale.FlashSaleGift))) { m_OriginalCostIcon.SetIconWithMoneyType(gift.moneyType); @@ -66,7 +65,7 @@ m_BuyButton.gameObject.SetActive(buyCount < gift.limitNum); m_BuyButton.AddListener(() => { model.SendBuyFlashSale(index, _id); model.SendBuyFlashSale(gift); }); } } System/OpenServerActivity/FlashSaleCoolDown.cs
@@ -12,25 +12,52 @@ private void OnEnable() { DisplayTime(); SecondEvent(); GlobalTimeEvent.Instance.secondEvent -= SecondEvent; GlobalTimeEvent.Instance.secondEvent += SecondEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; } private void DayResetEvent(int resetType) { SecondEvent(); } private void SecondEvent() { var seconds = OperationTimeHepler.Instance.GetOperationSurplusTime(Operation.FlashSale); m_Time.timeShow.color = seconds > 3600 ? UIHelper.GetUIColor(TextColType.Green) : UIHelper.GetUIColor(TextColType.Red); OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase)) { var operation = (operationBase as OperationFlashSale); var seconds = operation.GetResetSurplusTime(); if (seconds * TimeSpan.TicksPerSecond >= TimeSpan.TicksPerDay || seconds <= 0) { if (m_Time.gameObject.activeSelf) { DisplayTime(0); } } else { m_Time.timeShow.color = seconds > 3600 ? UIHelper.GetUIColor(TextColType.Green) : UIHelper.GetUIColor(TextColType.Red); if (!m_Time.gameObject.activeSelf) { DisplayTime(seconds); } } } } private void OnDisable() { GlobalTimeEvent.Instance.secondEvent -= SecondEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; } void DisplayTime() void DisplayTime(int seconds) { var seconds = OperationTimeHepler.Instance.GetOperationSurplusTime(Operation.FlashSale); m_Time.timeShow.color = seconds > 3600 ? UIHelper.GetUIColor(TextColType.Green) : UIHelper.GetUIColor(TextColType.Red); m_Time.Begin(DateTime.Now.AddTicks(seconds * TimeSpan.TicksPerSecond)); } } System/OpenServerActivity/FlashSaleModel.cs
@@ -11,6 +11,7 @@ { OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent; TimeMgr.Instance.OnDayEvent += OnDayEvent; OpenServerActivityCenter.Instance.Register(4, this); } @@ -28,6 +29,7 @@ { OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent; OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent; TimeMgr.Instance.OnDayEvent -= OnDayEvent; } @@ -36,6 +38,17 @@ if (type == Operation.FlashSale && state == 0) { UpdateRedpoint(); if (onStateUpate != null) { onStateUpate(4); } } } private void OperationAdvanceEvent(Operation type) { if (type == Operation.FlashSale) { if (onStateUpate != null) { onStateUpate(4); @@ -73,19 +86,7 @@ { get { OperationBase operationBase; OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase); return operationBase != null && operationBase.SatisfyOpenCondition() && operationBase.InTime(TimeUtility.ServerNow); } } public bool InAdvanceOpen { get { OperationBase operationBase; OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase); return operationBase != null && operationBase.SatisfyOpenCondition() && operationBase.InAdvanceTime(TimeUtility.ServerNow); return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.FlashSale); } } @@ -97,7 +98,15 @@ } } public void SendBuyFlashSale(int index, int id) public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.FlashSale); } } public void SendBuyFlashSale(OperationFlashSale.FlashSaleGift gift) { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase)) @@ -105,6 +114,7 @@ OperationFlashSale operation = operationBase as OperationFlashSale; if (operation.InAdvanceTime(TimeUtility.ServerNow)) { SysNotifyMgr.Instance.ShowTip("InOperationTimeError"); return; } if (!operation.InTime(TimeUtility.ServerNow)) @@ -112,7 +122,6 @@ SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } var gift = operation.GetFlashSaleGift(index, id); if (!gift.Equals(default(OperationFlashSale.FlashSaleGift))) { var buyInfo = storeModel.GetBuyShopLimit((uint)gift.id); @@ -183,10 +192,9 @@ if (operationBase != null && operationBase.InTime(TimeUtility.ServerNow)) { OperationFlashSale operation = operationBase as OperationFlashSale; var index = operation.IndexOfFlashShop(); if (index != -1 && index < operation.flashShops.Count) OperationFlashSale.FlashSale flashShop; if (operation.TryGetFlashSale(TimeUtility.ServerNow, out flashShop)) { var flashShop = operation.flashShops[index]; for (int i = 0; i < flashShop.gifts.Length; i++) { var gift = flashShop.gifts[i]; System/OpenServerActivity/FlashSaleWin.cs
@@ -80,10 +80,9 @@ OperationFlashSale operation = operationBase as OperationFlashSale; m_OpreationTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime()); m_RefreshGiftTime.gameObject.SetActive(operation.allDay); var index = operation.IndexOfFlashShop(); if (index != -1 && index < operation.flashShops.Count) OperationFlashSale.FlashSale flashSale; if (operation.TryGetFlashSale(TimeUtility.ServerNow, out flashSale)) { var flashSale = operation.flashShops[index]; if (flashSale.gifts.Length > 0) { var moneyType = flashSale.gifts[0].moneyType; @@ -95,7 +94,7 @@ if (i < flashSale.gifts.Length) { m_FlashSaleBehaviours[i].gameObject.SetActive(true); m_FlashSaleBehaviours[i].Display(index, flashSale.gifts[i].id); m_FlashSaleBehaviours[i].Display(flashSale.gifts[i]); } else { @@ -130,14 +129,30 @@ OperationBase operationBase; OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBase); var seconds = 0; var inAdvance = false; if (operationBase != null) { OperationFlashSale operation = operationBase as OperationFlashSale; seconds = operation.GetSurplusTime(operation.IndexOfFlashShop()); if (operationBase.InAdvanceTime(TimeUtility.ServerNow)) { inAdvance = true; seconds = operationBase.GetSecondsBeforeStart(TimeUtility.ServerNow); } else { OperationFlashSale operation = operationBase as OperationFlashSale; seconds = operation.GetResetSurplusTime(); } } if (seconds > 0) { m_SurplusTime.text = Language.Get("LimitGift1", TimeUtility.SecondsToDHMSCHS(seconds)); if (inAdvance) { m_SurplusTime.text = string.Format("{0}之后开启", TimeUtility.SecondsToDHMSCHS(seconds)); } else { m_SurplusTime.text = Language.Get("LimitGift1", TimeUtility.SecondsToDHMSCHS(seconds)); } } else { System/OpenServerActivity/ImpactRankModel.cs
@@ -670,6 +670,14 @@ return TimeUtility.OpenDay < openServerRankDays && FuncOpen.Instance.IsFuncOpen(125); } } public bool IsAdvance { get { return false; } } #endregion } @@ -716,7 +724,7 @@ _functionOrder = 0; foreach (var _order in openServerActivitys.Keys) { if (openServerActivitys[_order].IsOpen) if (openServerActivitys[_order].IsOpen || openServerActivitys[_order].IsAdvance) { _functionOrder = _order; return true; @@ -729,7 +737,7 @@ { if (openServerActivitys.ContainsKey(_funcOrder)) { return openServerActivitys[_funcOrder].IsOpen; return openServerActivitys[_funcOrder].IsOpen || openServerActivitys[_funcOrder].IsAdvance; } return false; } @@ -765,6 +773,7 @@ public interface IOpenServerActivity { bool IsOpen { get; } bool IsAdvance { get; } bool priorityOpen { get; } event Action<int> onStateUpate; System/OpenServerActivity/OSGiftModel.cs
@@ -76,6 +76,15 @@ } public int timeOverdueGiftId { get; private set; } public bool IsAdvance { get { return false; } } public DateTime overDueTime = DateTime.Now; public void UpdateTime(HAA16_tagMCSuperGiftInfo package) { System/OpenServerActivity/OSRedEnvelopeModel.cs
@@ -424,6 +424,14 @@ } } public bool IsAdvance { get { return false; } } public event Action OSRedEnvelopeInfoEnvent; public event Action<int> onStateUpate; System/Vip/FairyJadeInvestmentModel.cs
@@ -47,6 +47,13 @@ } } public bool IsAdvance { get { return false; } } private bool IsRedPoint()//红点 { System/Vip/LimitedTimePackageModel.cs
@@ -42,6 +42,14 @@ } } public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.GiftPackage); } } public void OnBeforePlayerDataInitialize() { IsShowPanel = false; @@ -141,14 +149,13 @@ if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.GiftPackage, out operationBase)) { GiftPackageClass operation = operationBase as GiftPackageClass; var index = operation.IndexOfFlashShop(); if (index != -1 && index < operation.giftpackage1.Count) GiftPackageClass.Gift_Package gift; if (operation.TryGetGift(TimeUtility.ServerNow, out gift)) { var giftpackage = operation.giftpackage1[index]; if (giftpackage.gifts.Length > 0) if (gift.gifts.Length > 0) { int BuyCountLimit = giftpackage.gifts[0].limitNum;//限购数量 int GiftID = giftpackage.gifts[0].id;//礼包ID int BuyCountLimit = gift.gifts[0].limitNum;//限购数量 int GiftID = gift.gifts[0].id;//礼包ID if (DicBuyPackage.ContainsKey(GiftID) && DicBuyPackage[GiftID] >= BuyCountLimit) { IsBuyBool = true; System/Vip/LimitedTimePackageWin.cs
@@ -89,36 +89,34 @@ if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.GiftPackage, out operationBase)) { GiftPackageClass operation = operationBase as GiftPackageClass; // m_Text_ActivityTimeTo.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime()); var index = operation.IndexOfFlashShop(); if (index != -1 && index < operation.giftpackage1.Count) GiftPackageClass.Gift_Package gift; if (operation.TryGetGift(TimeUtility.ServerNow, out gift)) { var giftpackage = operation.giftpackage1[index]; if (giftpackage.gifts.Length > 0) if (gift.gifts.Length > 0) { string str = string.Empty; str= giftpackage.gifts[0].rmb + Language.Get("RMB_Package_Z"); str = gift.gifts[0].rmb + Language.Get("RMB_Package_Z"); m_Text_PackageName.text = str; m_Money1.text = giftpackage.gifts[0].rmbOriginal + Language.Get("RMB_Z");//原价 m_Money2.text = giftpackage.gifts[0].rmb + Language.Get("RMB_Z");//现价 int BuyCountLimit = giftpackage.gifts[0].limitNum;//限购数量 int GiftID = giftpackage.gifts[0].id;//礼包ID m_Money1.text = gift.gifts[0].rmbOriginal + Language.Get("RMB_Z");//原价 m_Money2.text = gift.gifts[0].rmb + Language.Get("RMB_Z");//现价 int BuyCountLimit = gift.gifts[0].limitNum;//限购数量 int GiftID = gift.gifts[0].id;//礼包ID m_Buy_Btn.RemoveAllListeners(); m_Buy_Btn.AddListener(()=> m_Buy_Btn.AddListener(() => { if (limitedTimePackageItemModel.IsExpired()) { m_Buy_Btn.interactable = false; time = 0; limitedTimePackageItemModel.OpenFreePlat(str, giftpackage.gifts[0].rmb, giftpackage.gifts[0].OrderInfo); limitedTimePackageItemModel.OpenFreePlat(str, gift.gifts[0].rmb, gift.gifts[0].OrderInfo); } else { SysNotifyMgr.Instance.ShowTip("LimitGift9"); return; } }); if (limitedTimePackageItemModel.DicBuyPackage.ContainsKey(GiftID) && limitedTimePackageItemModel.DicBuyPackage[GiftID] >= BuyCountLimit) { @@ -130,7 +128,7 @@ m_Buy_Btn.gameObject.SetActive(true); m_BoughtObj.SetActive(false); } var items = giftpackage.gifts[0].items; var items = gift.gifts[0].items; for (int i = 0; i < items.Length; i++) { int type = i; @@ -162,6 +160,7 @@ } } } // m_Text_ActivityTimeTo.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime()); } } System/Vip/OSTimeLimitGiftModel.cs
@@ -51,6 +51,14 @@ } } public bool IsAdvance { get { return false; } } public override void Init() { var _openDay = 0; System/Welfare/ConsumeRebateModel.cs
@@ -14,7 +14,7 @@ PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent; OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; GlobalTimeEvent.Instance.secondEvent += SecondEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; OpenServerActivityCenter.Instance.Register(1, this); } @@ -26,7 +26,6 @@ public void OnPlayerLoginOk() { UpdateRedpoint(); rebateOpenDayIndex = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); } public override void UnInit() @@ -34,7 +33,7 @@ PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= PlayerDataRefreshInfoEvent; OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent; GlobalTimeEvent.Instance.secondEvent -= SecondEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; } public bool IsOpen @@ -61,7 +60,13 @@ } } int rebateOpenDayIndex = -1; public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.ConsumeRebate); } } public bool IsRebateGot(int day, int _index) { @@ -89,13 +94,15 @@ } } private void SecondEvent() private void DayResetEvent(int resetType) { var index = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); if (index != rebateOpenDayIndex) OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.ConsumeRebate, out operationBase)) { rebateOpenDayIndex = index; UpdateRedpoint(); if (resetType == operationBase.resetType) { UpdateRedpoint(); } } } @@ -189,7 +196,6 @@ { return; } rebateOpenDayIndex = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.ConsumeRebate, out operationBase)) { System/Welfare/ConsumeRebateWin.cs
@@ -20,8 +20,6 @@ [SerializeField] ScrollerController m_Controller; int rebateOpenDayIndex = -1; ConsumeRebateModel model { get { return ModelCenter.Instance.GetModel<ConsumeRebateModel>(); } } #region Built-in protected override void BindController() @@ -37,11 +35,9 @@ protected override void OnPreOpen() { Display(); rebateOpenDayIndex = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh; GlobalTimeEvent.Instance.secondEvent += SecondEvent; model.consumeRebateUpdateEvent += ConsumeRebateUpdateEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; } protected override void OnAfterOpen() @@ -50,10 +46,9 @@ protected override void OnPreClose() { GlobalTimeEvent.Instance.secondEvent -= SecondEvent; TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh; model.consumeRebateUpdateEvent -= ConsumeRebateUpdateEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; } protected override void OnAfterClose() @@ -86,23 +81,15 @@ m_Controller.m_Scorller.RefreshActiveCellViews(); } private void SecondEvent() private void DayResetEvent(int resetType) { var index = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); if (index != rebateOpenDayIndex) OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.ConsumeRebate, out operationBase)) { rebateOpenDayIndex = index; DisplayRebate(); } } private void OnServerOpenDayRefresh() { var index = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); if (index != rebateOpenDayIndex) { rebateOpenDayIndex = index; DisplayRebate(); if (resetType == operationBase.resetType) { DisplayRebate(); } } } System/Welfare/GiftPackageClass.cs
New file @@ -0,0 +1,106 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class GiftPackageClass : OperationBase { public List<Gift_Package> giftpackage1 = new List<Gift_Package>(); public bool TryGetGift(DateTime time, out Gift_Package flashSale) { flashSale = default(Gift_Package); var index = IndexOfTime(time); index = Mathf.Min(index, giftpackage1.Count - 1); if (index >= 0) { flashSale = giftpackage1[index]; } return index >= 0; } public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public override void Reset() { base.Reset(); giftpackage1.Clear(); } public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay()); if (startDate != endDate) { textBuilder.Append("—"); textBuilder.Append(endDate.ToDisplay()); } return textBuilder.ToString(); } public void ParsePackage(HAA12_tagMCFlashGiftbagInfo package) { for (int i = 0; i < package.GiftbagTypeCount; i++) { var GiftbagType = new Gift_Package(); var Giftbag = package.GiftbagTypeInfo[i]; GiftbagType.gifts = new GiftPackageGift[Giftbag.GiftbagCount]; for (int k = 0; k < Giftbag.GiftbagCount; k++) { var gift = new GiftPackageGift(); var pakGift = Giftbag.GiftbagInfo[k]; gift.id = (int)pakGift.GiftID; gift.limitNum = pakGift.BuyCountLimit; gift.rmb = (int)pakGift.RMB; gift.rmbOriginal = (int)pakGift.RMBOriginal; gift.OrderInfo = pakGift.OrderInfo; gift.OrderInfoLength = pakGift.OrderInfoLen; gift.items = new GiftPackageItem[pakGift.GiftItemCount]; for (int q = 0; q < pakGift.GiftItemCount; q++) { var item = new GiftPackageItem(); item.itemId = (int)pakGift.ItemInfo[q].ItemID; item.isBind = pakGift.ItemInfo[q].IsBind; item.itemCount = pakGift.ItemInfo[q].ItemCount; item.isMainItem = pakGift.ItemInfo[q].IsMainItem == 1; gift.items[q] = item; } GiftbagType.gifts[k] = gift; } giftpackage1.Add(GiftbagType); } } public struct Gift_Package { public GiftPackageGift[] gifts; } public struct GiftPackageGift { public int id; public int limitNum;//限购数 public int rmb;//人民币 public int rmbOriginal;//原价 public string OrderInfo;//商品编号 public int OrderInfoLength;//长度 public GiftPackageItem[] items; } public struct GiftPackageItem { public int itemId; public int itemCount; public int isBind; public bool isMainItem; } } } System/Welfare/GiftPackageClass.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 5051eb1dd73718a418d483105847c859 timeCreated: 1536803961 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Welfare/MultipleExpModel.cs
@@ -45,7 +45,7 @@ { for (int i = 0; i < operationBase.times.Count; i++) { if (operationBase.times[i].SideOfTime(TimeUtility.ServerNow) == -1) if (operationBase.times[i].CompareTime(TimeUtility.ServerNow) == -1) { SysNotifyMgr.Instance.ShowTip("ExpActivity_Ready", operation.GetMultipleCHS(), @@ -128,6 +128,14 @@ } } public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.MultipleExp); } } public void SetDayRemind() { if (multipleExpRedpoint.state == RedPointState.Simple) System/Welfare/MultipleRealmPointModel.cs
@@ -60,6 +60,14 @@ } } public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.MultipRealmPoint); } } private void CheckReconnect() { if (!(StageManager.Instance.CurrentStage is DungeonStage)) System/Welfare/OperationBase.cs
New file @@ -0,0 +1,308 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class OperationBase { public OperationDate startDate; public OperationDate endDate; public List<OperationTime> times = new List<OperationTime>(); /// <summary> /// 是否每日重置 /// </summary> public bool dayReset = false; /// <summary> /// 0-0点重置,1-5点重置 /// </summary> public int resetType = 0; public const int DayResetHour = 5; public bool stepTimeNotify = false; public bool stepDateNotify = false; public bool inTimeNotify = false; public bool inDateNotify = false; public int inAdvanceMinute = 0; public bool inAdvanceNotify = false; public int limitLv; public bool allDay { get { return times.Count <= 0; } } public int totalDays { get { return endDate - startDate; } } public bool InTime(DateTime time) { if (!InDay(time)) { return false; } if (allDay) { return InDayResetTime(time); } for (int i = 0; i < times.Count; i++) { if (times[i].InTime(time)) { return true; } } return false; } bool InDayResetTime(DateTime time) { if (!InDay(time)) { return false; } switch (resetType) { case 0: return true; case 1: var indexOfDays = IndexOfDays(time); if (indexOfDays == 0) { return time.Hour >= DayResetHour; } if (indexOfDays == totalDays) { return time.Hour < DayResetHour; } break; } return false; } public bool InDay(DateTime time) { OperationDate date = new OperationDate() { year = time.Year, month = time.Month, day = time.Day, }; return date >= startDate && date <= endDate; } protected int IndexOfDays(DateTime time) { if (!InDay(time)) { return -1; } DateTime s = new DateTime(startDate.year, startDate.month, startDate.day); return (time - s).Days; } protected virtual int IndexOfTime(DateTime time, int compare = 0) { if (allDay) { if (!dayReset) { return 0; } var index = IndexOfDays(time); switch (resetType) { case 0: return index; case 1: return time.Hour < DayResetHour ? Mathf.Max(0, index - 1) : index; default: return index; } } else { var index = 0; for (int i = 0; i < times.Count; i++) { if (times[i].InTime(time)) { index = i; break; } if (times[i].CompareTime(TimeUtility.ServerNow) == compare) { index = i; } } return index; } } public int GetSurplusTime(DateTime time) { var seconds = 0; if (InTime(time)) { if (allDay) { seconds += GetSurplusDayResetTime(time); } else { for (int i = 0; i < times.Count; i++) { if (times[i].InTime(time)) { seconds += times[i] - time; break; } } } } return seconds; } int GetSurplusDayResetTime(DateTime time) { switch (resetType) { case 0: return (int)(endDate.AddSeconds(24 * 60 * 60) - time).TotalSeconds; case 1: var endTime = new DateTime(endDate.year, endDate.month, endDate.day, DayResetHour, 0, 0); return (int)(endTime - time).TotalSeconds; } return 0; } public bool InAdvanceTime(DateTime time) { if (inAdvanceMinute <= 0) { return false; } var advanceSeconds = inAdvanceMinute * 60; var beforeStartSeconds = GetSecondsBeforeStart(time); return beforeStartSeconds > 0 && beforeStartSeconds <= advanceSeconds; } public int GetSecondsBeforeStart(DateTime time) { var seconds = 0; if (InTime(time)) { return 0; } if (allDay) { var startHour = 0; if (resetType == 0) { startHour = 0; } else if (resetType == 1) { startHour = DayResetHour; } var startTime = new DateTime(startDate.year, startDate.month, startDate.day, startHour, 0, 0); seconds = (int)(startTime - time).TotalSeconds; } else { var index = IndexOfDays(time); var date = startDate.AddDays(index); for (int i = 0; i < times.Count; i++) { var startTime = new DateTime(date.year, date.month, date.day, times[i].startHour, times[i].startMinute, 0); seconds = (int)(startTime - time).TotalSeconds; if (seconds > 0) { break; } } } return seconds; } public int GetResetSurplusTime() { var time = TimeUtility.ServerNow; if (!InTime(time)) { return 0; } var seconds = 0; if (allDay) { if (!dayReset) { return GetSurplusTime(time); } if (resetType == 0) { DateTime endOperationTime = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day, 0, 0, 0); endOperationTime = endOperationTime.AddDays(1); seconds = (int)(endOperationTime - TimeUtility.ServerNow).TotalSeconds; } else if (resetType == 1) { DateTime endOperationTime = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day, DayResetHour, 0, 0); if (time.Hour >= DayResetHour) { endOperationTime = endOperationTime.AddDays(1); } seconds = (int)(endOperationTime - TimeUtility.ServerNow).TotalSeconds; } } else { for (int i = 0; i < times.Count; i++) { if (times[i].InTime(time)) { DateTime endOperationTime = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day, times[i].endHour, times[i].endMinute, 0); seconds = (int)(endOperationTime - TimeUtility.ServerNow).TotalSeconds; break; } } } return seconds; } public virtual string ToDisplayTime() { return string.Empty; } public virtual void Reset() { stepTimeNotify = false; stepDateNotify = false; inTimeNotify = false; inDateNotify = false; dayReset = false; resetType = 0; limitLv = 0; inAdvanceNotify = false; inAdvanceMinute = 0; times.Clear(); } public virtual bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } } } System/Welfare/OperationBase.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: d7a32da08ee54c94aa3e7054a83a2446 timeCreated: 1536804239 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Welfare/OperationBossReborn.cs
New file @@ -0,0 +1,14 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class OperationBossReborn : OperationBase { public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } } } System/Welfare/OperationBossReborn.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 871a52c1c3a7e6140bb40344a7daa763 timeCreated: 1536803824 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Welfare/OperationConsumeRebate.cs
New file @@ -0,0 +1,91 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class OperationConsumeRebate : OperationBase { public List<Rebate> rebates = new List<Rebate>(); public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay()); if (startDate != endDate) { textBuilder.Append("—"); textBuilder.Append(endDate.ToDisplay()); } return textBuilder.ToString(); } public override void Reset() { base.Reset(); rebates.Clear(); } public void ParseRebate(HAA09_tagMCCostRebateInfo package) { for (int i = 0; i < package.AwardDays; i++) { var _rebate = package.AwardDayInfo[i]; Rebate rebate = new Rebate(); for (int k = 0; k < _rebate.AwardCount; k++) { RebateGrade rebateGrade = new RebateGrade(); rebateGrade.needGold = (int)_rebate.AwardInfo[k].NeedGold; rebateGrade.index = _rebate.AwardInfo[k].AwardIndex; for (int q = 0; q < _rebate.AwardInfo[k].AwardItemCount; q++) { var _item = _rebate.AwardInfo[k].AwardItem[q]; rebateGrade.items.Add(new Item() { itemId = (int)_item.ItemID, count = _item.ItemCount, isBind = _item.IsBind, }); } rebate.rebateGrades.Add(rebateGrade); } rebates.Add(rebate); } } public Rebate GetRebate(DateTime time) { if (rebates.Count == 0) { return null; } var index = Mathf.Min(rebates.Count - 1, IndexOfTime(time)); return rebates[index]; } public class Rebate { public List<RebateGrade> rebateGrades = new List<RebateGrade>(); } public class RebateGrade { public int needGold; public int index;//奖励索引 public List<Item> items = new List<Item>(); } public struct Item { public int itemId; public int count; public int isBind; } } } System/Welfare/OperationConsumeRebate.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 1bfa06ccdcd3afa4cafd3c186ce338e4 timeCreated: 1536803885 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Welfare/OperationFlashSale.cs
New file @@ -0,0 +1,103 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class OperationFlashSale : OperationBase { public List<FlashSale> flashShops = new List<FlashSale>(); public bool TryGetFlashSale(DateTime time, out FlashSale flashSale) { flashSale = default(FlashSale); var index = IndexOfTime(time, inAdvanceMinute > 0 ? -1 : 0); index = Mathf.Min(index, flashShops.Count - 1); if (index >= 0) { flashSale = flashShops[index]; } return index >= 0; } public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public override void Reset() { base.Reset(); flashShops.Clear(); } public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay()); if (startDate != endDate) { textBuilder.Append("—"); textBuilder.Append(endDate.ToDisplay()); } return textBuilder.ToString(); } public void ParsePackage(HAA11_tagMCSpringSaleInfo package) { for (int i = 0; i < package.ShopCount; i++) { var flashShop = new FlashSale(); var shop = package.ShopInfo[i]; flashShop.gifts = new FlashSaleGift[shop.GiftbagCount]; for (int k = 0; k < shop.GiftbagCount; k++) { var gift = new FlashSaleGift(); var pakGift = shop.GiftbagInfo[k]; gift.id = (int)pakGift.GiftID; gift.limitNum = pakGift.BuyCountLimit; gift.moneyNumber = (int)pakGift.MoneyNumber; gift.moneyType = pakGift.MoneyType; gift.moneyOriginal = (int)pakGift.MoneyOriginal; gift.items = new FlashSaleItem[pakGift.GiftItemCount]; for (int q = 0; q < pakGift.GiftItemCount; q++) { var item = new FlashSaleItem(); item.itemId = (int)pakGift.ItemInfo[q].ItemID; item.isBind = pakGift.ItemInfo[q].IsBind; item.itemCount = pakGift.ItemInfo[q].ItemCount; item.isMainItem = pakGift.ItemInfo[q].IsMainItem == 1; gift.items[q] = item; } flashShop.gifts[k] = gift; } flashShops.Add(flashShop); } } public struct FlashSale { public FlashSaleGift[] gifts; } public struct FlashSaleGift { public int id; public int limitNum; public int moneyType; public int moneyNumber; public int moneyOriginal; public FlashSaleItem[] items; } public struct FlashSaleItem { public int itemId; public int itemCount; public int isBind; public bool isMainItem; } } } System/Welfare/OperationFlashSale.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 72f839fb443541941a4b633bb0fbc1ce timeCreated: 1536804031 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Welfare/OperationMultiExp.cs
New file @@ -0,0 +1,55 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class OperationMultiExp : OperationBase { public int multiple; public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; if (allDay) { textBuilder.Append(Language.Get("OpenAllDay")); } else { if (startDate != endDate) { textBuilder.Append(Language.Get("EveryDay")); } for (int i = 0, n = times.Count; i < n; i++) { textBuilder.Append(times[i].ToString()); if (i < n - 1) { textBuilder.Append("、"); } } } return textBuilder.ToString(); } public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public string GetMultipleCHS() { if (multiple / 10000 == 2) { return Language.Get("Num_CHS_Double"); } else { return Language.Get(StringUtility.Contact("Num_CHS_", multiple / 10000)); } } } } System/Welfare/OperationMultiExp.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 7440669afa465c14dbc84fb90070c92a timeCreated: 1536804176 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Welfare/OperationMultipleRealmPoint.cs
New file @@ -0,0 +1,126 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class OperationMultipleRealmPoint : OperationBase { public int multiplePractice; //倍数 public int startHour = 5; public int startMinute = 0; public int startSecond = 0; public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public bool InActiveTime(DateTime time) { if (time.Year != startDate.year && time.Year != endDate.year) { return false; } if (startDate.year != endDate.year) { if (time.Year == startDate.year) { if (time.Month < startDate.month) { return false; } else if (time.Month == startDate.month && time.Day < startDate.day) { return false; } else if (time.Month == startDate.month && time.Day == startDate.day && time.Hour < startHour) { return false; } else if (time.Month == startDate.month && time.Day == startDate.day && time.Hour == startHour && time.Minute < startMinute) { return false; } else if (time.Month == startDate.month && time.Day == startDate.day && time.Hour == startHour && time.Minute == startMinute && time.Second < startSecond) { return false; } } else if (time.Year == endDate.year) { if (time.Month > endDate.month) { return false; } else if (time.Month == endDate.month && time.Day > endDate.day) { return false; } else if (time.Month == endDate.month && time.Day == endDate.day && time.Hour > startHour) { return false; } else if (time.Month == endDate.month && time.Day == endDate.day && time.Hour == startHour && time.Minute > startMinute) { return false; } else if (time.Month == endDate.month && time.Day == endDate.day && time.Hour == startHour && time.Minute == startMinute && time.Second > startSecond) { return false; } } } else { if (time.Month < startDate.month || (time.Month == startDate.month && time.Day < startDate.day) || (time.Month == startDate.month && time.Day == startDate.day && time.Hour < startHour) || (time.Month == startDate.month && time.Day == startDate.day && time.Hour == startHour && time.Minute < startMinute) || (time.Month == startDate.month && time.Day == startDate.day && time.Hour == startHour && time.Minute == startMinute) && time.Second < startSecond) { return false; } if (time.Month > endDate.month || (time.Month == endDate.month && time.Day > endDate.day) || (time.Month == endDate.month && time.Day == endDate.day && time.Hour > startHour) || (time.Month == endDate.month && time.Day == endDate.day && time.Hour == startHour && time.Minute > startMinute) || (time.Month == endDate.month && time.Day == endDate.day && time.Hour == startHour && time.Minute == startMinute) && time.Second > startSecond) { return false; } } return true; } public int GetRemainTime(DateTime time) { var seconds = 0; if (InActiveTime(time)) { DateTime endTime = new DateTime(endDate.year, endDate.month, endDate.day, startHour, 0, 0); seconds = (int)(endTime - time).TotalSeconds; } return seconds; } } } System/Welfare/OperationMultipleRealmPoint.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 7b9f0fb0bdae59749b657f227e556d59 timeCreated: 1536803704 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Welfare/OperationTimeHepler.cs
@@ -15,11 +15,13 @@ public event Action<Operation> operationServerCloseEvent;//特殊情况下触发 public event Action<Operation, int> operationEndEvent;//活动结束时间触发 第二个参数0--过活动时间触发 1--过活动天触发 public event Action<Operation, int> operationStartEvent;//活动开始时间并且满足开启条件触发 第二个参数0--活动时间触发 1--活动天触发 public event Action<Operation> operationAdvanceEvent;//活动提前开放事件 public event Action<int> dayResetEvent;//活动重置事件0-0点 1-5点 public event Action<Operation> operationAdvanceEvent;//活动在提前开启的时间内 public OperationTimeHepler() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; GlobalTimeEvent.Instance.secondEvent += SecondEvent; TimeMgr.Instance.OnHourEvent += HourEvent; } private void BeforePlayerDataInitializeEvent() @@ -38,8 +40,8 @@ if (operationDict.ContainsKey((Operation)i)) { var operation = operationDict[(Operation)i]; if (operation.InDay(TimeUtility.ServerNow) && operation.SatisfyOpenCondition() && !operation.inDateNotify) if (!operation.inDateNotify && operation.SatisfyOpenCondition() && operation.InDay(TimeUtility.ServerNow)) { operation.inDateNotify = true; operation.stepDateNotify = false; @@ -49,7 +51,7 @@ operationStartEvent((Operation)i, 1); } } else if (!operation.InDay(TimeUtility.ServerNow) && !operation.stepDateNotify) else if (!operation.stepDateNotify && !operation.InDay(TimeUtility.ServerNow)) { operation.inDateNotify = false; operation.stepDateNotify = true; @@ -59,22 +61,22 @@ operationEndEvent((Operation)i, 1); } } if (operation.InTime(TimeUtility.ServerNow) && operation.SatisfyOpenCondition() && !operation.inTimeNotify) if (!operation.inTimeNotify && operation.SatisfyOpenCondition() && operation.InTime(TimeUtility.ServerNow)) { operation.inTimeNotify = true; operation.stepTimeNotify = false; operation.inAdvanceNotify = false; DebugEx.LogFormat("{0} 活动时间开始", (Operation)i); if (operationStartEvent != null) { operationStartEvent((Operation)i, 0); } } else if (!operation.InTime(TimeUtility.ServerNow) && !operation.stepTimeNotify) else if (!operation.stepTimeNotify && !operation.InTime(TimeUtility.ServerNow)) { operation.inTimeNotify = false; operation.stepTimeNotify = true; operation.inAdvanceNotify = false; DebugEx.LogFormat("{0} 活动时间结束", (Operation)i); if (operationEndEvent != null) { @@ -82,15 +84,33 @@ } } if (!operation.inAdvanceNotify && operation.InAdvanceTime(TimeUtility.ServerNow)) if (!operation.inAdvanceNotify && operation.SatisfyOpenCondition() && operation.InAdvanceTime(TimeUtility.ServerNow)) { operation.inAdvanceNotify = true; DebugEx.LogFormat("{0} 活动提前开启", (Operation)i); if (operationAdvanceEvent != null) { operationAdvanceEvent((Operation)i); } } } } } private void HourEvent() { if (!(StageManager.Instance.CurrentStage is DungeonStage)) { return; } if (TimeUtility.Hour == 0 && dayResetEvent != null) { dayResetEvent(0); } if (TimeUtility.Hour == 5 && dayResetEvent != null) { dayResetEvent(1); } } @@ -102,22 +122,9 @@ { OperationBase operation = null; operationDict.TryGetValue(Operation.MultipleExp, out operation); if (package.StartDate == null || package.StartDate.Equals(string.Empty) || package.EndtDate == null || package.EndtDate.Equals(string.Empty)) if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { if (operationDict.ContainsKey(Operation.MultipleExp)) { operationDict.Remove(Operation.MultipleExp); } if (operationServerCloseEvent != null) { operationServerCloseEvent(Operation.MultipleExp); } if (operationEndEvent != null) { operationEndEvent(Operation.MultipleExp, 0); operationEndEvent(Operation.MultipleExp, 1); } ForceStopOperation(Operation.MultipleExp); } else { @@ -131,17 +138,10 @@ operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; (operation as OperationMultiExp).multiple = (int)package.AddExpRate + 10000; if (package.ActivityTimeCount == 0) for (int i = 0; i < package.ActivityTimeCount; i++) { operation.allDay = true; } else { for (int i = 0; i < package.ActivityTimeCount; i++) { operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } if (operationTimeUpdateEvent != null) { @@ -149,6 +149,7 @@ } } } /// <summary> /// 消费返利 /// </summary> @@ -157,22 +158,9 @@ { OperationBase operationBase = null; operationDict.TryGetValue(Operation.ConsumeRebate, out operationBase); if (package.StartDate == null || package.StartDate.Equals(string.Empty) || package.EndtDate == null || package.EndtDate.Equals(string.Empty)) if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { if (operationDict.ContainsKey(Operation.ConsumeRebate)) { operationDict.Remove(Operation.ConsumeRebate); } if (operationServerCloseEvent != null) { operationServerCloseEvent(Operation.ConsumeRebate); } if (operationEndEvent != null) { operationEndEvent(Operation.ConsumeRebate, 0); operationEndEvent(Operation.ConsumeRebate, 1); } ForceStopOperation(Operation.ConsumeRebate); } else { @@ -186,37 +174,15 @@ operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.allDay = true; operation.dayReset = package.IsDayReset == 1; for (int i = 0; i < package.AwardDays; i++) { var _rebate = package.AwardDayInfo[i]; OperationConsumeRebate.Rebate rebate = new OperationConsumeRebate.Rebate(); for (int k = 0; k < _rebate.AwardCount; k++) { OperationConsumeRebate.RebateGrade rebateGrade = new OperationConsumeRebate.RebateGrade(); rebateGrade.needGold = (int)_rebate.AwardInfo[k].NeedGold; rebateGrade.index = _rebate.AwardInfo[k].AwardIndex; for (int q = 0; q < _rebate.AwardInfo[k].AwardItemCount; q++) { var _item = _rebate.AwardInfo[k].AwardItem[q]; rebateGrade.items.Add(new OperationConsumeRebate.Item() { itemId = (int)_item.ItemID, count = _item.ItemCount, isBind = _item.IsBind, }); } rebate.rebateGrades.Add(rebateGrade); } operation.rebates.Add(rebate); } operation.ParseRebate(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.ConsumeRebate); } } } /// <summary> /// 限时特惠 /// </summary> @@ -227,19 +193,7 @@ operationDict.TryGetValue(Operation.FlashSale, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { if (operationDict.ContainsKey(Operation.FlashSale)) { operationDict.Remove(Operation.FlashSale); } if (operationServerCloseEvent != null) { operationServerCloseEvent(Operation.FlashSale); } if (operationEndEvent != null) { operationEndEvent(Operation.FlashSale, 0); operationEndEvent(Operation.FlashSale, 1); } ForceStopOperation(Operation.FlashSale); } else { @@ -253,80 +207,32 @@ operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dateEnumerator = new OperationDateEnumerator(operation.startDate, operation.endDate); operation.dayReset = package.IsDayReset == 1; if (package.ActivityTimeCount == 0) operation.inAdvanceMinute = package.AdvanceMinutes; for (int i = 0; i < package.ActivityTimeCount; i++) { operation.allDay = true; operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } else { for (int i = 0; i < package.ActivityTimeCount; i++) { operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } } for (int i = 0; i < package.ShopCount; i++) { var flashShop = new OperationFlashSale.FlashSale(); var shop = package.ShopInfo[i]; flashShop.gifts = new OperationFlashSale.FlashSaleGift[shop.GiftbagCount]; for (int k = 0; k < shop.GiftbagCount; k++) { var gift = new OperationFlashSale.FlashSaleGift(); var pakGift = shop.GiftbagInfo[k]; gift.id = (int)pakGift.GiftID; gift.limitNum = pakGift.BuyCountLimit; gift.moneyNumber = (int)pakGift.MoneyNumber; gift.moneyType = pakGift.MoneyType; gift.moneyOriginal = (int)pakGift.MoneyOriginal; gift.items = new OperationFlashSale.FlashSaleItem[pakGift.GiftItemCount]; for (int q = 0; q < pakGift.GiftItemCount; q++) { var item = new OperationFlashSale.FlashSaleItem(); item.itemId = (int)pakGift.ItemInfo[q].ItemID; item.isBind = pakGift.ItemInfo[q].IsBind; item.itemCount = pakGift.ItemInfo[q].ItemCount; item.isMainItem = pakGift.ItemInfo[q].IsMainItem == 1; gift.items[q] = item; } flashShop.gifts[k] = gift; } operation.flashShops.Add(flashShop); } operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.FlashSale); } } } /// <summary> /// 限时礼包 /// </summary> /// <param name="package"></param> /// public void UpdateGiftPackage(HAA12_tagMCFlashGiftbagInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.GiftPackage, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { if (operationDict.ContainsKey(Operation.GiftPackage)) { operationDict.Remove(Operation.GiftPackage); } if (operationServerCloseEvent != null) { operationServerCloseEvent(Operation.GiftPackage); } if (operationEndEvent != null) { operationEndEvent(Operation.GiftPackage, 0); operationEndEvent(Operation.GiftPackage, 1); } ForceStopOperation(Operation.GiftPackage); } else { @@ -341,48 +247,13 @@ operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; if (package.ActivityTimeCount == 0) operation.inAdvanceMinute = package.AdvanceMinutes; for (int i = 0; i < package.ActivityTimeCount; i++) { operation.allDay = true; operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } else { for (int i = 0; i < package.ActivityTimeCount; i++) { operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } } for (int i = 0; i < package.GiftbagTypeCount; i++) { var GiftbagType = new GiftPackageClass.Gift_Package(); var Giftbag = package.GiftbagTypeInfo[i]; GiftbagType.gifts = new GiftPackageClass.GiftPackageGift[Giftbag.GiftbagCount]; for (int k = 0; k < Giftbag.GiftbagCount; k++) { var gift = new GiftPackageClass.GiftPackageGift(); var pakGift = Giftbag.GiftbagInfo[k]; gift.id = (int)pakGift.GiftID; gift.limitNum = pakGift.BuyCountLimit; gift.rmb = (int)pakGift.RMB; gift.rmbOriginal = (int)pakGift.RMBOriginal; gift.OrderInfo = pakGift.OrderInfo; gift.OrderInfoLength = pakGift.OrderInfoLen; gift.items = new GiftPackageClass.GiftPackageItem[pakGift.GiftItemCount]; for (int q = 0; q < pakGift.GiftItemCount; q++) { var item = new GiftPackageClass.GiftPackageItem(); item.itemId = (int)pakGift.ItemInfo[q].ItemID; item.isBind = pakGift.ItemInfo[q].IsBind; item.itemCount = pakGift.ItemInfo[q].ItemCount; item.isMainItem = pakGift.ItemInfo[q].IsMainItem == 1; gift.items[q] = item; } GiftbagType.gifts[k] = gift; } operation.giftpackage1.Add(GiftbagType); } operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.GiftPackage); @@ -395,21 +266,7 @@ { if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { if (operationDict.ContainsKey(Operation.BossReborn)) { operationDict.Remove(Operation.BossReborn); } if (operationServerCloseEvent != null) { operationServerCloseEvent(Operation.BossReborn); } if (operationEndEvent != null) { operationEndEvent(Operation.BossReborn, 0); operationEndEvent(Operation.BossReborn, 1); } ForceStopOperation(Operation.BossReborn); } else { @@ -423,10 +280,9 @@ operationBase.Reset(); operationBase.limitLv = package.LimitLV; operationBase.allDay = true; operationBase.startDate = ParseOperationDate(package.StartDate); operationBase.endDate = ParseOperationDate(package.EndtDate); operationBase.resetType = package.ResetType; ModelCenter.Instance.GetModel<BossRebornModel>().UpdateTaskBaseInfos(package.TaskInfo); } } @@ -439,22 +295,9 @@ { OperationBase operation = null; operationDict.TryGetValue(Operation.FairyCeremony, out operation); if (package.StartDate == null || package.StartDate.Equals(string.Empty) || package.EndtDate == null || package.EndtDate.Equals(string.Empty)) if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { if (operationDict.ContainsKey(Operation.FairyCeremony)) { operationDict.Remove(Operation.FairyCeremony); } if (operationServerCloseEvent != null) { operationServerCloseEvent(Operation.FairyCeremony); } if (operationEndEvent != null) { operationEndEvent(Operation.FairyCeremony, 0); operationEndEvent(Operation.FairyCeremony, 1); } ForceStopOperation(Operation.FairyCeremony); } else { @@ -467,7 +310,6 @@ operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.allDay = true; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.FairyCeremony); @@ -483,22 +325,9 @@ { OperationBase operation = null; operationDict.TryGetValue(Operation.MultipRealmPoint, out operation); if (package.StartDate == null || package.StartDate.Equals(string.Empty) || package.EndtDate == null || package.EndtDate.Equals(string.Empty)) if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { if (operationDict.ContainsKey(Operation.MultipRealmPoint)) { operationDict.Remove(Operation.MultipRealmPoint); } if (operationServerCloseEvent != null) { operationServerCloseEvent(Operation.MultipRealmPoint); } if (operationEndEvent != null) { operationEndEvent(Operation.MultipRealmPoint, 0); operationEndEvent(Operation.MultipRealmPoint, 1); } ForceStopOperation(Operation.MultipRealmPoint); } else { @@ -511,12 +340,28 @@ operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.allDay = true; (operation as OperationMultipleRealmPoint).multiplePractice = package.Multiple; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.MultipRealmPoint); } } } void ForceStopOperation(Operation operationType) { if (operationDict.ContainsKey(operationType)) { operationDict.Remove(operationType); } if (operationServerCloseEvent != null) { operationServerCloseEvent(operationType); } if (operationEndEvent != null) { operationEndEvent(operationType, 0); operationEndEvent(operationType, 1); } } @@ -545,17 +390,6 @@ return false; } public bool SideOfTime(Operation type, out int side) { side = 0; OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.SideOfTime(TimeUtility.ServerNow, out side); } return false; } public int GetOperationSurplusTime(Operation type) { OperationBase operation; @@ -566,12 +400,42 @@ return 0; } public bool InOperationAdvance(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.InAdvanceTime(TimeUtility.ServerNow); } return false; } public int GetOperationSecondsBeforeStart(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.GetSecondsBeforeStart(TimeUtility.ServerNow); } return 0; } public bool SatisfyOpenCondition(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.SatisfyOpenCondition() && InOperationTime(type); } return false; } public bool SatisfyAdvanceCondition(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.SatisfyOpenCondition() && InOperationAdvance(type); } return false; } @@ -600,16 +464,6 @@ } } public int IndexOfOperationDays(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.IndexOfOpenDay(TimeUtility.ServerNow); } return -1; } OperationDate ParseOperationDate(string date) { string[] dateArray = date.Split('-'); @@ -620,6 +474,24 @@ year = int.Parse(dateArray[0].Trim()), month = int.Parse(dateArray[1].Trim()), day = int.Parse(dateArray[2].Trim()) }; } else if (dateArray != null && dateArray.Length == 1) { var time = TimeUtility.openServerTime; if (time.Equals(default(DateTime))) { DebugEx.Log("服务期开服时间下发顺序有问题"); } var days = 0; int.TryParse(date, out days); days = Mathf.Max(1, days); time = time.AddDays(days - 1); return new OperationDate() { year = time.Year, month = time.Month, day = time.Day, }; } return default(OperationDate); @@ -644,51 +516,6 @@ } } public class OperationDateEnumerator : IEnumerable, IEnumerator { OperationDate start; OperationDate end; public int index = -1; public OperationDateEnumerator(OperationDate _start,OperationDate _end) { this.start = _start; this.end = _end; } public object Current { get { var date = start; date.day += index; return date; } } public IEnumerator GetEnumerator() { return (IEnumerator)this; } public bool MoveNext() { index++; bool isIn = index <= (start - end); if (!isIn) { GetEnumerator().Reset(); } return isIn; } public void Reset() { index = -1; } } public struct OperationDate { public int year; @@ -705,10 +532,57 @@ return !(x == y); } public static bool operator >(OperationDate x, OperationDate y) { if (x.year > y.year) { return true; } if (x.year == y.year) { if (x.month > y.month) { return true; } if (x.month == y.month) { return x.day > y.day; } } return false; } public static bool operator <(OperationDate x, OperationDate y) { return !(x > y) && x != y; } public static bool operator >=(OperationDate x, OperationDate y) { return x > y || x == y; } public static bool operator <=(OperationDate x, OperationDate y) { return x < y || x == y; } public DateTime AddSeconds(int _seconds) { DateTime d = new DateTime(year, month, day); return d.AddTicks(_seconds * TimeSpan.TicksPerSecond); } public OperationDate AddDays(int _days) { DateTime d = new DateTime(year, month, day); d = d.AddDays(_days); return new OperationDate() { year = d.Year, month = d.Month, day = d.Day, }; } public string ToDisplay(bool showYear = true) @@ -735,18 +609,10 @@ public bool InTime(DateTime time) { if (time.Hour < startHour || (time.Hour == startHour && time.Minute < startMinute)) { return false; } if (time.Hour > endHour || (time.Hour == endHour && time.Minute >= endMinute)) { return false; } return true; return CompareTime(time) == 0; } public int SideOfTime(DateTime time) public int CompareTime(DateTime time) { if (time.Hour < startHour || (time.Hour == startHour && time.Minute < startMinute)) { @@ -769,670 +635,6 @@ { DateTime d = new DateTime(y.Year, y.Month, y.Day, x.endHour, x.endMinute, 0); return Mathf.Max(0, (int)(d - y).TotalSeconds); } } public class OperationBase { public OperationDate startDate; public OperationDate endDate; public List<OperationTime> times = new List<OperationTime>(); public OperationDateEnumerator dateEnumerator; public bool allDay = false; public bool stepTimeNotify = false; public bool stepDateNotify = false; public bool inTimeNotify = false; public bool inDateNotify = false; public bool inAdvanceNotify = false; public int inAdvanceSeconds = 0; public int limitLv; public bool InTime(DateTime time) { if (!InDay(time)) { return false; } if (allDay) { return true; } for (int i = 0; i < times.Count; i++) { if (times[i].InTime(time)) { return true; } } return false; } public bool SideOfTime(DateTime time, out int side) { side = 0; if (!InDay(time)) { return false; } if (allDay) { side = 0; return true; } for (int i = 0; i < times.Count; i++) { side = times[i].SideOfTime(time); } return true; } public bool InDay(DateTime time) { if (time.Year != startDate.year && time.Year != endDate.year) { return false; } if (startDate.year != endDate.year) { if (time.Year == startDate.year) { if (time.Month < startDate.month) { return false; } else if (time.Month == startDate.month && time.Day < startDate.day) { return false; } } else if (time.Year == endDate.year) { if (time.Month > endDate.month) { return false; } else if (time.Month == endDate.month && time.Day > endDate.day) { return false; } } } else { if (time.Month < startDate.month || (time.Month == startDate.month && time.Day < startDate.day)) { return false; } if (time.Month > endDate.month || (time.Month == endDate.month && time.Day > endDate.day)) { return false; } } return true; } public int IndexOfOpenDay(DateTime time) { if (!InDay(time)) { return -1; } DateTime s = new DateTime(startDate.year, startDate.month, startDate.day); return (time - s).Days; } public int IndexOfOpenTime(DateTime time) { if (!InTime(time)) { return -1; } if (allDay) { return 0; } for (int i = 0; i < times.Count; i++) { if (times[i].InTime(time)) { return i; } } return -1; } public bool InAdvanceTime(DateTime time) { if (InTime(time) || inAdvanceSeconds <= 0) { return false; } var seconds = 0; if (TryGetInAdvanceSurplusSecond(time, out seconds)) { return seconds < inAdvanceSeconds; } return false; } public bool TryGetInAdvanceSurplusSecond(DateTime time, out int seconds) { seconds = 0; if (InTime(time)) { return false; } if (allDay) { var startTime = new DateTime(startDate.year, startDate.month, startDate.day); seconds = (int)(startTime - time).TotalSeconds; } else { if (dateEnumerator != null) { foreach (OperationDate date in dateEnumerator) { for (int i = 0; i < times.Count; i++) { var startTime = new DateTime(date.year, date.month, date.day, times[i].startHour, times[i].startMinute, 0); seconds = (int)(startTime - time).TotalSeconds; if (seconds > 0) { break; } } if (seconds > 0) { dateEnumerator.Reset(); break; } } } } return seconds > 0; } public int GetSurplusTime(DateTime time) { var seconds = 0; if (InTime(time)) { if (allDay) { seconds += (int)(endDate.AddSeconds(24 * 60 * 60) - time).TotalSeconds; } else { for (int i = 0; i < times.Count; i++) { if (times[i].InTime(time)) { seconds += times[i] - time; break; } } } } return seconds; } public virtual string ToDisplayTime() { return string.Empty; } public virtual void Reset() { stepTimeNotify = false; stepDateNotify = false; inTimeNotify = false; inDateNotify = false; inAdvanceNotify = false; allDay = false; inAdvanceSeconds = 0; limitLv = 0; times.Clear(); } public virtual bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } } public class OperationMultiExp : OperationBase { public int multiple; public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; if (allDay) { textBuilder.Append(Language.Get("OpenAllDay")); } else { if (startDate != endDate) { textBuilder.Append(Language.Get("EveryDay")); } for (int i = 0, n = times.Count; i < n; i++) { textBuilder.Append(times[i].ToString()); if (i < n - 1) { textBuilder.Append("、"); } } } return textBuilder.ToString(); } public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public string GetMultipleCHS() { if (multiple / 10000 == 2) { return Language.Get("Num_CHS_Double"); } else { return Language.Get(StringUtility.Contact("Num_CHS_", multiple / 10000)); } } } public class OperationFlashSale : OperationBase { public bool dayReset = false; public List<FlashSale> flashShops = new List<FlashSale>(); public int IndexOfFlashShop() { if (flashShops.Count == 1) { return 0; } var _timeIndex = IndexOfOpenTime(TimeUtility.ServerNow); if (_timeIndex == -1) { return -1; } return Mathf.Min(flashShops.Count - 1, allDay ? 0 : _timeIndex); } public FlashSaleGift GetFlashSaleGift(int _index, int _id) { if (_index < flashShops.Count) { for (int i = 0; i < flashShops[_index].gifts.Length; i++) { if (flashShops[_index].gifts[i].id == _id) { return flashShops[_index].gifts[i]; } } } return default(FlashSaleGift); } public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public override void Reset() { base.Reset(); flashShops.Clear(); } public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay()); if (startDate != endDate) { textBuilder.Append("—"); textBuilder.Append(endDate.ToDisplay()); } return textBuilder.ToString(); } public int GetSurplusTime(int index) { if (!InTime(TimeUtility.ServerNow)) { return 0; } var seconds = 0; if (times.Count == 0) { DateTime endOperationTime = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day, 0, 0, 0); endOperationTime = endOperationTime.AddDays(1); seconds = (int)(endOperationTime - TimeUtility.ServerNow).TotalSeconds; } if (index >= 0 && index < times.Count) { var _endTime = times[index]; DateTime endOperationTime = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day, _endTime.endHour, _endTime.endMinute, 0); seconds = (int)(endOperationTime - TimeUtility.ServerNow).TotalSeconds; } return seconds; } public struct FlashSale { public FlashSaleGift[] gifts; } public struct FlashSaleGift { public int id; public int limitNum; public int moneyType; public int moneyNumber; public int moneyOriginal; public FlashSaleItem[] items; } public struct FlashSaleItem { public int itemId; public int itemCount; public int isBind; public bool isMainItem; } } public class GiftPackageClass : OperationBase { public bool dayReset = false; public List<Gift_Package> giftpackage1 = new List<Gift_Package>(); public int IndexOfFlashShop() { if (giftpackage1.Count == 1) { return 0; } var _timeIndex = IndexOfOpenTime(TimeUtility.ServerNow); if (_timeIndex == -1) { return -1; } return Mathf.Min(giftpackage1.Count - 1, allDay ? 0 : _timeIndex); } public GiftPackageGift GetFlashSaleGift(int _index, int _id) { if (_index < giftpackage1.Count) { for (int i = 0; i < giftpackage1[_index].gifts.Length; i++) { if (giftpackage1[_index].gifts[i].id == _id) { return giftpackage1[_index].gifts[i]; } } } return default(GiftPackageGift); } public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public override void Reset() { base.Reset(); giftpackage1.Clear(); } public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay()); if (startDate != endDate) { textBuilder.Append("—"); textBuilder.Append(endDate.ToDisplay()); } return textBuilder.ToString(); } public struct Gift_Package { public GiftPackageGift[] gifts; } public struct GiftPackageGift { public int id; public int limitNum;//限购数 public int rmb;//人民币 public int rmbOriginal;//原价 public string OrderInfo;//商品编号 public int OrderInfoLength;//长度 public GiftPackageItem[] items; } public struct GiftPackageItem { public int itemId; public int itemCount; public int isBind; public bool isMainItem; } } public class OperationConsumeRebate : OperationBase { public bool dayReset = false; public List<Rebate> rebates = new List<Rebate>(); public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public override string ToDisplayTime() { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(startDate.ToDisplay()); if (startDate != endDate) { textBuilder.Append("—"); textBuilder.Append(endDate.ToDisplay()); } return textBuilder.ToString(); } public override void Reset() { base.Reset(); rebates.Clear(); } public Rebate GetRebate(DateTime time) { if (rebates.Count == 0) { return null; } var index = IndexOfOpenDay(time); if (index != -1 && index < rebates.Count) { return rebates[index]; } return rebates[rebates.Count - 1]; } public class Rebate { public List<RebateGrade> rebateGrades = new List<RebateGrade>(); } public class RebateGrade { public int needGold; public int index;//奖励索引 public List<Item> items = new List<Item>(); } public struct Item { public int itemId; public int count; public int isBind; } } public class OperationBossReborn : OperationBase { public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } } public class OperationMultipleRealmPoint : OperationBase { public int multiplePractice; //倍数 public int startHour = 5; public int startMinute = 0; public int startSecond = 0; public override bool SatisfyOpenCondition() { return PlayerDatas.Instance.baseData.LV >= limitLv; } public bool InActiveTime(DateTime time) { if (time.Year != startDate.year && time.Year != endDate.year) { return false; } if (startDate.year != endDate.year) { if (time.Year == startDate.year) { if (time.Month < startDate.month) { return false; } else if (time.Month == startDate.month && time.Day < startDate.day) { return false; } else if(time.Month == startDate.month && time.Day == startDate.day && time.Hour < startHour) { return false; } else if (time.Month == startDate.month && time.Day == startDate.day && time.Hour == startHour && time.Minute < startMinute) { return false; } else if (time.Month == startDate.month && time.Day == startDate.day && time.Hour == startHour && time.Minute == startMinute && time.Second < startSecond) { return false; } } else if (time.Year == endDate.year) { if (time.Month > endDate.month) { return false; } else if (time.Month == endDate.month && time.Day > endDate.day) { return false; } else if(time.Month == endDate.month && time.Day == endDate.day && time.Hour > startHour) { return false; } else if (time.Month == endDate.month && time.Day == endDate.day && time.Hour == startHour && time.Minute > startMinute) { return false; } else if (time.Month == endDate.month && time.Day == endDate.day && time.Hour == startHour && time.Minute == startMinute && time.Second > startSecond) { return false; } } } else { if (time.Month < startDate.month || (time.Month == startDate.month && time.Day < startDate.day) || (time.Month == startDate.month && time.Day == startDate.day && time.Hour < startHour) || (time.Month == startDate.month && time.Day == startDate.day && time.Hour == startHour && time.Minute < startMinute) || (time.Month == startDate.month && time.Day == startDate.day && time.Hour == startHour && time.Minute == startMinute) && time.Second < startSecond) { return false; } if (time.Month > endDate.month || (time.Month == endDate.month && time.Day > endDate.day) || (time.Month == endDate.month && time.Day == endDate.day && time.Hour > startHour) || (time.Month == endDate.month && time.Day == endDate.day && time.Hour == startHour && time.Minute > startMinute) || (time.Month == endDate.month && time.Day == endDate.day && time.Hour == startHour && time.Minute == startMinute) && time.Second > startSecond) { return false; } } return true; } public int GetRemainTime(DateTime time) { var seconds = 0; if (InActiveTime(time)) { DateTime endTime = new DateTime(endDate.year, endDate.month, endDate.day, startHour, 0, 0); seconds = (int)(endTime - time).TotalSeconds; } return seconds; } } UI/Effect/TimeMgr.cs
@@ -7,9 +7,9 @@ { private Dictionary<Component, TimeItem> timeItems = new Dictionary<Component, TimeItem>(); private List<TimeItem> timeItemList = new List<TimeItem>(); private int m_LastRecordHour = -1; private int m_LastRecordMinute = -1; public int m_LastRecordDay = -1; private int hourBuff = -1; private int minuteBuff = -1; public int dayBuff = -1; public event Action OnDayEvent; public event Action OnHourEvent; public event Action OnMinuteEvent; @@ -18,29 +18,29 @@ { try { if (m_LastRecordDay != TimeUtility.ServerNow.Day) if (dayBuff != TimeUtility.ServerNow.Day) { if (OnDayEvent != null) { OnDayEvent(); } m_LastRecordDay = TimeUtility.ServerNow.Day; dayBuff = TimeUtility.ServerNow.Day; } if (m_LastRecordHour != TimeUtility.ServerNow.Hour) if (hourBuff != TimeUtility.ServerNow.Hour) { if (OnHourEvent != null) { OnHourEvent(); } m_LastRecordHour = TimeUtility.ServerNow.Hour; hourBuff = TimeUtility.ServerNow.Hour; } if (m_LastRecordMinute != TimeUtility.ServerNow.Minute) if (minuteBuff != TimeUtility.ServerNow.Minute) { if (OnMinuteEvent != null) { OnMinuteEvent(); } m_LastRecordMinute = TimeUtility.ServerNow.Minute; minuteBuff = TimeUtility.ServerNow.Minute; } } catch (Exception e)