180 lines
5.5 KiB
Lua
180 lines
5.5 KiB
Lua
local ActTimeData = class("ActTimeData", BaseData)
|
||
|
||
function ActTimeData:ctor()
|
||
self.isInited = false
|
||
self.actTimeList = {}
|
||
end
|
||
|
||
function ActTimeData:setDirty()
|
||
self.data.isDirty = not self.data.isDirty
|
||
end
|
||
function ActTimeData:clear()
|
||
end
|
||
|
||
---- 活动改版后,服务器只会发一个活动类型的当前或下一次的数据,不是想之前一样无脑把activity表转过来
|
||
function ActTimeData:init(data)
|
||
if EDITOR_MODE then
|
||
Logger.logHighlight("活动时间初始化-------------------------------------------------------------")
|
||
for index, info in ipairs(data) do
|
||
Logger.logHighlight("活动时间初始化:%s id:%s type:%s time:%s %s %s cur:%s", index, info.id, info.type, info.start_at, info.end_at, info.extra_at, Time:getServerTime())
|
||
end
|
||
end
|
||
data = data or {}
|
||
self.actTimeList = data
|
||
self:refreshActTime()
|
||
self.isInited = true
|
||
end
|
||
|
||
function ActTimeData:refreshActTime(isCrossDayClientRefresh)
|
||
local curTime = Time:getServerTime()
|
||
self.actTypeTimeList = {}
|
||
for _, info in ipairs(self.actTimeList) do
|
||
local actId = info.id
|
||
if ModuleManager.ActivityManager:getActivityInCfg(actId) then
|
||
local actType = info.type
|
||
local startTime = info.start_at or 0
|
||
if startTime < 0 then
|
||
startTime = 0
|
||
end
|
||
|
||
local endTime = info.end_at
|
||
if endTime < 0 then
|
||
endTime = 0
|
||
end
|
||
|
||
local extraTime = info.extra_at
|
||
if extraTime < endTime then
|
||
extraTime = endTime
|
||
end
|
||
|
||
local version = info.version or 0
|
||
|
||
local actGifts = info.gifts or {}
|
||
local data = info.data
|
||
Logger.logHighlight("活动暂未开启:" .. (curTime - extraTime))
|
||
if startTime <= curTime and curTime < extraTime then -- 在有效期内
|
||
if self.actTypeTimeList[actType] == nil or self.actTypeTimeList[actType].endTime > endTime then
|
||
self.actTypeTimeList[actType] = {actId = actId, actType = actType, startTime = startTime, endTime = endTime, extraTime = extraTime, actGifts = actGifts, data = data, version = version}
|
||
self:initActivityData(actType, self.actTypeTimeList[actType], isCrossDayClientRefresh)
|
||
else
|
||
-- 如果start_time更小 替换
|
||
if self.actTypeTimeList[actType].startTime > startTime then
|
||
self.actTypeTimeList[actType] = {actId = actId, actType = actType, startTime = startTime, endTime = endTime, extraTime = extraTime, actGifts = actGifts, data = data, version = version}
|
||
self:initActivityData(actType, self.actTypeTimeList[actType], isCrossDayClientRefresh)
|
||
-- 如果version更小 替换
|
||
elseif self.actTypeTimeList[actType].version > version then
|
||
self.actTypeTimeList[actType] = {actId = actId, actType = actType, startTime = startTime, endTime = endTime, extraTime = extraTime, actGifts = actGifts, data = data, version = version}
|
||
self:initActivityData(actType, self.actTypeTimeList[actType], isCrossDayClientRefresh)
|
||
end
|
||
end
|
||
else
|
||
if EDITOR_MODE then
|
||
Logger.logHighlight("活动暂未开启:" .. info.id)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
self:setDirty()
|
||
end
|
||
|
||
function ActTimeData:getActTimeList()
|
||
return self.actTimeList
|
||
end
|
||
|
||
function ActTimeData:getActTimeInfoByActId(id)
|
||
for _, info in ipairs(self.actTimeList) do
|
||
if info.id == id then
|
||
return info
|
||
end
|
||
end
|
||
end
|
||
|
||
function ActTimeData:getActStartTime(actId)
|
||
for _, info in ipairs(self.actTimeList) do
|
||
if info.id == actId then
|
||
return info.start_at
|
||
end
|
||
end
|
||
end
|
||
|
||
function ActTimeData:getActEndTime(actId)
|
||
for _, info in ipairs(self.actTimeList) do
|
||
if info.id == actId then
|
||
local extraTime = info.extra_at
|
||
if extraTime < info.end_at then
|
||
extraTime = info.end_at
|
||
end
|
||
return extraTime
|
||
end
|
||
end
|
||
end
|
||
|
||
function ActTimeData:getActExtraTime(actId)
|
||
for _, info in ipairs(self.actTimeList) do
|
||
if info.id == actId then
|
||
local extraTime = info.extra_at
|
||
if extraTime < info.end_at then
|
||
extraTime = info.end_at
|
||
end
|
||
return extraTime
|
||
end
|
||
end
|
||
end
|
||
|
||
function ActTimeData:getActIsOpen(actId)
|
||
local curTime = Time:getServerTime()
|
||
local actStartTime = self:getActStartTime(actId) or 0
|
||
local actEndTime = self:getActEndTime(actId) or 0
|
||
if actStartTime <= curTime and curTime < actEndTime then
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
|
||
function ActTimeData:getActTypeTimeList()
|
||
return self.actTypeTimeList or {}
|
||
end
|
||
|
||
function ActTimeData:initActivityData(actType, info, isCrossDayClientRefresh)
|
||
if isCrossDayClientRefresh and GConst.ActivityConst.DISABLE_CLIENT_CROSS_DAY_REFRESH[actType] then
|
||
return
|
||
end
|
||
local data = DataManager[GConst.ActivityConst.ACTIVITY_TYPE_DATA[actType]]
|
||
if data then
|
||
if self.isInited and not data:getIsOpen() then
|
||
-- 跨天开启的新活动,提前清理礼包数据
|
||
if EDITOR_MODE then
|
||
Logger.logHighlight("开启活动 act_id = " .. tostring(info.actId))
|
||
end
|
||
if data.clearActInfo then
|
||
data:clearActInfo(info.actId)
|
||
end
|
||
end
|
||
|
||
if data.initActInfo then
|
||
data:initActInfo(info)-- 初始化基类方法
|
||
end
|
||
data:setActivityInfo(info)-- 初始化子类方法
|
||
else
|
||
-- 冲刺活动 无法用type区分 用id区分
|
||
local data = DataManager.ActSprintData:getSprintDetailData(info.actId)
|
||
if data then
|
||
if self.isInited and not data:getIsOpen() then
|
||
-- 跨天开启的新活动,提前清理礼包数据
|
||
if EDITOR_MODE then
|
||
Logger.logHighlight("开启活动 act_id = " .. tostring(info.actId))
|
||
end
|
||
if data.clearActInfo then
|
||
data:clearActInfo(info.actId)
|
||
end
|
||
end
|
||
|
||
if data.initActInfo then
|
||
data:initActInfo(info)-- 初始化基类方法
|
||
end
|
||
data:setActivityInfo(info, isCrossDayClientRefresh)-- 初始化子类方法
|
||
end
|
||
end
|
||
end
|
||
|
||
return ActTimeData |