RoleTimeReset.lua 2.99 KB
local RoleTimeReset = {}

RoleTimeReset.bind = function (Role)

-- 重置内容 对应 GlobalVar TimeReset
local ResetFunc = {}
ResetFunc["CrossDay"] = function(self, notify, response)
	self.dailyData:refreshDailyData(notify)
	self.dinerData:refreshDailyData(notify)

	self:setProperty("dTask", {})
	self:advRandomSupportEffect()

	response.dTask = {}
	response.advSup = self:getProperty("advSup")
end

ResetFunc["CrossWeek"] = function(self, notify, response)
	self:setProperties({
		wTask =  {}, 
		dinerS = {},
	})
	response.wTask = {}
	response.dinerS = {}
end


ResetFunc["DinerRank"] = function(self, notify, response)
	self.dinerData:rankResetData(notify)
end

ResetFunc["PvpShop"] = function(self, notify, response)
	self:setProperty("pvpShop", {})
	response.pvpShop = {}
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
		local curRound = math.floor((passTime - resetData.start) / resetData.interval)
		if not timeReset[resetId] or curRound ~= timeReset[resetId] then
			needResetId[resetId] = curRound
		end
	end
	if not next(needResetId) then return end

	local response = {}
	for funcName, resetId in pairs(TimeReset) do
		if needResetId[resetId] and ResetFunc[funcName] then
			ResetFunc[funcName](self, notify, response)
		end
	end

	for resetId, round in pairs(needResetId) do
		timeReset[resetId] = round
	end
	self:setProperty("timeReset", timeReset)
	response.timeReset = timeReset

	if notify then
		self:notifyUpdateProperties(response)
	end
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