534 lines
17 KiB
Lua
534 lines
17 KiB
Lua
|
||
------------------------------------------------
|
||
--作者: 王圣
|
||
--日期: 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 |