---@class ActivityPreviewInfo @注释 ---@field previewInfo {leftTime:number,id:number,open:boolean,cfg:cfg_activity_rule_column,isPreview:boolean}[] ---@field activityCfgs cfg_activity_rule_column[] ActivityPreviewInfo = class() local this = ActivityPreviewInfo function this:ctor() end function this:Init() self.previewInfo = {} self.activityCfgs = SL:GetConfigTable("cfg_activity_rule") local tempTable = {} if self.activityCfgs then for k, v in pairs(self.activityCfgs) do tempTable[v.id] = v end end self.activityCfgs = tempTable self:InitData() self:RegistMessages() end function this:InitData() end function this:RegistMessages() SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ACTIVITY_LIST, self.ResPreviewDataList, self) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ACTIVITY_CHANGE, self.ResPreviewDataChange, self) end ---所有的活动信息 ---@param message {leftTime:number,id:number,open:boolean}[] function this:ResPreviewDataList(_, message) self.previewInfo = {} for k, v in pairs(message) do if self.activityCfgs[v.id] then v.cfg = self.activityCfgs[v.id] v.leftTime = tonumber(v.leftTime) v.isPreview = false if not v.open then v.isPreview = self:CheckActivityIsPreview(v) end table.insert(self.previewInfo, v) end end self:ActivityInfoSort() SL:onLUAEvent(LUA_EVENT_ACTIVITYPREVIEW_CHANGE) end ---单个活动更新 ---@param message {leftTime:number,id:number,open:boolean} function this:ResPreviewDataChange(_, message) local isHave = false for k, v in pairs(self.previewInfo) do if v.id == message.id and self.activityCfgs[message.id] then message.leftTime = tonumber(message.leftTime) message.cfg = self.activityCfgs[message.id] message.isPreview = false if not v.open then v.isPreview = self:CheckActivityIsPreview(v) end self.previewInfo[k] = message isHave = true break end end if not isHave and self.activityCfgs[message.id] then message.leftTime = tonumber(message.leftTime) message.cfg = self.activityCfgs[message.id] message.isPreview = false if not message.open then message.isPreview = self:CheckActivityIsPreview(message) end table.insert(self.previewInfo, message) end self:ActivityInfoSort() SL:onLUAEvent(LUA_EVENT_ACTIVITYPREVIEW_CHANGE) end function this:ActivityInfoSort() table.sort(self.previewInfo, function(a, b) if a.open and not b.open then return true elseif not a.open and not b.open then if a.cfg and b.cfg and a.cfg.rank < b.cfg.rank then return true end return false end return false end) end ---@param message {leftTime:number,id:number,open:boolean} ----@return boolean function this:CheckActivityIsPreview(message) local previewTime = message.leftTime - message.cfg.specialOpen * 1000 if Time.GetServerTime() > previewTime and Time.GetServerTime() < message.leftTime then return true end return false end ----获取活动数据 ----@return {leftTime:number,id:number,open:boolean,cfg:cfg_activity_rule_column,isPreview:boolean} function this:GetActivityInfo(activityId) for k, v in pairs(self.previewInfo) do if v.id == activityId and self.activityCfgs[activityId] then return v end end return nil end function this:Reset() self.previewInfo = {} end