282 lines
7.3 KiB
Lua
282 lines
7.3 KiB
Lua
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("<color=#5FFF53>(%s/%s)</color>", 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 |