using System; using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; namespace vnxbqy.UI { public class OperationTimeHepler : Singleton { public Dictionary operationDict = new Dictionary(); public static StringBuilder textBuilder = new StringBuilder(); public event Action operationTimeUpdateEvent; public event Action operationServerCloseEvent;//特殊情况下触发 public event Action operationEndEvent;//活动结束时间触发 第二个参数0--过活动时间触发 1--过活动天触发 public event Action operationStartEvent;//活动开始时间并且满足开启条件触发 第二个参数0--活动时间触发 1--活动天触发 public event Action dayResetEvent;//活动重置事件0-0点 1-5点 public event Action operationAdvanceEvent;//活动在提前开启的时间内 public OperationTimeHepler() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; GlobalTimeEvent.Instance.secondEvent += SecondEvent; TimeMgr.Instance.OnHourEvent += HourEvent; } private void BeforePlayerDataInitializeEvent() { operationDict.Clear(); } private void SecondEvent() { if (!ConfigInitiator.done) return; if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon)) { return; } for (int i = 0; i < (int)Operation.max; i++) { if (operationDict.ContainsKey((Operation)i)) { var operation = operationDict[(Operation)i]; if (!operation.inDateNotify && operation.SatisfyOpenCondition() && operation.InDay(TimeUtility.ServerNow)) { operation.inDateNotify = true; operation.stepDateNotify = false; DebugEx.LogFormat("{0} 活动天开始", (Operation)i); if (operationStartEvent != null) { operationStartEvent((Operation)i, 1); } } else if (!operation.stepDateNotify && !operation.InDay(TimeUtility.ServerNow)) { operation.inDateNotify = false; operation.stepDateNotify = true; DebugEx.LogFormat("{0} 活动天结束", (Operation)i); if (operationEndEvent != null) { operationEndEvent((Operation)i, 1); } } if (!operation.inTimeNotify && operation.SatisfyOpenCondition() && operation.InTime(TimeUtility.ServerNow)) { operation.inTimeNotify = true; operation.stepTimeNotify = false; DebugEx.LogFormat("{0} 活动时间开始", (Operation)i); if (operationStartEvent != null) { operationStartEvent((Operation)i, 0); } } 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) { operationEndEvent((Operation)i, 0); } } 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 (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon)) { return; } if (TimeUtility.Hour == 0 && dayResetEvent != null) { dayResetEvent(0); } if (TimeUtility.Hour == 5 && dayResetEvent != null) { dayResetEvent(1); } } /// /// 多倍经验 /// /// public void UpdateMultipleExp(HAC06_tagGCMultiExpRateInfo package) { OperationBase operation = null; operationDict.TryGetValue(Operation.MultipleExp, out operation); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.MultipleExp); } else { if (operation == null) { operation = new OperationMultiExp(); operationDict.Add(Operation.MultipleExp, operation); } operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; (operation as OperationMultiExp).multiple = (int)package.AddExpRate + 10000; for (int i = 0; i < package.ActivityTimeCount; i++) { operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.MultipleExp); } } } /// /// 消费返利 /// /// public void UpdateConsumeRebate(HAA09_tagMCCostRebateInfo package) { OperationBase operationBase = null; Operation operationType = Operation.ConsumeRebate; switch (package.ActNum) { case 10: operationType = Operation.ConsumeRebate; break; case 30: operationType = Operation.HolidayConsumeRebate; break; } operationDict.TryGetValue(operationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(operationType); } else { if (operationBase == null) { operationBase = new OperationConsumeRebate(); operationDict.Add(operationType, operationBase); } OperationConsumeRebate operation = operationBase as OperationConsumeRebate; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.ParseRebate(package); operation.ActNum = package.ActNum; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(operationType); } } } /// /// 成长必买 /// /// public void UpdateCZBMRecharge(HAA31_tagMCActGrowupBuyInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.CZBMGift, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.CZBMGift); } else { if (operationBase == null) { operationBase = new OperationCZBM(); operationDict.Add(Operation.CZBMGift, operationBase); } OperationCZBM operation = operationBase as OperationCZBM; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.ParseGrowupBuyInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.CZBMGift); } } } /// /// 累计充值 /// /// public void UpdateAccumulateRecharge(HAA1D_tagMCActTotalRechargeInfo package) { OperationBase operationBase = null; Operation opreationType = Operation.AccumulateRecharge; if (package.ActNum == 10) { //精彩活动-单日累充 opreationType = Operation.AccumulateRecharge; } else if (package.ActNum == 11) { //精彩活动-多日累充 opreationType = Operation.DaysAccumulateRecharge; } else if (package.ActNum == 20) { //合服-福利(多日累充1档) opreationType = Operation.default8; } else if (package.ActNum == 30) { //节日-单日累充 opreationType = Operation.HolidayAccumulateRecharge; } else if (package.ActNum == 31) { //节日-多日累充 opreationType = Operation.HolidayMultiRecharge; } else if (package.ActNum == 34) { // 节日-指定1档充值 opreationType = Operation.default20; } else if (package.ActNum == 35) { // 福缘- 长久累充(几个月或更长) opreationType = Operation.default32; } operationDict.TryGetValue(opreationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(opreationType); } else { if (operationBase == null) { operationBase = new OperationAccumulateRecharge(); operationDict.Add(opreationType, operationBase); } OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.ParseAccumulateRecharge(package); operation.ActNum = package.ActNum; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(opreationType); } } } /// /// 限时特惠 /// /// public void UpdateFlashSale(HAA11_tagMCSpringSaleInfo package) { OperationBase operationBase = null; Operation operationType = Operation.FlashSale; switch (package.ActNum) { case 10: operationType = Operation.FlashSale; break; case 30: operationType = Operation.HolidayFlashSale; break; } operationDict.TryGetValue(operationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(operationType); } else { if (operationBase == null) { operationBase = new OperationFlashSale(); operationDict.Add(operationType, operationBase); } OperationFlashSale operation = operationBase as OperationFlashSale; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.inAdvanceMinute = package.AdvanceMinutes; operation.ActNum = package.ActNum; for (int i = 0; i < package.ActivityTimeCount; i++) { operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(operationType); } } } /// /// 限时抢购 /// /// public void UpdateFlashRushToBuy(HAA17_tagMCFlashSaleInfo package) { OperationBase operationBase = null; Operation operationType = Operation.FlashRushToBuy; switch (package.ActNum) { case 10: operationType = Operation.FlashRushToBuy; break; case 20: operationType = Operation.default12; break; case 30: operationType = Operation.HolidayFlashRushToBuy; break; } operationDict.TryGetValue(operationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(operationType); } else { if (operationBase == null) { operationBase = new OperationFlashRushToBuy(); operationDict.Add(operationType, operationBase); } OperationFlashRushToBuy operation = operationBase as OperationFlashRushToBuy; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.inAdvanceMinute = package.AdvanceMinutes; operation.ActNum = package.ActNum; for (int i = 0; i < package.ActivityTimeCount; i++) { operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(operationType); } } } /// /// 许愿池 /// /// public void UpdateWishingWellInfo(HAA19_tagMCActWishingWellInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.WishingWellInfo, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.WishingWellInfo); } else { if (operationBase == null) { operationBase = new OperationWishingWellInfo(); operationDict.Add(Operation.WishingWellInfo, operationBase); } OperationWishingWellInfo operation = operationBase as OperationWishingWellInfo; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.resetType = package.ResetType; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.WishingWellInfo); } } } /// /// 幸运鉴宝 /// /// public void UpdateLuckyTreasure(HAA1F_tagMCLuckyTreasureInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.LuckyTreasure, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.LuckyTreasure); } else { if (operationBase == null) { operationBase = new OperationLuckyTreasure(); operationDict.Add(Operation.LuckyTreasure, operationBase); } var operation = operationBase as OperationLuckyTreasure; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.resetType = package.ResetType; operation.sumLuckPoint = package.LuckyPoint; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.LuckyTreasure); } } } public void UpdateCollectWordsPackage(HAA40_tagMCActCollectWordsInfo package) { OperationBase operationBase = null; var opreationType = Operation.CollectWords; switch (package.ActNum) { case 10: opreationType = Operation.CollectWords; break; case 20: opreationType = Operation.default10; break; case 30: opreationType = Operation.HolidayCollectWords; break; } operationDict.TryGetValue(opreationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(opreationType); } else { if (operationBase == null) { operationBase = new OperationCollectWords(); operationDict.Add(opreationType, operationBase); } OperationCollectWords operation = operationBase as OperationCollectWords; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.ActNum = package.ActNum; operation.LastDayOnlyExchange = package.LastDayOnlyExchange; operation.ParseCollectWords(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(opreationType); } } } public void UpdateSingleRechargeInfo(HAA50_tagMCActSingleRechargeInfo package) { OperationBase operationBase = null; var opreationType = Operation.default28; operationDict.TryGetValue(opreationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(opreationType); } else { if (operationBase == null) { operationBase = new OperationSingleRecharge(); operationDict.Add(opreationType, operationBase); } OperationSingleRecharge operation = operationBase as OperationSingleRecharge; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.ActNum = package.ActNum; operation.dayReset = package.IsDayReset == 1; operation.ParseSingleRecharge(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(opreationType); } } } public void UpdateHolidayLogin(HAA42_tagMCFeastLoginInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.HolidayLogin, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.HolidayLogin); } else { if (operationBase == null) { operationBase = new OperationHolidayLogin(); operationDict.Add(Operation.HolidayLogin, operationBase); } var operation = operationBase as OperationHolidayLogin; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.HolidayLogin); } } } public void UpdateHolidayWish(HAA43_tagMCFeastWishInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.HolidayWish, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.HolidayWish); } else { if (operationBase == null) { operationBase = new OperationHolidayWish(); operationDict.Add(Operation.HolidayWish, operationBase); } var operation = operationBase as OperationHolidayWish; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.resetType = package.ResetType; operation.limitLv = package.LimitLV; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.HolidayWish); } } } public void UpdateHolidayTravel(HAA46_tagMCFeastTravelInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.HolidayTravel, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.HolidayTravel); } else { if (operationBase == null) { operationBase = new OperationHolidayTravel(); operationDict.Add(Operation.HolidayTravel, operationBase); } var operation = operationBase as OperationHolidayTravel; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.resetType = package.ResetType; operation.limitLv = package.LimitLV; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.HolidayTravel); } } } public void UpdateMultiRechargePackage(HAA27_tagMCActRechargePrizeInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.MultiRecharge, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.MultiRecharge); } else { if (operationBase == null) { operationBase = new OperationMultiRecharge(); operationDict.Add(Operation.MultiRecharge, operationBase); } OperationMultiRecharge operation = operationBase as OperationMultiRecharge; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.ParseMultiRecharge(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.MultiRecharge); } } } /// /// 限时礼包 /// /// public void UpdateGiftPackage(HAA12_tagMCFlashGiftbagInfo package) { OperationBase operationBase = null; Operation operationType = Operation.GiftPackage; switch (package.ActNum) { case 10: operationType = Operation.GiftPackage; break; case 20: operationType = Operation.default13; break; case 30: operationType = Operation.HolidayGiftPackage; break; } operationDict.TryGetValue(operationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(operationType); } else { if (operationBase == null) { operationBase = new GiftPackageClass(); operationDict.Add(operationType, operationBase); } GiftPackageClass operation = operationBase as GiftPackageClass; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.inAdvanceMinute = package.AdvanceMinutes; operation.ActNum = package.ActNum; for (int i = 0; i < package.ActivityTimeCount; i++) { operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, package.ActivityTime[i].EndtTime)); } operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(operationType); } } } public void UpdateBossReborn(HAB04_tagMCBossRebornInfo package) { if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.BossReborn); } else { OperationBase operationBase = null; operationDict.TryGetValue(Operation.BossReborn, out operationBase); if (operationBase == null) { operationDict[Operation.BossReborn] = operationBase = new OperationBossReborn(); } operationBase.Reset(); operationBase.limitLv = package.LimitLV; operationBase.startDate = ParseOperationDate(package.StartDate); operationBase.endDate = ParseOperationDate(package.EndtDate); operationBase.resetType = package.ResetType; ModelCenter.Instance.GetModel().UpdateTaskBaseInfos(package.TaskInfo); } } /// /// 仙界盛典 /// /// public void RefreshFairyCeremonyInfo(HAC09_tagGCFairyCeremonyInfo package) { OperationBase operation = null; operationDict.TryGetValue(Operation.FairyCeremony, out operation); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.FairyCeremony); } else { if (operation == null) { operation = new OperationBase(); operationDict.Add(Operation.FairyCeremony, operation); } operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.resetType = package.ResetType; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.FairyCeremony); } } } /// /// 春节仙界盛典 /// /// public void RefreshNewYearFairyCeremonyInfo(HAC0B_tagGCNewFairyCeremonyInfo package) { OperationBase operation = null; operationDict.TryGetValue(Operation.NewYearFairyCeremony, out operation); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.NewYearFairyCeremony); } else { if (operation == null) { operation = new OperationBase(); operationDict.Add(Operation.NewYearFairyCeremony, operation); } operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.resetType = package.ResetType; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.NewYearFairyCeremony); } } } /// /// N倍修行点 /// /// public void RefreshNTimesPractice(HAC0A_tagGCMultiRealmPointInfo package) { OperationBase operation = null; operationDict.TryGetValue(Operation.MultipRealmPoint, out operation); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.MultipRealmPoint); } else { if (operation == null) { operation = new OperationMultipleRealmPoint(); operationDict.Add(Operation.MultipRealmPoint, operation); } operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; var multipleRealmPoint = operation as OperationMultipleRealmPoint; multipleRealmPoint.limitRealmPoint = (int)package.LimitPoint; multipleRealmPoint.multiplePractice = package.Multiple; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.MultipRealmPoint); } } } /// /// 登录奖励 /// /// public void RefreshLoginReward(HAA0C_tagMCActLoginAwardInfo package) { OperationBase operation = null; operationDict.TryGetValue(Operation.LoginReward, out operation); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.LoginReward); } else { if (operation == null) { operation = new EventDaysTime(); operationDict.Add(Operation.LoginReward, operation); } operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.dayReset = package.IsDayReset == 1; operation.resetType = package.ResetType; operation.inAdvanceMinute = package.AdvanceMinutes; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.LoginReward); } } } /// /// 春节巡礼 /// /// public void SpringFestival(HAA20_tagMCFeastWeekPartyInfo package) { OperationBase operation = null; operationDict.TryGetValue(Operation.SpringFestival, out operation); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.SpringFestival); } else { if (operation == null) { operation = new EventDaysTime(); operationDict.Add(Operation.SpringFestival, operation); } operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.dayReset = package.IsDayReset == 1; operation.resetType = package.ResetType; operation.inAdvanceMinute = package.AdvanceMinutes; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.SpringFestival); } } } public void OpenServiceAchievement(HAA0A_tagMCWeekPartyInfo package) { OperationBase operation = null; operationDict.TryGetValue(Operation.OpenServiceAchievement, out operation); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.OpenServiceAchievement); } else { if (operation == null) { operation = new EventDaysTime(); operationDict.Add(Operation.OpenServiceAchievement, operation); } operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.dayReset = package.IsDayReset == 1; operation.resetType = package.ResetType; operation.inAdvanceMinute = package.AdvanceMinutes; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.OpenServiceAchievement); } } } public void UpdateBossTrialInfo(HAA67_tagMCActBossTrialInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default27, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default27); } else { if (operationBase == null) { operationBase = new OperationBossTrial(); operationDict.Add(Operation.default27, operationBase); } OperationBossTrial operation = operationBase as OperationBossTrial; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.dayReset = package.IsDayReset == 1; operation.resetType = package.ResetType; operation.ActNum = package.ActNum; operation.ParseBossTrialInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default27); } } } public void UpdateCrossBossTrialInfo(HAA76_tagMCCrossActBossTrialInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default33, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default33); } else { if (operationBase == null) { operationBase = new OperationCrossBossTrial(); operationDict.Add(Operation.default33, operationBase); } OperationCrossBossTrial operation = operationBase as OperationCrossBossTrial; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.resetType = package.ResetType; operation.ParseJoinTime(package.JoinStartTime, package.JoinEndTime); operation.ParseCrossBossTrialInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default33); } } } public void UpdateCrossFairySiegeInfo(HC024_tagGCFamilyGCZActInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default53, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default53); } else { if (operationBase == null) { operationBase = new OperationFairySiegeCross(); operationDict.Add(Operation.default53, operationBase); } OperationFairySiegeCross operation = operationBase as OperationFairySiegeCross; operation.Reset(); operation.zoneID = package.ZoneID; operation.actID = package.ActID; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.JoinFamilyCnt = package.JoinFamilyCnt; operation.ActFlowID = package.ActFlowID; operation.GuessTemplateID = package.GuessTemplateID; operation.PersonalTemplateID = package.PersonalTemplateID; operation.FamilyTemplateID = package.FamilyTemplateID; operation.StateError = package.StateError; //operation.dayReset = package.IsDayReset == 1; //operation.resetType = package.ResetType; //operation.ParseJoinTime(package.JoinStartTime, package.JoinEndTime); operation.ParseCrossFairySiegeInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default53); } } } public void UpdateCrossActXianXiaMJInfo(HAA80_tagMCCrossActXianXiaMJInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default37, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default37); } else { if (operationBase == null) { operationBase = new OperationCrossActXianXiaMJ(); operationDict.Add(Operation.default37, operationBase); } OperationCrossActXianXiaMJ operation = operationBase as OperationCrossActXianXiaMJ; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = package.IsDayReset == 1; operation.ParseJoinTime(package.JoinStartTime, package.JoinEndTime); operation.ParseCrossInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default37); } } } public void UpdateHorsePetTrainInfo(HAA84_tagMCActHorsePetTrainInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default39, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default39); } else { if (operationBase == null) { operationBase = new OperationPetHorse(); operationDict.Add(Operation.default39, operationBase); } OperationPetHorse operation = operationBase as OperationPetHorse; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.ParseJoinTime(package.JoinStartTime, package.JoinEndTime); operation.ParseHorsePetTrainInfo(package); operation.limitLv = package.LimitLV; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default39); } } } public void UpdateCrossActHorsePetTrainInfo(HAA86_tagMCCrossActHorsePetTrainInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default40, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default40); } else { if (operationBase == null) { operationBase = new OperationPetHorseCross(); operationDict.Add(Operation.default40, operationBase); } OperationPetHorseCross operation = operationBase as OperationPetHorseCross; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.ParseJoinTime(package.JoinStartTime, package.JoinEndTime); operation.ParseCrossActHorsePetTrainInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default40); } } } public void UpdateCrossActLianQiInfo(HAA90_tagMCCrossActLianqiInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default51, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default51); } else { if (operationBase == null) { operationBase = new OperationLianQiCross(); operationDict.Add(Operation.default51, operationBase); } OperationLianQiCross operation = operationBase as OperationLianQiCross; operation.Reset(); operation.m_ServerListStr = UIHelper.GetServers(package.ServerIDRangeInfo); operation.m_GroupValue1 = package.GroupValue1; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = true; operation.limitLv = package.LimitLV; operation.ParseJoinTime(package.JoinStartTime, package.JoinEndTime); operation.ParseCrossActHorsePetTrainInfo(package); //for (int i = 0; i < package.ActivityTimeCount; i++) //{ // operation.times.Add(ParseOperationTime(package.ActivityTime[i].StartTime, // package.ActivityTime[i].EndtTime)); //} if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default51); } } } public void UpdateActLunhuidianInfo(HAA88_tagMCActLunhuidianInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default47, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default47); } else { if (operationBase == null) { operationBase = new OperationCycleHall(); operationDict.Add(Operation.default47, operationBase); } OperationCycleHall operation = operationBase as OperationCycleHall; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.resetType = package.ResetType; operation.limitLv = package.LimitLV; operation.ParseCycleHallInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default47); } } } public void UpdateActYunShiInfo(HAA87_tagMCActYunshiInfo package) { Operation operationType = Operation.default48; switch (package.ActNum) { case 10: operationType = Operation.default48; break; } OperationBase operationBase = null; operationDict.TryGetValue(operationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(operationType); } else { if (operationBase == null) { operationBase = new OperationYunShi(); operationDict.Add(operationType, operationBase); } OperationYunShi operation = operationBase as OperationYunShi; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.resetType = package.ResetType; operation.limitLv = package.LimitLV; operation.treasureType = package.TreasureType; if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(operationType); } } } public void UpdateActGubaoInfo(HAA81_tagMCActGubaoInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default41, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default41); } else { if (operationBase == null) { operationBase = new OperationTreasurePavilionAct(); operationDict.Add(Operation.default41, operationBase); } OperationTreasurePavilionAct operation = operationBase as OperationTreasurePavilionAct; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.ParseJoinTime(package.JoinStartTime, package.JoinEndTime); operation.ParseGubaoInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default41); } } } public void UpdateGubaoCrossActGubaoInfo(HAA83_tagMCCrossActGubaoInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.default42, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.default42); } else { if (operationBase == null) { operationBase = new OperationTreasurePavilionActCross(); operationDict.Add(Operation.default42, operationBase); } OperationTreasurePavilionActCross operation = operationBase as OperationTreasurePavilionActCross; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.ParseJoinTime(package.JoinStartTime, package.JoinEndTime); operation.ParseCrossActGubaoInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default42); } } } /// /// 节日红包 /// /// public void OnReceivePackage(HAC11_tagGCFeastRedPacketInfo package) { OperationBase operationBase = null; operationDict.TryGetValue(Operation.FestivalRedpack, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(Operation.FestivalRedpack); } else { if (operationBase == null) { operationBase = new OperationFestivalRedpack(); operationDict.Add(Operation.FestivalRedpack, operationBase); } OperationFestivalRedpack operation = operationBase as OperationFestivalRedpack; operation.Reset(); operation.limitLv = package.LimitLV; operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.dayReset = true; operation.resetType = package.ResetType; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.FestivalRedpack); } } } public void UpdateLoginAct(HAA69_tagMCActLoginNew package) { OperationBase operationBase = null; Operation operationType = Operation.default29; switch (package.ActNum) { case 11: operationType = Operation.default44; break; case 30: operationType = Operation.default29; break; } operationDict.TryGetValue(operationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(operationType); } else { if (operationBase == null) { operationBase = new OperationLoginAct(); operationDict.Add(operationType, operationBase); } var operation = operationBase as OperationLoginAct; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.ActNum = package.ActNum; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(operationType); } } } public void UpdateMissionAct(HAA71_tagMCActTaskInfo package) { OperationBase operationBase = null; var opreationType = Operation.default30; switch (package.ActNum) { case 11: opreationType = Operation.default45; break; case 12: opreationType = Operation.default49; break; case 30: opreationType = Operation.default30; break; } operationDict.TryGetValue(opreationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(opreationType); } else { if (operationBase == null) { operationBase = new OperationMissionAct(); operationDict.Add(opreationType, operationBase); } var operation = operationBase as OperationMissionAct; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.dayReset = package.IsDayReset == 1; operation.resetType = package.ResetType; operation.ActNum = package.ActNum; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(Operation.default30); } } } public void UpdateRechargeGiftAct(HAA74_tagMCActBuyCountGiftInfo package) { OperationBase operationBase = null; Operation operationType = Operation.default31; switch (package.ActNum) { case 30: operationType = Operation.default31; break; case 10: operationType = Operation.default35; break; case 31: operationType = Operation.default38; break; case 11: operationType = Operation.default46; break; case 12: operationType = Operation.default50; break; case 13: operationType = Operation.default52; break; default: return; } operationDict.TryGetValue(operationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(operationType); } else { if (operationBase == null) { operationBase = new OperationRechargeGiftAct(); operationDict.Add(operationType, operationBase); } var operation = operationBase as OperationRechargeGiftAct; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.dayReset = package.IsDayReset == 1; operation.resetType = package.ResetType; operation.ActNum = package.ActNum; operation.ParsePackage(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(operationType); } } } public void UpdateActFamilyCTGAssistInfo(HAA77_tagMCActFamilyCTGAssistInfo package) { OperationBase operationBase = null; Operation operationType = Operation.default34; switch (package.ActNum) { case 30: operationType = Operation.default34; break; case 32: operationType = Operation.default54; break; default: return; } operationDict.TryGetValue(operationType, out operationBase); if (string.IsNullOrEmpty(package.StartDate) || string.IsNullOrEmpty(package.EndtDate)) { ForceStopOperation(operationType); } else { if (operationBase == null) { operationBase = new OperationFamilyRechargeConn(); operationDict.Add(operationType, operationBase); } var operation = operationBase as OperationFamilyRechargeConn; operation.Reset(); operation.startDate = ParseOperationDate(package.StartDate); operation.endDate = ParseOperationDate(package.EndtDate); operation.limitLv = package.LimitLV; operation.dayReset = package.IsDayReset == 1; operation.ActNum = package.ActNum; operation.ParseActFamilyCTGAssistInfo(package); if (operationTimeUpdateEvent != null) { operationTimeUpdateEvent(operationType); } } } public 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); } } public bool TryGetOperationTime(Operation type, out OperationBase operation) { return operationDict.TryGetValue(type, out operation); } public bool TryGetOperation(Operation type, out T operation) where T : OperationBase { operation = null; if (operationDict.ContainsKey(type)) { operation = operationDict[type] as T; return operation is T; } return false; } public bool InOperationTime(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.InTime(TimeUtility.ServerNow); } return false; } public bool InOperationTime(Operation type, DateTime time) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.InTime(time); } return false; } public bool InOperationJoinTime(Operation type, DateTime time) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.InJoinTime(time); } return false; } public bool InOperationDay(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.InDay(TimeUtility.ServerNow); } return false; } public int GetOperationSurplusTime(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.GetSurplusTime(TimeUtility.ServerNow); } 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 SatisfyOpenCondition(Operation type, DateTime time) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.SatisfyOpenCondition() && InOperationTime(type, time); } return false; } //活动开启中,有参与进行时间段 public bool SatisfyJoinCondition(Operation type, DateTime time) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return InOperationJoinTime(type, time); } return false; } public bool IsPrepareTime(Operation type, DateTime time) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.IsPrepareTime(time); } return false; } public bool SatisfyAdvanceCondition(Operation type) { OperationBase operation; if (TryGetOperationTime(type, out operation)) { return operation.SatisfyOpenCondition() && InOperationAdvance(type); } return false; } public void ProcessConditionError(Operation type) { if (SatisfyOpenCondition(type)) { return; } OperationBase operation; if (TryGetOperationTime(type, out operation)) { if (!InOperationTime(type)) { SysNotifyMgr.Instance.ShowTip("InOperationTimeError"); } else if (!operation.SatisfyOpenCondition()) { SysNotifyMgr.Instance.ShowTip(StringUtility.Contact("OperationLevelLimit_", type), operation.limitLv); } } else { SysNotifyMgr.Instance.ShowTip("InOperationTimeError"); } } public OperationDate ParseOperationDate(string date) { string[] dateArray = date.Split('-'); if (dateArray != null && dateArray.Length == 3) { return new OperationDate() { 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); } private OperationTime ParseOperationTime(string startTime, string endTime) { var startTimeArray = startTime.Split(':'); var endTimeArray = endTime.Split(':'); if (startTimeArray != null && startTimeArray.Length == 2 && endTimeArray != null && endTimeArray.Length == 2) { return new OperationTime() { startHour = int.Parse(startTimeArray[0].Trim()), startMinute = int.Parse(startTimeArray[1].Trim()), endHour = int.Parse(endTimeArray[0].Trim()), endMinute = int.Parse(endTimeArray[1].Trim()), }; } return default(OperationTime); } } public struct OperationDate { public int year; public int month; public int day; public static bool operator ==(OperationDate x, OperationDate y) { return x.year == y.year && x.month == y.month && x.day == y.day; } public static bool operator !=(OperationDate x, OperationDate y) { 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.AddTicks(_days * TimeSpan.TicksPerDay); return new OperationDate() { year = d.Year, month = d.Month, day = d.Day, }; } public string ToDisplay(bool showYear = true) { if (showYear) { return StringUtility.Contact(year, "/", month, "/", day); } return StringUtility.Contact(month, "/", day); //var yearString = StringUtility.Contact(year, Language.Get("Year")); //return StringUtility.Contact(showYear ? yearString : string.Empty, month, Language.Get("Month"), day, Language.Get("Day")); } public static int operator -(OperationDate x, OperationDate y) { DateTime _x = new DateTime(x.year, x.month, x.day); DateTime _y = new DateTime(y.year, y.month, y.day); return (int)(_x - _y).TotalDays; } } public struct OperationTime { public int startHour; public int startMinute; public int endHour; public int endMinute; public bool InTime(DateTime time) { return CompareTime(time) == 0; } public int CompareTime(DateTime time) { if (time.Hour < startHour || (time.Hour == startHour && time.Minute < startMinute)) { return -1; } if (time.Hour > endHour || (time.Hour == endHour && time.Minute >= endMinute)) { return 1; } return 0; } public override string ToString() { return StringUtility.Contact(startHour.ToString("D2"), ":", startMinute.ToString("D2"), "-", endHour.ToString("D2"), ":", endMinute.ToString("D2")); } public static int operator -(OperationTime x, DateTime y) { DateTime d = new DateTime(y.Year, y.Month, y.Day, x.endHour, x.endMinute, 0); return Mathf.Max(0, (int)(d - y).TotalSeconds); } } public enum Operation { MultipleExp, ConsumeRebate, FlashSale,//限时特惠 BossReborn, GiftPackage, FairyCeremony, //仙界盛典 MultipRealmPoint, //N倍修行点 FlashRushToBuy, //限时抢购 WishingWellInfo, //许愿池 AccumulateRecharge,//累计充值,单日 LoginReward,//登录奖励 FestivalRedpack,//节日红包 NewYearFairyCeremony, //春节仙界盛典 SpringFestival,//春节巡礼 OpenServiceAchievement,//七日巡礼 LuckyTreasure,//幸运鉴宝 MultiRecharge, //仙玉充值返利 (首充双倍) CZBMGift, // 成长必买礼包 DaysAccumulateRecharge, //累计充值,多日 CollectWords, //收集文字 HolidayLogin, //节日登录 HolidayWish, //节日祝福灯笼 HolidayMultiRecharge,//节日祝福的多日累计充值 包含任意充值界面和多日累充界面 HolidayTravel, //节日游历 HolidayAccumulateRecharge, //节日-单日的累积充值 HolidayCollectWords, //节日-集字 HolidayGiftPackage, //节日祝福-限时礼包 HolidayFlashRushToBuy, //节日-限时抢购 HolidayFlashSale, //节日祝福-限时特惠 HolidayConsumeRebate, //节日祝福-消费返利 //后续IL开发添加预设 default1, // 连续多日累充 default2, default3, // 节日-垃圾分类 default4, // 节日-翻牌 default5, default6, default7, // 精彩活动-跨服充值 default8, // 合服-福利(多日累充1档) default9, // 合服-转盘 default10, // 合服-集字狂欢 default11, // 合服-坐骑盛宴 default12, // 合服-超值限购 default13, // 合服-限时礼包 default14, default15, default16, default17, default18, // 幸运云购 default19, default20, //节日指定累计充值额度,和节日任意充值独立两个界面 default21, default22, //天帝礼包 default23, default24, default25, //买1送5 default26, default27, //日期型活动- boss历练活动 default28, //精彩活动-单笔充值 default29, //日期型活动- 登录,可补签 default30, //日期型活动- 任务 default31, //日期型活动- 礼包,可累计购买次数领取 default32, //福缘- 长久累充(几个月或更长) 独立界面 default33, //日期型活动- boss 历练活动(跨服) 必须和活动default27一起使用 default34, //日期型活动- 仙盟充值互助,特殊:允许多个活动同时开启 default35, //自选礼包 default36, //日期型活动- 秘境寻宝(类仙匣) 主活动 default37, //日期型活动- 秘境寻宝(类仙匣) 跨服 default38, //日期型活动- 自选礼包 + 商店 default39, //日期型活动- 骑宠培养本服 default40, //日期型活动- 骑宠培养跨服 default41, //日期型活动- 古宝养成本服 default42, //日期型活动- 古宝养成跨服 default43, ////日期型活动- 任务环 default44, //日期型活动 - 仙缘登陆,可补签 default45, //日期型活动 - 仙缘任务 default46, //日期型活动 - 仙缘礼包 default47, //日期型活动 - 轮回殿 default48, //日期型活动 - 运势寻宝 default49, //日期型活动 - 运势任务 default50, //日期型活动 - 运势礼包 default51, //日期型活动 - 仙匠大会炼器 default52, //日期型活动 - 仙匠大会礼包 default53, //日期型活动 - 仙盟攻城战 跨服 default54, //日期型活动 - 仙盟攻城战仙盟协助和礼包 max, } }