local RoleTimeReset = {} RoleTimeReset.bind = function (Role) -- 重置内容 对应 GlobalVar TimeReset local ResetFunc = {} ResetFunc["CrossDay"] = function(self, notify, response, now) self:setProperty("dTask", {}) self.activity:checkActivityStatus(now, true, notify) self.dailyData:refreshDailyData(notify) self.dinerData:refreshDailyData(notify) self.activity:refreshDailyData(notify) self.storeData:onCrossDay() self:incrProperty("lday", 1) self:advRandomSupportEffect(not notify) self:checkExpireItem(not notify) local advMine = self:getProperty("advMine") if advMine[1] then advMine[1].co = nil end self:setProperty("advMine", advMine) local ltime = self:getProperty("ltime") if isCrossMonth(ltime, now) then self.storeData:resetStoreReored(3) --商店跨月重置 time_reset表关联id end -- 检查回归者 if ltime ~= 0 and (now - ltime) >= 86400 * globalCsv.returner_time then self:checkReturner() end -- 检查 夜间打工 local workBattle = self:getProperty("workBattle") local need = {} for i = 1, 5 do if workBattle[i] == 1 then need[#need + 1] = workBattle.round * 10 + i end end local change = false if next(need) then local ret = redisproxy:hmget(WORK_BATTLE_COUNT, table.unpack(need)) for idx, v in ipairs(need) do local ctype = v % 10 local ccount = tonum(ret[idx]) local workMainCsv = csvdb["work_mainCsv"][ctype] if ccount >= workMainCsv.target_num then self:sendMail(workMainCsv.email, nil, workMainCsv.phase_award) end workBattle[ctype] = -1 end change = true end local newRound = math.floor((now - START_RESET_TIME) / 604800) if newRound ~= workBattle.round then workBattle = {round = newRound} change = true end if change then self:setProperty("workBattle", workBattle) response.workBattle = workBattle end response.dTask = {} response.advSup = self:getProperty("advSup") self:log("onLogin") end ResetFunc["CrossWeek"] = function(self, notify, response) local advMine = self:getProperty("advMine") if advMine[2] then advMine[2].co = nil end self:setProperties({ wTask = {}, dinerS = {}, advMine = advMine, }) response.wTask = {} response.dinerS = {} self.activity:refreshWeekData(notify) -- 跨周送一些道具 local BnousReward = self:getBnousPvpTicket() if next(BnousReward) then local reward, change = self:award(BnousReward, {log = {desc = "towerBnous"}}) end end ResetFunc["DinerRank"] = function(self, notify, response) self.dinerData:rankResetData(notify) end ResetFunc["PvpShop"] = function(self, notify, response) self:setProperty("pvpShop", {}) response.pvpShop = {} end ResetFunc["PvpCross"] = function(self, notify, response) self:setProperty("pvpBet", {}) end function Role:updateTimeReset(now, notify) local timeReset = self:getProperty("timeReset") local passTime = now - START_RESET_TIME local needResetId = {} for resetId, resetData in pairs(csvdb["time_resetCsv"]) do if resetData.interval > 0 then local curRound = math.floor((passTime - resetData.start) / resetData.interval) if not timeReset[resetId] or curRound ~= timeReset[resetId] then needResetId[resetId] = curRound end end end if not next(needResetId) then return end local resetMode = {} local response = {} for idx = 1, #TimeResetArray do local funcName = TimeResetArray[idx] local resetId = TimeReset[funcName] if resetId then if needResetId[resetId] and ResetFunc[funcName] then ResetFunc[funcName](self, notify, response, now) resetMode[funcName] = true end end end for resetId, round in pairs(needResetId) do self.storeData:resetStoreReored(resetId) timeReset[resetId] = round end self:setProperties({timeReset = timeReset, ltime = now}) response.timeReset = timeReset response.ltime = now if notify then self:notifyUpdateProperties(response) end return resetMode end -- 持续时间取 min(interval, duration) duration 填 0 默认使用 interval 作为持续时间 local function getTimeResetDuration(rtype) local resetData = csvdb["time_resetCsv"][rtype] if not resetData then return 0 end return resetData.duration == 0 and resetData.interval or math.min(resetData.interval, resetData.duration) end --检查功能是否是在开放期 function Role:isTimeResetOpen(rtype) local resetData = csvdb["time_resetCsv"][rtype] if not resetData or getTimeResetDuration(rtype) >= resetData.interval then return true end return self:getTimeResetEndTime(rtype) > skynet.timex() end -- 当前轮次 开始时间 function Role:getTimeResetStartTime(rtype) local timeReset = self:getProperty("timeReset") if not timeReset[rtype] then return 0 end local resetData = csvdb["time_resetCsv"][rtype] if not resetData then return 0 end return START_RESET_TIME + timeReset[rtype] * resetData.interval + resetData.start end -- 当前轮次 结束时间 function Role:getTimeResetEndTime(rtype) return self:getTimeResetStartTime(rtype) + getTimeResetDuration(rtype) end function Role:getTimeResetRound(rtype) local timeReset = self:getProperty("timeReset") return timeReset[rtype] or 0 end function Role:getTimeResetDataStart(rtype) local resetData = csvdb["time_resetCsv"][rtype] if not resetData then return 0 end return resetData.start end end return RoleTimeReset