local SubjectMonth_Controller = {} local private = {} local EventSystem = require 'Event/EventSystem' local SubjectMonthActivityView = { Const_UI_Lua.UIEnum.UISubjectMonthMain, Const_UI_Lua.UIEnum.UISubjectMonthSignIn, Const_UI_Lua.UIEnum.UISubjectMonthHonorOrderMain, Const_UI_Lua.UIEnum.UISubjectMonthHonorOrderBuy, Const_UI_Lua.UIEnum.UISubjectMonthChallenge, Const_UI_Lua.UIEnum.UISubjectMonthRewardMain, Const_UI_Lua.UIEnum.UISubjectMonthChallengeFormation, Const_UI_Lua.UIEnum.UISubjectMonthRogueMain, Const_UI_Lua.UIEnum.UISubjectMonthRogueStarReward, Const_UI_Lua.UIEnum.UISubjectMonthRogueHeroListMain, Const_UI_Lua.UIEnum.UISubjectMonthSkillPop, Const_UI_Lua.UIEnum.UISubjectMonthRogueHeroLvReward, } local SubRedPointEvent = { CTL.RedPoint.RedPointKey.FairPlay_KingChallenge, --王者挑战红点 } function SubjectMonth_Controller.OnStartup() EventSystem.Regist(EventID.UI_OperationActivity_InfoChanged, private.CheckFuncOpenIssue) EventSystem.Regist(EventID.FunctionUnlockUpdate, private.RefreshInfoByFunction) for k, v in pairs(SubRedPointEvent) do EventSystem.Regist(v, private.RefreshEntryRedPoint) end private.activityType = MDL.OperationActivity.ActivityType.SubjectMonth private.endTimerHandle = {} end function SubjectMonth_Controller.OnShutdown() end function SubjectMonth_Controller.RefreshEntryRedPoint() EventSystem.Dispatch(CTL.RedPoint.RedPointKey.SubjectMonth) end function SubjectMonth_Controller.GetEntryRedPoint() return CTL.RedPoint.GetRedPointActive(CTL.RedPoint.RedPointKey.SubjectMonth) or CTL.RedPoint.GetRedPointActive(CTL.RedPoint.RedPointKey.FairPlay_KingChallenge) end function SubjectMonth_Controller.IsOpen() return CTL.OperationActivity.IsOperationActivityTypeOpen(private.activityType) and CTL.OperationActivity.IsOperationActivityTypeUnlock(private.activityType) and MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.SubjectMonth) end function SubjectMonth_Controller.IsSubActivityOpen(type) if not SubjectMonth_Controller.IsOpen() then return false end local versionsPrefabData = SubjectMonth_Controller.GetVersionsPrefabData() for _, v in ipairs(versionsPrefabData.ExtendFuction) do if v == type then return true end end return false end function SubjectMonth_Controller.GetSubActivityModeId(type) if not SubjectMonth_Controller.IsOpen() then return end local versionsPrefabData = SubjectMonth_Controller.GetVersionsPrefabData() for i, v in ipairs(versionsPrefabData.ExtendFuction) do if v == type then return versionsPrefabData.ExtendFuctionMode[i] end end end function SubjectMonth_Controller.GetActivityBaseData() if not SubjectMonth_Controller.IsOpen() then return end local activityId = MDL.SubjectMonth.GetActivityId() if MDL.OperationActivity.ActivityBaseData[private.activityType] then return MDL.OperationActivity.ActivityBaseData[private.activityType]:GetDataByActivityID(activityId) else logging.error(LTAG.ERROR, "主题月活动没有hot35BackGround静态数据表数据!!!请服务器和策划检查!!!不要忽略!!!") end end function SubjectMonth_Controller.GetSortCompetitionData() local list = {} local activityBaseData = SubjectMonth_Controller.GetActivityBaseData() if activityBaseData then local index = 1 for i, id in ipairs(activityBaseData.Competition) do local data = {id = id, competitionTimeText = activityBaseData.Text_Table[i].CompetitionTimeText} local previewInfo = MDL.SubjectMonth.GetActivityPreviewInfo(id) if IsProtoDataNotNil(previewInfo) and previewInfo.isReadSpecialIds then table.insert(list, index, data) index = index + 1 else table.insert(list, data) end end end return list end function SubjectMonth_Controller.GetVersionsPrefabData() if not SubjectMonth_Controller.IsOpen() then return end local baseData = SubjectMonth_Controller.GetActivityBaseData() return DataSheetManager.VersionsPrefabData:GetDataByPrefabID(baseData.PrefabID) end function SubjectMonth_Controller.OpenMainView() if not SubjectMonth_Controller.IsOpen() then CTL.Tips.AddTipsMsg(Const_IDS["IDS_BossChallenge_NotOpen"]) return end local baseData = SubjectMonth_Controller.GetActivityBaseData() local versionsPrefabData = DataSheetManager.VersionsPrefabData:GetDataByPrefabID(baseData.PrefabID) UIManager.OpenView(Const_UI_Lua.UIEnum.UISubjectMonthMain, nil, versionsPrefabData.PrefabMode) end function SubjectMonth_Controller.GetTownEntryIcon() local cfg = SubjectMonth_Controller.GetVersionsPrefabData() return cfg and cfg.ActivityIcon end function SubjectMonth_Controller.GetTownEntryName() local cfg = SubjectMonth_Controller.GetVersionsPrefabData() return cfg and Const_IDS[cfg.ActivityName] end function SubjectMonth_Controller.GoActivity(activityId) local isOpen, condition = CTL.Activities.IsOpen(activityId) if activityId == LuaConst.ActivityType.SyncFourCountryWar or activityId == LuaConst.ActivityType.HeroMatch1v1 or activityId == LuaConst.ActivityType.HeroMatch3v3 or activityId == LuaConst.ActivityType.FairSoloTournament or activityId == LuaConst.ActivityType.TeamFairChampionship then isOpen = isOpen and CTL.Activities.GetState(activityId) ~= CTL.Activities.ActivityState.End if activityId == LuaConst.ActivityType.SyncFourCountryWar then isOpen = isOpen and MDL.SyncFourCountryWar.GetCurStage() > 1 end end if isOpen then CTL.Activities.OpenActivityWindowByID(activityId) else CTL.Tips.AddTipsMsg(Const_IDS.IDS_BossChallenge_NotOpen) end end function private.CheckFuncOpenIssue() if not SubjectMonth_Controller.IsOpen() then private.ForceCloseActivityView() return end local activityId = MDL.SubjectMonth.GetActivityId() if private.endTimerHandle[activityId] then TimerUtil.Remove(private.endTimerHandle[activityId]) private.endTimerHandle[activityId] = nil end local activityInfo = MDL.OperationActivity.GetOperationActivityInfo(private.activityType, activityId) local deltaTime = activityInfo.endTime - UTL.Time.GetServerTimestamp() if deltaTime <= UTL.Time.TotalSecondsOneDay then private.endTimerHandle[activityId] = TimerUtil.Interval(function() private.EndAndCloseActivityView(activityId) end, deltaTime - 1, 1) --时间减1s是为了防止有误差导致玩家点击出现报错 end end --GMS开关变化时刷新 function private.RefreshInfoByFunction(funcId, isUnlock) if funcId == MDL.Unlock.FunctionType.SubjectMonth then if not isUnlock then private.ForceCloseActivityView() end end end function private.ForceCloseActivityView() logging.log(LTAG.LOG, "SubjectMonth Function(include GMS) ActivityEnd ") private.EndAndCloseActivityView(MDL.SubjectMonth.GetActivityId()) end function private.EndAndCloseActivityView(activityId) for i, v in ipairs(SubjectMonthActivityView) do EventSystem.Dispatch(EventID.UI_OperationActivity_CloseView, v, activityId) end end return SubjectMonth_Controller