diff --git a/lua/app/common/data_manager.lua b/lua/app/common/data_manager.lua index 1a43a6c9..0cb72b65 100644 --- a/lua/app/common/data_manager.lua +++ b/lua/app/common/data_manager.lua @@ -101,6 +101,7 @@ function DataManager:clear() -- 任务数据最后清理 self.TaskData:clear() ModuleManager.TaskManager:clear() + self:clearTryOpenFunc() end function DataManager:initWithServerData(data) @@ -255,6 +256,44 @@ function DataManager:scheduleGlobal() end, 1) end +function DataManager:tryOpenModules() + if not self.tryOpenCallbacks then + return + end + for k, v in pairs(self.tryOpenCallbacks) do + v() + end +end + +function DataManager:registerTryOpenFunc(bindId, func) + if not bindId or not func then + return + end + if not self.tryOpenCallbacks then + self.tryOpenCallbacks = {} + end + self.tryOpenCallbacks[bindId] = func +end + +function DataManager:unregisterTryOpenFunc(bindId) + if not bindId then + return + end + if not self.tryOpenCallbacks then + return + end + self.tryOpenCallbacks[bindId] = nil +end + +function DataManager:clearTryOpenFunc() + if not self.tryOpenCallbacks then + return + end + for k, v in pairs(self.tryOpenCallbacks) do + self.tryOpenCallbacks[k] = nil + end +end + function DataManager:getSignInfo() local nowTime = Time:getServerTime() local lastSignTime = self.signInfo.latest_at // 1000 @@ -264,7 +303,7 @@ function DataManager:getSignInfo() canSign = false end return self.signInfo.count or 0, canSign, self.hasSigned -end +end function DataManager:setSignCount(count) self.hasSigned = true diff --git a/lua/app/module/chapter/chapter_manager.lua b/lua/app/module/chapter/chapter_manager.lua index ecdbbae9..b17813c5 100644 --- a/lua/app/module/chapter/chapter_manager.lua +++ b/lua/app/module/chapter/chapter_manager.lua @@ -119,6 +119,8 @@ function ChapterManager:endFightFinish(result) if maxChapter == 1 then DataManager.ShopData:markPopUpGiftForBeginnerGift() end + -- 新章节通关,尝试解锁新功能 + DataManager:tryOpenModules() -- 章节通关 标记可弹出章节礼包 DataManager.ShopData:markPopUpGiftForActChapterStore(maxChapter) ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_PASS_CHAPTER) diff --git a/lua/app/module/player/player_manager.lua b/lua/app/module/player/player_manager.lua index 43195b26..e1303cfd 100644 --- a/lua/app/module/player/player_manager.lua +++ b/lua/app/module/player/player_manager.lua @@ -20,6 +20,7 @@ function PlayerManager:onLevelUpFinish(result) if diffLv > 0 then self:showPlayerUpUI(currLv, result.rewards) ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_PLAYER_LV_REACH, diffLv) + DataManager:tryOpenModules() end end end diff --git a/lua/app/userdata/activity/seven_day/seven_day_data.lua b/lua/app/userdata/activity/seven_day/seven_day_data.lua index f4f3da05..f57657e5 100644 --- a/lua/app/userdata/activity/seven_day/seven_day_data.lua +++ b/lua/app/userdata/activity/seven_day/seven_day_data.lua @@ -13,6 +13,7 @@ function SevenDayData:clear() self.tasks = {} self.stepRewards = {} DataManager:unregisterCrossDayFunc("SevenDayData") + DataManager:unregisterTryOpenFunc("SevenDayData") end function SevenDayData:init(data) @@ -35,6 +36,19 @@ function SevenDayData:init(data) self:calCollectStepCount() self:initTaskListener() + if self.openTs <= 0 then + DataManager:registerTryOpenFunc("SevenDayData", function() + if self.openTs <= 0 then + if ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.SEVEN_DAY, true) then + self.openTs = Time:getBeginningOfServerToday() + self.endTime = self.openTs + self:getDurationTime() + self.actDay = 1 + DataManager:unregisterTryOpenFunc("SevenDayData") + end + end + end) + end + DataManager:registerCrossDayFunc("SevenDayData", function() self.actDay = self.actDay + 1 self:setDirty() @@ -361,7 +375,7 @@ end function SevenDayData:initTaskListener() local nowTime = Time:getServerTime() -- 活动结束就不用监听了 - if self.endTime < nowTime then + if self.endTime > 0 and self.endTime < nowTime then ModuleManager.TaskManager:unRegisterAllModuleTask("SevenDayData") return false end