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

296 lines
9.2 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-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