local DailyChallengeData = class("DailyChallengeData", BaseData) local TASK_CFG = ConfigManager:getConfig("task_daily_challenge") local PER_TASK = {[7] = true, [8] = true} local FIXED_HERO_TASK = {[2] = true, [7] = true} local MATCH_TYPE_TASK = {[5] = true, [8] = true} local NEED_PROGRESS_TASK = {[3] = true, [4] = true, [5] = true, [7] = true, [8] = true} function DailyChallengeData:init(data) data = data or {} data = { -- 临时数据 max_wave = 1, today_fixed_chapter_id = 1, rand_chapter_daily_id = 1, tasks = { { task_id = 1, param = 0, progress = 0, claimed = false }, { task_id = 3, param = 0, progress = 0, claimed = false }, { task_id = 7, param = 12001, progress = 0, claimed = false } }, buff_id = {1, 11}, totalFightCount = 0, today_challenge_count = 0, } -- 服务器的初始数据 self.maxWave = data.max_wave or 0 self.fixedChapterId = data.today_fixed_chapter_id or 1 self.chapterDailyId = data.rand_chapter_daily_id or 1 self.tasks = data.tasks or {} self.buffIds = data.buff_id or {} self.totalFightCount = data.totalFightCount or 0 self.todayFightCount = data.today_challenge_count or 0 if not data then return end self.taskIds = {1,2,3} end function DailyChallengeData:clear() end function DailyChallengeData:isOpen() return ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.DAILY_CHALLENGE, true) end -- 是否满足挑战条件 function DailyChallengeData:isMeetChallenge() return self:isOpen() and self:isEnoughChallengeTime() and self:isEnoughHp() end -- 次数是否足够 function DailyChallengeData:isEnoughChallengeTime() return self:getTodayRemainLimitCount() > 0 end -- 获取挑战次数消耗 function DailyChallengeData:getChallengeTimeCost() return GFunc.getConstIntValue("daily_challenge_limit") end -- 体力是否足够 function DailyChallengeData:isEnoughHp() local const = self:getChallengeHpCost() local constNum = nil if const then constNum = GFunc.getRewardNum(const) else constNum = 0 end return constNum <= DataManager.BagData.ItemData:getVit() end -- 获取挑战体力消耗 function DailyChallengeData:getChallengeHpCost() return GFunc.getConstReward("daily_challenge_cost") end -- 获取今日挑战场景配置 function DailyChallengeData:getTodayConfig() -- body end -- 获取今日挑战任务id列表 function DailyChallengeData:getTaskIds() return self.taskIds end -- 获取任务奖励 function DailyChallengeData:getTaskReward(id) local task = self.taskIds[id] if task == nil then return GConst.EMPTY_STRING end return self:getTaskCfg()[task.taskId].reward end function DailyChallengeData:getBuffTips(id) return I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE) end function DailyChallengeData:getTaskTips(id) return I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE) end function DailyChallengeData:getTaskCfg() if self.taskCfg == nil then self.taskCfg = ConfigManager:getConfig("task_daily_challenge") end return self.taskCfg end -- 获取今日通关次数 function DailyChallengeData:getTodayPassNum() return self.todayFightCount end -- 获取今日增益、负面buff function DailyChallengeData:getTodayBuff() return self.buffIds -- return ConfigManager:getConfig("buff_daily_challenge")[self.buffIds[1]], ConfigManager:getConfig("buff_daily_challenge")[self.buffIds[2]] end -- 获取今日剩余时间 function DailyChallengeData:getTodaySurplusTime() local result = Time:getOverOfServerToday() - Time:getServerTime() if result < 0 then result = 0 end return result end -- 获取最终boss id function DailyChallengeData:getFinalBossId() return "m10001" end -- 任务是否完成 function DailyChallengeData:isTaskFinish(index) if not self.tasks[index] then return false end return self.tasks[index].claim end function DailyChallengeData:getTasks() return self.tasks end function DailyChallengeData:getTaskById(taskId) for index, taskInfo in ipairs(self.tasks) do if taskInfo.task_id == taskId then return taskInfo end end return end function DailyChallengeData:canClaimTask(index) if not self.tasks[index] then return false end if self.tasks[index].claim then return false end local cfg = self:getTaskCfgInfo(self.tasks[index].taskId) if not cfg then return false end return cfg.number <= self.tasks[index].progress end function DailyChallengeData:getTaskProgresss(index) if not self.tasks[index] then return 0 end return self.tasks[index].progress end function DailyChallengeData:getTaskCfgInfo(taskId) return TASK_CFG[taskId] end function DailyChallengeData:getTaskTotalNumber(taskId) if self:getTaskCfgInfo(taskId) then return self:getTaskCfgInfo(taskId).param else return 1 -- 容错,防止报错 end end function DailyChallengeData:getTaskRewards(taskId) if self:getTaskCfgInfo(taskId) then return self:getTaskCfgInfo(taskId).reward end return nil end function DailyChallengeData:getTaskDesc(taskId, needProgress, customProgress) local desc = GConst.EMPTY_STRING if not I18N:getConfig("task_daily_challenge")[taskId] then return desc end local taskNum = self:getTaskTotalNumber(taskId) if PER_TASK[taskId] then taskNum = taskNum * 100 // GConst.BattleConst.DEFAULT_FACTOR end local taskInfo = self:getTaskById(taskId) if not taskInfo then return desc end local conditionStr if FIXED_HERO_TASK[taskId] then -- 具体英雄 conditionStr = ModuleManager.HeroManager:getHeroName(taskInfo.param, true) elseif MATCH_TYPE_TASK[taskId] then -- 颜色英雄 conditionStr = ModuleManager.HeroManager:getMatchTypeName(taskInfo.param, true) end if conditionStr then desc = I18N:getText("task_daily_challenge", taskId, "desc", conditionStr, taskNum) else desc = I18N:getText("task_daily_challenge", taskId, "desc", taskNum) end if needProgress and NEED_PROGRESS_TASK[taskId] then local progress = customProgress or taskInfo.progress if PER_TASK[taskId] then progress = progress * 100 // GConst.BattleConst.DEFAULT_FACTOR .. "%" taskNum = taskNum .. "%" end local progressStr = string.format("(%s/%s)", progress, taskNum) desc = desc .. progressStr end return desc end function DailyChallengeData:getTodayRemainLimitCount() local count = self:getChallengeTimeCost() - self.todayFightCount if count < 0 then count = 0 end return count end function DailyChallengeData:getFixedChapterId() return self.fixedChapterId end function DailyChallengeData:getChapterDailyId() return self.chapterDailyId end function DailyChallengeData:setFixedChapterId(id) self.fixedChapterId = id end function DailyChallengeData:getTotalFightCount() return self.totalFightCount end function DailyChallengeData:dealTask(taskProgressInfo) end return DailyChallengeData