local SuperGoldMain_Model = {} local private = {} local EventSystem = require("Event/EventSystem") SuperGoldMain_Model.HeroType = { ZhouYu = 1, --周瑜 ZhuGeLiang = 2, --诸葛亮 DianWei = 3, --典韦 MaChao = 4, --马超 ZuoCi = 5, --左慈 } function SuperGoldMain_Model.OnStartup() EventSystem.Regist(EventID.UI_OperationActivity_InfoChanged, private.SetSuperGoldEndTimer) EventSystem.Regist(EventID.New_Day_Refresh, private.SetSuperGoldStartTimer) private.ActivityType = MDL.OperationActivity.ActivityType.SuperGold private.isInActivityFuncTime = {} --是否在功能活动时间内(如果在展示时间则为false) private.ActivityStartFuncTime = {} -- 活动开始刷新入口倒计时 private.activityEndTimerHandle = {} private.templateIDAndActivityIDDic = {} end -- 彩金将是跨服活动,开始时间是05:05,这里加个计时器刷新主城入口 function private.SetSuperGoldStartTimer() local infoList = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) if infoList then for i, v in pairs(infoList) do if SuperGoldMain_Model.GetHeroTypeByActivityId(v.activityId) then local timeNum = v.startTime - UTL.Time.GetLocalTimestamp() if timeNum > 0 and timeNum <= UTL.Time.TotalSecondsOneHour then private.ActivityStartFuncTime[v.activityId] = TimerUtil.Interval(function() EventSystem.Dispatch(EventID.UI_OperationActivity_InfoChanged) end, timeNum + 1, 1) end end end end end ---缓存正在进行中的金将活动的模板映射关系 function private.SetTemplateIDAndActivityID() local infoList = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) if infoList then for i, v in pairs(infoList) do if CTL.OperationActivity.IsOperationActivityOpen(v) then private.templateIDAndActivityIDDic[SuperGoldMain_Model.GetHeroTypeByActivityId(i)] = i end end end end function SuperGoldMain_Model.GetActivityIDByHeroType(heroType) local activityId = private.templateIDAndActivityIDDic[heroType] if activityId and activityId > 0 then return activityId else return 0 end end function SuperGoldMain_Model.SyncSuperGoldMainInfo(info) for i, v in ipairs(info) do if MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType, v.activityId) then MDL.SuperGoldBoss.SetEnergyBuyCount(v.activityId, v.energyBuyTimes) CTL.SuperGoldMain.SetRedPointInfo(v.activityId, v.trial.redPoint) MDL.SuperGoldStory.SyncSuperGoldStoryInfo(v.experience) end end end function private.SetSuperGoldEndTimer() local infoList = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) if infoList then for i, v in pairs(infoList) do if SuperGoldMain_Model.GetHeroTypeByActivityId(v.activityId) then private.SetEndTimerByActivityId(v.activityId) end end end private.SetTemplateIDAndActivityID() end function private.SetEndTimerByActivityId(activityId) if private.activityEndTimerHandle[activityId] then TimerUtil.Remove(private.activityEndTimerHandle[activityId]) end local heroTypeData = DataSheetManager.SuperGoldActivityModeData:GetDataByHeroType(SuperGoldMain_Model.GetHeroTypeByActivityId(activityId)) local activityInfo = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType, activityId) if activityInfo then local endFuncTime = activityInfo.endTime - heroTypeData.DisplayTime * UTL.Time.TotalSecondsOneDay local nowTime = UTL.Time.GetServerTimestamp() if endFuncTime > nowTime then private.isInActivityFuncTime[activityId] = true local deltaTime = endFuncTime - nowTime if deltaTime <= UTL.Time.TotalSecondsOneDay then private.activityEndTimerHandle[activityId] = TimerUtil.Interval(function() private.DispatchEndActivity(activityId) end, deltaTime - 1, 1) --时间减1s是为了防止有误差导致玩家点击出现报错 end else private.DispatchEndActivity(activityId) end end end function private.DispatchEndActivity(activityId) logging.log(LTAG.LOG, "SuperGold ActivityEnd, activityId: ", activityId) private.isInActivityFuncTime[activityId] = false EventSystem.Dispatch(EventID.UI_SuperGold_ActivityEnd, activityId) end function SuperGoldMain_Model.IsActivityInFuncTime(activityId) if private.isInActivityFuncTime[activityId] == nil then private.SetEndTimerByActivityId(activityId) end return private.isInActivityFuncTime[activityId] end function SuperGoldMain_Model.GetEndFuncTime(activityId) local heroType = SuperGoldMain_Model.GetHeroTypeByActivityId(activityId) if heroType and heroType > 0 then local heroTypeData = DataSheetManager.SuperGoldActivityModeData:GetDataByHeroType(heroType) local activityInfo = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType, activityId) if activityInfo then return activityInfo.endTime - heroTypeData.DisplayTime * UTL.Time.TotalSecondsOneDay else return 0 end end return 0 end function SuperGoldMain_Model.GetHeroTypeByActivityId(activityId) if MDL.OperationActivity.ActivityBaseData[private.ActivityType] then local superGoldData = MDL.OperationActivity.ActivityBaseData[private.ActivityType]:GetDataByActivityID(activityId) if superGoldData then return superGoldData.HeroType else logging.error(LTAG.ERROR, "彩金活动找不到activityId:", activityId, "在hot12BackGround静态数据表数据!!!请服务器和策划检查!!!不要忽略!!!") end else logging.error(LTAG.ERROR, "彩金活动没有hot12BackGround静态数据表数据!!!请服务器和策划检查!!!不要忽略!!!") end end return SuperGoldMain_Model