296 lines
9.2 KiB
Lua
296 lines
9.2 KiB
Lua
|
||
------------------------------------------------
|
||
--作者: 王圣
|
||
--日期: 2019-07-19
|
||
--文件: ServerActiveSystem.lua
|
||
--模块: ServerActiveSystem
|
||
--描述: 开服活动系统
|
||
------------------------------------------------
|
||
--引用
|
||
local ActiveComData = require "Logic.ServerActive.ServerActiveComData"
|
||
local RedPacketData = require "Logic.ServerActive.ServeRedPacketData"
|
||
local ExChangeData = require "Logic.ServerActive.ServeExChangeData"
|
||
local TimeUtils = CS.Thousandto.Core.Base.TimeUtils
|
||
local ServerActiveSystem = {
|
||
--[红包模块数据]------------
|
||
--可领取红包总额
|
||
RpGoldNum = 0,
|
||
--红包总个数据
|
||
RedPacketNum = 7,
|
||
--红包领取状态 0 : 未达到领取条件 1:可以领取 2:已领取
|
||
RpRewardState = 0,
|
||
--七日红包剩余时间
|
||
RpLeftTime = 0,
|
||
RpSyncTime = 0,
|
||
--元宝Icon
|
||
RpGoldIcon = 0,
|
||
--红包数据List
|
||
ListRedPacketData = List:New(),
|
||
--[红包模块数据]------------
|
||
|
||
--[集字兑换数据]------------
|
||
--说明
|
||
ExChangeExplain = nil,
|
||
ExChangeTitlePicName = nil,
|
||
ListExChangeData = List:New(),
|
||
--[集字兑换数据]------------
|
||
|
||
--通用模型数据类型字典 包含几个相同标签页数据
|
||
DicActiveComData = Dictionary:New(),
|
||
--红点字典
|
||
DicRedPoint = Dictionary:New(),
|
||
}
|
||
|
||
function ServerActiveSystem:Initialize()
|
||
self.DicActiveComData:Clear()
|
||
self.DicRedPoint:Clear()
|
||
DataConfig.DataNewSeverActive:Foreach(function(k, v)
|
||
local comData = nil
|
||
local key = v.Type
|
||
if self.DicActiveComData:ContainsKey(key) then
|
||
comData = self.DicActiveComData[key]
|
||
comData:AddData(v)
|
||
else
|
||
comData = ActiveComData:New()
|
||
comData:ParaseCfg(v)
|
||
self.DicActiveComData[key] = comData
|
||
end
|
||
end)
|
||
|
||
--初始化红包List
|
||
local globCfg = DataConfig.DataGlobal[1573]
|
||
if globCfg ~= nil then
|
||
local list = Utils.SplitStr(globCfg.Params,';')
|
||
if list ~= nil then
|
||
for i = 1,#list do
|
||
local rpData = RedPacketData:New()
|
||
rpData:Parase(list[i],i)
|
||
self.ListRedPacketData:Add(rpData)
|
||
end
|
||
end
|
||
end
|
||
|
||
--初始化集字兑换数据
|
||
DataConfig.DataNewSeverExchange:Foreach(function(k, v)
|
||
local exChangeData = ExChangeData:New()
|
||
exChangeData:ParaseCfg(v)
|
||
self.ListExChangeData:Add(exChangeData)
|
||
end)
|
||
|
||
--红点
|
||
for i = 1,ServerActiveEnum.Count -1 do
|
||
self.DicRedPoint:Add(i,false)
|
||
end
|
||
--注册道具改变消息
|
||
--GameCenter.RegFixEventHandle(LogicEventDefine.EVENT_ITEM_CHANGE_UPDATE, self.OnItemChanged,self)
|
||
end
|
||
|
||
function ServerActiveSystem:UnInitialize()
|
||
--GameCenter.UnRegFixEventHandle(LogicEventDefine.EVENT_ITEM_CHANGE_UPDATE, self.OnItemChanged,self)
|
||
end
|
||
|
||
--道具改变
|
||
function ServerActiveSystem:OnItemChanged(obj, sender)
|
||
if self.ListExChangeData~= nil then
|
||
local itemID = obj
|
||
local isEnable = true
|
||
for i = 1,#self.ListExChangeData do
|
||
local data = self.ListExChangeData[i]
|
||
for m = 1,#data.ListCostItem do
|
||
local ItemData = data.ListCostItem[m]
|
||
local num = GameCenter.ItemContianerSystem:GetItemCountFromCfgId(ItemData.Id)
|
||
if num < ItemData.Num then
|
||
isEnable = false
|
||
break
|
||
end
|
||
end
|
||
end
|
||
if isEnable then
|
||
--显示主功能红点
|
||
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.ServerActive,true)
|
||
self.DicRedPoint[ServerActiveEnum.Collect] = true
|
||
else
|
||
self.DicRedPoint[ServerActiveEnum.Collect] = false
|
||
end
|
||
end
|
||
end
|
||
|
||
--根据id值获取对应的ComData数据
|
||
function ServerActiveSystem:GetComActiveDataById(id)
|
||
if self.DicActiveComData:ContainsKey(id) then
|
||
return self.DicActiveComData[id]
|
||
end
|
||
return nil
|
||
end
|
||
|
||
--根据cfgId 获取对应ComData数据
|
||
function ServerActiveSystem:GetComActiveDataByCfgId(cfgId)
|
||
local cfg = DataConfig.DataNewSeverActive[cfgId]
|
||
if cfg ~= nil then
|
||
local key = cfg.Type
|
||
if self.DicActiveComData:ContainsKey(key) then
|
||
return self.DicActiveComData[key]
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
|
||
--根据cfgId 获取comdata中的taskdata
|
||
function ServerActiveSystem:GetTaskDataByCfgId(cfgId)
|
||
local data = nil
|
||
local cfg = DataConfig.DataNewSeverActive[cfgId]
|
||
if cfg ~= nil then
|
||
local key = cfg.Type
|
||
if self.DicActiveComData:ContainsKey(key) then
|
||
data = self.DicActiveComData[key]
|
||
end
|
||
end
|
||
if data ~= nil then
|
||
for i = 1,#data.ListTask do
|
||
if data.ListTask[i].CfgId == cfgId then
|
||
return data.ListTask[i]
|
||
end
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
|
||
--更新红点数据
|
||
function ServerActiveSystem:UpdateRedPoint()
|
||
self.DicActiveComData:Foreach(function(k, v)
|
||
local haveRedPoint = false
|
||
for i = 1, #v.ListTask do
|
||
if v.ListTask[i].RewardState == 1 then
|
||
haveRedPoint = true
|
||
break
|
||
end
|
||
end
|
||
if self.DicRedPoint:ContainsKey(k) then
|
||
self.DicRedPoint[k] = haveRedPoint
|
||
end
|
||
end)
|
||
end
|
||
|
||
--获取七日红包活动剩余时间
|
||
--获取剩余时间
|
||
function ServerActiveSystem:GetLeftTime()
|
||
return self.RpLeftTime - (Time.GetRealtimeSinceStartup()- self.RpSyncTime)
|
||
end
|
||
|
||
-------------------req消息(Msg)相关------------------
|
||
--请求活动列表
|
||
function ServerActiveSystem:ReqOpenServerSpecAc()
|
||
GameCenter.Network.Send("MSG_OpenServerAc.ReqOpenServerSpecAc")
|
||
end
|
||
|
||
--请求领奖
|
||
function ServerActiveSystem:ReqOpenServerSpecReward(cfgId)
|
||
GameCenter.Network.Send("MSG_OpenServerAc.ReqOpenServerSpecReward", {id = cfgId})
|
||
end
|
||
|
||
--请求领取红包
|
||
function ServerActiveSystem:ReqOpenServerSpecRed()
|
||
GameCenter.Network.Send("MSG_OpenServerAc.ReqOpenServerSpecRed")
|
||
end
|
||
|
||
--请求兑换
|
||
function ServerActiveSystem:ReqOpenServerSpecExchange(id)
|
||
GameCenter.Network.Send("MSG_OpenServerAc.ReqOpenServerSpecReward", {type = id})
|
||
end
|
||
|
||
-------------------res消息(Msg)相关------------------
|
||
--上线推送红点
|
||
function ServerActiveSystem:ResOpenServerSpecRedDot(result)
|
||
if result == nil then
|
||
return
|
||
end
|
||
--控制主界面是否显示红点
|
||
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.ServerActive,result.state)
|
||
--设置剩余兑换次数
|
||
if result.exchangeList ~= nil then
|
||
for i = 1,#self.ListExChangeData do
|
||
self.ListExChangeData[i]:ParaseMsg(result.exchangeList[i])
|
||
end
|
||
end
|
||
end
|
||
|
||
--请求活动列表返回
|
||
function ServerActiveSystem:ResOpenServerSpecAc(result)
|
||
if result == nil then
|
||
return
|
||
end
|
||
if result.specList ~= nil then
|
||
for i = 1,#result.specList do
|
||
--获取分页类型
|
||
local data = self:GetComActiveDataByCfgId(result.specList[i].id)
|
||
if data~= nil then
|
||
data:ParaseMsg(result.specList[i])
|
||
end
|
||
end
|
||
end
|
||
--设置红包可领总额
|
||
self.RpGoldNum = 0
|
||
if result.redList ~= nil then
|
||
for i = 1,#result.redList do
|
||
self.RpGoldNum = self.RpGoldNum + result.redList[i]
|
||
self.ListRedPacketData[i]:ParaseMsg(result.redList[i])
|
||
end
|
||
else
|
||
end
|
||
self.RpRewardState = result.redState
|
||
--设置兑换数据
|
||
if result.exchangeList ~= nil then
|
||
for i = 1,#self.ListExChangeData do
|
||
self.ListExChangeData[i]:ParaseMsg(result.exchangeList[i])
|
||
end
|
||
end
|
||
self:UpdateRedPoint()
|
||
--获取当前开服时间
|
||
local time = math.floor( GameCenter.HeartSystem.ServerTime - result.openTime )
|
||
self.CurDay = math.floor( time/(24*3600) ) + 1
|
||
local totalDay = tonumber(DataConfig.DataGlobal[1572].Params)
|
||
local liveSeconds = totalDay * (24 * 60 *60)
|
||
|
||
local seconds = 24 * 3600
|
||
local hour, min, sec = TimeUtils.GetStampTimeHHMMSS(math.floor(GameCenter.HeartSystem.ServerTime))
|
||
local curSeconds = hour * 3600 + min * 60 + sec
|
||
self.RpLeftTime = liveSeconds - ((self.CurDay - 1) * (24 * 60 *60) + curSeconds )
|
||
self.RpSyncTime = Time.GetRealtimeSinceStartup()
|
||
--发送更新UI消息
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_SERVERACTIVEFORM_UPDATE)
|
||
end
|
||
|
||
--前面四个活动领奖返回
|
||
function ServerActiveSystem:ResOpenServerSpecReward(result)
|
||
if result == nil then
|
||
return
|
||
end
|
||
local taskData = self:GetTaskDataByCfgId(result.id)
|
||
if taskData ~= nil then
|
||
taskData.RewardState = 2
|
||
taskData.LeftNum = result.remain
|
||
end
|
||
--发送更新UI消息
|
||
self:UpdateRedPoint()
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_SERVERACTIVEFORM_UPDATE)
|
||
end
|
||
|
||
--领取红包返回
|
||
function ServerActiveSystem:ResOpenServerSpecRed(result)
|
||
if result == nil then
|
||
return
|
||
end
|
||
--发送更新UI消息
|
||
self.IsRewardRedPacket = true
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_SERVERACTIVEFORM_UPDATE)
|
||
end
|
||
|
||
--兑换返回
|
||
function ServerActiveSystem:ResOpenServerSpecExchange(result)
|
||
if result == nil then
|
||
return
|
||
end
|
||
--发送更新UI消息
|
||
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_SERVERACTIVEFORM_UPDATE)
|
||
end
|
||
return ServerActiveSystem |