------------------------------------------------ --作者: 王圣 --日期: 2019-07-11 --文件: ServeCrazySystem.lua --模块: ServeCrazySystem --描述: 开服狂欢系统 ------------------------------------------------ --引用 local TimeUtils = CS.Thousandto.Core.Base.TimeUtils; local CrazyData = require "Logic.ServeCrazy.ServeCrazyData" local ServeCrazySystem = { MenuType = 0, --开服时间 ServerOpenTime = 0, --刷新时间 ReFreshTime = 0, --功能开启列表 DicFuncEnable = Dictionary:New(), --开服狂欢数据字典 DicCrazyData = Dictionary:New(), --菜单红点显示 key : 对应菜单的Type value : 是否显示红点 DicMenuRedPointShow = Dictionary:New(), --boss首杀数据 ListFirstKillData = List:New(), --CacheKillData = List:New(), --红包消息缓存 ListNotice = List:New(), --红包提示窗体是否展示 IsShowNotice = false, IsShowFirstKillRedPoint = false, --是否点击了每日特惠 IsClickShop = false, PreShow = false, RankTypeList = List:New(), --首杀功能是否开启 FirstKillIsOpen = true, --是否进入场景 IsEnterScene = false, } function ServeCrazySystem:Initialize() self.DicCrazyData:Clear() self.DicMenuRedPointShow:Clear() --初始化配置表数据 DataConfig.DataNewSeverRankrew:Foreach(function(k, v) local crazyData = nil local key = v.Type if self.DicCrazyData:ContainsKey(key) then crazyData = self.DicCrazyData[key] crazyData:AddData(v) else crazyData = CrazyData:New() crazyData:ParseCfg(v) self.DicCrazyData[key] = crazyData end end) self.DicMenuRedPointShow[0] = false self.PreShow = false self.DicCrazyData:Foreach(function(k, v) self.DicMenuRedPointShow[k] = false end) self.ReFreshTime = tonumber(DataConfig.DataGlobal[1551].Params) self.ListFirstKillData:Clear() DataConfig.DataBossFirstBlood:Foreach(function(k, v) local data = {Cfg = v, KillInfo = nil} self.ListFirstKillData:Add(data) end) self.RankTypeList:Clear() DataConfig.DataNewSeverRank:Foreach(function(k, v) self.RankTypeList:Add(v.Id) end) GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_FUNCTION_UPDATE, self.OnFuncUpdated, self) GameCenter.RegFixEventHandle(LogicLuaEventDefine.EID_EVENT_ENTERMAP, self.OnEnterScene, self) -- end function ServeCrazySystem:UnInitialize() self.IsShowFirstKillRedPoint = false self.IsEnterScene = false GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_FUNCTION_UPDATE, self.OnFuncUpdated, self) GameCenter.UnRegFixEventHandle(LogicLuaEventDefine.EID_EVENT_ENTERMAP, self.OnEnterScene, self) end function ServeCrazySystem:OnFuncUpdated(funcData, sender) if funcData.ID == FunctionStartIdCode.FirstKill then self.FirstKillIsOpen = funcData.IsVisible end end --获取当前选中的狂欢数据 function ServeCrazySystem:GetCurCrazyData() if self.DicCrazyData:ContainsKey(self.MenuType) then return self.DicCrazyData[self.MenuType] end return nil end --获取传入菜单Type对应的狂欢数据 function ServeCrazySystem:GetCrazyData(menuType) if self.DicCrazyData:ContainsKey(menuType) then return self.DicCrazyData[menuType] end return nil end --获取当前是开服第几天 function ServeCrazySystem:GetCurOpenTime() local time = math.floor( GameCenter.HeartSystem.ServerTime - GameCenter.ServeCrazySystem.ServerOpenTime ) --获取开服当天是几点 local hour, min, sec = TimeUtils.GetStampTimeHHMMSS(math.floor(GameCenter.ServeCrazySystem.ServerOpenTime)) local curSeconds = hour * 3600 + min * 60 + sec time = time - (24 * 3600 - curSeconds) local openTime = 0 if time < curSeconds then openTime = 1 else openTime = math.floor( time/(24*3600) ) + 2 end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_CALCULATE_OPENSERVERTIME,openTime) return openTime end --根据配置获取首杀boss数据 function ServeCrazySystem:GetBossDataById(id) for i = 1,#self.ListFirstKillData do local killData = self.ListFirstKillData[i] if killData.Cfg.ID == id then return killData end end return nil end function ServeCrazySystem:GetBossDataIndex(id) for i = 1,#self.ListFirstKillData do local killData = self.ListFirstKillData[i] if killData.Cfg.ID == id then return i end end return 1 end function ServeCrazySystem:BossKillHaveAward() local isHave = false for i = 1, #self.ListFirstKillData do local data = self.ListFirstKillData[i] if data.KillInfo ~= nil then if data.KillInfo.state == 1 or data.KillInfo.redpacketState == 1 then if not isHave then isHave = true break end end end end return isHave end function ServeCrazySystem:BossKillHaveAwardById(cfgId) local isHave = false for i = 1, #self.ListFirstKillData do local data = self.ListFirstKillData[i] if data.KillInfo ~= nil and data.Cfg.ID == cfgId then if data.KillInfo.state == 1 or data.KillInfo.redpacketState == 1 then if not isHave then isHave = true break end end end end return isHave end function ServeCrazySystem:GetBossKillDefaultId() local id = -1 for i = 1, #self.ListFirstKillData do local data = self.ListFirstKillData[i] if data.KillInfo ~= nil then if data.KillInfo.state == 1 or data.KillInfo.redpacketState == 1 then id = data.Cfg.ID break end end end if id == -1 then for i = 1, #self.ListFirstKillData do local data = self.ListFirstKillData[i] if data.KillInfo ~= nil then if data.KillInfo.reliveTime == 0 then id = data.Cfg.ID break end end end end if id == -1 then id = self.ListFirstKillData[1].Cfg.ID end return id end function ServeCrazySystem:IsRewardRedpacket(cfgId) for i = 1, #self.ListFirstKillData do local data = self.ListFirstKillData[i] if data.KillInfo ~= nil and data.Cfg.ID == cfgId then if data.KillInfo.redpacketState == 2 then return true end end end return false end function ServeCrazySystem:OnEnterScene(obj, sender) self.IsEnterScene = true end function ServeCrazySystem:Update(dt) --降低调用频率 -- if Time.GetFrameCount() % 10 ~= 0 then -- return -- end local isShow = false --self.DicMenuRedPointShow[0] for k, v in pairs(self.DicCrazyData) do local have = v:HaveReward() self.DicMenuRedPointShow[k] = have if not isShow and have then isShow = true end end local _isLucky = false if self.IsEnterScene then if GameCenter.MainFunctionSystem:FunctionIsVisible(FunctionStartIdCode.LucyCard) then _isLucky = GameCenter.LuckyCardSystem:HaveRedPoint() end end isShow = isShow or _isLucky if not isShow then if self.FirstKillIsOpen then if self.IsShowFirstKillRedPoint then self.DicMenuRedPointShow[0] = true self.IsShowFirstKillRedPoint = false end isShow = self.DicMenuRedPointShow[0] if not isShow then --查找有没有首杀奖励没有领取 for i = 1,#self.ListFirstKillData do local _data = self.ListFirstKillData[i] if _data ~= nil and _data.KillInfo ~= nil and (_data.KillInfo.state == 1 or _data.KillInfo.redpacketState == 1) then isShow = true break end end end end end if self.PreShow ~= isShow then GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.ServeCrazy,isShow) self.PreShow = isShow end --红包提示窗体弹出处理 local canShowNotice = false if GameCenter.MapLogicSystem.MapCfg~= nil and GameCenter.MapLogicSystem.MapCfg.MapLogicType ~= MapLogicTypeDefine.DuJieCopy then canShowNotice = true end if canShowNotice and not self.IsShowNotice and #self.ListNotice > 0 then GameCenter.PushFixEvent(UILuaEventDefine.UIBossKillNoticeForm_OPEN,self.ListNotice[1]) self.ListNotice:RemoveAt(1) end end -------------------req消息(Msg)相关------------------ function ServeCrazySystem:ReqOpenServerRevel() GameCenter.Network.Send("MSG_OpenServerAc.ReqOpenServerRevel") end function ServeCrazySystem:ReqOpenSeverRevelReward(cfgId) GameCenter.Network.Send("MSG_OpenServerAc.ReqOpenSeverRevelReward", {id = cfgId}) end function ServeCrazySystem:ReqOpenSeverRevelPersonReward(cfgId) GameCenter.Network.Send("MSG_OpenServerAc.ReqOpenSeverRevelPersonReward", {id = cfgId}) end --请求打开boss首杀界面 function ServeCrazySystem:ReqOpenFirstKillPanel() GameCenter.Network.Send("MSG_OpenServerAc.ReqOpenFirstKillPanel") end --请求boss首杀个人领奖 function ServeCrazySystem:ReqGetKillReward(cfgId) GameCenter.Network.Send("MSG_OpenServerAc.ReqGetKillReward", {id = cfgId}) end --请求boss首杀红包领奖 function ServeCrazySystem:ReqHongBaoReward(cfgId) GameCenter.Network.Send("MSG_OpenServerAc.ReqHongBaoReward", {id = cfgId}) end --请求超值折扣商品状态 function ServeCrazySystem:ReqCheckDiscRechargeGoods(ids, t) GameCenter.Network.Send("MSG_Recharge.ReqCheckDiscRechargeGoods", {goodsId = ids, type = t}) end -------------------res消息(Msg)相关------------------ --上线推送 function ServeCrazySystem:GS2U_ResOpenSeverRevelList(result) if result == nil then return end self.ServerOpenTime = result.openTime / 1000 if result.revels ~= nil then for i = 1, #result.revels do local key = result.revels[i].id local crazyData = self:GetCrazyData(key) if crazyData ~= nil then crazyData:ParaseMsg(result.revels[i]) end end end self:GetCurOpenTime() GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_SERVECRAZYFORM_OPENRESULT) end --服务器定时刷新 function ServeCrazySystem:GS2U_ResOpenSeverRevelInfo(result) if result == nil then return end local key = result.revel.id if self.DicCrazyData:ContainsKey(key) then local crazyData = self.DicCrazyData[key] crazyData:ParaseMsg(result.revel) --更新UI界面 GameCenter.PushFixEvent(UIEventDefine.EID_EVENT_SERVECRAZYFORM_UPDATE) end end --领奖返回 function ServeCrazySystem:GS2U_ResOpenSeverRevelReward(result) if result == nil then return end --local key = DataConfig.DataNewSeverRankrew[result.id] local cfg = DataConfig.DataNewSeverRankrew[result.id] if self.DicCrazyData:ContainsKey(cfg.Type) then local crazyData = self.DicCrazyData[cfg.Type] --设置已经领取 crazyData.RewardState = 2 end GameCenter.PushFixEvent(UIEventDefine.EID_EVENT_SERVECRAZYFORM_UPDATE) end --个人领奖返回 function ServeCrazySystem:GS2U_ResOpenSeverRevelPersonReward(result) if result == nil then return end local cfg = DataConfig.DataNewSeverRankrew[result.id] if self.DicCrazyData:ContainsKey(cfg.Type) then local crazyData = self.DicCrazyData[cfg.Type] --设置已经领取 SetRunTimeRewardState crazyData:SetRunTimeRewardState(result.id,2) local showList = List:New() local listItem = crazyData:GetRewardItems(result.id) local occ = 0 local player = GameCenter.GameSceneSystem:GetLocalPlayer() if player then occ = player.IntOcc end local itemList = List:New() for i = 1, #listItem do if listItem[i].Occ == 9 or listItem[i].Occ == occ then itemList:Add(listItem[i]) end end if itemList ~= nil then for i = 1,#itemList do local tab = {Id = itemList[i].Id ,Num = itemList[i].Num, IsBind = true} showList:Add(tab) end end --显示领奖界面 GameCenter.PushFixEvent(UIEventDefine.UIWelfareGetItemForm_OPEN,showList) end --GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_SERVECRAZYFORM_REWARD, result.id) GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_SERVECRAZYFORM_UPDATE) end --打开boss首杀UI请求返回 function ServeCrazySystem:ResOpenFirstKillPanel(msg) if msg == nil then return end if msg.bossInfo ~= nil then for i = 1,#self.ListFirstKillData do local killData = self.ListFirstKillData[i] for m = 1, #msg.bossInfo do if killData.Cfg.ID == msg.bossInfo[m].cfgId then killData.KillInfo = msg.bossInfo[m] end end end end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_FBOSSKILL_UPDATE, true) end function ServeCrazySystem:ResFirstKillBossInfo(msg) if msg == nil then return end for i = 1, #self.ListFirstKillData do local data = self.ListFirstKillData[i] for m = 1, #msg.bossInfo do if data.Cfg.ID == msg.bossInfo[m].cfgId then data.KillInfo.reliveTime = msg.bossInfo[m].reliveTime end end end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_FBOSSKILL_UPDATE, false) end --boss首杀个人领奖返回 function ServeCrazySystem:ResGetKillReward(msg) if msg == nil then return end for i = 1,#self.ListFirstKillData do local killData = self.ListFirstKillData[i] if killData.Cfg.ID == msg.id then killData.KillInfo.state = 2 break end end --更新首杀界面 local isHave = self:BossKillHaveAwardById(msg.id) if not isHave then self.DicMenuRedPointShow[0] = false end local isReset = not isHave GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_FBOSSKILL_UPDATE, isReset) end --boss首杀红包领取返回 function ServeCrazySystem:ResHongBaoReward(msg) if msg == nil then return end for i = 1,#self.ListFirstKillData do local killData = self.ListFirstKillData[i] if killData.Cfg.ID == msg.id then if killData.KillInfo ~= nil then killData.KillInfo.redpacketState = 2 end break end end local isHave = self:BossKillHaveAwardById(msg.id) if not isHave then self.DicMenuRedPointShow[0] = false end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_FBOSSKILL_HONGBAO_RESULT) end function ServeCrazySystem:ResFirstKillAdvice(msg) --GameCenter.PushFixEvent(UILuaEventDefine.UIBossKillNoticeForm_CLOSE) if msg == nil then return end self.ListNotice:Add(msg) if GameCenter.MainFunctionSystem:FunctionIsVisible(FunctionStartIdCode.FirstKill) then self.DicMenuRedPointShow[0] = true self.IsShowFirstKillRedPoint = true end --GameCenter.PushFixEvent(UILuaEventDefine.UIBossKillNoticeForm_OPEN,msg) end function ServeCrazySystem:ResFirstKillRedPoint(msg) -- if msg == nil then -- return -- end -- if self.ListFirstKillData == nil then -- return -- end -- local _isFind = false -- for i = 1, #self.CacheKillData do -- local _data = self.CacheKillData[i] -- if _data.Id == msg.cfgId then -- _data.State = msg.state -- _data.RedState = msg.redpacketState -- _isFind = true -- end -- end -- if not _isFind then -- self.CacheKillData:Add({Id = msg.cfgId, State = msg.state, RedState = msg.redpacketState}) -- end end --返回超值折扣商品状态 function ServeCrazySystem:ResCheckDiscRechargeGoods(msg) if msg == nil then return end if msg.check == nil then return end for i = 1, #msg.check do local info = msg.check[i] if info.state == 1 then --未开启 local _data = {Type = msg.type, State = 1} GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LIMITSHOP_CHECK_RESULT, _data) break elseif info.state == 2 then --已结束 local _data = {Type = msg.type, State = 2} GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_LIMITSHOP_CHECK_RESULT, _data) break end end end return ServeCrazySystem