Files
Main/Assets/GameAssets/Resources/Lua/Logic/ServeCrazy/ServeCrazySystem.lua

534 lines
17 KiB
Lua
Raw Normal View History

2025-01-25 04:38:09 +08:00
------------------------------------------------
--作者: 王圣
--日期: 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