From 8cf688aeaefe6dcc641a9d20b65c5e8c6c94a171 Mon Sep 17 00:00:00 2001 From: puxuan <413323644@qq.com> Date: Mon, 29 Sep 2025 17:02:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/app/common/data_manager.lua | 3 +- .../act_sprint/act_sprint_manager.lua | 14 +- .../act_sprint_main_ui.lua | 4 + .../cell/standard_cell.lua | 10 +- .../act_sprint_summon_all/cell/task_cell.lua | 10 +- .../act_sprint_summon_all/comp/gift_comp.lua | 2 +- .../comp/standard_comp.lua | 12 +- .../act_sprint_summon_all/comp/task_comp.lua | 2 +- .../act_sprint/act_sprint_summon_data_all.lua | 385 +--------------- lua/app/userdata/activity/act_task_data.lua | 418 ++++++++++++++++++ .../userdata/activity/act_task_data.lua.meta | 10 + lua/app/userdata/activity/activity_data.lua | 396 ----------------- 12 files changed, 480 insertions(+), 786 deletions(-) create mode 100755 lua/app/userdata/activity/act_task_data.lua create mode 100644 lua/app/userdata/activity/act_task_data.lua.meta diff --git a/lua/app/common/data_manager.lua b/lua/app/common/data_manager.lua index edb0f112..d357a078 100644 --- a/lua/app/common/data_manager.lua +++ b/lua/app/common/data_manager.lua @@ -23,6 +23,7 @@ function DataManager:init() self:initManager("TutorialData", "app/userdata/tutorial/tutorial_data") self:initManager("MailData", "app/userdata/mail/mail_data") self:initManager("ActivityData", "app/userdata/activity/activity_data") + self:initManager("ActTaskData", "app/userdata/activity/act_task_data") self:initManager("BountyData", "app/userdata/bounty/bounty_data") self:initManager("ArenaBountyData", "app/userdata/arena/arena_bounty_data") self:initManager("TaskData", "app/userdata/task/task_data") @@ -170,7 +171,7 @@ function DataManager:initWithServerData(data) -- 活动要在礼包后初始化 self.ActTimeData:init(data.activities) -- 全活动时间, after PlayerData self.ActivityData:initExchangeData(data.activity_exchange) - self.ActivityData:initTaskData(data.activity_score_task, data.activity_task) + self.ActTaskData:initTaskData(data.activity_score_task, data.activity_task) self.ActSprintData:init(data.activity_rush_exchange) self.ActSevenDayData:initData(data.seven_days, true) -- self.ActSprintSummonDataAll:initTaskData(data.activity_score_task, data.activity_task) diff --git a/lua/app/module/activity/act_sprint/act_sprint_manager.lua b/lua/app/module/activity/act_sprint/act_sprint_manager.lua index 4cbe59fe..8b867281 100644 --- a/lua/app/module/activity/act_sprint/act_sprint_manager.lua +++ b/lua/app/module/activity/act_sprint/act_sprint_manager.lua @@ -81,7 +81,7 @@ function ActSprintManager:rspStandardReward(result) local sprintData = DataManager.ActSprintData:getSprintDetailData(result.reqData.activity_id) -- sprintData:onGetStandardTurnReward(result.reqData.id) - DataManager.ActivityData:onGetTurnRewardScore(result.reqData.activity_id) + DataManager.ActTaskData:onGetTurnRewardScore(result.reqData.activity_id) if result.rewards then GFunc.showRewardBox(result.rewards) end @@ -122,14 +122,14 @@ function ActSprintManager:rspTask(result) GFunc.showRewardBox(result.rewards) end - DataManager.ActivityData:onTaskClaimed(result.reqData.activity_id, result.reqData.task_id) + DataManager.ActTaskData:onTaskClaimed(result.reqData.activity_id, result.reqData.task_id) -- bi local sprintData = DataManager.ActSprintData:getSprintDetailData(result.reqData.activity_id) local biType = sprintData:getBIType() local taskFinishNum, taskTotalNum = sprintData:getBINormalTaskNumInfo() - local sprintTaskRound = DataManager.ActivityData:getTurnScore(result.reqData.activity_id) - local sprintRewardRound = DataManager.ActivityData:getClaimedTurnScore(result.reqData.activity_id) + local sprintTaskRound = DataManager.ActTaskData:getTurnScore(result.reqData.activity_id) + local sprintRewardRound = DataManager.ActTaskData:getClaimedTurnScore(result.reqData.activity_id) BIReport:postActSprintClaimNormalTask(result.reqData.activity_id, biType, result.reqData.task_id, taskFinishNum, taskTotalNum, sprintTaskRound, sprintRewardRound) end @@ -146,14 +146,14 @@ function ActSprintManager:rspStandardTask(result) GFunc.showRewardBox(result.rewards) end - DataManager.ActivityData:onTaskSuccessScore(result.reqData.activity_id) + DataManager.ActTaskData:onTaskSuccessScore(result.reqData.activity_id) local sprintData = DataManager.ActSprintData:getSprintDetailData(result.reqData.activity_id) local canGetRewardStandardTaskList = sprintData:getCanGetRewardStandardTaskList() -- bi local biType = sprintData:getBIType() local taskFinishNum, taskTotalNum = sprintData:getBISprintTaskNumInfo() - local sprintTaskRound = DataManager.ActivityData:getTurnScore(result.reqData.activity_id) - local sprintRewardRound = DataManager.ActivityData:getClaimedTurnScore(result.reqData.activity_id) + local sprintTaskRound = DataManager.ActTaskData:getTurnScore(result.reqData.activity_id) + local sprintRewardRound = DataManager.ActTaskData:getClaimedTurnScore(result.reqData.activity_id) BIReport:postActSprintClaimSprintTask(result.reqData.activity_id, biType, canGetRewardStandardTaskList, taskFinishNum, taskTotalNum, sprintTaskRound, sprintRewardRound) end diff --git a/lua/app/ui/activity/act_sprint_summon_all/act_sprint_main_ui.lua b/lua/app/ui/activity/act_sprint_summon_all/act_sprint_main_ui.lua index bfe00588..c0075b0d 100644 --- a/lua/app/ui/activity/act_sprint_summon_all/act_sprint_main_ui.lua +++ b/lua/app/ui/activity/act_sprint_summon_all/act_sprint_main_ui.lua @@ -100,6 +100,10 @@ function ActSprintMainUI:onLoadRootComplete() self:refreshRedPoint() self:onRefresh() end) + self:bind(DataManager.ActTaskData, "isDirty", function() + self:refreshRedPoint() + self:onRefresh() + end) self:addEventListener(EventManager.CUSTOM_EVENT.CHANGE_MAIN_CITY_PAGE, function() self:closeUI() end) diff --git a/lua/app/ui/activity/act_sprint_summon_all/cell/standard_cell.lua b/lua/app/ui/activity/act_sprint_summon_all/cell/standard_cell.lua index 3dd13787..544fb9d3 100644 --- a/lua/app/ui/activity/act_sprint_summon_all/cell/standard_cell.lua +++ b/lua/app/ui/activity/act_sprint_summon_all/cell/standard_cell.lua @@ -17,11 +17,11 @@ function StandardCell:refresh(actId, actTaskId) end local rewardLayout = uiMap["standard_cell.bg.rewards"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT) - local num = DataManager.ActivityData:getTaskNumScore(actId, actTaskId) - local type = DataManager.ActivityData:getTaskType(actTaskId) - local limit = DataManager.ActivityData:getTaskTarget(actTaskId) - local rewards = DataManager.ActivityData:getTaskReward(actTaskId) - local hasGot = DataManager.ActivityData:getHasGotTaskRewardScore(actId, actTaskId) + local num = DataManager.ActTaskData:getTaskNumScore(actId, actTaskId) + local type = DataManager.ActTaskData:getTaskType(actTaskId) + local limit = DataManager.ActTaskData:getTaskTarget(actTaskId) + local rewards = DataManager.ActTaskData:getTaskReward(actTaskId) + local hasGot = DataManager.ActTaskData:getHasGotTaskRewardScore(actId, actTaskId) local canGet = num >= limit and not hasGot -- 修订 if num > limit then diff --git a/lua/app/ui/activity/act_sprint_summon_all/cell/task_cell.lua b/lua/app/ui/activity/act_sprint_summon_all/cell/task_cell.lua index c03bbfa8..5605ce5d 100644 --- a/lua/app/ui/activity/act_sprint_summon_all/cell/task_cell.lua +++ b/lua/app/ui/activity/act_sprint_summon_all/cell/task_cell.lua @@ -21,11 +21,11 @@ function TaskCell:refresh(actId, actTaskId) local funcBtn = uiMap["task_cell.bg.func_btn"] local funcTx = uiMap["task_cell.bg.func_btn.desc_tx"] - local num = DataManager.ActivityData:getTaskProg(actId, actTaskId) - local taskType = DataManager.ActivityData:getTaskType(actTaskId) - local limit = DataManager.ActivityData:getTaskTarget(actTaskId) - local rewards = DataManager.ActivityData:getTaskReward(actTaskId) - local hasGot = DataManager.ActivityData:isTaskReceived(actId, actTaskId) + local num = DataManager.ActTaskData:getTaskProg(actId, actTaskId) + local taskType = DataManager.ActTaskData:getTaskType(actTaskId) + local limit = DataManager.ActTaskData:getTaskTarget(actTaskId) + local rewards = DataManager.ActTaskData:getTaskReward(actTaskId) + local hasGot = DataManager.ActTaskData:isTaskReceived(actId, actTaskId) -- 修订 if num > limit then num = limit diff --git a/lua/app/ui/activity/act_sprint_summon_all/comp/gift_comp.lua b/lua/app/ui/activity/act_sprint_summon_all/comp/gift_comp.lua index 73995b94..ea847316 100644 --- a/lua/app/ui/activity/act_sprint_summon_all/comp/gift_comp.lua +++ b/lua/app/ui/activity/act_sprint_summon_all/comp/gift_comp.lua @@ -13,7 +13,7 @@ function GiftComp:refresh(actId) self.txTitle:setText(I18N:getGlobalText(GConst.ActSprintConst.ACT_LIST_NAME[actId])) self.banner:setTexture(GConst.ActSprintConst.ACT_MAIN_BANNER[actId]) local cfgList = DataManager.ActSprintSummonDataAll:getActGiftList(actId) - self.giftList = DataManager.ActGiftData:getGiftIdsSort(actId) + self.giftList = table.clearOrCreate(self.giftList) for _, id in ipairs(cfgList) do table.insert(self.giftList, id) end diff --git a/lua/app/ui/activity/act_sprint_summon_all/comp/standard_comp.lua b/lua/app/ui/activity/act_sprint_summon_all/comp/standard_comp.lua index c1eea8ae..c43696ef 100644 --- a/lua/app/ui/activity/act_sprint_summon_all/comp/standard_comp.lua +++ b/lua/app/ui/activity/act_sprint_summon_all/comp/standard_comp.lua @@ -25,13 +25,13 @@ function StandardComp:init() end function StandardComp:refresh(actId) - local turn = DataManager.ActivityData:getTurnScore(actId) - local maxTurn = DataManager.ActivityData:getMaxTurnScore(actId) - local canGetTurnReward = DataManager.ActivityData:getCanGetTurnRewardScore(actId) - local gotAllTurnReward = DataManager.ActivityData:getGotAllTurnRewardScore(actId) + local turn = DataManager.ActTaskData:getTurnScore(actId) + local maxTurn = DataManager.ActTaskData:getMaxTurnScore(actId) + local canGetTurnReward = DataManager.ActTaskData:getCanGetTurnRewardScore(actId) + local gotAllTurnReward = DataManager.ActTaskData:getGotAllTurnRewardScore(actId) -- 轮次奖励 - local rewards = DataManager.ActivityData:getRewardsgetMaxTurnScore(actId) + local rewards = DataManager.ActTaskData:getRewardsgetMaxTurnScore(actId) for i = 1, REWARD_CELL_COUNT do local reward = rewards and rewards[i] if reward then @@ -74,7 +74,7 @@ function StandardComp:refresh(actId) end) -- 滑动窗 - self.standardList = DataManager.ActivityData:getActTaskListScore(actId) + self.standardList = DataManager.ActTaskData:getActTaskListScore(actId) if self.scrollRect == nil then self.scrollRect = self.scrollrect:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) self.scrollRect:addInitCallback(function() diff --git a/lua/app/ui/activity/act_sprint_summon_all/comp/task_comp.lua b/lua/app/ui/activity/act_sprint_summon_all/comp/task_comp.lua index bb055fbd..f86ca459 100644 --- a/lua/app/ui/activity/act_sprint_summon_all/comp/task_comp.lua +++ b/lua/app/ui/activity/act_sprint_summon_all/comp/task_comp.lua @@ -12,7 +12,7 @@ end function TaskComp:refresh(actId) self.txTitle:setText(I18N:getGlobalText(GConst.ActSprintConst.ACT_LIST_NAME[actId])) self.banner:setTexture(GConst.ActSprintConst.ACT_MAIN_BANNER[actId]) - self.taskList = DataManager.ActivityData:getTaskSortList(actId) + self.taskList = DataManager.ActTaskData:getTaskSortList(actId) if self.scrollRect == nil then self.scrollRect = self.scrollrect:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) self.scrollRect:addInitCallback(function() diff --git a/lua/app/userdata/activity/act_sprint/act_sprint_summon_data_all.lua b/lua/app/userdata/activity/act_sprint/act_sprint_summon_data_all.lua index 6c651d99..ea60cc57 100644 --- a/lua/app/userdata/activity/act_sprint/act_sprint_summon_data_all.lua +++ b/lua/app/userdata/activity/act_sprint/act_sprint_summon_data_all.lua @@ -7,18 +7,7 @@ end function ActSprintSummonData:clear() DataManager:unregisterCrossDayFunc("ActSprintSummonDataAll") - ModuleManager.TaskManager:unRegisterAllModuleTask("ActSprintSummonDataAll") self.isInit = false - - -- 达标任务数据 - self.standardScore = 0 - self.standardTotalScore = 0 - self.standardTurn = 0 - self.standardClaimed = 0 - self.standardClaimedTaskMap = {} - -- 普通任务进度 - self.taskProgressMap = {} - self.taskClaimedMap = {} end function ActSprintSummonData:setDirty() @@ -32,51 +21,6 @@ function ActSprintSummonData:clearActInfo(actId) end end --- 初始化任务数据 -function ActSprintSummonData:initTaskData(standardData, normalData) - standardData = standardData and standardData.task_data or {} - normalData = normalData and normalData.task_data or {} - - if EDITOR_MODE then - Logger.logHighlight("任务模块") - Logger.printTable(standardData) - Logger.printTable(normalData) - end - - -- 达标任务 - for _, info in ipairs(standardData) do - if info.activity_id == self.actId then - -- 约定只有1个 - local score = info.score - local totalScore = info.total_score - local round = info.round - local roundClaimed = info.round_claimed - local claimedTaskList = info.claimed - - self.standardScore = score - self.standardTotalScore = totalScore - self.standardTurn = round - self.standardClaimed = roundClaimed - self.standardClaimedTaskMap = table.clearOrCreate(self.standardClaimedTaskMap) - for _, taskId in ipairs(claimedTaskList) do - self.standardClaimedTaskMap[taskId] = true - end - end - end - - -- 常规任务 - for _, info in ipairs(normalData) do - if info.activity_id == self.actId then - local taskId = info.data.id - local progress = info.data.progress - local stageClaimed = info.data.stage_claimed - - self.taskProgressMap[taskId] = progress - self.taskClaimedMap[taskId] = stageClaimed > 0 - end - end -end - function ActSprintSummonData:setActivityInfo(data) if self.actId ~= data.actId then self:clear() @@ -103,15 +47,7 @@ function ActSprintSummonData:setActivityInfo(data) end -- 当天开启 重置任务 if self:getStartTime() == Time:getBeginningOfServerToday() then - -- 达标任务数据 - self.standardScore = 0 - self.standardTotalScore = 0 - self.standardTurn = 0 - self.standardClaimed = 0 - self.standardClaimedTaskMap = {} - -- 普通任务进度 - self.taskProgressMap = {} - self.taskClaimedMap = {} + DataManager.ActTaskData:getTaskDataScore(self.actId) end local isCrossWeek = Time:getDayofWeek() == 1 -- 重置礼包 @@ -130,17 +66,6 @@ function ActSprintSummonData:setActivityInfo(data) self:setDirty() end) - -- 注册任务监听 - -- for id, info in pairs(self:getActTaskConfig()) do - -- if info.activity == self.actId and info.display ~= nil then - -- ModuleManager.TaskManager:registerTask("ActSprintSummonDataAll", info.type, function(count) - -- if not self:getIsOpen() then - -- return - -- end - -- self:addTaskProgress(info.type, count) - -- end) - -- end - -- end end end @@ -153,6 +78,7 @@ function ActSprintSummonData:initActivityData(data) self.bountyInfo = data.sign or GConst.EMPTY_TABLE end +--region 战令 function ActSprintSummonData:onBountySign(sign) if sign then self.bountyInfo = sign @@ -304,8 +230,9 @@ function ActSprintSummonData:hasBountyRp() end return false end +--endregion ---@region 活动时间 +--region 活动时间 function ActSprintSummonData:syncedData() return self.syncData end @@ -439,7 +366,7 @@ end function ActSprintSummonData:hasStandardRp(actId) actId = actId or self:getActId() - return DataManager.ActivityData:getCanGetTurnRewardScore(actId) or self:getCanAnyStandardTaskCanGetReward(actId) + return DataManager.ActTaskData:getCanGetTurnRewardScore(actId) or DataManager.ActTaskData:getCanAnyTaskCanGetRewardScore(actId) end function ActSprintSummonData:hasGiftRp() @@ -449,10 +376,9 @@ end function ActSprintSummonData:hasTaskRp() return self:getCanAnyNormalTaskCanGetReward() end ---@endregion - --- 活动数据相关 ********************************************************************** +--endregion +--region 配置 function ActSprintSummonData:getActConfig(id) if id then return ConfigManager:getConfig("activity")[id] @@ -476,278 +402,9 @@ end function ActSprintSummonData:getActFuncOpen(id) return self:getActConfig(id).func_open end +--endregion --- 活动任务相关 ********************************************************************** --- function ActSprintSummonData:addTaskProgress(taskType, progress) --- local standardList = self:getActStandardTaskIdList(self.actId) --- local normalList = self:getActNormalTaskIdList(self.actId) --- -- 约定只有1个类型 --- if standardList and standardList[1] then --- if self:getActTaskType(standardList[1]) == taskType then --- self.standardScore = (self.standardScore or 0) + progress --- end --- end --- for _, taskId in ipairs(normalList) do --- if self:getActTaskType(taskId) == taskType then --- if table.containValue(GConst.TaskConst.TASK_TYPE, taskType) then --- -- 特别处理升星 --- if taskType == GConst.TaskConst.TASK_TYPE.HERO_LEGEND_STAR_UP_TO then --- if self:getActTaskNum(taskId) < progress and progress <= self:getActTaskNumber1(taskId) then --- self:setActTaskNum(taskId, progress) --- end --- else --- if self:getActTaskNum(taskId) < progress then --- self:setActTaskNum(taskId, progress) --- end --- end --- else --- self:addActTaskNum(taskId, progress) --- end --- end --- end --- end - -function ActSprintSummonData:getActTaskConfig(id) - if id then - return ConfigManager:getConfig("act_task")[id] - else - return ConfigManager:getConfig("act_task") - end -end - --- 达标任务 -function ActSprintSummonData:getActStandardTaskIdList(actId) - actId = actId or self.actId - local cfg = self:getActTaskConfig() - local actTaskList = {} - for taskId, info in pairs(cfg) do - if info.activity == actId and info.display == 1 then - table.insert(actTaskList, taskId) - end - end - return actTaskList -end - -function ActSprintSummonData:getActTaskActivityId(actTaskId) - return self:getActTaskConfig(actTaskId).activity -end - -function ActSprintSummonData:getActTaskDisplay(actTaskId) - return self:getActTaskConfig(actTaskId).display -end - -function ActSprintSummonData:getActTaskType(actTaskId) - return self:getActTaskConfig(actTaskId).type -end - -function ActSprintSummonData:getActTaskNumber1(actTaskId) - return self:getActTaskConfig(actTaskId).number_1 -end - -function ActSprintSummonData:getActTaskReward(actTaskId) - return self:getActTaskConfig(actTaskId).reward -end - -function ActSprintSummonData:getActTaskI18NName(actTaskId) - return ConfigManager:getConfig("act_task")[actTaskId].desc -end - --- 达标任务列表 -function ActSprintSummonData:getActStandardList(id) - id = id or self.actId - local list = {} - local cfg = self:getActTaskConfig() - for taskId, info in pairs(cfg) do - if info.activity == id and info.display == 1 then - table.insert(list, taskId) - end - end - table.sort(list, function(a, b) - -- 已完成(可领奖) > 进行中 > 已完成(已领奖) > id - local canGetA = self:getCanGetTaskReward(a) - local canGetB = self:getCanGetTaskReward(b) - if canGetA == canGetB then - local gotA = self:getHasGotTaskReward(a) - local gotB = self:getHasGotTaskReward(b) - if gotA == gotB then - return a < b - else - return gotB - end - else - return canGetA - end - end) - - return list -end - --- 普通任务列表 -function ActSprintSummonData:getActTaskList(id) - id = id or self.actId - local list = {} - local cfg = self:getActTaskConfig() - for taskId, info in pairs(cfg) do - if info.activity == id and info.display == 2 then - table.insert(list, taskId) - end - end - table.sort(list, function(a, b) - -- 已完成(可领奖) > 进行中 > 已完成(已领奖) > id - local canGetA = self:getCanGetTaskReward(a) - local canGetB = self:getCanGetTaskReward(b) - if canGetA == canGetB then - local gotA = self:getHasGotTaskReward(a) - local gotB = self:getHasGotTaskReward(b) - if gotA == gotB then - return a < b - else - return gotB - end - else - return canGetA - end - end) - - return list -end - -function ActSprintSummonData:getStandardTurn() - return self.standardTurn or 0 -end - -function ActSprintSummonData:getStandardClaimedTurn() - return self.standardClaimed or 0 -end - -function ActSprintSummonData:getStandardMaxTurn(actId) - actId = actId or self.actId - return GConst.ActSprintConst.ACT_ROUND_LIMIT[actId] -end - -function ActSprintSummonData:getStandardRewards(actId) - actId = actId or self.actId - return GConst.ActSprintConst.ACT_ROUND_REWARD[actId] -end - -function ActSprintSummonData:getCanAnyStandardTaskCanGetReward(actId) - actId = actId or self.actId - local taskList = DataManager.ActivityData:getActTaskListScore(actId) - for _, actTaskId in ipairs(taskList) do - if DataManager.ActivityData:getCanGetTaskRewardScore(actId, actTaskId) then - return true - end - end - return false -end - -function ActSprintSummonData:getAllStandardTaskGotReward(actId) - actId = actId or self.actId - local taskList = self:getActStandardList(actId) - for _, actTaskId in ipairs(taskList) do - if not self:getHasGotTaskReward(actTaskId) then - return false - end - end - return true -end - --- 成功领取轮次奖励 -function ActSprintSummonData:onGetStandardTurnReward(actId) - self.standardClaimed = (self.standardClaimed or 0) + 1 - self:setDirty() -end - --- 是否已经领完了全部的轮次奖励 -function ActSprintSummonData:getGotAllTurnReward(actId) - local claimed = self.standardClaimed or 0 - local maxTurn = self:getStandardMaxTurn(actId) - return claimed >= maxTurn -end - -function ActSprintSummonData:getActTaskNum(actTaskId) - if self:getActTaskDisplay(actTaskId) == 1 then - return self.standardScore or 0 - else - return self.taskProgressMap[actTaskId] or 0 - end -end - -function ActSprintSummonData:addActTaskNum(actTaskId, progress) - self.taskProgressMap[actTaskId] = (self.taskProgressMap[actTaskId] or 0) + progress -end - -function ActSprintSummonData:setActTaskNum(actTaskId, progress) - self.taskProgressMap[actTaskId] = progress -end - -function ActSprintSummonData:getHasGotTaskReward(actTaskId) - if self:getActTaskDisplay(actTaskId) == 1 then - return self.standardTurn >= self:getStandardMaxTurn(self:getActId()) or self.standardClaimedTaskMap[actTaskId] - else - return self.taskClaimedMap[actTaskId] - end -end - --- 特定任务是否可领奖 -function ActSprintSummonData:getCanGetTaskReward(actTaskId) - if not self:getHasGotTaskReward(actTaskId) and self:getActTaskNum(actTaskId) >= self:getActTaskNumber1(actTaskId) then - return true - else - return false - end -end - --- 领取任务成功 -function ActSprintSummonData:onStandardTaskSuccess(actTaskId) - if actTaskId and actTaskId > 0 then - self.standardClaimedTaskMap[actTaskId] = true - else - local list = self:getActStandardTaskIdList(self:getActId()) - for _, id in ipairs(list) do - if self:getCanGetTaskReward(id) then - self.standardClaimedTaskMap[id] = true - end - end - end - -- 如果所有任务都领取了 增加轮次 - local list = self:getActStandardTaskIdList(self:getActId()) - local isAllGot = true - for _, id in ipairs(list) do - if not self:getHasGotTaskReward(id) then - isAllGot = false - break - end - end - if isAllGot then - self.standardTurn = (self.standardTurn or 0) + 1 - self.standardClaimedTaskMap = {} - self.standardScore = self.standardScore - self:getStandardTurnScoreLimit() - end - - self:setDirty() -end - -function ActSprintSummonData:onNormalTaskSuccess(actTaskId) - self.taskClaimedMap[actTaskId] = true - self:setDirty() -end - -function ActSprintSummonData:getStandardTurnScoreLimit() - local scoreLimit = 0 - local list = self:getActStandardTaskIdList(self:getActId()) - for _, id in ipairs(list) do - local cfg = self:getActTaskConfig(id) - if cfg then - if self:getActTaskNumber1(id) > scoreLimit then - scoreLimit = self:getActTaskNumber1(id) - end - end - end - return scoreLimit -end - --- 活动礼包相关 ********************************************************************** +--region 礼包 function ActSprintSummonData:getActGiftBuyCount(actGiftId) return DataManager.PaymentData:getGiftBoughtNum(PayManager.PURCHARSE_TYPE.ACT_GIFT, actGiftId) end @@ -826,10 +483,9 @@ function ActSprintSummonData:getHasFreeGiftCanBuy() end end end +--endregion - - ---@region +--region function ActSprintSummonData:getBIType() return BIReport.ACT_SPRINT_TYPE.SUMMON end @@ -837,9 +493,9 @@ end -- 普通任务 function ActSprintSummonData:getBINormalTaskNumInfo() local num, totalNum = 0, 0 - local taskList = DataManager.ActivityData:getTaskIdList(self.actId) + local taskList = DataManager.ActTaskData:getTaskIdList(self.actId) for _, taskId in ipairs(taskList) do - if DataManager.ActivityData:isTaskReceived(self.actId, taskId) then + if DataManager.ActTaskData:isTaskReceived(self.actId, taskId) then num = num + 1 end totalNum = totalNum + 1 @@ -848,9 +504,9 @@ function ActSprintSummonData:getBINormalTaskNumInfo() end function ActSprintSummonData:getCanAnyNormalTaskCanGetReward() - local taskList = DataManager.ActivityData:getTaskIdList(self.actId) + local taskList = DataManager.ActTaskData:getTaskIdList(self.actId) for _, actTaskId in ipairs(taskList) do - if DataManager.ActivityData:canClaimTask(self.actId, actTaskId) then + if DataManager.ActTaskData:canClaimTask(self.actId, actTaskId) then return true end end @@ -860,9 +516,9 @@ end -- 达标任务 function ActSprintSummonData:getBISprintTaskNumInfo() local num, totalNum = 0, 0 - local taskList = DataManager.ActivityData:getTaskIdListScore(self.actId) + local taskList = DataManager.ActTaskData:getTaskIdListScore(self.actId) for _, taskId in ipairs(taskList) do - if DataManager.ActivityData:getHasGotTaskRewardScore(self.actId, taskId) then + if DataManager.ActTaskData:getHasGotTaskRewardScore(self.actId, taskId) then num = num + 1 end totalNum = totalNum + 1 @@ -872,13 +528,14 @@ end function ActSprintSummonData:getCanGetRewardStandardTaskList() local taskIdList = {} - local taskList = DataManager.ActivityData:getTaskIdListScore(self.actId) + local taskList = DataManager.ActTaskData:getTaskIdListScore(self.actId) for _, taskId in ipairs(taskList) do - if DataManager.ActivityData:getCanGetTaskRewardScore(self.actId, taskId) then + if DataManager.ActTaskData:getCanGetTaskRewardScore(self.actId, taskId) then table.insert(taskIdList, taskId) end end return taskIdList end ---@endregion +--endregion + return ActSprintSummonData \ No newline at end of file diff --git a/lua/app/userdata/activity/act_task_data.lua b/lua/app/userdata/activity/act_task_data.lua new file mode 100755 index 00000000..1042d799 --- /dev/null +++ b/lua/app/userdata/activity/act_task_data.lua @@ -0,0 +1,418 @@ +local ActTaskData = class("ActTaskData", BaseData) + +function ActTaskData:setDirty() + self.data.isDirty = not self.data.isDirty +end + +function ActTaskData:ctor() +end + +function ActTaskData:clear() + self.taskData = nil + self.taskDataScore = nil +end + +-- 任务初始化 +function ActTaskData:initTaskData(scoreData, normalData) + scoreData = scoreData or {} + normalData = normalData or {} + if EDITOR_MODE then + Logger.logHighlight("活动任务数据") + Logger.printTable(scoreData) + Logger.printTable(normalData) + end + + self.taskData = self.taskData or {} + self.taskDataScore = self.taskDataScore or {} + + for i, info in ipairs(normalData.task_data) do + self.taskData[info.activity_id] = self.taskData[info.activity_id] or {} + self.taskData[info.activity_id][info.data.id] = info.data + end + + for i, info in ipairs(scoreData.task_data) do + self.taskDataScore[info.activity_id] = self.taskDataScore[info.activity_id] or {} + self.taskDataScore[info.activity_id] = info + self.taskDataScore[info.activity_id].claimedMap = {} + for _, taskId in ipairs(info.claimed) do + self.taskDataScore[info.activity_id].claimedMap[taskId] = true + end + end + + if not self.isInit then + self.isInit = true + -- 监听任务 + for id, info in pairs(self:getTaskConfig()) do + ModuleManager.TaskManager:registerTask("ActTaskData", info.type, function(count) + self:addTaskProgressCallback(info.type, count) + self:addTaskProgressCallbackScore(info.type, count) + end) + end + -- 跨天 + DataManager:registerCrossDayFunc("ActTaskData", function() + self:setDirty() + end) + end +end + +--region 普通任务 +function ActTaskData:getTaskIdList(actId) + local cfg = self:getTaskConfig() + local actTaskList = {} + for taskId, info in pairs(cfg) do + if info.activity == actId and info.display == 2 then + table.insert(actTaskList, taskId) + end + end + return actTaskList +end + +function ActTaskData:addTaskProgressCallback(taskType, count) + for actId, data in pairs(self.taskData) do + for i, taskId in ipairs(self:getAllTaskIdsByActId(actId)) do + if self:getTaskType(taskId) == taskType and self:getTaskDisplay(taskId) == 2 then + self:addTaskProgress(actId, taskId, count) + end + end + end +end + +-- 添加任务进度 +function ActTaskData:addTaskProgress(actId, taskId, count) + if not self:isTaskFinished(actId, taskId) then + local taskType = self:getTaskType(taskId) + local data = self:getTaskData(actId, taskId) + if table.containValue(GConst.TaskConst.RELPACE_TASK_TYPE, taskType) then + data.progress = math.max(data.progress or 0, count) + else + data.progress = (data.progress or 0) + count + end + end + self:setDirty() +end + +function ActTaskData:getTaskData(actId, taskId) + if taskId then + self.taskData[actId] = self.taskData[actId] or {} + if self.taskData[actId][taskId] == nil then + self.taskData[actId][taskId] = {id = taskId, progress = 0, claimed = 0} + end + return self.taskData[actId][taskId] + else + return self.taskData[actId] + end +end + +-- 获取活动全部任务id +function ActTaskData:getAllTaskIdsByActId(actId) + self.taskIds = self.taskIds or {} + if self.taskIds[actId] == nil then + self.taskIds[actId] = {} + for id, info in pairs(self:getTaskConfig()) do + if self:getActId(id) == actId then + table.insert(self.taskIds[actId], id) + end + end + table.sort(self.taskIds, function(a, b) return a.id < b.id end) + end + + return self.taskIds[actId] +end + +-- 获取任务当前进度 +function ActTaskData:getTaskProg(actId, taskId) + taskId = tonumber(taskId) + local data = self:getTaskData(actId, taskId) + return data and data.progress or 0 +end + +-- 任务是否已领取 +function ActTaskData:isTaskReceived(actId, taskId) + taskId = tonumber(taskId) + local data = self:getTaskData(actId, taskId) + return data and data.claimed and data.claimed > 0 +end + +-- 任务是否已完成 +function ActTaskData:isTaskFinished(actId, taskId) + return self:getTaskProg(actId, taskId) >= self:getTaskTarget(taskId) +end + +-- 任务是否可领取 +function ActTaskData:canClaimTask(actId, taskId) + return self:isTaskFinished(actId, taskId) and not self:isTaskReceived(actId, taskId) +end + +-- 重置任务数据 +function ActTaskData:resetTaskData(actId) + for taskId, data in pairs(self:getTaskData(actId)) do + data.claimed = 0 + data.progress = 0 + end + self:setDirty() +end + +-- 领奖成功 +function ActTaskData:onTaskClaimed(actId, taskId) + local data = self:getTaskData(actId, taskId) + data.claimed = 1 + self:setDirty() +end + +-- 普通任务列表 +function ActTaskData:getTaskSortList(actId) + local list = {} + local cfg = self:getTaskConfig() + for taskId, info in pairs(cfg) do + if info.activity == actId and info.display == 2 then + local info = {} + info.id = taskId + info._sort = 1000000 - taskId + if self:canClaimTask(actId, taskId) then + info._sort = info._sort + 100000000 + end + if not self:isTaskFinished(actId, taskId) then + info._sort = info._sort + 10000000 + end + table.insert(list, info) + end + end + table.sort(list, function(a, b) + -- 已完成(可领奖) > 进行中 > 已完成(已领奖) > id + return a._sort > b._sort + end) + + return list +end +--endregion + +--region 积分任务 +function ActTaskData:getTaskIdListScore(actId) + local cfg = self:getTaskConfig() + local actTaskList = {} + for taskId, info in pairs(cfg) do + if info.activity == actId and info.display == 1 then + table.insert(actTaskList, taskId) + end + end + return actTaskList +end + +function ActTaskData:addTaskProgressCallbackScore(taskType, count) + for actId, data in pairs(self.taskDataScore) do + local actTaskList = self:getTaskIdListScore(actId) + if actTaskList and actTaskList[1] then + if self:getTaskType(actTaskList[1]) == taskType then + data.score = (data.score or 0) + count + end + end + end +end + +-- 添加任务进度 +function ActTaskData:addTaskProgressScore(actId, taskId, count) + if not self:isTaskFinishedScore(actId, taskId) then + self.taskDataScore[actId].score = (self.taskDataScore[actId].score or 0) + count + end + self:setDirty() +end + +function ActTaskData:getTaskNumScore(actId, actTaskId) + if self:getTaskDisplay(actTaskId) == 1 then + return self.taskDataScore[actId].score or 0 + else + return self.taskData[actTaskId] or 0 + end +end + +function ActTaskData:getMaxTurnScore(actId) + return GConst.ActSprintConst.ACT_ROUND_LIMIT[actId] +end + +function ActTaskData:getRewardsgetMaxTurnScore(actId) + return GConst.ActSprintConst.ACT_ROUND_REWARD[actId] +end + +function ActTaskData:getHasGotTaskRewardScore(actId, actTaskId) + return self.taskDataScore[actId].round >= self:getMaxTurnScore(actId) or self.taskDataScore[actId].claimedMap[actTaskId] +end + +function ActTaskData:getTaskDataScore(actId) + return self.taskDataScore[actId] or {activity_id = actId, score = 0, total_score = 0, round = 0, round_claimed = 0, claimed = {}, claimedMap = {}} +end + +-- 获取任务当前进度 +function ActTaskData:getTaskProgScore(actId) + local data = self:getTaskDataScore(actId) + return data and data.score or 0 +end + +-- 任务是否已完成 +function ActTaskData:isTaskFinishedScore(actId, taskId) + return self:getTaskProgScore(actId) >= self:getTaskTarget(taskId) +end + +function ActTaskData:getTurnLimitScore(actId) + local scoreLimit = 0 + local list = self:getTaskIdListScore(actId) + for _, id in ipairs(list) do + local cfg = self:getTaskConfig(id) + if cfg then + if self:getTaskTarget(id) > scoreLimit then + scoreLimit = self:getTaskTarget(id) + end + end + end + return scoreLimit +end + +-- 特定任务是否可领奖 +function ActTaskData:getCanGetTaskRewardScore(actId, actTaskId) + if not self:getHasGotTaskRewardScore(actId, actTaskId) and self:getTaskNumScore(actId, actTaskId) >= self:getTaskTarget(actTaskId) then + return true + else + return false + end +end + +function ActTaskData:getCanGetTurnRewardScore(actId) + actId = actId or self.actId + -- 当前任务全部领取 未领取当前波次奖励 + if (self:getClaimedTurnScore(actId) < self:getTurnScore(actId)) then + return true + else + return false + end +end + +-- 是否已经领完了全部的轮次奖励 +function ActTaskData:getGotAllTurnRewardScore(actId) + local claimed = self:getClaimedTurnScore(actId) or 0 + local maxTurn = self:getMaxTurnScore(actId) + return claimed >= maxTurn +end + +function ActTaskData:getTurnScore(actId) + return self.taskDataScore[actId].round or 0 +end + +function ActTaskData:getClaimedTurnScore(actId) + return self.taskDataScore[actId].round_claimed or 0 +end + +-- 成功领取轮次奖励 +function ActTaskData:onGetTurnRewardScore(actId) + self.taskDataScore[actId].round_claimed = (self.taskDataScore[actId].round_claimed or 0) + 1 + self:setDirty() +end + +function ActTaskData:getCanAnyTaskCanGetRewardScore(actId) + local taskList = self:getActTaskListScore(actId) + for _, actTaskId in ipairs(taskList) do + if self:getCanGetTaskRewardScore(actId, actTaskId) then + return true + end + end + return false +end + +-- 领取任务成功 +function ActTaskData:onTaskSuccessScore(actId, actTaskId) + self.taskDataScore[actId] = self.taskDataScore[actId] or {} + if actTaskId and actTaskId > 0 then + self.taskDataScore[actId].claimedMap[actTaskId] = true + else + local list = self:getTaskIdListScore(actId) + for _, id in ipairs(list) do + if self:getCanGetTaskRewardScore(actId, id) then + self.taskDataScore[actId].claimedMap[id] = true + end + end + end + -- 如果所有任务都领取了 增加轮次 + local list = self:getTaskIdListScore(actId) + local isAllGot = true + for _, id in ipairs(list) do + if not self:getHasGotTaskRewardScore(actId, id) then + isAllGot = false + break + end + end + if isAllGot then + self.taskDataScore[actId].round = (self.taskDataScore[actId].round or 0) + 1 + self.taskDataScore[actId].claimedMap = {} + self.taskDataScore[actId].score = self.taskDataScore[actId].score - self:getTurnLimitScore(actId) + end + self:setDirty() +end + +-- 达标任务列表 +function ActTaskData:getActTaskListScore(actId) + local list = {} + local cfg = self:getTaskConfig() + for taskId, info in pairs(cfg) do + if info.activity == actId and info.display == 1 then + table.insert(list, taskId) + end + end + table.sort(list, function(a, b) + -- 已完成(可领奖) > 进行中 > 已完成(已领奖) > id + local canGetA = self:getCanGetTaskRewardScore(actId, a) + local canGetB = self:getCanGetTaskRewardScore(actId, b) + if canGetA == canGetB then + local gotA = self:getHasGotTaskRewardScore(actId, a) + local gotB = self:getHasGotTaskRewardScore(actId, b) + if gotA == gotB then + return a < b + else + return gotB + end + else + return canGetA + end + end) + + return list +end +--endregion + +--region 任务配置 +function ActTaskData:getTaskConfig(taskId) + if taskId then + return ConfigManager:getConfig("act_task")[taskId] + else + return ConfigManager:getConfig("act_task") + end +end + +-- 获取任务活动id +function ActTaskData:getActId(taskId) + return self:getTaskConfig(taskId).activity +end + +-- 获取任务类型 +function ActTaskData:getTaskType(taskId) + return self:getTaskConfig(taskId).type +end + +-- 获取任务目标 +function ActTaskData:getTaskTarget(taskId) + return self:getTaskConfig(taskId).number_1 +end + +-- 获取任务奖励 +function ActTaskData:getTaskReward(taskId) + return self:getTaskConfig(taskId).reward +end + +-- 获取任务展示要求 +function ActTaskData:getTaskDisplay(taskId) + return self:getTaskConfig(taskId).display +end + +function ActTaskData:getTaskI18NName(taskId) + return ConfigManager:getConfig("act_task")[taskId].desc +end +--endregion + +return ActTaskData \ No newline at end of file diff --git a/lua/app/userdata/activity/act_task_data.lua.meta b/lua/app/userdata/activity/act_task_data.lua.meta new file mode 100644 index 00000000..fcbd38b6 --- /dev/null +++ b/lua/app/userdata/activity/act_task_data.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7a239fcdc5b3546d9ab0ccc629a86736 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/userdata/activity/activity_data.lua b/lua/app/userdata/activity/activity_data.lua index 80ef507a..f948dde2 100644 --- a/lua/app/userdata/activity/activity_data.lua +++ b/lua/app/userdata/activity/activity_data.lua @@ -78,402 +78,6 @@ function ActivityData:getExchangeTime(id) end --endregion ---region 任务 -function ActivityData:initTaskData(scoreData, normalData) - scoreData = scoreData or {} - normalData = normalData or {} - if EDITOR_MODE then - Logger.logHighlight("活动任务数据") - Logger.printTable(scoreData) - Logger.printTable(normalData) - end - - self.taskData = self.taskData or {} - self.taskDataScore = self.taskDataScore or {} - - for i, info in ipairs(normalData.task_data) do - self.taskData[info.activity_id] = self.taskData[info.activity_id] or {} - self.taskData[info.activity_id][info.data.id] = info.data - end - - for i, info in ipairs(scoreData.task_data) do - self.taskDataScore[info.activity_id] = self.taskDataScore[info.activity_id] or {} - self.taskDataScore[info.activity_id] = info - self.taskDataScore[info.activity_id].claimedMap = {} - for _, taskId in ipairs(info.claimed) do - self.taskDataScore[info.activity_id].claimedMap[taskId] = true - end - end - - if not self.isInit then - self.isInit = true - -- 监听任务 - for id, info in pairs(self:getTaskConfig()) do - ModuleManager.TaskManager:registerTask("ActivityData", info.type, function(count) - self:addTaskProgressCallback(info.type, count) - self:addTaskProgressCallbackScore(info.type, count) - end) - end - -- 跨天 - DataManager:registerCrossDayFunc("ActivityData", function() - self:setDirty() - end) - end -end - ---region 普通任务 -function ActivityData:getTaskIdList(actId) - local cfg = self:getTaskConfig() - local actTaskList = {} - for taskId, info in pairs(cfg) do - if info.activity == actId and info.display == 2 then - table.insert(actTaskList, taskId) - end - end - return actTaskList -end - -function ActivityData:addTaskProgressCallback(taskType, count) - for actId, data in pairs(self.taskData) do - for i, taskId in ipairs(self:getAllTaskIdsByActId(actId)) do - if self:getTaskType(taskId) == taskType and self:getTaskDisplay(taskId) == 2 then - self:addTaskProgress(actId, taskId, count) - end - end - end -end - --- 添加任务进度 -function ActivityData:addTaskProgress(actId, taskId, count) - if not self:isTaskFinished(actId, taskId) then - local taskType = self:getTaskType(taskId) - local data = self:getTaskData(actId, taskId) - if table.containValue(GConst.TaskConst.RELPACE_TASK_TYPE, taskType) then - data.progress = math.max(data.progress or 0, count) - else - data.progress = (data.progress or 0) + count - end - end - self:setDirty() -end - -function ActivityData:getTaskData(actId, taskId) - if taskId then - self.taskData[actId] = self.taskData[actId] or {} - if self.taskData[actId][taskId] == nil then - self.taskData[actId][taskId] = {id = taskId, progress = 0, claimed = 0} - end - return self.taskData[actId][taskId] - else - return self.taskData[actId] - end -end - --- 获取活动全部任务id -function ActivityData:getAllTaskIdsByActId(actId) - self.taskIds = self.taskIds or {} - if self.taskIds[actId] == nil then - self.taskIds[actId] = {} - for id, info in pairs(self:getTaskConfig()) do - if self:getActId(id) == actId then - table.insert(self.taskIds[actId], id) - end - end - table.sort(self.taskIds, function(a, b) return a.id < b.id end) - end - - return self.taskIds[actId] -end - --- 获取任务当前进度 -function ActivityData:getTaskProg(actId, taskId) - taskId = tonumber(taskId) - local data = self:getTaskData(actId, taskId) - return data and data.progress or 0 -end - --- 任务是否已领取 -function ActivityData:isTaskReceived(actId, taskId) - taskId = tonumber(taskId) - local data = self:getTaskData(actId, taskId) - return data and data.claimed and data.claimed > 0 -end - --- 任务是否已完成 -function ActivityData:isTaskFinished(actId, taskId) - return self:getTaskProg(actId, taskId) >= self:getTaskTarget(taskId) -end - --- 任务是否可领取 -function ActivityData:canClaimTask(actId, taskId) - return self:isTaskFinished(actId, taskId) and not self:isTaskReceived(actId, taskId) -end - --- 重置任务数据 -function ActivityData:resetTaskData(actId) - for taskId, data in pairs(self:getTaskData(actId)) do - data.claimed = 0 - data.progress = 0 - end - self:setDirty() -end - --- 领奖成功 -function ActivityData:onTaskClaimed(actId, taskId) - local data = self:getTaskData(actId, taskId) - data.claimed = 1 - self:setDirty() -end - --- 普通任务列表 -function ActivityData:getTaskSortList(actId) - local list = {} - local cfg = self:getTaskConfig() - for taskId, info in pairs(cfg) do - if info.activity == actId and info.display == 2 then - local info = {} - info.id = taskId - info._sort = 1000000 - taskId - if self:canClaimTask(actId, taskId) then - info._sort = info._sort + 100000000 - end - if not self:isTaskFinished(actId, taskId) then - info._sort = info._sort + 10000000 - end - table.insert(list, info) - end - end - table.sort(list, function(a, b) - -- 已完成(可领奖) > 进行中 > 已完成(已领奖) > id - return a._sort > b._sort - end) - - return list -end ---endregion - ---region 积分任务 --- 达标任务 -function ActivityData:getTaskIdListScore(actId) - local cfg = self:getTaskConfig() - local actTaskList = {} - for taskId, info in pairs(cfg) do - if info.activity == actId and info.display == 1 then - table.insert(actTaskList, taskId) - end - end - return actTaskList -end - -function ActivityData:addTaskProgressCallbackScore(taskType, count) - for actId, data in pairs(self.taskDataScore) do - local actTaskList = self:getTaskIdListScore(actId) - if actTaskList and actTaskList[1] then - if self:getTaskType(actTaskList[1]) == taskType then - data.score = (data.score or 0) + count - end - end - end -end - --- 添加任务进度 -function ActivityData:addTaskProgressScore(actId, taskId, count) - if not self:isTaskFinishedScore(actId, taskId) then - self.taskDataScore[actId].score = (self.taskDataScore[actId].score or 0) + count - end - self:setDirty() -end - -function ActivityData:getTaskNumScore(actId, actTaskId) - if self:getTaskDisplay(actTaskId) == 1 then - return self.taskDataScore[actId].score or 0 - else - return self.taskData[actTaskId] or 0 - end -end - -function ActivityData:getMaxTurnScore(actId) - return GConst.ActSprintConst.ACT_ROUND_LIMIT[actId] -end - -function ActivityData:getRewardsgetMaxTurnScore(actId) - return GConst.ActSprintConst.ACT_ROUND_REWARD[actId] -end - -function ActivityData:getHasGotTaskRewardScore(actId, actTaskId) - return self.taskDataScore[actId].round >= self:getMaxTurnScore(actId) or self.taskDataScore[actId].claimedMap[actTaskId] -end - -function ActivityData:getTaskDataScore(actId) - return self.taskDataScore[actId] or {activity_id = actId, score = 0, total_score = 0, round = 0, round_claimed = 0, claimed = {}} -end - --- 获取任务当前进度 -function ActivityData:getTaskProgScore(actId) - local data = self:getTaskDataScore(actId) - return data and data.score or 0 -end - --- 任务是否已完成 -function ActivityData:isTaskFinishedScore(actId, taskId) - return self:getTaskProgScore(actId) >= self:getTaskTarget(taskId) -end - -function ActivityData:getTurnLimitScore(actId) - local scoreLimit = 0 - local list = self:getTaskIdListScore(actId) - for _, id in ipairs(list) do - local cfg = self:getTaskConfig(id) - if cfg then - if self:getTaskTarget(id) > scoreLimit then - scoreLimit = self:getTaskTarget(id) - end - end - end - return scoreLimit -end - --- 特定任务是否可领奖 -function ActivityData:getCanGetTaskRewardScore(actId, actTaskId) - if not self:getHasGotTaskRewardScore(actId, actTaskId) and self:getTaskNumScore(actId, actTaskId) >= self:getTaskTarget(actTaskId) then - return true - else - return false - end -end - -function ActivityData:getCanGetTurnRewardScore(actId) - actId = actId or self.actId - -- 当前任务全部领取 未领取当前波次奖励 - if (self:getClaimedTurnScore(actId) < self:getTurnScore(actId)) then - return true - else - return false - end -end - --- 是否已经领完了全部的轮次奖励 -function ActivityData:getGotAllTurnRewardScore(actId) - local claimed = self:getClaimedTurnScore(actId) or 0 - local maxTurn = self:getMaxTurnScore(actId) - return claimed >= maxTurn -end - -function ActivityData:getTurnScore(actId) - return self.taskDataScore[actId].round or 0 -end - -function ActivityData:getClaimedTurnScore(actId) - return self.taskDataScore[actId].round_claimed or 0 -end - --- 成功领取轮次奖励 -function ActivityData:onGetTurnRewardScore(actId) - self.taskDataScore[actId].round_claimed = (self.taskDataScore[actId].round_claimed or 0) + 1 - self:setDirty() -end - --- 领取任务成功 -function ActivityData:onTaskSuccessScore(actId, actTaskId) - self.taskDataScore[actId] = self.taskDataScore[actId] or {} - if actTaskId and actTaskId > 0 then - self.taskDataScore[actId].claimedMap[actTaskId] = true - else - local list = self:getTaskIdListScore(actId) - for _, id in ipairs(list) do - if self:getCanGetTaskRewardScore(actId, id) then - self.taskDataScore[actId].claimedMap[id] = true - end - end - end - -- 如果所有任务都领取了 增加轮次 - local list = self:getTaskIdListScore(actId) - local isAllGot = true - for _, id in ipairs(list) do - if not self:getHasGotTaskRewardScore(actId, id) then - isAllGot = false - break - end - end - if isAllGot then - self.taskDataScore[actId].round = (self.taskDataScore[actId].round or 0) + 1 - self.taskDataScore[actId].claimedMap = {} - self.taskDataScore[actId].score = self.taskDataScore[actId].score - self:getTurnLimitScore(actId) - end - self:setDirty() -end - --- 达标任务列表 -function ActivityData:getActTaskListScore(actId) - local list = {} - local cfg = self:getTaskConfig() - for taskId, info in pairs(cfg) do - if info.activity == actId and info.display == 1 then - table.insert(list, taskId) - end - end - table.sort(list, function(a, b) - -- 已完成(可领奖) > 进行中 > 已完成(已领奖) > id - local canGetA = self:getCanGetTaskRewardScore(actId, a) - local canGetB = self:getCanGetTaskRewardScore(actId, b) - if canGetA == canGetB then - local gotA = self:getHasGotTaskRewardScore(actId, a) - local gotB = self:getHasGotTaskRewardScore(actId, b) - if gotA == gotB then - return a < b - else - return gotB - end - else - return canGetA - end - end) - - return list -end ---endregion ---endregion - ---region 任务配置 -function ActivityData:getTaskConfig(taskId) - if taskId then - return ConfigManager:getConfig("act_task")[taskId] - else - return ConfigManager:getConfig("act_task") - end -end - --- 获取任务活动id -function ActivityData:getActId(taskId) - return self:getTaskConfig(taskId).activity -end - --- 获取任务类型 -function ActivityData:getTaskType(taskId) - return self:getTaskConfig(taskId).type -end - --- 获取任务目标 -function ActivityData:getTaskTarget(taskId) - return self:getTaskConfig(taskId).number_1 -end - --- 获取任务奖励 -function ActivityData:getTaskReward(taskId) - return self:getTaskConfig(taskId).reward -end - --- 获取任务展示要求 -function ActivityData:getTaskDisplay(taskId) - return self:getTaskConfig(taskId).display -end - -function ActivityData:getTaskI18NName(taskId) - return ConfigManager:getConfig("act_task")[taskId].desc -end ---endregion ---endregion - function ActivityData:initSkipPopInfo() self.loginPopSkipFlag = false local flag = LocalData:getSkipPopFlag()