local XRobot = require("XEntity/XRobot/XRobot") local XReformBaseStage = require("XEntity/XReform/XReformBaseStage") XReformActivityManagerCreator = function() local Debug = false local XReformActivityManager = {} -- XReformBaseStage 基础关卡数据 local BaseStageDic = {} -- XReformConfigs.ActivityConfig local Config = nil -- 当前打开的关卡id -- 默认拿第一关,如果服务器有返回拿最后到达的关卡 local CurrentStageId = XReformConfigs.GetStageConfigIds()[1] local CurrentHardStageId = XReformConfigs.GetHardStageConfigFirstId() local CurrentStageType = XReformConfigs.StageType.Normal -- 是否已经发起进入请求,用来避免重复请求 local IsEnterRequest = false -- 记录所有改造关卡最大分数字典数据,主要用来检测小红点 local EvolvableStageMaxScoreDic = {} local EvolvableStageMaxScoreHistoryDic = nil local BaseStageRedDotHistoryDic = nil local EvolvableStageMaxScoreHistoryDicKey = nil local BaseStageRedDotHistoryDicKey = nil -- 接口定义 local NetApiDic = { EnterRequest = "FubenReformEnterRequest", EnemyReplaceRequest = "ReformEnemyRequest", MemberReplaceRequest = "ReformMemberRequest", BuffUpdateRequest = "ReformAdditionRequest", EnvironmentUpdateRequest = "ReformEnvRequest", ChageStageDiffRequest = "ReformChangeStageDiffRequest", } function XReformActivityManager.GetAvailableChapters() local result = {} if not XReformActivityManager.GetIsOpen() then return result end table.insert(result, { Id = Config.Id, Type = XDataCenter.FubenManager.ChapterType.Reform, Name = XReformActivityManager.GetActivityName(), Icon = XReformActivityManager.GetBannerIcon(), }) return result end function XReformActivityManager.GetActivityName() return Config.Name end function XReformActivityManager.GetId() return Config.Id end function XReformActivityManager.GetBannerIcon() return Config.BannerIcon end function XReformActivityManager.GetHelpName() return Config.HelpName end function XReformActivityManager.GetScoreHelpName() return Config.ScoreHelpName end function XReformActivityManager.GetScoreItemId() if Config == nil then return -1 end return Config.ScoreItemId end function XReformActivityManager.GetTaskFinishScore(taskId) local conditionConfig = XTaskConfig.GetTaskConditionConfigs(taskId)[1] if conditionConfig == nil then return 0 end if #conditionConfig.Params <= 0 then return 0 end return conditionConfig.Params[1] end -- 获取玩法剩余时间 function XReformActivityManager.GetLeaveTimeStr() local endTime = XFunctionManager.GetEndTimeByTimeId(Config.OpenTimeId) local nowTime = XTime.GetServerNowTimestamp() return XUiHelper.GetTime(endTime - nowTime, XUiHelper.TimeFormatType.ACTIVITY) end function XReformActivityManager.HandleActivityEndTime() XLuaUiManager.RunMain() XUiManager.TipError(CS.XTextManager.GetText("ReformAtivityTimeEnd")) end function XReformActivityManager.GetActivityStartTime() if Config == nil then return 0 end return XFunctionManager.GetStartTimeByTimeId(Config.OpenTimeId) end function XReformActivityManager.GetActivityEndTime() if Config == nil then return 0 end return XFunctionManager.GetEndTimeByTimeId(Config.OpenTimeId) end -- 获取玩法当前进度 function XReformActivityManager.GetCurrentProgress() local result = 0 for _, baseStage in pairs(BaseStageDic) do if baseStage:GetIsPassed() then result = result + 1 end end return result end -- 获取玩法最大进度 function XReformActivityManager.GetMaxProgress() return #XReformConfigs.GetStageConfigIds() end -- 获取任务奖励最大分数 function XReformActivityManager.GetTaskMaxScore(stageType) local maxScore = 0 -- local taskDatas = XReformActivityManager.GetTaskDatas() -- local maxTaskScore = XReformActivityManager.GetTaskFinishScore(taskDatas[#taskDatas].Id) for _, baseStage in pairs(BaseStageDic) do if stageType == nil or baseStage:GetStageType() == stageType then for _, evolvableStage in pairs(baseStage:GetEvolvableStageDic()) do maxScore = maxScore + evolvableStage:GetMaxScore() -- if maxScore >= maxTaskScore then -- return maxTaskScore -- end end end end return maxScore end function XReformActivityManager.GetAllStageAccumulativeScore() local result = 0 for _, baseStage in pairs(BaseStageDic) do result = result + baseStage:GetAccumulativeScore() end return result end -- 获取当前战斗队伍数据 function XReformActivityManager.GetFightTeam() -- PS:TeamId来源于Config.tab和TeamType.tab return XDataCenter.TeamManager.GetPlayerTeam(CS.XGame.Config:GetInt("TypeIdReform")) end -- stageType : XReformConfigs.StageType function XReformActivityManager.GetBaseStages(stageType) local configIds = XReformConfigs.GetStageConfigIds() local config = nil local result = {} local baseStage = nil for _, id in pairs(configIds) do config = XReformConfigs.GetStageConfigById(id) if stageType == nil or stageType == config.StageType then baseStage = XReformActivityManager.GetBaseStage(config.Id) table.insert(result, baseStage) end end return result end function XReformActivityManager.CheckBaseStageIsShowRedDot(baseStageId) if Config == nil then return false end if baseStageId ~= nil then return XReformActivityManager.CheckBaseStageIsShowRedDotInner(baseStageId) else for stageId, config in pairs(XReformConfigs.GetStageConfigDic()) do if XReformActivityManager.CheckBaseStageIsShowRedDotInner(stageId) then return true end end end return false end function XReformActivityManager.CheckBaseStageIsShowRedDotInner(baseStageId) if Config == nil then return false end -- 判断难度是否开启 local config = XReformConfigs.GetStageConfigById(baseStageId) if config.StageType == XReformConfigs.StageType.Challenge and not XReformActivityManager.CheckIsUnlockChallenge() then return false end -- 如果有历史记录的话根据是否有改造难度开启 if XReformActivityManager.GetBaseStageRedDotHistory(baseStageId) then return XReformActivityManager.CheckEvolvableDiffIsShowRedDot(baseStageId) end return XFunctionManager.CheckInTimeByTimeId(config.OpenTimeId) end function XReformActivityManager.SetBaseStageRedDotHistory(baseStageId) if BaseStageRedDotHistoryDic == nil then BaseStageRedDotHistoryDic = {} end BaseStageRedDotHistoryDic[baseStageId] = true XSaveTool.SaveData(BaseStageRedDotHistoryDicKey, BaseStageRedDotHistoryDic) end function XReformActivityManager.GetBaseStageRedDotHistory(baseStageId) if BaseStageRedDotHistoryDic == nil then return false end return BaseStageRedDotHistoryDic[baseStageId] or false end function XReformActivityManager.CheckEvolvableDiffIsShowRedDot(baseStageId, evolvableDiffIndex) if Config == nil then return false end if baseStageId ~= nil and evolvableDiffIndex ~= nil then if XReformActivityManager.GetEvolableStageRedDotHistory(baseStageId, evolvableDiffIndex) then return false end return XReformActivityManager.GetDifficultyIsOpen(baseStageId, evolvableDiffIndex) elseif baseStageId ~= nil and evolvableDiffIndex == nil then for i = 2, XReformConfigs.GetBaseStageMaxDiffCount(baseStageId) do if not XReformActivityManager.GetEvolableStageRedDotHistory(baseStageId, i) and XReformActivityManager.GetDifficultyIsOpen(baseStageId, i) then return true end end else for stageId, _ in pairs(XReformConfigs.GetStageConfigDic()) do for i = 2, XReformConfigs.GetBaseStageMaxDiffCount(baseStageId) do if not XReformActivityManager.GetEvolableStageRedDotHistory(stageId, i) and XReformActivityManager.GetDifficultyIsOpen(stageId, i) then return true end end end end return false end function XReformActivityManager.SetEvolableStageRedDotHistory(baseStageId, diffIndex) if EvolvableStageMaxScoreHistoryDic == nil then EvolvableStageMaxScoreHistoryDic = {} end EvolvableStageMaxScoreHistoryDic[baseStageId] = EvolvableStageMaxScoreHistoryDic[baseStageId] or {} EvolvableStageMaxScoreHistoryDic[baseStageId][diffIndex] = true XSaveTool.SaveData(EvolvableStageMaxScoreHistoryDicKey, EvolvableStageMaxScoreHistoryDic) end function XReformActivityManager.GetEvolableStageRedDotHistory(baseStageId, diffIndex) if EvolvableStageMaxScoreHistoryDic == nil then return false end if not EvolvableStageMaxScoreHistoryDic[baseStageId] then return false end if not EvolvableStageMaxScoreHistoryDic[baseStageId][diffIndex] then return false end return true end function XReformActivityManager.GetDifficultyIsOpen(baseStageId, evolvableDiffIndex) local baseStageConfig = XReformConfigs.GetStageConfigById(baseStageId) -- 是否已经通关了基础关卡 if EvolvableStageMaxScoreDic[baseStageId] == nil or EvolvableStageMaxScoreDic[baseStageId][1] == nil then return false end if not XReformActivityManager.GetBaseStage(baseStageId):GetIsPassed() then return false end local nextEvolvableStageId = baseStageConfig.StageDiff[evolvableDiffIndex] local nextEvolvableStageConfig = XReformConfigs.GetStageDiffConfigById(nextEvolvableStageId) return XReformActivityManager.GetEvolvableMaxScore(baseStageId, evolvableDiffIndex - 1) >= nextEvolvableStageConfig.UnlockScore end function XReformActivityManager.GetCurrentStageType() return CurrentStageType end function XReformActivityManager.GetCurrentBaseStage(stageType) if stageType == XReformConfigs.StageType.Challenge then return XReformActivityManager.GetBaseStage(CurrentHardStageId) else return XReformActivityManager.GetBaseStage(CurrentStageId) end end function XReformActivityManager.GetCurrentBaseStageId(stageType) if stageType == XReformConfigs.StageType.Challenge then return CurrentHardStageId else return CurrentStageId end end function XReformActivityManager.SetCurrentBaseStageId(value, stageType) if stageType == XReformConfigs.StageType.Challenge then CurrentHardStageId = value else CurrentStageId = value end CurrentStageType = stageType end function XReformActivityManager.GetBaseStage(id) local baseStage = BaseStageDic[id] if baseStage == nil then local config = XReformConfigs.GetStageConfigById(id) if config == nil then XLog.Error("改造玩法服务器返回本地不存在的关卡配置id", id) return end baseStage = XReformBaseStage.New(config) BaseStageDic[id] = baseStage end return baseStage end -- stageType : XReformConfigs.StageType.Normal function XReformActivityManager.GetTaskDatas(stageType) local result = XDataCenter.TaskManager.GetTaskList(TaskType.Reform) local taskResult = nil if stageType then taskResult = {} local taskIdDic = XReformConfigs.GetTaskIdDicByStageType(stageType) for _, v in ipairs(result) do if taskIdDic[v.Id] then table.insert(taskResult, v) end end else taskResult = result end table.sort(taskResult, function(taskA, taskB) return taskA.Id < taskB.Id end) return taskResult end -- 请求完成所有任务 function XReformActivityManager.RequestFinishAllTask(cb) local taskIds = {} local taskList = XDataCenter.TaskManager.GetTaskList(TaskType.Reform) for _, taskData in pairs(taskList) do if taskData.State == XDataCenter.TaskManager.TaskState.Achieved then table.insert(taskIds, taskData.Id) end end XDataCenter.TaskManager.FinishMultiTaskRequest(taskIds, cb) end function XReformActivityManager.AddEvolvableMaxScore(baseStageId, diffIndex, maxScore) EvolvableStageMaxScoreDic[baseStageId] = EvolvableStageMaxScoreDic[baseStageId] or {} EvolvableStageMaxScoreDic[baseStageId][diffIndex] = maxScore end function XReformActivityManager.GetEvolvableMaxScore(baseStageId, diffIndex) if not EvolvableStageMaxScoreDic[baseStageId] then return 0 end if not EvolvableStageMaxScoreDic[baseStageId][diffIndex] then return 0 end return EvolvableStageMaxScoreDic[baseStageId][diffIndex] end --######################## 代理副本接口 ######################## function XReformActivityManager.InitStageInfo() local stageConfigs = XReformConfigs.GetStageConfigDic() local stageInfo = nil for _, config in pairs(stageConfigs) do stageInfo = XDataCenter.FubenManager.GetStageInfo(config.Id) stageInfo.Type = XDataCenter.FubenManager.StageType.Reform end end function XReformActivityManager.PreFight(stage, teamId, isAssist, challengeCount, challengeId) local baseStage = XReformActivityManager.GetBaseStage(stage.StageId) local evolvableStage = baseStage:GetCurrentEvolvableStage() local team = evolvableStage:GetTeam() local memberGroup = evolvableStage:GetEvolvableGroupByType(XReformConfigs.EvolvableGroupType.Member) local robotIds = {0, 0, 0} local cardIds = {0, 0, 0} local source = nil for i, sourceId in ipairs(team:GetEntityIds()) do if sourceId > 0 then source = memberGroup:GetSourceById(sourceId) -- 属于源 if source then robotIds[i] = source:GetRobotId() -- 属于本地角色 else cardIds[i] = sourceId end end end return { StageId = stage.StageId, IsHasAssist = false, ChallengeCount = 1, RobotIds = robotIds, CardIds = cardIds, CaptainPos = team:GetCaptainPos(), FirstFightPos = team:GetFirstFightPos() } end function XReformActivityManager.ShowReward(winData) local settleData = winData.SettleData local reformFightResult = settleData.ReformFightResult if reformFightResult then local baseStage = XReformActivityManager.GetBaseStage(winData.StageId) -- -- 如果当前通关的是基础关卡,直接过渡到改造等级1的关卡 -- if reformFightResult.CurrDiff == 0 then -- baseStage:SetCurrentDiffIndex(2) -- XReformActivityManager.ChageStageDiffRequest(baseStage:GetId(), 1) -- end local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(reformFightResult.CurrDiff + 1) -- 更新最大分数 evolvableStage:UpdateMaxScore(math.max(reformFightResult.Score, evolvableStage:GetMaxScore())) -- 更新最大难度 baseStage:UpdateUnlockDiffIndex(math.max(reformFightResult.UnlockDiff + 1, baseStage:GetUnlockDiffIndex())) baseStage:UpdateIsPassed(true) XReformActivityManager.AddEvolvableMaxScore(winData.StageId, evolvableStage:GetDifficulty(), evolvableStage:GetMaxScore()) end XLuaUiManager.Open("UiReformCombatSettleWin", winData) end --######################## 接口 ######################## function XReformActivityManager.EnterRequest(callback) if Debug then if callback then callback() end return end -- 避免重复请求 if IsEnterRequest then if callback then callback() end return end XNetwork.Call(NetApiDic.EnterRequest, nil, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end XReformActivityManager.InitWithServerData(res) IsEnterRequest = true if callback then callback() end end) end -- 敌人替换请求 function XReformActivityManager.EnemyReplaceRequest(stageId, diffIndex, replaceIdDbs, callback, enemyGroupId, enemyGroupType) if replaceIdDbs == nil then replaceIdDbs = {} end if Debug then local baseStage = XReformActivityManager.GetBaseStage(stageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(diffIndex) evolvableStage:UpdateEnemyReplaceIds(replaceIdDbs, nil, enemyGroupId, enemyGroupType) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.Enemy) if callback then callback() end return end XNetwork.Call(NetApiDic.EnemyReplaceRequest, { StageId = stageId, DiffIndex = diffIndex - 1, ReplaceIds = replaceIdDbs, EnemyGroupId = enemyGroupId, EnemyType = enemyGroupType }, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end -- ReformStageReplaceIdDb local baseStage = XReformActivityManager.GetBaseStage(res.StageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(res.DiffIndex + 1) evolvableStage:UpdateEnemyReplaceIds(res.ReplaceIds or {}, nil, enemyGroupId, enemyGroupType) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.Enemy) if callback then callback() end end) end -- 敌人词缀替换 function XReformActivityManager.EnemyBuffReplaceRequest(stageId, diffIndex, enemyGroupId, enemyGroupType, updateSourceId, buffIds, callback, operateData) local baseStage = XReformActivityManager.GetBaseStage(stageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(diffIndex) local enemyGroups = evolvableStage:GetEvolvableGroupByType(XReformConfigs.EvolvableGroupType.Enemy) local updateEnemyGroup = nil for _, group in ipairs(enemyGroups) do if group:GetId() == enemyGroupId and group:GetEnemyGroupType() == enemyGroupType then updateEnemyGroup = group break end end if updateEnemyGroup == nil then return end local replaceIdDic = updateEnemyGroup:GetReplaceIdDic() local replaceIdData = {} local tempBuffIds = nil for sourceId, targetId in pairs(replaceIdDic) do if sourceId == updateSourceId then tempBuffIds = buffIds else tempBuffIds = updateEnemyGroup:GetEnemyReformBuffIds(sourceId) end table.insert(replaceIdData, { SourceId = sourceId, TargetId = targetId, EnemyGroupId = enemyGroupId, EnemyType = enemyGroupType, AffixSourceId = tempBuffIds }) end XNetwork.Call(NetApiDic.EnemyReplaceRequest, { StageId = stageId, DiffIndex = diffIndex - 1, ReplaceIds = replaceIdData, EnemyGroupId = enemyGroupId, EnemyType = enemyGroupType }, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end -- ReformStageReplaceIdDb local baseStage = XReformActivityManager.GetBaseStage(res.StageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(res.DiffIndex + 1) evolvableStage:UpdateEnemyReplaceIds(res.ReplaceIds or {}, nil, enemyGroupId, enemyGroupType) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.EnemyBuff, operateData) if callback then callback() end end) end -- 成员替换请求 function XReformActivityManager.MemberReplaceRequest(stageId, diffIndex, replaceIdDbs, callback) if replaceIdDbs == nil then replaceIdDbs = {} end if Debug then local baseStage = XReformActivityManager.GetBaseStage(stageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(diffIndex) evolvableStage:UpdateMemberReplaceIds(replaceIdDbs, nil, true) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.Member) if callback then callback() end return end XNetwork.Call(NetApiDic.MemberReplaceRequest, { StageId = stageId, DiffIndex = diffIndex - 1, ReplaceIds = replaceIdDbs }, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end -- ReformStageReplaceIdDb local baseStage = XReformActivityManager.GetBaseStage(res.StageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(res.DiffIndex + 1) evolvableStage:UpdateMemberReplaceIds(res.ReplaceIds or {}, nil, true) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.Member) if callback then callback() end end) end -- 更新buff function XReformActivityManager.BuffUpdateRequest(stageId, diffIndex, buffIds, buffId) if buffIds == nil then buffIds = {} end if Debug then local baseStage = XReformActivityManager.GetBaseStage(stageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(diffIndex) evolvableStage:UpdateBuffIds(buffIds) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.Buff) return end XNetwork.Call(NetApiDic.BuffUpdateRequest, { StageId = stageId, DiffIndex = diffIndex - 1, BuffIds = buffIds }, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end local baseStage = XReformActivityManager.GetBaseStage(res.StageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(res.DiffIndex + 1) evolvableStage:UpdateBuffIds(res.BuffIds or {}) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.Buff, buffId) end) end function XReformActivityManager.EnvironmentUpdateRequest(stageId, diffIndex, environmentIds, operateData) if environmentIds == nil then environmentIds = {} end if Debug then local baseStage = XReformActivityManager.GetBaseStage(stageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(diffIndex) evolvableStage:UpdateEnvironmentIds(environmentIds) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.Environment) return end XNetwork.Call(NetApiDic.EnvironmentUpdateRequest, { StageId = stageId, DiffIndex = diffIndex - 1, EnvIds = environmentIds }, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end local baseStage = XReformActivityManager.GetBaseStage(res.StageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(res.DiffIndex + 1) evolvableStage:UpdateEnvironmentIds(res.EnvIds or {}) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.Environment, operateData) end) end function XReformActivityManager.StageTimeUpdateRequest(stageId, diffIndex, stageTimeId, operateData) XNetwork.Call("ReformTimeEnvRequest", { StageId = stageId, DiffIndex = diffIndex - 1, TimeEnvId = stageTimeId }, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end local baseStage = XReformActivityManager.GetBaseStage(res.StageId) local evolvableStage = baseStage:GetEvolvableStageByDiffIndex(res.DiffIndex + 1) evolvableStage:UpdateStageTimeId(res.TimeEnvId or 0) XEventManager.DispatchEvent(XEventId.EVENT_REFORM_EVOLVABLE_GROUP_UPDATE, XReformConfigs.EvolvableGroupType.StageTime, operateData) end) end function XReformActivityManager.ChageStageDiffRequest(stageId, diffIndex, callback) if Debug then if callback then callback() end return end XNetwork.Call(NetApiDic.ChageStageDiffRequest, { StageId = stageId, DiffIndex = diffIndex - 1}, function(res) if res.Code ~= XCode.Success then XUiManager.TipCode(res.Code) return end if callback then callback() end end) end --######################## 私有方法 ######################## function XReformActivityManager.Init() if XReformActivityManager.GetIsOpen() then EvolvableStageMaxScoreHistoryDicKey = "XReformActivityManager.EvolvableStageMaxScoreHistoryDicKey" .. XPlayer.Id .. Config.Id BaseStageRedDotHistoryDicKey = "XReformActivityManager.BaseStageRedDotHistoryDicKey" .. XPlayer.Id .. Config.Id BaseStageRedDotHistoryDic = XSaveTool.GetData(BaseStageRedDotHistoryDicKey) or {} EvolvableStageMaxScoreHistoryDic = XSaveTool.GetData(EvolvableStageMaxScoreHistoryDicKey) or {} XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Reform, true, true) end end function XReformActivityManager.InitConfig(id) Config = XReformConfigs.GetActivityConfigById(id) end function XReformActivityManager.GetIsOpen() if Config == nil then return false end return XFunctionManager.CheckInTimeByTimeId(Config.OpenTimeId) end function XReformActivityManager.InitWithServerData(data) -- XReformFubenDb local reformFubenDb = data.ReformFubenDb XReformActivityManager.InitConfig(reformFubenDb.ActivityId) XReformActivityManager.Init() local baseStage = nil local firstNotPassId = nil local hardFirstNotPassId = nil local maxStageId = CurrentStageId local maxHardStageId = CurrentHardStageId for _, stageDb in ipairs(reformFubenDb.StageDbs) do baseStage = XReformActivityManager.GetBaseStage(stageDb.Id) if baseStage == nil then XLog.Warning(string.format("服务器基础关卡Id%s在本地配置找不到", stageDb.Id)) else baseStage:InitWithServerData(stageDb) if baseStage:GetStageType() == XReformConfigs.StageType.Normal then maxStageId = math.max(stageDb.Id, maxStageId) else maxHardStageId = math.max(stageDb.Id, maxHardStageId) end end end local stageConfigIds = XReformConfigs.GetStageConfigIds() for _, id in ipairs(stageConfigIds) do baseStage = XReformActivityManager.GetBaseStage(id) if baseStage:GetStageType() == XReformConfigs.StageType.Normal then if firstNotPassId == nil and baseStage:GetIsUnlock() and not baseStage:GetIsPassed() then firstNotPassId = baseStage:GetId() end else if hardFirstNotPassId == nil and baseStage:GetIsUnlock() and not baseStage:GetIsPassed() then hardFirstNotPassId = baseStage:GetId() end end end if firstNotPassId ~= nil then CurrentStageId = firstNotPassId else CurrentStageId = maxStageId end if hardFirstNotPassId ~= nil then CurrentHardStageId = hardFirstNotPassId else CurrentHardStageId = maxHardStageId end end function XReformActivityManager.GetPreviewCloseTime() return Config.PreviewCloseTime end function XReformActivityManager.CheckIsUnlockChallenge() local baseStages = XReformActivityManager.GetBaseStages(XReformConfigs.StageType.Normal) local score = 0 for _, baseStage in ipairs(baseStages) do score = score + baseStage:GetAccumulativeScore() end return score >= Config.UnlockChallengeScores end function XReformActivityManager.GetUnlockChallengeScores() return Config.UnlockChallengeScores end -- stageType : XReformConfigs.StageType function XReformActivityManager.GetSceneUrlAndModelUrl(stageType) local sceneConfigs = XReformConfigs.GetCfgByIdKey(XReformConfigs.TableKey.ReformClientConfig, "SceneUrl").Values local modelConfigs = XReformConfigs.GetCfgByIdKey(XReformConfigs.TableKey.ReformClientConfig, "ModelUrl").Values if stageType == XReformConfigs.StageType.Normal then return sceneConfigs[1], modelConfigs[2] elseif stageType == XReformConfigs.StageType.Challenge then return sceneConfigs[2], modelConfigs[2] end end XReformActivityManager.InitConfig() return XReformActivityManager end --XRpc.NotifyReformFubenActivity = function(data) -- XDataCenter.ReformActivityManager.InitWithServerData(data) --end