c1_lua/lua/app/userdata/activity/act_time_data.lua
2025-09-28 14:42:58 +08:00

180 lines
5.3 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
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])
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])
-- 如果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])
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)
-- 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)-- 初始化子类方法
end
end
end
return ActTimeData