local GodBeastActivity_Controller = {} local private = {} local EventSystem = require('Event/EventSystem') -- 神兽活动期界面 local GodBeastActivityView = { Const_UI_Lua.UIEnum.UIGodBeastActivityMain, Const_UI_Lua.UIEnum.UIGodBeastActivityTasks, Const_UI_Lua.UIEnum.UIGodBeastActivityStore, Const_UI_Lua.UIEnum.UIGodBeastActivityReward, Const_UI_Lua.UIEnum.UIGodBeastActivityLevelUp, Const_UI_Lua.UIEnum.UIGodBeastActivityGetReward, Const_UI_Lua.UIEnum.UIGodBeastActivityPackageWindow, Const_UI_Lua.UIEnum.UIGodBeastActivityPackageDetail, Const_UI_Lua.UIEnum.UIBagItemTips, Const_UI_Lua.UIEnum.UIPayMallPopUp, Const_UI_Lua.UIEnum.UICommonNoteView, Const_UI_Lua.UIEnum.UICurrencyExchange, Const_UI_Lua.UIEnum.OperationActivity.UIGetActivityItemPanel, } function GodBeastActivity_Controller.OnStartup() EventSystem.Regist(EventID.FunctionUnlockUpdate, private.RefreshInfoByFunction) EventSystem.Regist(EventID.UI_OperationActivity_InfoChanged, private.CheckFuncOpenIssue) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.CheckFuncOpenIssue) EventSystem.Regist(EventID.UI_RefreshCurrency, private.RefreshRedPoint) EventSystem.Regist(EventID.UI_OACommon_RedPointChanged, private.RefreshRedPoint) EventSystem.Regist(EventID.UI_GodBeastActivity_InfoUpdate, private.RefreshRedPoint) EventSystem.Regist(EventID.UI_DirectGift_GiftInfoUpdate, private.RefreshRedPoint) private.ActivityType = MDL.OperationActivity.ActivityType.GodBeastActivity private.isOpenedActivity = {} private.endTimerHandle = {} end function GodBeastActivity_Controller.IsSuperGold() local activityId = MDL.GodBeastActivity.GetActivityId() if activityId and activityId > 0 then local basicData = MDL.OperationActivity.ActivityBaseData[private.ActivityType]:GetDataByActivityID(activityId) if basicData then local godBeastID = basicData.GodBeastID local godBeastData = DataSheetManager.GodBeastData:GetDataByID(godBeastID) local isSuperGold = godBeastData.GodBeastQuality == LuaConst.QualityColor.DarkGold --彩金品质需要换皮 return isSuperGold else logging.error(LTAG.ERROR, "hot26BackGround表中找不到activityId:", activityId, "的数据,请检查!!!") end end return false end function private.CheckFuncOpenIssue() if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.GodBeastActivity) then private.ForceCloseActivityView() return end local activityInfoList = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) if activityInfoList then for i, activityInfo in pairs(activityInfoList) do local activityId = activityInfo.activityId if private.endTimerHandle[activityId] then TimerUtil.Remove(private.endTimerHandle[activityId]) end if not CTL.OperationActivity.IsOperationActivityOpen(activityInfo) then private.EndAndCloseActivityView(activityId) else 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 end end end --GMS开关变化时刷新 function private.RefreshInfoByFunction(funcId, isUnlock) if funcId == MDL.Unlock.FunctionType.GodBeastActivity then if isUnlock then MDL.GodBeastActivity.GodBeastActivityInfoRequest() else private.ForceCloseActivityView() end end end function GodBeastActivity_Controller.ShutDownPartActivityView(activityId) for i, v in ipairs(GodBeastActivityView) do EventSystem.Dispatch(EventID.UI_OperationActivity_CloseView, v, activityId) end end function private.EndAndCloseActivityView(activityId) if private.isOpenedActivity[activityId] then UIManager.RecoverTopView() CTL.HomeMain.CloseOpenView() end if private.endTimerHandle and private.endTimerHandle[activityId] then TimerUtil.Remove(private.endTimerHandle[activityId]) end GodBeastActivity_Controller.ShutDownPartActivityView(activityId) end -- 关闭活动界面 function private.ForceCloseActivityView() logging.log(LTAG.LOG, "GodBeastActivity Function(include GMS) ActivityEnd ") local activityTypeInfo = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) if activityTypeInfo then for i, v in pairs(activityTypeInfo) do local activityId = v.activityId private.EndAndCloseActivityView(activityId) end end end function private.IsFeedItemEnough(activityId) local basicData = MDL.OperationActivity.ActivityBaseData[private.ActivityType]:GetDataByActivityID(activityId) local feedItemId = basicData.ItemID local feedItemCount = UTL.Item.GetItemStockCount(feedItemId) return feedItemCount > 0 end function private.RefreshRedPoint() local activityId = MDL.GodBeastActivity.GetActivityId() if activityId and activityId > 0 then if CTL.OACommon.IsHasTaskRedPoint(activityId) or CTL.OACommon.IsHasGiftRedPoint(activityId) or private.IsHasLevelReward(activityId) or private.IsFeedItemEnough(activityId) then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.GodBeastActivity) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.GodBeastActivity) end else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.GodBeastActivity) end EventSystem.Dispatch(EventID.UI_GodBeastActivity_RefreshRp) end function GodBeastActivity_Controller.IsActivityOpen(activityId) if not activityId then return false end if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.GodBeastActivity) then return false end local info = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType, activityId) if not CTL.OperationActivity.IsOperationActivityOpen(info) then return false end return true end function GodBeastActivity_Controller.OpenMainPanel(activityId) if GodBeastActivity_Controller.IsActivityOpen(activityId) then UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UIGodBeastActivityMain, { activityId = activityId }) end end function GodBeastActivity_Controller.IsFeedItem(activityId, itemId) if activityId then local basicData = MDL.OperationActivity.ActivityBaseData[private.ActivityType]:GetDataByActivityID(activityId) if basicData then return itemId == basicData.ItemID end end return false end function GodBeastActivity_Controller.OpenFeedItemPayPopView(activityId) local basicData = MDL.OperationActivity.ActivityBaseData[private.ActivityType]:GetDataByActivityID(activityId) local limitFeedGoodData = MDL.OperationActivity.StoreGoodsData:GetDataByID(basicData.LimitBuyItem) local feedGoodData = MDL.OperationActivity.StoreGoodsData:GetDataByID(basicData.UnlimitBuyItem) local goodData if CTL.PayMall.IsSoldOut(limitFeedGoodData) then goodData = feedGoodData else goodData = limitFeedGoodData end CTL.PayMall.OpenPayMallPopUp(goodData, activityId, private.ActivityType, "IDS_HorseActivity_ChildTitle_5") end function GodBeastActivity_Controller.IsCanGetLevelReward(activityId, level) if MDL.GodBeastActivity.GetGodBeastRearLevel(activityId) >= level then if not MDL.GodBeastActivity.GetGodBeastRearLevelReward(activityId, level) then return true end end return false end function GodBeastActivity_Controller.IsGotLevelReward(activityId, level) return MDL.GodBeastActivity.GetGodBeastRearLevelReward(activityId, level) or false end function private.IsHasLevelReward(activityId) for i = 1, MDL.GodBeastActivity.GetGodBeastRearLevel(activityId) do if not MDL.GodBeastActivity.GetGodBeastRearLevelReward(activityId, i) then return true end end return false end function GodBeastActivity_Controller.GetActivitySameQualityGodBeast(activityId, godBeastId) local sameQualityGodBeast = {} local selectGodBeastInfo = {} local curGodBeastData = DataSheetManager.GodBeastData:GetDataByID(godBeastId) for i, goodData in MDL.OACommon.GetStoreGoodsEnumerator(private.ActivityType, activityId) do local itemData = DataSheetManager.ItemData:GetDataByID(goodData.ItemID) if itemData.FirstType == LuaConst.ItemType.GodBeast and itemData.Color == curGodBeastData.GodBeastQuality then local godBeastData = DataSheetManager.GodBeastData:GetDataByID(itemData.BelongerID) if godBeastData.ID == godBeastId then selectGodBeastInfo = godBeastData else table.insert(sameQualityGodBeast, godBeastData) end end end return sameQualityGodBeast, selectGodBeastInfo end return GodBeastActivity_Controller