491 lines
12 KiB
Lua
491 lines
12 KiB
Lua
local ActivityData = class("ActivityData", BaseData)
|
|
|
|
|
|
function ActivityData:ctor()
|
|
end
|
|
|
|
function ActivityData:clear()
|
|
self.checkedUIMap = nil
|
|
|
|
self.taskData = nil
|
|
self.taskIds = nil
|
|
end
|
|
|
|
function ActivityData:setDirty()
|
|
self.data.isDirty = not self.data.isDirty
|
|
end
|
|
|
|
function ActivityData:getActOpenKey()
|
|
return ModuleManager.MODULE_KEY.ACT_ALL_OPEN
|
|
end
|
|
|
|
function ActivityData:init(data)
|
|
data = data or {}
|
|
end
|
|
|
|
function ActivityData:initActivityData(actId, data)
|
|
if EDITOR_MODE then
|
|
Logger.logHighlight("初始化活动任务数据:" .. actId)
|
|
Logger.printTable(data)
|
|
end
|
|
|
|
if self.taskData == nil then
|
|
self.taskData = {}
|
|
end
|
|
for i, info in pairs(data) do
|
|
if self.taskData[actId] == nil then
|
|
self.taskData[actId] = {}
|
|
end
|
|
self.taskData[actId][info.id] = info
|
|
end
|
|
end
|
|
|
|
--region 兑换相关
|
|
function ActivityData:initExchangeData(data)
|
|
if EDITOR_MODE then
|
|
Logger.logHighlight("活动的兑换数据")
|
|
Logger.printTable(data)
|
|
end
|
|
self.exchangeData = data and data.exchange_count or {}
|
|
self.exchangeTime = data and data.exchange_at or {}
|
|
end
|
|
|
|
-- 获取已兑换次数
|
|
function ActivityData:getExchangeCount(id)
|
|
if self.exchangeData == nil then
|
|
return 0
|
|
end
|
|
return self.exchangeData[id] or 0
|
|
end
|
|
|
|
function ActivityData:onActivityExchange(id, count)
|
|
if self.exchangeData == nil then
|
|
return
|
|
end
|
|
if not self.exchangeData[id] then
|
|
self.exchangeData[id] = 0
|
|
end
|
|
self.exchangeData[id] = self.exchangeData[id] + (count or 0)
|
|
self.exchangeTime[id] = Time:getServerTime()
|
|
self:setDirty()
|
|
end
|
|
|
|
function ActivityData:getExchangeTime(id)
|
|
if self.exchangeTime == nil then
|
|
return 1
|
|
end
|
|
return self.exchangeTime[id] or 1
|
|
end
|
|
--endregion
|
|
|
|
function ActivityData:initSkipPopInfo()
|
|
self.loginPopSkipFlag = false
|
|
local flag = LocalData:getSkipPopFlag()
|
|
self.loginPopSkipFlag = flag == 1
|
|
|
|
local lastTime = LocalData:getSkipPopUITime()
|
|
if lastTime ~= Time:getBeginningOfServerToday() then
|
|
self.loginPopSkipFlag = false
|
|
self.theDayFirstLogin = true
|
|
flag = 0
|
|
else
|
|
self.theDayFirstLogin = false
|
|
end
|
|
|
|
LocalData:setSkipPopFlag(flag)
|
|
LocalData:setSkipPopUITime()
|
|
end
|
|
|
|
function ActivityData:getLoginPopSkipFlag()
|
|
-- if not GFunc.IsGotServerTime() then
|
|
-- return false
|
|
-- end
|
|
|
|
if self.loginPopSkipFlag == nil then
|
|
self:initSkipPopInfo()
|
|
end
|
|
return self.loginPopSkipFlag
|
|
end
|
|
|
|
function ActivityData:setLoginPopSkipFlag(value)
|
|
if self.loginPopSkipFlag == value then
|
|
return
|
|
end
|
|
|
|
self.loginPopSkipFlag = value
|
|
local flag = 0
|
|
if self.loginPopSkipFlag then
|
|
flag = 1
|
|
end
|
|
LocalData:setSkipPopFlag(flag)
|
|
LocalData:setSkipPopUITime()
|
|
end
|
|
|
|
function ActivityData:getTheDayFirstLogin()
|
|
-- if not GFunc.IsGotServerTime() then
|
|
-- return false
|
|
-- end
|
|
|
|
if self.theDayFirstLogin == nil then
|
|
self:initSkipPopInfo()
|
|
end
|
|
|
|
return self.theDayFirstLogin
|
|
end
|
|
|
|
---- 进入过某个界面
|
|
function ActivityData:getCheckUI(moduleName)
|
|
if not self.checkedUIMap then
|
|
return false
|
|
end
|
|
return self.checkedUIMap[moduleName]
|
|
end
|
|
|
|
function ActivityData:setCheckUI(moduleName)
|
|
if not moduleName then
|
|
return
|
|
end
|
|
if not self.checkedUIMap then
|
|
self.checkedUIMap = {}
|
|
end
|
|
self.checkedUIMap[moduleName] = true
|
|
end
|
|
|
|
---- 活动通用接口
|
|
function ActivityData:getActConfig(actId)
|
|
if actId then
|
|
return ConfigManager:getConfig("activity")[actId]
|
|
else
|
|
return ConfigManager:getConfig("activity")
|
|
end
|
|
end
|
|
|
|
-- 判定活动是否存在
|
|
function ActivityData:getActExist(actId)
|
|
return self:getActConfig(actId) ~= nil
|
|
end
|
|
|
|
-- 判定活动类型
|
|
function ActivityData:getActType(actId)
|
|
if not self:getActExist(actId) then
|
|
return
|
|
end
|
|
return self:getActConfig(actId).act_type
|
|
end
|
|
|
|
-- 获取活动ui类型
|
|
function ActivityData:getActUIType(actId)
|
|
if not self:getActExist(actId) then
|
|
return
|
|
end
|
|
return self:getActConfig(actId).ui_type
|
|
end
|
|
|
|
-- 获得活动时间类型
|
|
function ActivityData:getActTimeType(actId)
|
|
if not self:getActExist(actId) then
|
|
return
|
|
end
|
|
|
|
return self:getActConfig(actId).time_type
|
|
end
|
|
|
|
function ActivityData:getActCfgStartTime(actId)
|
|
if not self:getActExist(actId) then
|
|
return 0
|
|
end
|
|
return self:getActConfig(actId).start_time_1 or 0
|
|
end
|
|
|
|
function ActivityData:getActCfgEndTime(actId)
|
|
if not self:getActExist(actId) then
|
|
return 0
|
|
end
|
|
return self:getActConfig(actId).end_time_1 or 0
|
|
end
|
|
|
|
function ActivityData:getActCfgExtraTime(actId)
|
|
if not self:getActExist(actId) then
|
|
return 0
|
|
end
|
|
return self:getActConfig(actId).extra_time_1 or 0
|
|
end
|
|
|
|
function ActivityData:getActCfgStartTime2(actId)
|
|
if not self:getActExist(actId) then
|
|
return 0
|
|
end
|
|
return self:getActConfig(actId).start_time_2
|
|
end
|
|
|
|
function ActivityData:getActCfgEndTime2(actId)
|
|
if not self:getActExist(actId) then
|
|
return 0
|
|
end
|
|
return self:getActConfig(actId).end_time_2
|
|
end
|
|
|
|
function ActivityData:getActCfgExtraTime2(actId)
|
|
if not self:getActExist(actId) then
|
|
return 0
|
|
end
|
|
return self:getActConfig(actId).extra_time_2
|
|
end
|
|
|
|
function ActivityData:getTurntableAdCount(actId)
|
|
if not self:getActExist(actId) then
|
|
return 0
|
|
end
|
|
return self:getActConfig(actId).ad_times or 0
|
|
end
|
|
|
|
function ActivityData:getActFuncOpen(actId)
|
|
if not self:getActExist(actId) then
|
|
return
|
|
end
|
|
return self:getActConfig(actId).func_open
|
|
end
|
|
|
|
-- 获取活动开始是否忽略创号天数
|
|
function ActivityData:getActIgnoreCreateDay(actId)
|
|
if not self:getActExist(actId) then
|
|
return
|
|
end
|
|
return self:getActConfig(actId).circle_limit
|
|
end
|
|
|
|
function ActivityData:getActRoundReward(actId)
|
|
if not self:getActExist(actId) then
|
|
return
|
|
end
|
|
return self:getActConfig(actId).round_reward
|
|
end
|
|
|
|
-- 获取活动相关内容是否可展示
|
|
function ActivityData:canShowActContent(actId)
|
|
if actId == nil then
|
|
return true
|
|
end
|
|
if not self:getActExist(actId) then
|
|
return true
|
|
end
|
|
|
|
local startTime, endTime, extraTime = self:getActTimeInfo(actId)
|
|
|
|
local hour = GFunc.getConstIntValue("act_show_cultivation_time")
|
|
|
|
return Time:getServerTime() >= (startTime - hour * 3600)
|
|
end
|
|
|
|
-- 获取活动时间配置信息
|
|
function ActivityData:getActTimeInfo(actId)
|
|
if actId == nil then
|
|
return nil, nil, nil
|
|
end
|
|
if not self:getActExist(actId) then
|
|
return nil, nil, nil
|
|
end
|
|
|
|
local startDay = self:getActCfgStartTime(actId)
|
|
local endDay = self:getActCfgEndTime(actId)
|
|
local extraDay = self:getActCfgExtraTime(actId)
|
|
|
|
local startDay2 = self:getActCfgStartTime2(actId)
|
|
local endDay2 = self:getActCfgEndTime2(actId)
|
|
local extraDay2 = self:getActCfgExtraTime2(actId)
|
|
|
|
local timeType = self:getActTimeType(actId)
|
|
local startTime = 0
|
|
local endTime = 0
|
|
local extraTime = 0
|
|
if timeType == 1 then -- 开服时间
|
|
startTime = DataManager.PlayerData:getServerOpenBeginTime()
|
|
startTime = startTime + (startDay - 1) * 86400
|
|
endTime = startTime + endDay * 86400
|
|
extraTime = endTime + extraDay * 86400
|
|
elseif timeType == 2 then -- 建号时间
|
|
startTime = DataManager.PlayerData:getCreatePlayerBeginTime()
|
|
startTime = startTime + (startDay - 1) * 86400
|
|
endTime = startTime + endDay * 86400
|
|
extraTime = endTime + extraDay * 86400
|
|
elseif timeType == 3 then -- 固定时间
|
|
startTime = Time:getCertainTimeByStr(startDay2)
|
|
endTime = Time:getCertainTimeByStr(endDay2)
|
|
extraTime = Time:getCertainTimeByStr(extraDay2)
|
|
end
|
|
|
|
-- Logger.logHighlight(actId)
|
|
-- Logger.logHighlight(startTime)
|
|
-- Logger.logHighlight(endTime)
|
|
|
|
return startTime, endTime, extraTime
|
|
end
|
|
|
|
-- 活动是否在开启时间
|
|
function ActivityData:getActIsOpen(actId)
|
|
local startTime, endTime = self:getActTimeInfo(actId)
|
|
if startTime == nil or endTime == nil then
|
|
return false
|
|
end
|
|
|
|
return Time:getServerTime() >= startTime and Time:getServerTime() <= endTime
|
|
end
|
|
|
|
-- 活动是否已经结束
|
|
function ActivityData:getActIsOver(actId)
|
|
local startTime, endTime = self:getActTimeInfo(actId)
|
|
if startTime == nil or endTime == nil then
|
|
return false
|
|
end
|
|
|
|
return Time:getServerTime() >= endTime
|
|
end
|
|
|
|
-- 获得活动时间戳, 返回即将开的下一次的时间戳
|
|
function ActivityData:getActStampTime(actId, customStartTime)
|
|
if not self:getActExist(actId) then
|
|
return
|
|
end
|
|
|
|
local config = self:getActConfig(actId)
|
|
local duration
|
|
local pause
|
|
if config.circle then
|
|
duration = config.circle[1]
|
|
pause = config.circle[2]
|
|
end
|
|
|
|
local startDay = self:getActCfgStartTime(actId)
|
|
local endDay = self:getActCfgEndTime(actId)
|
|
local extraDay = self:getActCfgExtraTime(actId)
|
|
|
|
local timeType = self:getActTimeType(actId)
|
|
local openDay = 1
|
|
if timeType == 1 then -- 开服时间
|
|
openDay = DataManager.PlayerData:getServerOpenDay()
|
|
elseif timeType == 2 then -- 建号时间
|
|
openDay = DataManager.PlayerData:getCreateDay()
|
|
else
|
|
pause = nil
|
|
end
|
|
|
|
if pause then
|
|
if customStartTime then
|
|
local startTime = customStartTime + duration * 86400 + pause * 86400
|
|
local endTime = startTime + duration * 86400
|
|
local extraTime = endTime + extraDay * 86400
|
|
return startTime, endTime, extraTime
|
|
end
|
|
while (startDay <= endDay) do
|
|
if startDay >= openDay then -- 即将开
|
|
break
|
|
-- elseif startDay <= openDay and (endDay + extraDay) > openDay then -- 正在开
|
|
-- break
|
|
else
|
|
startDay = startDay + duration + pause
|
|
end
|
|
end
|
|
end
|
|
|
|
local startTime = 0
|
|
local endTime = 0
|
|
local extraTime = 0
|
|
if timeType == 1 then -- 开服时间
|
|
startTime = DataManager.PlayerData:getServerOpenBeginTime()
|
|
startTime = startTime + (startDay - 1) * 86400
|
|
endTime = startTime + endDay * 86400
|
|
extraTime = endTime + extraDay * 86400
|
|
elseif timeType == 2 then -- 建号时间
|
|
startTime = DataManager.PlayerData:getCreatePlayerBeginTime()
|
|
startTime = startTime + (startDay - 1) * 86400
|
|
endTime = startTime + endDay * 86400
|
|
extraTime = endTime + extraDay * 86400
|
|
elseif timeType == 3 then -- 固定时间
|
|
startTime = DataManager.ActTimeData:getActStartTime(actId) or 0
|
|
endTime = DataManager.ActTimeData:getActEndTime(actId) or 0
|
|
extraTime = DataManager.ActTimeData:getActExtraTime(actId) or 0
|
|
|
|
if startTime < Time:getServerTime() then -- 只需要即将开的
|
|
startTime = 0
|
|
endTime = 0
|
|
extraTime = 0
|
|
end
|
|
elseif timeType == 4 then -- 基于固定时间顺延(服务器已处理,同3一样即可)
|
|
startTime = DataManager.ActTimeData:getActStartTime(actId) or 0
|
|
endTime = DataManager.ActTimeData:getActEndTime(actId) or 0
|
|
extraTime = DataManager.ActTimeData:getActExtraTime(actId) or 0
|
|
|
|
if startTime < Time:getServerTime() then -- 只需要即将开的
|
|
startTime = 0
|
|
endTime = 0
|
|
extraTime = 0
|
|
end
|
|
end
|
|
|
|
return startTime, endTime, extraTime
|
|
end
|
|
|
|
function ActivityData:getActPushInfo()
|
|
if not ModuleManager:getIsOpen(DataManager.ActivityData:getActOpenKey(), true) then
|
|
return
|
|
end
|
|
local nextOpenInfo = {}
|
|
local nextExtraInfo = {} -- 只会在当前开着的活动中查找
|
|
local ids = self:getCurVersionIDs()
|
|
local curTime = Time:getServerTime()
|
|
for actType, info in pairs(DataManager.ActTimeData:getActTypeTimeList()) do
|
|
local config = self:getActConfig(info.actId)
|
|
if config.begin_mail and info.startTime > curTime then
|
|
table.insert(nextOpenInfo, {actId = info.actId, actType = config.act_type, startTime = info.startTime, endTime = info.endTime, extraTime = info.extraTime})
|
|
elseif config.end_mail and info.startTime <= curTime and info.endTime > curTime then
|
|
table.insert(nextExtraInfo, {actId = info.actId, actType = config.act_type, startTime = info.startTime, endTime = info.endTime, extraTime = info.extraTime})
|
|
else
|
|
for _, id in ipairs(ids) do
|
|
local newConfig = self:getActConfig(id)
|
|
if newConfig.begin_mail and id >= info.actId and newConfig.type == actType then
|
|
local startTime, endTime, extraTime = self:getActStampTime(id, info.startTime)
|
|
if startTime and startTime > curTime then
|
|
table.insert(nextOpenInfo, {actId = id, actType = config.act_type, startTime = startTime, endTime = endTime, extraTime = extraTime})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return nextOpenInfo, nextExtraInfo
|
|
end
|
|
|
|
function ActivityData:getCurVersionIDs()
|
|
if not self.curVersionIds then
|
|
self.curVersionIds = {}
|
|
local versionIds = {}
|
|
for id, info in pairs(self:getActConfig()) do
|
|
if info.version then
|
|
if not versionIds[info.version] then
|
|
versionIds[info.version] = {}
|
|
end
|
|
table.insert(versionIds[info.version], id)
|
|
end
|
|
end
|
|
local version = 0
|
|
for v, list in pairs(versionIds) do
|
|
if v > version then
|
|
self.curVersionIds = list
|
|
end
|
|
end
|
|
end
|
|
|
|
return self.curVersionIds
|
|
end
|
|
|
|
function ActivityData:tryResetActItem(actId)
|
|
local cfg = self:getActConfig(actId)
|
|
if cfg and cfg.parameter then
|
|
local clearItemIds = cfg.parameter
|
|
for i, id in ipairs(clearItemIds) do
|
|
DataManager.BagData.ItemData:clearItemById(id)
|
|
end
|
|
end
|
|
end
|
|
|
|
return ActivityData |