Files
Main/Assets/GameAssets/Resources/Lua/Logic/FunctionNotice/FunctionNoticeSystem.lua
2025-01-25 04:38:09 +08:00

123 lines
4.4 KiB
Lua

------------------------------------------------
--作者: 杨全福
--日期: 2020-05-12
--文件: FunctionNoticeSystem.lua
--模块: FunctionNoticeSystem
--描述: 功能预告系统
------------------------------------------------
local TimeUtils = CS.Thousandto.Core.Base.TimeUtils;
local FunctionNoticeSystem = {
TimerEventID = 0,
CloseDayCount = nil,
ServerOpenTime = nil,
CurNoticeCfg = nil,
CurNoticeRemianTime = 0,
IsUpdateData = false,
FrontLevel = nil,
}
--初始化
function FunctionNoticeSystem:Initialize()
local _gCfg = DataConfig.DataGlobal[GlobalName.Function_Notice_Open_Time]
if _gCfg ~= nil then
self.CloseDayCount = tonumber(_gCfg.Params)
else
self.CloseDayCount = 0
end
GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_TASKFINISH, self.OnTaskChanged, self);
GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_PLAYER_LEVEL_CHANGED, self.OnLevelChanged, self);
end
--反初始化
function FunctionNoticeSystem:UnInitialize()
GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_TASKFINISH, self.OnTaskChanged, self);
GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_PLAYER_LEVEL_CHANGED, self.OnLevelChanged, self);
end
--等级改变
function FunctionNoticeSystem:OnLevelChanged(level, sender)
self.IsUpdateData = true
local _frontLevel = self.FrontLevel
self.FrontLevel = level
if _frontLevel ~= nil and not CommonUtils.IsDFLevel(_frontLevel) and CommonUtils.IsDFLevel(level) then
--打开飞升等级提示界面
GameCenter.PushFixEvent(UILuaEventDefine.UIFeiShengBoxForm_OPEN)
end
end
--任务改变
function FunctionNoticeSystem:OnTaskChanged(obj, sender)
self.IsUpdateData = true
end
--更新
function FunctionNoticeSystem:Update(dt)
if self.IsUpdateData then
self:UpdateData()
self.IsUpdateData = false
end
local _curCfg = self.CurNoticeCfg
if _curCfg ~= nil and self.CurNoticeRemianTime > 0 then
self.CurNoticeRemianTime = self.CurNoticeRemianTime - dt
if self.CurNoticeRemianTime <= 0 then
self.IsUpdateData = true
end
end
end
--更新数据
function FunctionNoticeSystem:UpdateData()
local _curMM = nil
local _curAllSS = nil
local _isOpen = false
if self.ServerOpenTime ~= nil then
local _serverTime = GameCenter.HeartSystem.ServerTime + GameCenter.HeartSystem.ServerZoneOffset
local _openServerTime = self.ServerOpenTime + GameCenter.HeartSystem.ServerZoneOffset
local _offsetDay = TimeUtils.GetDayOffsetNotZone(math.floor(_openServerTime), math.floor(_serverTime))
local hour = TimeUtils.GetStampTimeHHNotZone(math.floor(_serverTime))
local min = TimeUtils.GetStampTimeMMNotZone(math.floor(_serverTime))
local ss = TimeUtils.GetStampTimeSSNotZone(math.floor(_serverTime))
_curMM = _offsetDay * 1440 + hour * 60 + min
_isOpen = _offsetDay < self.CloseDayCount
_curAllSS = _curMM * 60 + ss
end
local _noticeCfg = nil
self.CurNoticeRemianTime = 0
if _isOpen then
local _curLevel = GameCenter.GameSceneSystem:GetLocalPlayerLevel()
local _func = function(key, value)
if _noticeCfg == nil then
if value.OpenCondition == 0 then --等级
if _curLevel < value.OpenParam then
_noticeCfg = value
end
elseif value.OpenCondition == 1 then --完成任务
if not GameCenter.LuaTaskManager:IsMainTaskOver(value.OpenParam) then
_noticeCfg = value
end
elseif value.OpenCondition == 2 then --开服时间
if _curMM ~= nil and _curMM < value.OpenParam then
_noticeCfg = value
self.CurNoticeRemianTime = value.OpenParam * 60 - _curAllSS
end
end
end
return false
end
DataConfig.DataFunctionNotice:ForeachCanBreak(_func)
end
self.CurNoticeCfg = _noticeCfg
GameCenter.MainFunctionSystem:SetFunctionVisible(FunctionStartIdCode.FunctionNotice, _noticeCfg ~= nil)
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_UPDATEFUNCNOTICE_INFO)
end
function FunctionNoticeSystem:SetServerOpenTime(time)
self.ServerOpenTime = math.floor(time / 1000)
self.IsUpdateData = true
end
return FunctionNoticeSystem