diff --git a/src/actions/ActivityAction.lua b/src/actions/ActivityAction.lua index 0fd631e..6f364b0 100644 --- a/src/actions/ActivityAction.lua +++ b/src/actions/ActivityAction.lua @@ -1370,4 +1370,47 @@ function _M.advLevelRpc(agent, data) return true end +function _M.returnerTaskRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + + local taskId = msg.id or 0 + if taskId == 0 then return 0 end + + local returner = role:getProperty("returner") or {} + if not returner[taskId] then return 1 end + + local tday = specTime({hour = 4}) + local curAllDay = (tday - returner.time) / 86400 + 1 + + local TaskCsv = csvdb["activity_taskCsv"][76] or {} + local taskData = TaskCsv[taskId] + if not taskData then return 2 end + if curAllDay < taskData.day then return 2 end + + local status = returner.status or {} + if status[taskId] then return 3 end + + local done = true + for _, data in pairs(TaskCsv) do + if not status[data.id] then + done = false + break + end + end + + status[taskId] = 1 + returner.status = status + + local reward, change = role:award(dayData.reward, {log = {desc = "returner", int1 = taskData.day, int2 = taskId}}) + + if done then + returner = {} + end + + role:updateProperty({field = "returner", value = returner}) + SendPacket(actionCodes.Activity_returnerTaskRpc, MsgPack.pack(role:packReward(reward, change))) + return true +end + return _M diff --git a/src/models/Role.lua b/src/models/Role.lua index eb1b92b..f3f2508 100644 --- a/src/models/Role.lua +++ b/src/models/Role.lua @@ -191,6 +191,8 @@ Role.schema = { radioTask = {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}} 表crusadeCsv seaport = {"table", {}}, -- 海岛贸易季 {time = 1234567890, donate = {}, collect = {[1] = {team = "1=2=3", time = 1234567890}}, shop = {}} + + returner = {"table", {}}, -- 回归者 {time = 12334233423, [1] = 1, [2] = 2, status = {[1] = 1}} } @@ -423,6 +425,7 @@ function Role:data() radioTask = self:getProperty("radioTask"), seaport = self:getProperty("seaport"), + returner = self:getProperty("returner"), } end diff --git a/src/models/RoleLog.lua b/src/models/RoleLog.lua index b3159ad..2e8a5b0 100644 --- a/src/models/RoleLog.lua +++ b/src/models/RoleLog.lua @@ -143,6 +143,8 @@ local ItemReason = { seaportShop = 1401, -- 贸易港商店兑换 seaportReward = 1402, -- 贸易港阶段奖励 seaportTask = 1403, -- 贸易港任务奖励 + + returner = 1410, -- 回归者奖励 } diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index a68af45..3244bdc 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -1454,6 +1454,17 @@ function RolePlugin.bind(Role) end end + -- 检查回归者 + function Role:checkReturner() + local returner = self:getProperty("returner") or {} + if next(returner) then return end + + local now = specTime({hour = 4}) + returner.time = now + + self:updateProperty({field = "returner", value = returner}) + end + function Role:getSeaportServerProgress() local result = {} diff --git a/src/models/RoleTask.lua b/src/models/RoleTask.lua index a3e42b6..067aa70 100644 --- a/src/models/RoleTask.lua +++ b/src/models/RoleTask.lua @@ -319,6 +319,11 @@ local BattleCommandTaskListener = { listen = CalendaTaskListener["listen"] } +local ReturnerTask = { + func = "checkReturnerTask", + listen = CalendaTaskListener["listen"] +} + local TaskListeners = { StoryListener, CommonListener, @@ -328,6 +333,7 @@ local TaskListeners = { StoreListener, CalendaTaskListener, BattleCommandTaskListener, + ReturnerTask, } local RoleTask = {} @@ -825,6 +831,15 @@ function RoleTask.bind(Role) self:checkActTask(notNotify, keyName, actData, mainType, subType, param1, param2) end + function Role:checkReturnerTask(notNotify, mainType, subType, param1, param2) + -- print("check returner task", mainType, subType, param1, param2) + local returner = self:getProperty("returner") or {} + if not returner.time then return end + local actData = csvdb["activity_ctrlCsv"][76] + local keyName = "returner" + self:checkActTask(notNotify, keyName, actData, mainType, subType, param1, param2) + end + end return RoleTask diff --git a/src/models/RoleTimeReset.lua b/src/models/RoleTimeReset.lua index bdd6f8a..e1ad42d 100644 --- a/src/models/RoleTimeReset.lua +++ b/src/models/RoleTimeReset.lua @@ -28,6 +28,12 @@ ResetFunc["CrossDay"] = function(self, notify, response, now) self.storeData:resetStoreReored(3) --商店跨月重置 time_reset表关联id end + -- 检查回归者 + -- if (now - ltime) >= 86400 * globalCsv.returner_time then + if true then + self:checkReturner() + end + response.dTask = {} response.advSup = self:getProperty("advSup") self:log("onLogin") -- libgit2 0.21.2