202 lines
7.0 KiB
Lua
202 lines
7.0 KiB
Lua
------------------------------------------------
|
|
--作者: yangqf
|
|
--日期: 2021-09-27
|
|
--文件: TodayFuncSystem.lua
|
|
--模块: TodayFuncSystem
|
|
--描述: 今日功能系统
|
|
------------------------------------------------
|
|
local RedPointCustomCondition = CS.Thousandto.Code.Logic.RedPointCustomCondition
|
|
local TimeUtils = CS.Thousandto.Core.Base.TimeUtils
|
|
|
|
local TodayFuncSystem = {
|
|
--开服时间,用于计算开服天数
|
|
ServerOpenTime = nil,
|
|
--展示主任务
|
|
ShowFuncList = List:New(),
|
|
--展示的任务列表
|
|
ShowTaskList = List:New(),
|
|
--任务数据
|
|
TaskData = nil,
|
|
--充值数据
|
|
RechargeData = nil,
|
|
--当前开服天数
|
|
CurOpenServerDay = 0,
|
|
}
|
|
|
|
function TodayFuncSystem:Initialize()
|
|
self.ShowFuncList:Clear()
|
|
--每天凌晨10秒执行
|
|
self.TimerID = GameCenter.TimerEventSystem:AddTimeStampDayEvent(10, 86400,
|
|
true, nil, function(id, remainTime, param)
|
|
self:ReInitTodyTask()
|
|
end)
|
|
end
|
|
|
|
function TodayFuncSystem:UnInitialize()
|
|
end
|
|
|
|
function TodayFuncSystem:SetOpenServerTime(time)
|
|
--检查开启情况
|
|
self.ServerOpenTime = math.floor(math.floor(time / 1000) + GameCenter.HeartSystem.ServerZoneOffset)
|
|
self:ReInitTodyTask()
|
|
end
|
|
|
|
--重新初始化今日活动
|
|
function TodayFuncSystem:ReInitTodyTask()
|
|
self.ShowFuncList:Clear()
|
|
local _serverTime = math.floor(GameCenter.HeartSystem.ServerZoneTime)
|
|
--刷新今日任务
|
|
local _openDay = TimeUtils.GetDayOffsetNotZone(self.ServerOpenTime, math.floor(_serverTime)) + 1
|
|
self.CurOpenServerDay = _openDay
|
|
--计算当前周几 1 - 7
|
|
local week = TimeUtils.GetStampTimeWeeklyNotZone(_serverTime)
|
|
if week == 0 then
|
|
week = 7
|
|
end
|
|
local _openCountTable = {}
|
|
DataConfig.DataTodayFunction:Foreach(function(k, cfg)
|
|
local _dayParam = Utils.SplitNumber(cfg.OpenDay, '_')
|
|
if _openDay >= _dayParam[1] and _openDay <= _dayParam[2] then
|
|
if string.len(cfg.WeekDay) > 0 then
|
|
local _weekParam = Utils.SplitNumber(cfg.WeekDay, '_')
|
|
if _weekParam:Contains(week) then
|
|
local _rOpenDay = _openDay - _dayParam[1]
|
|
local _startWeek = TimeUtils.GetStampTimeWeeklyNotZone(_serverTime - _rOpenDay * 86400)
|
|
if _startWeek == 0 then
|
|
_startWeek = 7
|
|
end
|
|
--计算活动开了多少次
|
|
local _rOpenCount = 0
|
|
for i = 0, _rOpenDay do
|
|
if _weekParam:Contains(_startWeek) then
|
|
_rOpenCount = _rOpenCount + 1
|
|
end
|
|
_startWeek = _startWeek + 1
|
|
if _startWeek > 7 then
|
|
_startWeek = 1
|
|
end
|
|
end
|
|
--今天开启活动
|
|
self.ShowFuncList:Add(cfg)
|
|
_openCountTable[k] = _rOpenCount
|
|
end
|
|
else
|
|
self.ShowFuncList:Add(cfg)
|
|
_openCountTable[k] = _openDay - _dayParam[1] + 1
|
|
end
|
|
end
|
|
end)
|
|
self.ShowTaskList:Clear()
|
|
DataConfig.DataTodayFunctionTask:Foreach(function(k, cfg)
|
|
local _ownerParams = Utils.SplitNumber(cfg.TodayFunctionID, '_')
|
|
local _isShow = false
|
|
for i = 1, #_ownerParams do
|
|
local _openCount = _openCountTable[_ownerParams[i]]
|
|
if _openCount ~= nil and (cfg.ShowCount == nil or cfg.ShowCount == 0 or cfg.ShowCount >= _openCount) then
|
|
_isShow = true
|
|
break
|
|
end
|
|
end
|
|
if _isShow then
|
|
self.ShowTaskList:Add(cfg)
|
|
end
|
|
end)
|
|
if self.ShowTaskList == nil or #self.ShowTaskList <= 0 then
|
|
GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.ToDayFunc, false)
|
|
else
|
|
GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.ToDayFunc, true)
|
|
self:CheckAllRedPoint()
|
|
end
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_TODAYFUNC_INFO)
|
|
end
|
|
|
|
--检查所有任务红点
|
|
function TodayFuncSystem:CheckAllRedPoint()
|
|
GameCenter.RedPointSystem:CleraFuncCondition(FunctionStartIdCode.ToDayFunc)
|
|
--增加第一次红点
|
|
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.ToDayFunc, 0, RedPointCustomCondition(true))
|
|
if self.TaskData == nil then
|
|
return
|
|
end
|
|
for i = 1, #self.ShowTaskList do
|
|
self:CheckSingleRedPoint(self.ShowTaskList[i].Id, false)
|
|
end
|
|
end
|
|
|
|
--检查单个任务红点
|
|
function TodayFuncSystem:CheckSingleRedPoint(taskId, needClear)
|
|
if needClear then
|
|
GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.ToDayFunc, taskId)
|
|
end
|
|
if self.TaskData == nil then
|
|
return
|
|
end
|
|
local _taskData = self.TaskData[taskId]
|
|
if _taskData == nil then
|
|
return
|
|
end
|
|
if _taskData.IsGet then
|
|
return
|
|
end
|
|
if _taskData.Num < _taskData.MaxNum then
|
|
return
|
|
end
|
|
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.ToDayFunc, taskId, RedPointCustomCondition(true))
|
|
end
|
|
|
|
--所有任务列表数据
|
|
function TodayFuncSystem:ResAllFunctionTask(msg)
|
|
self.TaskData = {}
|
|
if msg.tasks ~= nil then
|
|
for i = 1, #msg.tasks do
|
|
local _msgTask = msg.tasks[i]
|
|
self.TaskData[_msgTask.id] = {
|
|
Id = _msgTask.id,
|
|
Num = _msgTask.num,--当前数量
|
|
MaxNum = _msgTask.maxNum,--最大数量
|
|
IsGet = _msgTask.get,--是否领取
|
|
}
|
|
end
|
|
end
|
|
self.RechargeData = nil
|
|
if msg.rechargeTask ~= nil then
|
|
self.RechargeData = {
|
|
RechargeId = msg.rechargeTask.rechargeid,--充值ID
|
|
ZheKou = msg.rechargeTask.num,--折扣
|
|
ItemList = msg.rechargeTask.rewards,--物品列表
|
|
IsGet = msg.rechargeTask.get,--是否领取
|
|
}
|
|
end
|
|
self:CheckAllRedPoint()
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_TODAYFUNC_INFO)
|
|
end
|
|
|
|
--任务刷新
|
|
function TodayFuncSystem:ResFunctionTaskUpdate(msg)
|
|
if self.TaskData == nil then
|
|
self.TaskData = {}
|
|
end
|
|
if msg.tasks ~= nil then
|
|
local _taskData = self.TaskData[msg.tasks.id]
|
|
if _taskData == nil then
|
|
_taskData = {}
|
|
self.TaskData[msg.tasks.id] = _taskData
|
|
end
|
|
_taskData.Id = msg.tasks.id
|
|
_taskData.Num = msg.tasks.num --当前数量
|
|
_taskData.MaxNum = msg.tasks.maxNum--最大数量
|
|
_taskData.IsGet = msg.tasks.get --是否领取
|
|
self:CheckSingleRedPoint(_taskData.Id, true)
|
|
end
|
|
if msg.rechargeTask ~= nil then
|
|
self.RechargeData = {
|
|
RechargeId = msg.rechargeTask.rechargeid,--充值ID
|
|
ZheKou = msg.rechargeTask.num,--折扣
|
|
ItemList = msg.rechargeTask.rewards,--物品列表
|
|
IsGet = msg.rechargeTask.get,--是否领取
|
|
}
|
|
end
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_TODAYFUNC_INFO)
|
|
end
|
|
|
|
return TodayFuncSystem |