730 lines
24 KiB
Lua
730 lines
24 KiB
Lua
------------------------------------------------
|
|
-- 作者: _SqL_
|
|
-- 日期: 2019-04-23
|
|
-- 文件: DailyActivitySystem.lua
|
|
-- 模块: DailyActivitySystem
|
|
-- 描述: 日常系统
|
|
------------------------------------------------
|
|
local DailyActivityData = require "Logic.DailyActivity.DailyActivityData"
|
|
local ServerMatchInfo = require "Logic.DailyActivity.ServerMatchInfo"
|
|
local RedPointCustomCondition = CS.Thousandto.Code.Logic.RedPointCustomCondition;
|
|
|
|
local DailyActivitySystem = {
|
|
-- 当前获取的活跃值 所有活动的获取的叠加
|
|
CurrActive = 0,
|
|
-- 可获取的最大活跃值 所有活动的叠加
|
|
MaxActive = 0,
|
|
-- 活跃宝箱的数量
|
|
GiftCount = 0,
|
|
-- 使用活跃宝箱的数量
|
|
UseItemCount = 0,
|
|
-- 已增加的活跃度
|
|
AddActive = 0,
|
|
-- 已领取过的宝箱ID
|
|
ReceiveGiftIDList = List:New(),
|
|
-- 日常活动
|
|
DailyActivitylist = List:New(),
|
|
-- 限时活动
|
|
LimitActivityList = List:New(),
|
|
-- 跨服活动
|
|
CrossServerActivityList = List:New(),
|
|
-- 所有活动
|
|
AllActivityIdList = List:New(),
|
|
-- 打开推送的活动
|
|
OpenPushActivityList = List:New(),
|
|
-- 活动准备时间
|
|
ReadyTimeContainer = Dictionary:New(),
|
|
-- 服务器阶级信息
|
|
ServerMatchInfoLvDic = Dictionary:New(),
|
|
-- 所有活动
|
|
AllActivityDic = Dictionary:New(),
|
|
-- 是否参与了周常Vip
|
|
IsJoinWeekVip = false,
|
|
-- 日常功能所有活动的等级表
|
|
ActivityLevelDic = nil,
|
|
|
|
--自动进入的日常id
|
|
AutoEnterDailyId = nil,
|
|
--自动进入的日常参数
|
|
AutoEnterDailyParam = nil,
|
|
|
|
--地图对应的日常id
|
|
MapOwnerDaily = nil,
|
|
}
|
|
|
|
function DailyActivitySystem:Initialize()
|
|
GameCenter.RegFixEventHandle(LogicEventDefine.EVENT_COIN_CHANGE_UPDATE, self.CoinChange, self)
|
|
GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_FIRSTENTERMAP, self.OnFirstEnterMap, self)
|
|
GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_PLAYER_LEVEL_CHANGED, self.OnLevelChanged, self)
|
|
|
|
self.MapOwnerDaily = Dictionary:New()
|
|
DataConfig.DataDaily:Foreach(function(k, v)
|
|
if v.IfOpen ~= 0 then
|
|
local _cloneIds = Utils.SplitNumber(v.CloneID, '_')
|
|
for i = 1, #_cloneIds do
|
|
local _dcCfg = DataConfig.DataCloneMap[_cloneIds[i]]
|
|
if _dcCfg ~= nil then
|
|
self.MapOwnerDaily[_dcCfg.Mapid] = k
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
function DailyActivitySystem:UnInitialize()
|
|
self.IsJoinWeekVip = false;
|
|
self.ReceiveGiftIDList:Clear()
|
|
self.DailyActivitylist:Clear()
|
|
self.LimitActivityList:Clear()
|
|
self.CrossServerActivityList:Clear()
|
|
self.OpenPushActivityList:Clear()
|
|
self.ReadyTimeContainer:Clear()
|
|
self.ServerMatchInfoLvDic:Clear()
|
|
GameCenter.UnRegFixEventHandle(LogicEventDefine.EVENT_COIN_CHANGE_UPDATE, self.CoinChange, self)
|
|
GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_FIRSTENTERMAP, self.OnFirstEnterMap, self)
|
|
GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_PLAYER_LEVEL_CHANGED, self.OnLevelChanged, self)
|
|
end
|
|
|
|
--进入场景处理
|
|
function DailyActivitySystem:OnEnterScene()
|
|
if self.AutoEnterDailyId ~= nil then
|
|
self:ReqJoinActivity(self.AutoEnterDailyId, self.AutoEnterDailyParam)
|
|
end
|
|
self.AutoEnterDailyId = nil
|
|
self.AutoEnterDailyParam = nil
|
|
end
|
|
|
|
function DailyActivitySystem:Update(dt)
|
|
if self.ReadyTimeContainer:Count() > 0 then
|
|
for k, v in pairs(self.ReadyTimeContainer) do
|
|
if v > 0 then
|
|
self.ReadyTimeContainer[k] = v - dt
|
|
else
|
|
self.ReadyTimeContainer:Remove(k)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function DailyActivitySystem:GetActivityInfo(id)
|
|
if not self.AllActivityIdList:Contains(id) then
|
|
return nil
|
|
end
|
|
for i = 1, self.DailyActivitylist:Count() do
|
|
if self.DailyActivitylist[i].ID == id then
|
|
return self.DailyActivitylist[i]
|
|
end
|
|
end
|
|
for i = 1, self.LimitActivityList:Count() do
|
|
if self.LimitActivityList[i].ID == id then
|
|
return self.LimitActivityList[i]
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function DailyActivitySystem:CheckDailyListContains(id)
|
|
for i = 1, #self.DailyActivitylist do
|
|
if self.DailyActivitylist[i].ID == id then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function DailyActivitySystem:CheckLimitListContains(id)
|
|
for i = 1, #self.LimitActivityList do
|
|
if self.LimitActivityList[i].ID == id then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function DailyActivitySystem:SortActivityList(noSortLimit)
|
|
if not noSortLimit then
|
|
table.sort(self.LimitActivityList, function(a, b)
|
|
if a.ShowSort == b.ShowSort then
|
|
return a.Sort < b.Sort
|
|
else
|
|
return a.ShowSort < b.ShowSort
|
|
end
|
|
end)
|
|
end
|
|
table.sort(self.DailyActivitylist, function(a, b)
|
|
if a.ShowSort == b.ShowSort then
|
|
return a.Sort < b.Sort
|
|
else
|
|
return a.ShowSort < b.ShowSort
|
|
end
|
|
end)
|
|
end
|
|
|
|
-- 寻路
|
|
function DailyActivitySystem:Navigate(npcID)
|
|
local _p = GameCenter.GameSceneSystem:GetLocalPlayer()
|
|
if _p ~= nil then
|
|
local _strs = Utils.SplitStr(npcID, ";")
|
|
for i = 1, _strs:Count() do
|
|
local _npcID = Utils.SplitStr(_strs[i])[3]
|
|
if _npcID then
|
|
GameCenter.PathSearchSystem:SearchPathToNpcTalk(_npcID)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 获取活动开启时间
|
|
function DailyActivitySystem:GetActivityOpenTime(id)
|
|
local _cfg = DataConfig.DataDaily[id]
|
|
if not _cfg then
|
|
return ""
|
|
end
|
|
-- 周活动
|
|
if tonumber(_cfg.OpenTime) ~= 0 and _cfg.SpecialOpen ~= Time.GetOpenSeverDay() then
|
|
return _cfg.OpenTimeDes
|
|
else
|
|
local _timeStr = Utils.SplitStrBySeps(_cfg.Time, {';', '_'})
|
|
local _t = Time.GetNowTable();
|
|
local _hour = _t.hour;
|
|
local _minute = _t.min;
|
|
for i = 1, #_timeStr do
|
|
local _startHour = math.floor(_timeStr[i][1] // 60)
|
|
local _stattMinute = math.floor(_timeStr[i][1] % 60)
|
|
if _startHour > _hour then
|
|
return UIUtils.CSFormat(DataConfig.DataMessageString.Get("DailyActivtyOpenTips"), _startHour,
|
|
_stattMinute)
|
|
elseif _startHour == _hour and _stattMinute > _minute then
|
|
return UIUtils.CSFormat(DataConfig.DataMessageString.Get("DailyActivtyOpenTips"), _startHour,
|
|
_stattMinute)
|
|
end
|
|
end
|
|
if id == 2 then
|
|
return DataConfig.DataMessageString.Get("ActiveValueNotEnough")
|
|
end
|
|
if tonumber(_cfg.OpenTime) ~= 0 and _cfg.SpecialOpen == Time.GetOpenSeverDay() then
|
|
return _cfg.OpenTimeDes
|
|
else
|
|
return DataConfig.DataMessageString.Get("TomorrowOpen")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 获取准备时间
|
|
function DailyActivitySystem:GetActivityReadyTime(id)
|
|
if self.ReadyTimeContainer:ContainsKey(id) then
|
|
return self.ReadyTimeContainer[id]
|
|
end
|
|
return 0
|
|
end
|
|
|
|
-- 货币改变
|
|
function DailyActivitySystem:CoinChange(obj, sender)
|
|
if obj > 0 and obj == ItemTypeCode.ActivePoint then
|
|
for i = 1, #self.DailyActivitylist do
|
|
if self.DailyActivitylist[i].ID == 2 then
|
|
local _active = GameCenter.ItemContianerSystem:GetEconomyWithType(ItemTypeCode.ActivePoint)
|
|
self.DailyActivitylist[i].IsOpen = _active > 0
|
|
break
|
|
end
|
|
end
|
|
self:SortActivityList(true)
|
|
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_REFRESH_DAILYPANEL)
|
|
end
|
|
end
|
|
|
|
-- 获取当前这个活动的结束时间,如果当前活动没有打开返回空
|
|
function DailyActivitySystem:DailyIsShowRedPoint()
|
|
local _showRed = false
|
|
for i = 1, #self.DailyActivitylist do
|
|
local _d = self.DailyActivitylist[i]
|
|
if _d.IsOpen and _d.Open and _d.RemindCount ~= 0 then
|
|
_showRed = true
|
|
break
|
|
end
|
|
end
|
|
return _showRed
|
|
end
|
|
|
|
-- 显示活动是否显示红点
|
|
function DailyActivitySystem:LimitIsShowRedPoint()
|
|
local _showRed = false
|
|
for i = 1, #self.LimitActivityList do
|
|
local _d = self.LimitActivityList[i]
|
|
if _d.IsOpen and _d.Open and _d.RemindCount ~= 0 then
|
|
_showRed = true
|
|
break
|
|
end
|
|
end
|
|
return _showRed
|
|
end
|
|
|
|
-- 获取某个限时活动是否有红点
|
|
function DailyActivitySystem:GetLimitActiveRedByID(id)
|
|
local _showRed = false
|
|
for i = 1, #self.LimitActivityList do
|
|
local _d = self.LimitActivityList[i]
|
|
if _d.ID == id then
|
|
if _d.IsOpen and _d.Open then
|
|
_showRed = true
|
|
end
|
|
break
|
|
end
|
|
end
|
|
return _showRed
|
|
end
|
|
|
|
-- 活跃奖励是否显示红点
|
|
function DailyActivitySystem:ActiveIsShowRedPoint()
|
|
local _showRed = false
|
|
DataConfig.DataDailyReward:Foreach(function(k, v)
|
|
if not self.ReceiveGiftIDList:Contains(k) and v.QNeedintegral <= self.CurrActive then
|
|
_showRed = true
|
|
end
|
|
end)
|
|
return _showRed
|
|
end
|
|
|
|
-- 活跃度红点检测
|
|
function DailyActivitySystem:ActiveRedPointCheck()
|
|
GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.DailyActivity, 3)
|
|
local _activeRed = self:ActiveIsShowRedPoint()
|
|
if _activeRed then
|
|
local _conditions3 = List:New()
|
|
_conditions3:Add(RedPointCustomCondition(true))
|
|
GameCenter.RedPointSystem:LuaAddFuncCondition(FunctionStartIdCode.DailyActivity, 3, _conditions3)
|
|
end
|
|
end
|
|
|
|
-- 红点检测
|
|
function DailyActivitySystem:CheckIsShowRedPoint()
|
|
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.DailyActivity, self:DailyIsShowRedPoint())
|
|
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.LimitActivity, self:LimitIsShowRedPoint())
|
|
self:ActiveRedPointCheck()
|
|
end
|
|
|
|
-- 参加活动
|
|
function DailyActivitySystem:JoinActivity(id)
|
|
local _cfg = DataConfig.DataDaily[id]
|
|
if not _cfg then
|
|
return
|
|
end
|
|
|
|
if id == 18 then
|
|
self.IsJoinWeekVip = true;
|
|
end
|
|
-- BI埋点
|
|
if id == 1 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.WYJDailyEnter);
|
|
elseif id == 2 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.ZMCDDailyEnter);
|
|
elseif id == 4 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.WJXYDailyEnter);
|
|
elseif id == 5 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.ArenaDailyEnter);
|
|
elseif id == 6 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.TJZMDailyEnter);
|
|
elseif id == 7 then
|
|
-- GameCenter.BISystem:ReqClickEvent(BiIdCode.DNYFDailyEnter);
|
|
elseif id == 8 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.LYYTDailyEnter);
|
|
elseif id == 9 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.XMHJDailyEnter);
|
|
elseif id == 10 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.SLTDailyEnter);
|
|
elseif id == 17 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.XMTaskDailyEnter);
|
|
elseif id == 207 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.FDBossDailyEnter);
|
|
elseif id == 11 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.JJSYDailyEnter);
|
|
elseif id == 14 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.NSFYDailyEnter);
|
|
elseif id == 109 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.HDMJDailyEnter);
|
|
elseif id == 102 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.TMGCEnter);
|
|
elseif id == 103 then
|
|
GameCenter.BISystem:ReqClickEvent(BiIdCode.TDMJEnter);
|
|
end
|
|
|
|
if _cfg.OpenType == 1 then
|
|
local _uiCfg = Utils.SplitStr(_cfg.OpenUI, "_")
|
|
if #_uiCfg == 1 then
|
|
GameCenter.MainFunctionSystem:DoFunctionCallBack(tonumber(_uiCfg[1]), id)
|
|
elseif #_uiCfg == 2 then
|
|
GameCenter.MainFunctionSystem:DoFunctionCallBack(tonumber(_uiCfg[1]), tonumber(_uiCfg[2]))
|
|
end
|
|
elseif _cfg.OpenType == 2 then
|
|
if _cfg.NpcID then
|
|
self:Navigate(_cfg.NpcID)
|
|
end
|
|
elseif _cfg.OpenType == 3 then
|
|
self:ReqJoinActivity(_cfg.Id)
|
|
elseif _cfg.OpenType == 4 then
|
|
GameCenter.BossSystem:EnterSuitBossCopy();
|
|
elseif _cfg.OpenType == 5 then
|
|
local _task = GameCenter.LuaTaskManager:GetDailyTask()
|
|
if _task == nil then
|
|
GameCenter.MainFunctionSystem:DoFunctionCallBack(FunctionStartIdCode.TaskDaily)
|
|
else
|
|
if _task.Data.IsAccess then
|
|
GameCenter.MainFunctionSystem:DoFunctionCallBack(FunctionStartIdCode.TaskDaily)
|
|
else
|
|
local _uiCfg = Utils.SplitNumber(_cfg.OpenUI, "_")
|
|
GameCenter.TaskController:RunDaiyTask(_uiCfg[1], false, true);
|
|
GameCenter.PushFixEvent(UIEventDefine.UIDailyActivityForm_CLOSE)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 更新活动信息
|
|
function DailyActivitySystem:UpdateActivityInfo(list, info)
|
|
for i = 1, #list do
|
|
if list[i].ID == info.activeId then
|
|
list[i]:UpdateInfo(info)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 请求打开日常界面
|
|
function DailyActivitySystem:ReqActivePanel()
|
|
GameCenter.Network.Send("MSG_Dailyactive.ReqDailyActivePanel", {})
|
|
end
|
|
|
|
-- 领取活跃宝箱
|
|
function DailyActivitySystem:ReqGetActiveReward(giftID)
|
|
local _req = {}
|
|
_req.id = giftID
|
|
GameCenter.Network.Send("MSG_Dailyactive.ReqGetActiveReward", _req)
|
|
end
|
|
|
|
-- 请求打开推送的活动
|
|
function DailyActivitySystem:ReqDailyPushIds(idList)
|
|
local _req = {}
|
|
local _temp = {}
|
|
if idList ~= nil and idList:Count() > 1 then
|
|
for i = 1, idList:Count() do
|
|
table.insert(_temp, idList[i])
|
|
end
|
|
end
|
|
_req.activeIdList = _temp
|
|
GameCenter.Network.Send("MSG_Dailyactive.ReqDailyPushIds", _req)
|
|
end
|
|
|
|
--日常间是否可以互相跳
|
|
function DailyActivitySystem:CanEnterEachOther(dailyId)
|
|
if dailyId == 4 then --无极墟域
|
|
return true
|
|
elseif dailyId == 20 then --无限层
|
|
return true
|
|
elseif dailyId == 12 then --晶甲和域
|
|
return true
|
|
elseif dailyId == 19 then --精英狩猎
|
|
return true
|
|
elseif dailyId == 20 then --无限首领
|
|
return true
|
|
elseif dailyId == 207 then --仙盟福地
|
|
return true
|
|
elseif dailyId == 101 then --vip首领
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
--不同日常之间是否可以互相跳
|
|
function DailyActivitySystem:CanEnterOtherDaily(curDailyId, dailyId)
|
|
if curDailyId == 101 and dailyId == 20 then
|
|
return false
|
|
end
|
|
if (curDailyId == 4 or curDailyId == 101 or curDailyId == 20) and
|
|
(dailyId == 4 or dailyId == 101 or dailyId == 20) then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- 参加活动 (目前仅限副本)
|
|
function DailyActivitySystem:ReqJoinActivity(id, param)
|
|
local _mapCfg = GameCenter.MapLogicSystem.MapCfg
|
|
if _mapCfg == nil then
|
|
return
|
|
end
|
|
local _dailyCfg = DataConfig.DataDaily[id]
|
|
if _dailyCfg == nil then
|
|
return
|
|
end
|
|
local _curMapId = _mapCfg.MapId
|
|
local _cloneCfg = DataConfig.DataCloneMap[param]
|
|
if _cloneCfg ~= nil and _curMapId == _cloneCfg.Mapid then
|
|
--正在当前副本地图中
|
|
Utils.ShowPromptByEnum("C_ALREADY_COPYMAP", _dailyCfg.Name)
|
|
return
|
|
else
|
|
local _inSameDaily = false
|
|
local _cloneIds = Utils.SplitNumber(_dailyCfg.CloneID, '_')
|
|
for i = 1, #_cloneIds do
|
|
local _dcCfg = DataConfig.DataCloneMap[_cloneIds[i]]
|
|
if _dcCfg ~= nil then
|
|
if _dcCfg.Mapid == _curMapId then
|
|
--正在当前副本地图中
|
|
_inSameDaily = true
|
|
break
|
|
end
|
|
else
|
|
Debug.LogError("当前副本ID = ".._cloneIds[i].."不存在")
|
|
end
|
|
end
|
|
if _inSameDaily then
|
|
if self:CanEnterEachOther(id) then
|
|
--发送进入消息
|
|
local _req = {}
|
|
_req.dailyId = id
|
|
_req.param = param
|
|
GameCenter.Network.Send("MSG_Dailyactive.ReqJoinDaily", _req)
|
|
return
|
|
end
|
|
else
|
|
local _curDailyId = self.MapOwnerDaily[_curMapId]
|
|
if self:CanEnterOtherDaily(_curDailyId, id) then
|
|
--发送进入消息
|
|
local _req = {}
|
|
_req.dailyId = id
|
|
_req.param = param
|
|
GameCenter.Network.Send("MSG_Dailyactive.ReqJoinDaily", _req)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
if _mapCfg.ReceiveType == 0 then
|
|
Utils.ShowPromptByEnum("C_PLEASE_LEAVE_CURCOPY")
|
|
return
|
|
end
|
|
if _mapCfg.ReceiveType == 1 then
|
|
--弹出退出副本提示
|
|
Utils.ShowMsgBox(function(code)
|
|
if code == MsgBoxResultCode.Button2 then
|
|
self.AutoEnterDailyId = id
|
|
self.AutoEnterDailyParam = param
|
|
GameCenter.MapLogicSystem:SendLeaveMapMsg(false)
|
|
end
|
|
end, "C_AUTOENTER_EXIT_ASK", _dailyCfg.Name)
|
|
return
|
|
end
|
|
|
|
--发送进入消息
|
|
local _req = {}
|
|
_req.dailyId = id
|
|
_req.param = param
|
|
GameCenter.Network.Send("MSG_Dailyactive.ReqJoinDaily", _req)
|
|
end
|
|
|
|
-- 游戏服 请求公共服 服务器分组数据
|
|
function DailyActivitySystem:ReqCrossServerMatch()
|
|
GameCenter.Network.Send("MSG_Dailyactive.ReqCrossServerMatch", {})
|
|
end
|
|
|
|
-- 日常界面打开返回
|
|
function DailyActivitySystem:GS2U_ResActivePenel(msg)
|
|
if not msg.dailyInfoList then
|
|
return
|
|
end
|
|
self.CurrActive = msg.value
|
|
self.MaxActive = msg.activeMax
|
|
self.AddActive = msg.activeAdded
|
|
self.UseItemCount = msg.useItemCount
|
|
self.ReceiveGiftIDList:Clear()
|
|
if msg.drawList then
|
|
for i = 1, #msg.drawList do
|
|
self.ReceiveGiftIDList:Add(msg.drawList[i])
|
|
end
|
|
end
|
|
self.AllActivityIdList:Clear()
|
|
self.DailyActivitylist:Clear()
|
|
self.LimitActivityList:Clear()
|
|
self.AllActivityDic:Clear()
|
|
self.CrossServerActivityList:Clear()
|
|
for i = 1, #msg.dailyInfoList do
|
|
if msg.dailyInfoList[i].activeId == 207 then
|
|
GameCenter.FuDiSystem:CheckFunction(msg.dailyInfoList[i].open)
|
|
end
|
|
local _id = msg.dailyInfoList[i].activeId
|
|
local _cfg = DataConfig.DataDaily[_id]
|
|
if not _cfg then
|
|
return
|
|
end
|
|
if _cfg.Canshow == 1 then
|
|
local _activityType = _cfg.Fbtype
|
|
local _data = DailyActivityData:New(msg.dailyInfoList[i], _cfg);
|
|
if _activityType == ActivityTypeEnum.Daily then
|
|
self.DailyActivitylist:Add(_data)
|
|
elseif _activityType == ActivityTypeEnum.Limit then
|
|
self.LimitActivityList:Add(_data)
|
|
end
|
|
self.AllActivityDic:Add(_id, _data)
|
|
-- 跨服活动
|
|
if _cfg.Ifcross == 1 then
|
|
self.CrossServerActivityList:Add(_id)
|
|
end
|
|
self.AllActivityIdList:Add(_id)
|
|
end
|
|
end
|
|
self:SortActivityList()
|
|
self:CheckIsShowRedPoint()
|
|
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_REFRESH_DAILYPANEL)
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_CHUANDAOTIPS)
|
|
end
|
|
|
|
-- 日常活动信息变更
|
|
function DailyActivitySystem:GS2U_ResUpdateDailyActiveInfo(msg)
|
|
self.CurrActive = msg.value
|
|
self.MaxActive = msg.activeMax
|
|
self.AddActive = msg.activeAdded
|
|
self.UseItemCount = msg.useItemCount
|
|
if msg.info then
|
|
local _cfg = DataConfig.DataDaily[msg.info.activeId]
|
|
if not _cfg then
|
|
return
|
|
end
|
|
if _cfg.Canshow == 1 then
|
|
if _cfg.Fbtype == ActivityTypeEnum.Daily then
|
|
self:UpdateActivityInfo(self.DailyActivitylist, msg.info)
|
|
elseif _cfg.Fbtype == ActivityTypeEnum.Limit then
|
|
self:UpdateActivityInfo(self.LimitActivityList, msg.info)
|
|
end
|
|
end
|
|
end
|
|
self:SortActivityList()
|
|
self:CheckIsShowRedPoint()
|
|
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_REFRESH_DAILYPANEL)
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_ACTIVEPANEL)
|
|
end
|
|
|
|
-- 请求领取活跃返回
|
|
function DailyActivitySystem:GS2U_ResGetActiveReward(msg)
|
|
if msg.result == 0 then
|
|
GameCenter.DailyActivitySystem.ReceiveGiftIDList:Clear()
|
|
for i = 1, #msg.drawIdList do
|
|
GameCenter.DailyActivitySystem.ReceiveGiftIDList:Add(msg.drawIdList[i])
|
|
end
|
|
end
|
|
self:ActiveRedPointCheck()
|
|
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_ACTIVEPANEL)
|
|
end
|
|
|
|
-- 日常推送返回
|
|
function DailyActivitySystem:GS2U_ResDailyPushResult(msg)
|
|
if msg.activeIdList ~= nil then
|
|
self.OpenPushActivityList:Clear()
|
|
for i = 1, #msg.activeIdList do
|
|
self.OpenPushActivityList:Add(msg.activeIdList[i])
|
|
end
|
|
end
|
|
end
|
|
|
|
function DailyActivitySystem:GS2U_ResDailyActivityOpenStatus(msg)
|
|
-- 特殊处理福地
|
|
if msg.dailyId == 207 then
|
|
GameCenter.FuDiSystem:CheckFunction(msg.open)
|
|
end
|
|
local _cfg = DataConfig.DataDaily[msg.dailyId]
|
|
if not _cfg then
|
|
return
|
|
end
|
|
if _cfg.Fbtype == ActivityTypeEnum.Limit then
|
|
for i = 1, self.LimitActivityList:Count() do
|
|
if self.LimitActivityList[i].ID == msg.dailyId then
|
|
self.LimitActivityList[i]:SetActivityOpen(msg.open)
|
|
end
|
|
end
|
|
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_REFRESH_ACTIVITYLIST, ActivityTypeEnum.Limit, nil)
|
|
end
|
|
end
|
|
|
|
-- 各个阶段所匹配的服务器信息
|
|
function DailyActivitySystem:GS2U_ResCrossServerMatch(msg)
|
|
if msg then
|
|
if msg.serverMatch_2 and #msg.serverMatch_2 > 0 then
|
|
self.ServerMatchInfoLvDic[2] = ServerMatchInfo:New(msg.serverMatch_2)
|
|
end
|
|
if msg.serverMatch_4 and #msg.serverMatch_4 > 0 then
|
|
self.ServerMatchInfoLvDic[4] = ServerMatchInfo:New(msg.serverMatch_4)
|
|
end
|
|
if msg.serverMatch_8 and #msg.serverMatch_8 > 0 then
|
|
self.ServerMatchInfoLvDic[8] = ServerMatchInfo:New(msg.serverMatch_8)
|
|
end
|
|
if msg.serverMatch_16 and #msg.serverMatch_16 > 0 then
|
|
self.ServerMatchInfoLvDic[16] = ServerMatchInfo:New(msg.serverMatch_16)
|
|
end
|
|
if msg.serverMatch_32 and #msg.serverMatch_32 > 0 then
|
|
self.ServerMatchInfoLvDic[32] = ServerMatchInfo:New(msg.serverMatch_32)
|
|
end
|
|
GameCenter.BaJiZhenSystem:SetJinDuData(msg)
|
|
end
|
|
end
|
|
|
|
function DailyActivitySystem:OnFirstEnterMap()
|
|
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.Calendar, true)
|
|
-- -- 功能预告
|
|
-- local _funcInfo = GameCenter.MainFunctionSystem:GetFunctionInfo(FunctionStartIdCode.ActivityNotice);
|
|
-- if _funcInfo.IsVisible then
|
|
-- local _id = GameCenter.GameSceneSystem:GetLocalPlayerID();
|
|
-- local _t = Time.GetNowTable();
|
|
-- local _curTime = _t.year * 10000 + _t.month * 100 + _t.day;
|
|
-- local _key = string.format("ActiveNotice_%s", _id);
|
|
-- if PlayerPrefs.HasKey(_key) then
|
|
-- if PlayerPrefs.GetInt(_key) ~= _curTime then
|
|
-- GameCenter.PushFixEvent(UILuaEventDefine.UIActivityNoticeForm_OPEN)
|
|
-- PlayerPrefs.SetInt(_key, _curTime);
|
|
-- end
|
|
-- else
|
|
-- GameCenter.PushFixEvent(UILuaEventDefine.UIActivityNoticeForm_OPEN)
|
|
-- PlayerPrefs.SetInt(_key, _curTime);
|
|
-- end
|
|
-- end
|
|
-- 在这里加一个上线的防沉迷的弹窗 丁华强 2020-08-04
|
|
if GameCenter.MainFunctionSystem:FunctionIsVisible(FunctionStartIdCode.Certification) then
|
|
GameCenter.PushFixEvent(UILuaEventDefine.UIFcmForm_OPEN)
|
|
end
|
|
end
|
|
|
|
-- 获取活动状态
|
|
function DailyActivitySystem:GetActiveityState(id)
|
|
local _data = self.AllActivityDic[id];
|
|
if _data then
|
|
return _data:GetState()
|
|
end
|
|
end
|
|
|
|
-- 是否能参加
|
|
function DailyActivitySystem:CanJoinDaily(id)
|
|
if id == 17 or id == 110 or id == 111 then
|
|
local _haveGuild = false
|
|
local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
|
|
if _lp ~= nil then
|
|
_haveGuild = _lp.GuildID > 0
|
|
end
|
|
if not _haveGuild then
|
|
return false;
|
|
end
|
|
end
|
|
return self:GetActiveityState(id) == ActivityState.CanJoin
|
|
end
|
|
|
|
-- 获取活动状态
|
|
function DailyActivitySystem:OnLevelChanged()
|
|
local _curLevel = GameCenter.GameSceneSystem:GetLocalPlayerLevel();
|
|
if not self.ActivityLevelDic then
|
|
self.ActivityLevelDic = {}
|
|
DataConfig.DataDaily:Foreach(function(k, v)
|
|
self.ActivityLevelDic[v.OpenLevel] = true
|
|
end);
|
|
end
|
|
if self.ActivityLevelDic[_curLevel] then
|
|
self:ReqActivePanel();
|
|
end
|
|
end
|
|
|
|
return DailyActivitySystem
|