local LuckyLottery_Controller = {} local private = {} local EventSystem = require("Event/EventSystem") function LuckyLottery_Controller.OnStartup() EventSystem.Regist(EventID.UI_OperationActivity_InfoChanged, private.SetEndTimer) EventSystem.Regist(EventID.DeepLink_Event,private.OnDeepLink) private.ActivityType = MDL.OperationActivity.ActivityType.LuckyLottery private.isCanDraw = {} private.isHasAccumulateReward = {} private.isHasFriendReward = {} private.isPoolUnset = {} end function LuckyLottery_Controller.RefreshRedPointInfo(info) for i, v in ipairs(info) do local activityId = v.activityId private.isCanDraw[activityId] = v.lottery private.isHasAccumulateReward[activityId] = v.reward private.isHasFriendReward[activityId] = v.box private.isPoolUnset[activityId] = v.pool if v.lottery or v.reward or v.box or v.pool or LuckyLottery_Controller.GetDailyRedPoint() then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.LuckyLottery) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.LuckyLottery) end EventSystem.Dispatch(EventID.UI_LuckyLottery_RedPointUpdate, activityId) end end local LuckyLotteryDailyKey = "LuckyLotteryDailyKey" function LuckyLottery_Controller.SetDailyRedPoint(activityId) PersistentData.PlayerData:Set(LuckyLotteryDailyKey, UTL.Time.GetServerTimestamp(), true) if private.isCanDraw[activityId] or private.isHasAccumulateReward[activityId] or private.isHasFriendReward[activityId] or private.isPoolUnset[activityId] or LuckyLottery_Controller.GetDailyRedPoint() then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.LuckyLottery) else CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.LuckyLottery) end EventSystem.Dispatch(EventID.UI_LuckyLottery_RedPointUpdate, activityId) end function LuckyLottery_Controller.GetDailyRedPoint() local lastTime = PersistentData.PlayerData:Get(LuckyLotteryDailyKey, 0) if lastTime > 0 then if UTL.Time.IsTimestampSameDay(lastTime) then return false end end return true end function LuckyLottery_Controller.IsHasFriendReward(activityId) return private.isHasFriendReward[activityId] or false end function LuckyLottery_Controller.IsPoolUnset(activityId) return private.isPoolUnset[activityId] or false end function LuckyLottery_Controller.IsCanDraw(activityId) return private.isCanDraw[activityId] or false end function LuckyLottery_Controller.IsHasAccumulateReward(activityId) return private.isHasAccumulateReward[activityId] or false end local UnKnownQualityBgPath = ConstAssetPathConfig.UnKnownQualityBgPath ---@param itemId 不传则显示透明背景 function LuckyLottery_Controller.SetQualityBg(comp, itemId) if itemId then local itemData = DataSheetManager.ItemData:GetDataByID(itemId) local qualityData = DataSheetManager.QualityColor:GetDataByID(itemData.Color) UIUtils.SetImageByAssetBundle(comp, qualityData.LuckyLotteryFrame) else UIUtils.SetImageByAssetBundle(comp, UnKnownQualityBgPath) end end function LuckyLottery_Controller.OpenLotteryPanel() local info = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) if info then for activityId, v in pairs(info) do if CTL.OperationActivity.IsOperationActivityOpen(v) then MDL.LuckyLottery.ActivityLuckyLotteryOpenReq(activityId) return else if UTL.Time.GetServerTimestamp() > v.endTime then CTL.Tips.AddTipsMsg(Const_IDS.IDS_GoldHeroActivity_TimeHint3) end end end else logging.error(LTAG.ERROR, "doingActivity中没有找到幸运扭蛋相关信息,不应该触发这个函数,请程序检查!!!") end end function LuckyLottery_Controller.IsPoolRewardSelected(activityId) for i, v in ipairs(MDL.LuckyLottery.GetPoolIdList(activityId)) do if v > 0 then return true end end return false end function LuckyLottery_Controller.IsPoolRewardClaimed(activityId, rewardId) return MDL.LuckyLottery.GetLotteryPoolDict(activityId)[rewardId] or false end function LuckyLottery_Controller.IsNumRewardClaimed(activityId, num) return MDL.LuckyLottery.GetLotteryNumReward(activityId)[num] or false end function private.SetEndTimer() local activityInfo = MDL.OperationActivity.GetOperationActivityInfo(private.ActivityType) if activityInfo then for activityId, v in pairs(activityInfo) do local nowTime = UTL.Time.GetServerTimestamp() local endTime = v.endTime if CTL.OperationActivity.IsOperationActivityOpen(v) then local deltaTime = endTime - nowTime if deltaTime <= UTL.Time.TotalSecondsOneDay then if private.activityEndTimerHandle then TimerUtil.Remove(private.activityEndTimerHandle) private.activityEndTimerHandle = nil end private.activityEndTimerHandle = TimerUtil.Interval(function() private.EndAndCloseActivity(activityId) end, deltaTime - 1, 1) end else if nowTime > v.startTime then if private.activityEndTimerHandle then TimerUtil.Remove(private.activityEndTimerHandle) private.activityEndTimerHandle = nil end private.EndAndCloseActivity(activityId) end end end end end function private.EndAndCloseActivity(activityId) logging.log(LTAG.LOG, "LuckyLottery ActivityEnd, activityId: ", activityId) if private.activityEndTimerHandle then TimerUtil.Remove(private.activityEndTimerHandle) private.activityEndTimerHandle = nil end UIManager.CloseView(Const_UI_Lua.UIEnum.UIBagItemTips) UIManager.CloseView(Const_UI_Lua.UIEnum.UICommonNoteView) UIManager.CloseView(Const_UI_Lua.UIEnum.UILuckyLotteryConfirmReward) UIManager.CloseView(Const_UI_Lua.UIEnum.UILuckyLotteryDirectGift) UIManager.CloseView(Const_UI_Lua.UIEnum.UILuckyLotteryFriendPopUp) UIManager.CloseView(Const_UI_Lua.UIEnum.UILuckyLotteryMain) UIManager.CloseView(Const_UI_Lua.UIEnum.UILuckyLotterySelectReward) end -- IAE扩展 function private.OnDeepLink(key) if key ~= LuaConst.Deeplink.LuckyLottery then return end --强制引导时,不打开界面,清掉deeplink存储 if CTL.PlayerGuide.IsForceGuiding() then return end --没有参数,只要判断判断活动开启 if CTL.OperationActivity.IsOperationActivityTypeOpen(private.ActivityType) and CTL.OperationActivity.IsOperationActivityTypeUnlock(private.ActivityType) and MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.LuckyLottery) then --在城镇里 if BattleDataGetter.IsOnlineTownLevel() then if not UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UILuckyLotteryMain) then LuckyLottery_Controller.OpenLotteryPanel() end end end end return LuckyLottery_Controller