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

534 lines
17 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

------------------------------------------------
--作者: 王圣
--日期: 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