local Activities_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local activity_pb = require("Proto/activity_pb") local activity_opt_pb = require("Proto/activity_opt_pb") local weekly_calendar_opt_pb = require('Proto/weekly_calendar_opt_pb') local dailyType = 1 local limitType = 2 --活动id到副本类型的映射 Activities_Model.TeamActivity2LevelType = { [LuaConst.ActivityType.TVT] = LuaConst.LevelType.SyncTeamPVP, [LuaConst.ActivityType.SyncSolo] = LuaConst.LevelType.SyncSolo, [LuaConst.ActivityType.TeamDungeon1] = LuaConst.LevelType.SyncTeamPVE, [LuaConst.ActivityType.TeamDungeon2] = LuaConst.LevelType.SyncTeamPVE, [LuaConst.ActivityType.TeamDungeon3] = LuaConst.LevelType.SyncTeamPVE, [LuaConst.ActivityType.WorldBoss] = LuaConst.LevelType.SyncWorldBoss, [LuaConst.ActivityType.CountryWorldBoss] = LuaConst.LevelType.SyncWarZoneWorldBoss, [LuaConst.ActivityType.RebelStrike] = LuaConst.LevelType.SyncRebelStrike, [LuaConst.ActivityType.MultiplayerDungeon] = LuaConst.LevelType.SyncTeamDifficultLevel, [LuaConst.ActivityType.MultiplayerDungeon1] = LuaConst.LevelType.SyncTeamDifficultLevel, [LuaConst.ActivityType.MultiplayerDungeon2] = LuaConst.LevelType.SyncTeamDifficultLevel, [LuaConst.ActivityType.MultiplayerDungeon3] = LuaConst.LevelType.SyncTeamDifficultLevel, [LuaConst.ActivityType.TreasureDungeon] = LuaConst.LevelType.SyncDigTeamPVE, [LuaConst.ActivityType.DemonGod] = LuaConst.LevelType.SyncDemonGod, -- 魔神降世(将星临世) [LuaConst.ActivityType.HeroMatch1v1] = LuaConst.LevelType.SyncUnfairSolo, -- 天地群雄 [LuaConst.ActivityType.HeroMatch3v3] = LuaConst.LevelType.CrossHeroMatchTown3V3, -- 天地群雄 [LuaConst.ActivityType.FairSoloTournament] = LuaConst.LevelType.CrossFairSoloTournamentTown, -- 天下会武 [LuaConst.ActivityType.TeamFairChampionship] = LuaConst.LevelType.TeamFairChampionshipTown, -- 巅峰对决(天下会武3V3) [LuaConst.ActivityType.SceneQuizPreliminary] = LuaConst.LevelType.SceneQuizTown, -- 一站到底 [LuaConst.ActivityType.SceneQuizFinal] = LuaConst.LevelType.SceneQuizTown, -- 一站到底 [LuaConst.ActivityType.GuildMine] = LuaConst.LevelType.LootMine, -- 势力挖矿 } Activities_Model.ActivityRewardType = { DayActivityReward = activity_opt_pb.DayActivityReward, -- 日活跃奖励 WeekActivityReward = activity_opt_pb.WeekActivityReward, -- 周活跃奖励 } function Activities_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageGetActivityReward, private.ActivityRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageGetActivityInfo, private.GetActivityInfoResp) NetManager.RegisterMsgCB(MessageEnums.MessageWeeklyCalendarSignUp, private.WeeklyCalendarSignUpResp) NetManager.RegisterMsgCB(MessageEnums.MessageWeeklyCalendarInfo, private.WeeklyCalendarInfoResp) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.OnLoginPostprocess) EventSystem.Regist(EventID.UI_Activity_Main_RedPoint, private.RefreshMainUIRedPoint) EventSystem.Regist(EventID.UI_Activity_Refresh_Single_RedPoint, private.RefreshRedPointByID) private.activitiesCfgData = {} private.calendarCfgData = {} private.activationCfgData = {} private.activationCalenderData = {} private.activationCalenderSignUp = false -- 周历是否报名 private.continuousLineClickRecord = {} --记录已点击的一条龙日常 private.activityCountInfoFunc = {} --活动次数信息 private.InitActivityCountInfoFunc() end function Activities_Model.OnShutdown() private.activitiesCfgData = {} EventSystem.UnRegist(EventID.UI_Activity_Main_RedPoint, private.HasRedPoint) end function private.OnLoginPostprocess() Activities_Model.InitActivityDatas() private.RefreshMainUIRedPoint() end -- --------------------------------服务器通信------------------------------------------------------------- function Activities_Model.RequestGetActivityInfo() local msg = activity_opt_pb.GetActivityInfoReq() NetManager.SendMessage(MessageEnums.MessageGetActivityInfo, msg) end local _activityIndex = -1 local _activityType = -1 function private.GetActivityInfoResp(msgResp) if msgResp.Resp.Code == 0 then end end function Activities_Model.RequestDayActivityAward(index) local msg = activity_opt_pb.GetActivityRewardReq() msg.index = index msg.type = Activities_Model.ActivityRewardType.DayActivityReward _activityType = Activities_Model.ActivityRewardType.DayActivityReward _activityIndex = index NetManager.SendMessage(MessageEnums.MessageGetActivityReward, msg) end function Activities_Model.RequestWeekActivityAward(index) local msg = activity_opt_pb.GetActivityRewardReq() msg.index = index msg.type = Activities_Model.ActivityRewardType.WeekActivityReward _activityType = Activities_Model.ActivityRewardType.WeekActivityReward NetManager.SendMessage(MessageEnums.MessageGetActivityReward, msg) end function private.ActivityRewardResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_Activity_Refresh_ActiveReward, msgResp.type) if _activityType == Activities_Model.ActivityRewardType.DayActivityReward then BIManager.DispatchBIClientEvent(BIManager.EventName.BDC_AwardButtonClick, BIManager.BDCEventParam.taskid, "MessageGetActivityReward" .. tostring(_activityIndex), BIManager.BDCEventParam.get_award_state, BIManager.BDCEventParamValue.Get_Award_State_Success) end else if _activityType == Activities_Model.ActivityRewardType.DayActivityReward then BIManager.DispatchBIClientEvent(BIManager.EventName.BDC_AwardButtonClick, BIManager.BDCEventParam.taskid, "MessageGetActivityReward" .. tostring(_activityIndex), BIManager.BDCEventParam.get_award_state, BIManager.BDCEventParamValue.Get_Award_State_Fail) end end end -- 周历奖励请求 function Activities_Model.WeeklyCalendarSignUpReq() local msg = weekly_calendar_opt_pb.WeeklyCalendarSignUpReq() NetManager.SendMessage(MessageEnums.MessageWeeklyCalendarSignUp, msg) end function private.WeeklyCalendarSignUpResp(msgResp) end -- 周历活动时间请求 function Activities_Model.WeeklyCalendarInfoReq() local msg = weekly_calendar_opt_pb.WeeklyCalendarInfoReq() NetManager.SendMessage(MessageEnums.MessageWeeklyCalendarInfo, msg) end function private.WeeklyCalendarInfoResp(msgResp) if msgResp.Resp.Code == 0 then table.clearArray(private.activationCalenderData) for i, v in ipairs(msgResp.info) do table.insert(private.activationCalenderData, v) end EventSystem.Dispatch(EventID.UI_Activity_Refresh_Calender) end end function Activities_Model.SyncActivationCalenderSignUp(signUpInfo) private.activationCalenderSignUp = signUpInfo.isSignUp CTL.Activities.CalculateRedPoint() EventSystem.Dispatch(EventID.UI_Activity_Refresh_Preview) end -- ----------------------------服务器返回数据--------------------------------------------------- --活跃度信息 function Activities_Model.SetActiveData(activeInfo) private.activityRewards = activeInfo.activityRewards private.curActivityActive = activeInfo.activityScore private.singleActivityActiveInfo = activeInfo.activityScoreInfo private.weekActivityRewards = activeInfo.weekActivityRewards private.curWeekActivityScore = activeInfo.weekActivityScore EventSystem.Dispatch(EventID.UI_Activity_Refresh_Active) end --领取奖励状态 function Activities_Model.GetAwardProgressStateArray() return private.activityRewards end --当前活跃度 function Activities_Model.GetCurActiveValue() return private.curActivityActive end --每个活动活跃度 function Activities_Model.GetSingleActivityActiveValue(ID) if private.singleActivityActiveInfo ~= nil and #private.singleActivityActiveInfo > 0 then if ID == LuaConst.ActivityType.TeamDungeon then local activityData = DataSheetManager.ActivityData:GetDataByID(ID) local score = 0 for i, v in ipairs(activityData.childID) do score = score + Activities_Model.GetSingleActivityActiveValue(v) end return score end for k, v in pairs(private.singleActivityActiveInfo) do if v.activityType == ID then return v.activityScore end end end return 0 end -- 当前周奖励领取状态 function Activities_Model.GetWeekAwardProgressStateArray() return private.weekActivityRewards end -- 当前周活跃度 function Activities_Model.GetCurWeekActivityScore() return private.curWeekActivityScore end -- 周历活动 function Activities_Model.GetWeeklyCalendarInfo(startTime) for _, v in ipairs(private.activationCalenderData) do if v.startTimestamp <= startTime and v.endTimestamp >= startTime and MDL.Unlock.IsServerUnlock(v.functionId) then return v.functionId end end return 0 end -- 周历报名情况 function Activities_Model.GetActivationCalenderSignUp() return private.activationCalenderSignUp end -- -------------------------配置信息----------------------------------------------- --初始化活动数据 function Activities_Model.InitActivityDatas() for i, v in DataSheetManager.ActivityChildData:GetEnumerator() do private.activitiesCfgData[v.ID] = {} end for k, v in DataSheetManager.ActivityData:GetEnumerator() do if v.IsShowInUI then if v.ID == LuaConst.ActivityType.MainlLine then --没有配置功能开启的活动,默认开启 table.insert(private.activitiesCfgData[v.SheetType], v) elseif v.ID == LuaConst.ActivityType.SceneQuizPreliminary or v.ID == LuaConst.ActivityType.SceneQuizFinal then --一站到底不用在活动界面显示 else if MDL.Unlock.IsClientUnlockWithText(v.FuctionUnlockID) or Activities_Model.PreviewUnlock(v.SheetShowConditionType, v.SheetShowConditionParam) then table.insert(private.activitiesCfgData[v.SheetType], v) end end end end end --当达到一定等级时,活动展示在预告活动中 function Activities_Model.PreviewUnlock(type, param) return MDL.Unlock.IsComplete(type, param) end function Activities_Model.GetActivityDatasByTabId(tabId) if tabId == CTL.Activities.ActivityType.Competition then table.sort(private.activitiesCfgData[tabId], private.SortCompetitionActivity) return private.activitiesCfgData[tabId] elseif tabId == CTL.Activities.ActivityType.LimitTime then table.sort(private.activitiesCfgData[tabId], private.SortTimeLimitActivityCfg) return private.activitiesCfgData[tabId] else table.sort(private.activitiesCfgData[tabId], private.SortNormalActivityCfg) return private.activitiesCfgData[tabId] end end --赛事排序 function private.SortCompetitionActivity(a, b) local aState = CTL.Activities.GetActivityEventState(a.ID) local bState = CTL.Activities.GetActivityEventState(b.ID) if aState == bState then if a.Sort == b.Sort then return a.ID < b.ID else return a.Sort > b.Sort end else return aState > bState end end --普通活动排序(日常、挑战、组队) function private.SortNormalActivityCfg(a, b) local countSortIndexA = private.GetNormalSortIndex(a) local countSortIndexB = private.GetNormalSortIndex(b) if countSortIndexA == countSortIndexB then if countSortIndexA == 0 then return a.LockSort > b.LockSort end if a.Sort == b.Sort then return a.ID < b.ID end return a.Sort > b.Sort else return countSortIndexA > countSortIndexB end end --普通活动排序index --0 未解锁 --10 已完成 未在玩法时间内 不可继续玩 (置灰无按钮) --20 已完成 在玩法时间内 不可继续玩 (置灰有按钮) --30 已完成 未在玩法时间内 可继续玩 (不置灰无按钮) --40 已完成 在玩法时间内 可继续玩 (不置灰有按钮) --50 未完成 未在玩法时间内 (不置灰无按钮) --60 未完成 在玩法时间内 (不置灰有按钮) function private.GetNormalSortIndex(activitiesData) local activityId = activitiesData.ID if not CTL.Activities.IsOpen(activityId) then return 0 end local isDone = CTL.Activities.IsDone(activityId) local isInOpeningTime = CTL.Activities.IsOpeningTime(activityId) local isCanContinuePlay = CTL.Activities.IsCanContinuePlay(activityId) if isDone and not isInOpeningTime and not isCanContinuePlay then return 10 elseif isDone and isInOpeningTime and not isCanContinuePlay then return 20 elseif isDone and not isInOpeningTime and isCanContinuePlay then return 30 elseif isDone and isInOpeningTime and isCanContinuePlay then return 40 elseif not isDone and not isInOpeningTime then return 50 elseif not isDone and isInOpeningTime then return 60 end logging.error(LTAG.ERROR,"活动状态有误,活动id为: ",activityId) return -1 end --限时活动排序 function private.SortTimeLimitActivityCfg(a, b) local countSortIndexA = private.GetTimeLimitSortIndex(a) local countSortIndexB = private.GetTimeLimitSortIndex(b) if countSortIndexA == countSortIndexB then if countSortIndexA == 0 then return a.LockSort > b.LockSort end if a.Sort == b.Sort then return a.ID < b.ID end return a.Sort > b.Sort else return countSortIndexA > countSortIndexB end end --限时活动排序index --0 未解锁 --10 非今日活动 --20 今日活动时间已过 --30 今日活动未开启 --40 今日活动正在开启 function private.GetTimeLimitSortIndex(activitiesData) local activityId = activitiesData.ID if not CTL.Activities.IsOpen(activityId) then return 0 end local state = CTL.Activities.GetState(activityId, true) local IsTodayActivity = CTL.Activities.IsTodayActivity(activityId) if not IsTodayActivity then return 10 elseif state == CTL.Activities.ActivityState.End then return 20 elseif state == CTL.Activities.ActivityState.NotOpen then return 30 elseif state == CTL.Activities.ActivityState.Opening then return 40 end logging.error(LTAG.ERROR,"活动状态有误,活动id为: ",activityId) return -1 end function private.RegistActivityCountInfoFunc(activityType, func) private.activityCountInfoFunc[activityType] = func end -- 注册活动的次数数据函数 -- return curCount,sumCount,curBuyCount function private.InitActivityCountInfoFunc() -- 日常环任务 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.RingDaily, function() return MDL.Task.GetRingTaskProgress(MDL.Task.Enum_RingTaskType.RingDaily) end) -- 名将列传 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.HeroBiography, function() local curCount = MDL.Biography.GetEnterNums() local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.HeroBiography).DailyRefreshTimes local curBuyCount = MDL.Purchase.GetAvailablePurchaseTimes(LuaConst.ActivityType.HeroBiography) return curCount,sumCount,curBuyCount end) -- 世界BOSS private.RegistActivityCountInfoFunc(LuaConst.ActivityType.WorldBoss,function() local curCount = MDL.WorldBoss.RewardCountLeft local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.WorldBoss).DailyRefreshTimes local curBuyCount = MDL.Purchase.GetAvailablePurchaseTimes(LuaConst.ActivityType.WorldBoss) return curCount,sumCount,curBuyCount end) -- 战区BOSS private.RegistActivityCountInfoFunc(LuaConst.ActivityType.CountryWorldBoss,function() local curCount = MDL.CountryWorldBoss.GetRewardCountLeft() local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.CountryWorldBoss).DailyRefreshTimes local curBuyCount = MDL.Purchase.GetAvailablePurchaseTimes(LuaConst.ActivityType.CountryWorldBoss) return curCount,sumCount,curBuyCount end) -- 个人Boss private.RegistActivityCountInfoFunc(LuaConst.ActivityType.PersonalBoss,function() local _, sumCount, curCount = MDL.PersonalBoss.GetRedPointState() return curCount,sumCount end) -- 群雄演武 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.ThreeTeamFight,function() local curCount = MDL.ThreeTeamFight.GetLeftTimes() local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.ThreeTeamFight).DailyRefreshTimes return curCount,sumCount end) -- 演武校场 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.OffLineSoloFight,function() local sumCount = DataSheetManager.ConstData:GetDataByID("OfflineSoloRewardNum").IntValue local curCount = sumCount - MDL.SoloFight.GetSoloFightRewardNum() return curCount,sumCount end) -- 曲阳之战 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.TeamDungeon1,function() local dungeonData = CTL.TeamDungeon.GetDungeonDataByActivityID(LuaConst.ActivityType.TeamDungeon1) local curCount = MDL.TeamDungeon.LeftAwardCountDic[dungeonData.ID] or 0 local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.TeamDungeon1).DailyRefreshTimes return curCount,sumCount end) -- 洛阳之战 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.TeamDungeon2,function() local dungeonData = CTL.TeamDungeon.GetDungeonDataByActivityID(LuaConst.ActivityType.TeamDungeon2) local curCount = MDL.TeamDungeon.LeftAwardCountDic[dungeonData.ID] or 0 local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.TeamDungeon2).DailyRefreshTimes return curCount,sumCount end) -- 官渡之战 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.TeamDungeon3,function() local dungeonData = CTL.TeamDungeon.GetDungeonDataByActivityID(LuaConst.ActivityType.TeamDungeon3) local curCount = MDL.TeamDungeon.LeftAwardCountDic[dungeonData.ID] or 0 local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.TeamDungeon3).DailyRefreshTimes return curCount,sumCount end) -- 资源副本 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.ResourcesChapter,function() return MDL.MaterialLevel.GetTotalCount(true) end) -- 叛军突袭 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.RebelStrike,function() local curCount = MDL.RebelStrike.GetLeftAwardTimes() local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.RebelStrike).DailyRefreshTimes return curCount,sumCount end) -- 多人副本 local multiplayerDungeonFunc = function() local rewardCountInfo = MDL.MultiplayerDungeon.GetRewardCountLeft() return rewardCountInfo.curCount, rewardCountInfo.sumCount end private.RegistActivityCountInfoFunc(LuaConst.ActivityType.MultiplayerDungeon,multiplayerDungeonFunc) private.RegistActivityCountInfoFunc(LuaConst.ActivityType.MultiplayerDungeon1,multiplayerDungeonFunc) private.RegistActivityCountInfoFunc(LuaConst.ActivityType.MultiplayerDungeon2,multiplayerDungeonFunc) private.RegistActivityCountInfoFunc(LuaConst.ActivityType.MultiplayerDungeon3,multiplayerDungeonFunc) -- 宠物捕捉 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.PetCatch,function() local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.PetCatch).DailyRefreshTimes local catchTimes = MDL.Pet.GetDailyCatchInfo() local curCount = math.max(sumCount - catchTimes, 0) return curCount, sumCount end) -- 组队副本 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.TeamDungeon,function() local curCount,sumCount local activityData = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.TeamDungeon) curCount = 0 sumCount = 0 for i, v in ipairs(activityData.childID) do if CTL.Activities.IsOpen(v) then local dungeonData = CTL.TeamDungeon.GetDungeonDataByActivityID(v) curCount = curCount + (MDL.TeamDungeon.LeftAwardCountDic[dungeonData.ID] or 0) sumCount = sumCount + DataSheetManager.ActivityData:GetDataByID(v).DailyRefreshTimes end end return curCount,sumCount end) -- 势力运镖 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.GuildEscort,function() local curCount, sumCount = MDL.GuildEscort.GetEscortNumLimit() local residueCount, allCount = MDL.GuildEscort.GetCutEscortNumLimit() curCount = curCount + residueCount sumCount = sumCount + allCount return curCount,sumCount end) -- 国战悬赏任务 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.WantedTask,function() local curCount = MDL.CountryWantedTask.GetTaskWantedDailyNum() - MDL.CountryWantedTask.GetHasCompleteTaskNum() local sumCount = MDL.CountryWantedTask.GetTaskWantedDailyNum() return curCount,sumCount end) -- 势力挖矿 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.GuildMine,function() local sumCount = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.GuildMine).DailyRefreshTimes local curCount = MDL.GuildMine.MineDailyCollectNum - MDL.GuildMine.GetMineCollectNum() + MDL.GuildMine.MineDailyFreePlunderNum + MDL.GuildMine.GetMinePurchaseNum() - MDL.GuildMine.GetMineLootNum() local curBuyCount = DataSheetManager.MinePlunderCost:GetDataCount() - MDL.GuildMine.GetMinePurchaseNum() return curCount,sumCount,curBuyCount end) -- 暴风一骑当先 private.RegistActivityCountInfoFunc(LuaConst.ActivityType.Storm,function() local sumCount = MDL.Storm.GetUnlockTeamNum() return -1,sumCount end) end --获取次数相关数据 function Activities_Model.GetCountInfo(ID) -- 是否显示数量, 当前可用次数, 配置免费次数, 剩余可购买次数 local isDisplayTxt, curCount, sumCount, curBuyCount = true, -1, -1, -1 if CTL.Activities.IsOpen(ID) then isDisplayTxt = true local func = private.activityCountInfoFunc[ID] if func then curCount,sumCount,curBuyCount = func() if not curBuyCount then curBuyCount = -1 end end end return { isDisplayCountTxt = isDisplayTxt, curCount = curCount, sumCount = sumCount, curBuyCount = curBuyCount } end --获取活跃度相关数据 function Activities_Model.GetActiveInfo(ID) local curActive, sumActive local cfgData = DataSheetManager.ActivityData:GetDataByID(ID) local countData = Activities_Model.GetCountInfo(ID) local sumCount = countData.sumCount if sumCount > 0 then sumActive = math.min(sumCount * cfgData.PerActivation, cfgData.TotalActivation) else sumActive = cfgData.TotalActivation end curActive = Activities_Model.GetSingleActivityActiveValue(ID) return curActive, sumActive end --活跃度配置数据 function Activities_Model.GetActiveValue() for i = 1, #private.activationCfgData do private.activationCfgData[i] = nil end for k, v in DataSheetManager.Activation:GetEnumerator() do table.insert(private.activationCfgData, v) end return private.activationCfgData end -- 获取当前未领取的周活跃度档位数据 -- 如果都领取过了 返回 最大的活跃度档位 function Activities_Model.GetUnReceiveMaxData() local weekAwardArray = private.weekActivityRewards or {} local weekActivationId = #weekAwardArray for i, v in ipairs(weekAwardArray) do if v == 0 then weekActivationId = i break end end return weekActivationId > 0 and DataSheetManager.WeekActivation:GetDataByID(weekActivationId) or nil, weekAwardArray[weekActivationId] end function Activities_Model.HasWeekRedPointRedPoint() --越南因为屏蔽了周活跃 所以也要屏蔽主入口的红点刷新 if GameAppInfo.IsVietnamPackage() then return false end local weekActivationCfg, receive = Activities_Model.GetUnReceiveMaxData() if receive == 0 then local curWeekActivityScore = Activities_Model.GetCurWeekActivityScore() return curWeekActivityScore >= weekActivationCfg.ActivationNum else return false end end --获取日常一条龙下个目标 function Activities_Model.GetContinuousLineTarget(ignoreRecord) for i, v in ipairs(DataSheetManager.ConstData:GetDataByID("ContinuousLineOrder").IntListValue) do local isUnlock = CTL.Activities.IsOpen(v) if isUnlock then local countData = Activities_Model.GetCountInfo(v) if countData.curCount > 0 then --剩余次数大于0认为没完成 if ignoreRecord then return v else if private.continuousLineClickRecord[v] ~= true then return v else --点击过 return nil end end end end end return nil end function Activities_Model.RecordContinuousLineTarget(id) private.continuousLineClickRecord[id] = true end function Activities_Model.IsContinuousLineFinalActivityFinish() local finalContinuousLineFinalActivity for i, v in ipairs(DataSheetManager.ConstData:GetDataByID("ContinuousLineOrder").IntListValue) do local isUnlock = CTL.Activities.IsOpen(v) if isUnlock then finalContinuousLineFinalActivity = v end end if finalContinuousLineFinalActivity then local countData = Activities_Model.GetCountInfo(finalContinuousLineFinalActivity) if countData.curCount > 0 then return false end end return true end --region -------------红点相关-------------------- local RedPointDict = {} function private.RefreshRedPointByID(activityId, hasRedPoint) -- TODO 即便活动关闭次数没有了 红点应该也正常显示,这里先特殊处理 演武校场 if CTL.Activities.IsOpen(activityId) or activityId == LuaConst.ActivityType.OffLineSoloFight or activityId == LuaConst.ActivityType.RebelStrike then RedPointDict[activityId] = hasRedPoint CTL.RedPoint.AddOneRedPointFunc(private.RealRefreshRedPointByID) else RedPointDict[activityId] = false end end function private.RealRefreshRedPointByID() EventSystem.Dispatch(EventID.UI_Activity_Refresh_Toggle_RedPoint) EventSystem.Dispatch(EventID.UI_Activity_Refresh_Cell_RedPoint) private.RefreshMainUIRedPoint() end function private.RefreshMainUIRedPoint() --对应功能红点 for k, v in pairs(RedPointDict) do if v then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.UIActivity) return end end --对应活跃度红点 local curActiveValue = Activities_Model.GetCurActiveValue() or 0 local cfgAward = Activities_Model.GetActiveValue() local awardArray = Activities_Model.GetAwardProgressStateArray() or {} for k, v in ipairs(cfgAward) do local canGet = curActiveValue >= v.ActivationNum local isGot = awardArray[k] if canGet then if isGot and isGot > 0 then else CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.UIActivity) return end end end -- 周活跃的红点 if Activities_Model.HasWeekRedPointRedPoint() then CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.UIActivity) return end CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.UIActivity) end function Activities_Model.GetRedPointByID(activityId) local isUnlock = true local unlockId = DataSheetManager.ActivityData:GetDataByID(activityId).FuctionUnlockID if unlockId > 0 then isUnlock = MDL.Unlock.IsUnlock(unlockId) end local value = RedPointDict[activityId] if value ~= nil then local cfgData = DataSheetManager.ActivityData:GetDataByID(activityId) local activityType = cfgData.SheetType return value and isUnlock, activityType end return false, -1 end function Activities_Model.GetRedPointStateByActivityID(activityId) return RedPointDict[activityId] end function Activities_Model.GetTabRedPointById(tabId) for k, v in pairs(RedPointDict) do local cfgData = DataSheetManager.ActivityData:GetDataByID(k) local activityType = cfgData.SheetType local isUnlock = true if cfgData.FuctionUnlockID > 0 then isUnlock = MDL.Unlock.IsUnlock(cfgData.FuctionUnlockID) end if activityType == tabId and v and isUnlock then return true end end return false end function Activities_Model.GetDailyRedPoint() for k, v in pairs(RedPointDict) do local cfgData = DataSheetManager.ActivityData:GetDataByID(k) local activityType = cfgData.SheetType local isUnlock = true if cfgData.FuctionUnlockID > 0 then isUnlock = MDL.Unlock.IsUnlock(cfgData.FuctionUnlockID) end if activityType == 1 and v and isUnlock then return true end end return false end function Activities_Model.GetLimitRedPoint() for k, v in pairs(RedPointDict) do local cfgData = DataSheetManager.ActivityData:GetDataByID(k) local activityType = cfgData.SheetType if activityType == 2 and v then local isUnlock, content = MDL.Unlock.IsClientUnlockWithText(cfgData.FuctionUnlockID, "") if isUnlock then return true end end end return false end --endregion -------------红点相关-------------------- return Activities_Model