PGRData/Script/matrix/xmanager/XArenaOnlineManager.lua

877 lines
No EOL
30 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.

XArenaOnlineManagerCreator = function()
local XArenaOnlineManager = {}
local AreaChanged = false --区域是否改变
local NextRefreshTime = 0 -- 下一次副本刷新时间
local AssistCount = 0 -- 助战总次数
local StagePassCount = {} -- 通关次数
local ScetionData = {} -- 小节数据
local StageInfodData = {} -- 关卡数据
local CurCapterId = 0 -- 当前章节ID
local CurSectionId = 0 -- 当前小节ID
local CurChallengeId = 0 -- 单机模式下当前挑战ID
local FubenStageStrs = {} -- 副本星数
local CharEndurances = {} -- 角色耐力
local FirstPassCount = 0 -- 首通总次数
local FirstPassList = {} -- 首通关卡
local PlayerTeamData = {}
local TypeId = CS.XGame.Config:GetInt("TypeIdArenaOnline")
local DefaultTeam = {
CaptainPos = 1,
FirstFightPos = 1,
TeamData = { 0, 0, 0 },
}
local InFightChangeCache = false -- 是否在战斗中缓存
local sec_of_refresh_time = 7 * 60 * 60
local SetAreasInfo = function(areas)
ScetionData = {}
StageInfodData = {}
for _, v in ipairs(areas) do
if not ScetionData[v.Id] then
ScetionData[v.Id] = {}
ScetionData[v.Id].Id = v.Id
ScetionData[v.Id].OpenDays = {}
ScetionData[v.Id].Stages = {}
ScetionData[v.Id].GroupId = v.GroupId
end
local section = XArenaOnlineConfigs.GetSectionById(v.Id)
for _, day in ipairs(section.OpenDays) do
local weekOfSun = 7
local weekOfDeflautSun = 0
if day == weekOfDeflautSun then
table.insert(ScetionData[v.Id].OpenDays, weekOfSun)
else
table.insert(ScetionData[v.Id].OpenDays, day)
end
end
local group = XArenaOnlineConfigs.GetStageGroupById(v.GroupId)
for _, stageId in ipairs(group.StageIds) do
table.insert(ScetionData[v.Id].Stages, stageId)
if not StageInfodData[stageId] then
StageInfodData[stageId] = {}
local stageCfg = XArenaOnlineConfigs.GetStageById(stageId)
StageInfodData[stageId].BuffIds = stageCfg.EventId
end
end
table.sort(ScetionData[v.Id].OpenDays, function(a, b)
return a < b
end)
table.sort(ScetionData[v.Id].Stages, function(a, b)
local sortA = XArenaOnlineConfigs.GetStageSortByStageId(a)
local sortB = XArenaOnlineConfigs.GetStageSortByStageId(b)
return sortA < sortB
end)
end
end
-- 初始化副本info
function XArenaOnlineManager.InitStageInfo()
local arenaOnlineCfgs = XArenaOnlineConfigs.GetStages()
local arenaOnlineType = XDataCenter.FubenManager.StageType.ArenaOnline
for _, cfg in pairs(arenaOnlineCfgs) do
for _, id in pairs(cfg.Difficulty) do
local levelControl = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(id)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(levelControl.StageId)
if stageInfo then
if stageInfo.Type and stageInfo.Type ~= arenaOnlineType then
XLog.Error(string.format("%s已设置了Type",levelControl.StageId))
end
stageInfo.Type = arenaOnlineType
end
end
for _, id in pairs(cfg.SingleDiff) do
local levelControl = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(id)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(levelControl.StageId)
if stageInfo then
if stageInfo.Type and stageInfo.Type ~= arenaOnlineType then
XLog.Error(string.format("%s已设置了Type",levelControl.StageId))
end
stageInfo.Type = arenaOnlineType
end
end
end
end
--重置stageInfo数据
function XArenaOnlineManager.ResetStageInfo()
local arenaOnlineCfgs = XArenaOnlineConfigs.GetStages()
for _, cfg in pairs(arenaOnlineCfgs) do
for _, id in pairs(cfg.Difficulty) do
local levelControl = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(id)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(levelControl.StageId)
if stageInfo then
stageInfo.Passed = false
end
end
for _, id in pairs(cfg.SingleDiff) do
local levelControl = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(id)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(levelControl.StageId)
if stageInfo then
stageInfo.Passed = false
end
end
end
end
function XArenaOnlineManager.OpenFightLoading(stageId)
local roomData = XDataCenter.RoomManager.RoomData
if roomData then
XLuaUiManager.Open("UiOnLineLoading")
else
XDataCenter.FubenManager.OpenFightLoading(stageId)
end
end
function XArenaOnlineManager.CloseFightLoading()
local roomData = XDataCenter.RoomManager.RoomData
if roomData then
XLuaUiManager.Remove("UiOnLineLoading")
XLuaUiManager.Remove("UiOnLineLoadingCute")
else
XDataCenter.FubenManager.CloseFightLoading()
end
end
-- 处理成为客户端需要的联机数据
function XArenaOnlineManager.HandlerLoginData(data)
NextRefreshTime = data.NextRefreshTime
AreaChanged = false
AssistCount = data.AssistCount
FirstPassCount = data.FirstPassCount
SetAreasInfo(data.Areas)
FubenStageStrs = {}
if data.Stars and #data.Stars > 0 then
for _, v in ipairs(data.Stars) do
local count = (v.StarsMark & 1) + (v.StarsMark & 2 > 0 and 1 or 0) + (v.StarsMark & 4 > 0 and 1 or 0)
local map = {(v.StarsMark & 1) > 0, (v.StarsMark & 2) > 0, (v.StarsMark & 4) > 0 }
FubenStageStrs[v.StageId] = {}
FubenStageStrs[v.StageId].Count = count
FubenStageStrs[v.StageId].StarsMap = map
end
end
CharEndurances = {}
if data.EnduranceList and #data.EnduranceList > 0 then
for _, v in ipairs(data.EnduranceList) do
CharEndurances[v.CharacterId] = v.EnduranceCount
end
end
StagePassCount = {}
if data.Bottoms and #data.Bottoms > 0 then
for _, v in ipairs(data.Bottoms) do
local key = tostring(v.DropId) .. tostring(v.BottomId)
StagePassCount[key] = v.CurLevel
end
end
FirstPassList = {}
if data.FirstPassList and #data.FirstPassList > 0 then
for _, v in ipairs(data.FirstPassList) do
XArenaOnlineManager.HandlerStagePass(v)
end
end
XArenaOnlineManager.InitStageInfo()
end
-- 获取开启章节
function XArenaOnlineManager.GetArenaOnlineChapters()
local list = {}
local defualtList = {}
local level = XPlayer.Level
local chapters = XArenaOnlineConfigs.GetChapters()
local defaultChapterId = XArenaOnlineConfigs.DEFAULT_CHAPTERID
for _, v in pairs(chapters) do
if v.Id == defaultChapterId then
table.insert(defualtList, v)
end
if level >= v.MinLevel and level <= v.MaxLevel then
table.insert(list, v)
end
end
table.sort(list, function(a, b)
return a.Id < b.Id
end)
return #list > 0 and list or defualtList
end
-- 获取小节数据
function XArenaOnlineManager.GetSectionData()
local list = {}
local chapter = XArenaOnlineManager.GetCurChapterCfg()
if not chapter then return list end
for _, sectionId in ipairs(chapter.SectionId) do
if ScetionData[sectionId] then
table.insert(list, ScetionData[sectionId])
end
end
return list
end
-- 获取角色耐力值
function XArenaOnlineManager.GetCharEndurance(characterId)
return CharEndurances[characterId] or 0
end
-- 获取当前单个小节
function XArenaOnlineManager.GetCurSectionData()
local data = ScetionData[CurSectionId]
if not data then
return nil
end
return data
end
-- 获取当前单个小节Prefab
function XArenaOnlineManager.GetCurSectionPrefabPath()
local data = ScetionData[CurSectionId]
if not data or not data.GroupId then
return nil
end
return XArenaOnlineConfigs.GetStageGroupPrefabPathById(data.GroupId)
end
-- 获取当前单个小节Icon
function XArenaOnlineManager.GetCurSectionIcon(sectionid)
local data = ScetionData[sectionid]
if not data or not data.GroupId then
return nil
end
return XArenaOnlineConfigs.GetStageGroupIconById(data.GroupId)
end
-- 获取下次刷新时间
function XArenaOnlineManager.GetNextRefreshTime()
return NextRefreshTime
end
-- 获取首通总次数
function XArenaOnlineManager.GetFirstPassCount()
return FirstPassCount
end
-- 获取通关总次数
function XArenaOnlineManager.GetStageTotalCount(stageId)
return XArenaOnlineConfigs.GetStageBottomCountByStageId(stageId)
end
-- 获取当前通关次数
function XArenaOnlineManager.GetStagePassCount(stageId)
local key = XArenaOnlineConfigs.GetStageDropKeyByStageId(stageId)
return StagePassCount[key] or 0
end
-- 获取上一次助战次数
function XArenaOnlineManager.GetLastAssistCount()
return AssistCount - 1 > 0 and AssistCount - 1 or 0
end
-- 获取助战次数
function XArenaOnlineManager.GetAssistCount()
return AssistCount or 0
end
-- 通过副本StageId获取联机关卡Config
function XArenaOnlineManager.GetArenaOnlineStageCfgStageId(stageId)
return XArenaOnlineConfigs.GetStageById(stageId)
end
-- 通过副本StageId获取联机关卡同调Config
function XArenaOnlineManager.GetActiveBuffCfgByStageId(stageId)
local stageCfg = XArenaOnlineConfigs.GetStageById(stageId)
local activeBuffId = stageCfg.ActiveBuffId
return XArenaOnlineConfigs.GetActiveBuffById(activeBuffId)
end
-- 通过联机StageId获取副本Info
function XArenaOnlineManager.GetStageInfo(stageId)
local id = XArenaOnlineManager.GetStageId(stageId)
if id then
-- XLog.Warning(stageId,id,XDataCenter.FubenManager.GetStageInfo(id))
return XDataCenter.FubenManager.GetStageInfo(id)
end
return XDataCenter.FubenManager.GetStageInfo(stageId)
end
function XArenaOnlineManager.GetLevelControl(id)
local data = XDataCenter.RoomManager.RoomData
local level = 1
if data and data.ChallengeLevel then
level = data.ChallengeLevel
end
local stageInfo
local cfg = XArenaOnlineConfigs.GetStageById(id)
if cfg and cfg.Difficulty[level] then
local id = cfg.Difficulty[level]
return XFubenConfigs.GetStageMultiplayerLevelControlCfgById(id)
end
end
function XArenaOnlineManager.GetStageIdByIdAndLevel(id, level)
local stageInfo
local cfg = XArenaOnlineConfigs.GetStageById(id)
if cfg and cfg.Difficulty[level] then
local id = cfg.Difficulty[level]
local levelControl = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(id)
return levelControl.StageId
end
end
function XArenaOnlineManager.GetStageId(id)
local levelControl = XArenaOnlineManager.GetLevelControl(id)
if levelControl then
return levelControl.StageId
end
end
-- 通过副本ChallengeId获取副本星数
function XArenaOnlineManager.GetStageStarsByChallengeId(challengeId)
return FubenStageStrs[challengeId] and FubenStageStrs[challengeId].Count or 0
end
-- 通过ChallengeId获取副本星数Map
function XArenaOnlineManager.GetStageStarsMapByChallengeId(challengeId)
if not FubenStageStrs[challengeId] then
return {false, false, false}
else
return FubenStageStrs[challengeId].StarsMap
end
end
-- 检查当前构造体是否满足同调
function XArenaOnlineManager.CheckActiveBuffOnByCharId(charId)
local challengeId = XArenaOnlineManager.GetCurChallengeId()
local buffCfg = XArenaOnlineManager.GetActiveBuffCfgByStageId(challengeId)
local minQulity = XCharacterConfigs.GetCharMinQuality(charId)
return minQulity <= buffCfg.Quality
end
-- 检查关卡是否通关
function XArenaOnlineManager.CheckStagePass(challengeId)
if not challengeId then return false end
local cfg = XArenaOnlineConfigs.GetStageById(challengeId)
if cfg then
--三种难度只要一种通过即为通过
for _,levelControlId in ipairs(cfg.Difficulty) do
local levelControlCfg = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(levelControlId)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(levelControlCfg.StageId)
if stageInfo.Passed then
return true
end
end
for _,levelControlId in ipairs(cfg.SingleDiff) do
local levelControlCfg = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(levelControlId)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(levelControlCfg.StageId)
if stageInfo.Passed then
return true
end
end
end
return false
-- local cfg = XArenaOnlineManager.GetArenaOnlineStageCfgStageId(challengeId)
-- local levelControl = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(cfg.SingleDiff[1])
-- local stageId = levelControl.StageId
-- local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
-- return stageInfo.Passed
end
-- 判断是否符合当前模式
function XArenaOnlineManager.CheckStageIsArenaOnline(stageId)
local info = XDataCenter.FubenManager.GetStageInfo(stageId)
return info and info.Type == XDataCenter.FubenManager.StageType.ArenaOnline
end
-- 获取单人模式对应的难度等级同时保存挑战Id
function XArenaOnlineManager.GetSingleModeDifficulty(challengeId, isSave)
local cfg = XDataCenter.ArenaOnlineManager.GetArenaOnlineStageCfgStageId(challengeId)
local levelControlCfg = XFubenConfigs.GetStageMultiplayerLevelControlCfgById(cfg.SingleDiff[1])
if isSave then
CurChallengeId = challengeId
end
return levelControlCfg.Difficulty
end
-- 判断当前是否为单机模式
function XArenaOnlineManager.CheckSingleMode()
return XDataCenter.RoomManager.RoomData == nil
end
-- 获取当前挑战id
function XArenaOnlineManager.GetCurChallengeId()
if XDataCenter.RoomManager.RoomData then
return XDataCenter.RoomManager.RoomData.ChallengeId
else
return CurChallengeId
end
end
-- 获取所有关卡进度
function XArenaOnlineManager.GetStageSchedule()
local passCount = 0
local allCount = 0
local list = XArenaOnlineManager.GetArenaOnlineChapters()
if not list or #list <= 0 then
return passCount, allCount
end
CurCapterId = list[1].Id
local sectionList = {}
local chapter = XArenaOnlineManager.GetCurChapterCfg()
if not chapter then
return passCount, allCount
end
for _, sectionId in ipairs(chapter.SectionId) do
if ScetionData[sectionId] then
sectionList[sectionId] = ScetionData[sectionId]
end
end
for _, v in pairs(sectionList) do
for _, challengeId in ipairs(v.Stages) do
allCount = allCount + 1
if XArenaOnlineManager.CheckStagePass(challengeId) then
passCount = passCount + 1
end
end
end
return passCount, allCount
end
-- 获取小节关卡进度
function XArenaOnlineManager.GetStageScheduleByScetionId(sectionId)
local passCount = 0
local allCount = 0
local scetion = ScetionData[sectionId]
if not scetion then
return passCount, allCount
end
for _, challengeId in ipairs(scetion.Stages) do
allCount = allCount + 1
if XArenaOnlineManager.CheckStagePass(challengeId) then
passCount = passCount + 1
end
end
return passCount, allCount
end
-- 判断小节是否开启
function XArenaOnlineManager.CheckSectionLeftTime(sectionId)
local scetion = ScetionData[sectionId]
if not scetion then
return -1
end
local freshNow = XTime.GetServerNowTimestamp() - sec_of_refresh_time
local severDay = XTime.GetWeekDay(freshNow, true)
local nextOpenDay = scetion.OpenDays[1]
for _, day in ipairs(scetion.OpenDays) do
if day == severDay then
return 0
elseif day > severDay then
nextOpenDay = day
break
end
end
return XTime.GetNextWeekOfDayStartWithMon(nextOpenDay, sec_of_refresh_time)
end
-- 获取通关条件数量
function XArenaOnlineManager.GetStarInfoBySectionid(sectionId)
local stars = 0
local allStars = 0
local scetion = ScetionData[sectionId]
if not scetion then
return stars, allStars
end
allStars = XArenaOnlineConfigs.GetStageGroupRequireStar(scetion.GroupId)
for _, challengeId in ipairs(scetion.Stages) do
stars = stars + XArenaOnlineManager.GetStageStarsByChallengeId(challengeId)
end
return stars, allStars
end
-- 获取关卡信息
function XArenaOnlineManager.GetArenaOnlineStageInfo(stageId)
local data = StageInfodData[stageId]
if not data then
XLog.Error("XArenaOnlineManager.GetArenaOnlineStageInfo not found by id : " .. tostring(stageId))
return nil
end
return data
end
-- 获取当前联机关卡耐力消耗
function XArenaOnlineManager.GetStageEndurance(challengeId)
if not XDataCenter.RoomManager.RoomData and not challengeId then
return 0
end
local stageId = challengeId or XDataCenter.RoomManager.RoomData.ChallengeId
return XArenaOnlineConfigs.GetStageEnduranceCostByStageId(stageId)
end
-- 检查是否更新
function XArenaOnlineManager.CheckTimeOut()
if NextRefreshTime == nil then
return false
end
local curTime = XTime.GetServerNowTimestamp()
local offset = NextRefreshTime - curTime
return offset <= 0
end
-- 设置当前章节ID
function XArenaOnlineManager.SetCurChapterId()
if CurCapterId > 0 then return end
local list = XArenaOnlineManager.GetArenaOnlineChapters()
if not list or #list <= 0 then return end
CurCapterId = list[1].Id
end
-- 获取当前章节配置表
function XArenaOnlineManager.GetCurChapterCfg()
if CurCapterId <= 0 then
return nil
end
return XArenaOnlineConfigs.GetChapterById(CurCapterId)
end
-- 获取当前小节配置表
function XArenaOnlineManager.GetCurSectionCfg()
if CurSectionId <= 0 then
return nil
end
return XArenaOnlineConfigs.GetSectionById(CurSectionId)
end
-- 检查当前小节是否需要日刷新
function XArenaOnlineManager.CheckCurSectionDayRefrsh()
if CurSectionId <= 0 then
return true
end
local section = ScetionData[CurSectionId]
if not section then
return true
end
local freshNow = XTime.GetServerNowTimestamp()
local severDay = XTime.GetWeekDay(freshNow, true)
for _, day in ipairs(section.OpenDays) do
if day == severDay then
return false
end
end
return true
end
-- 打开区域联机详情
function XArenaOnlineManager.OpenArenaOnlineChapter(chapterId)
CurCapterId = chapterId
XLuaUiManager.Open("UiArenaOnlineChapter")
end
-- 打开区域联机小节详情
function XArenaOnlineManager.OpenArenaOnlineSection(sectionId)
CurSectionId = sectionId
XLuaUiManager.Open("UiArenaOnlineSection")
end
-- 判斷好友邀請是否提示
function XArenaOnlineManager.CheckInviteTipShow()
-- local key = XPrefs.ArenaOnlineInvit.. tostring(XPlayer.Id)
-- local isShow = true
-- if CS.UnityEngine.PlayerPrefs.HasKey(key) then
-- local time = CS.UnityEngine.PlayerPrefs.GetInt(key)
-- local now = XTime.GetServerNowTimestamp()
-- isShow = now > time
-- end
-- return isShow
return XDataCenter.SetManager.InviteButton == 1
end
-- 处理今日不在提示逻辑
function XArenaOnlineManager.SetInviteTip()
local key = XPrefs.ArenaOnlineInvit.. tostring(XPlayer.Id)
local time = XTime.GetSeverTomorrowFreshTime()
CS.UnityEngine.PlayerPrefs.SetInt(key, time)
CS.UnityEngine.PlayerPrefs.Save()
end
-- 判断是否第一次打开
function XArenaOnlineManager.CheckFirstOpen()
local cfg = XArenaOnlineManager.GetCurChapterCfg()
local key = XPrefs.ArenaOnlineFirstOpen .. tostring(XPlayer.Id) .. tostring(cfg.StoryId)
return not CS.UnityEngine.PlayerPrefs.HasKey(key)
end
-- 设置第一次打开
function XArenaOnlineManager.SetFirstOpen()
local cfg = XArenaOnlineManager.GetCurChapterCfg()
local key = XPrefs.ArenaOnlineFirstOpen .. tostring(XPlayer.Id) .. tostring(cfg.StoryId)
local time = XTime.GetSeverTomorrowFreshTime()
CS.UnityEngine.PlayerPrefs.SetInt(key, time)
CS.UnityEngine.PlayerPrefs.Save()
end
function XArenaOnlineManager.ShowReward(winData)
if XDataCenter.FubenManager.CheckHasFlopReward(winData, true) then
XLuaUiManager.Open("UiFubenFlopReward", function()
XArenaOnlineManager.OpenSettleUi(winData)
end, winData)
else
XArenaOnlineManager.OpenSettleUi(winData)
end
end
function XArenaOnlineManager.OpenSettleUi(winData)
if XDataCenter.RoomManager.RoomData then
XLuaUiManager.PopThenOpen("UiMultiplayerFightGrade", function ()
XLuaUiManager.PopThenOpen("UiSettleWinMainLine", winData)
end)
else
XLuaUiManager.PopThenOpen("UiSettleWinMainLine", winData)
end
end
-- 处理战斗结算数据
function XArenaOnlineManager.HandlerFightEndData(data)
AssistCount = data.AssistCount
FirstPassCount = data.FirstPassCount
local t = data.Star
local count = (t.StarsMark & 1) + (t.StarsMark & 2 > 0 and 1 or 0) + (t.StarsMark & 4 > 0 and 1 or 0)
local map = {(t.StarsMark & 1) > 0, (t.StarsMark & 2) > 0, (t.StarsMark & 4) > 0 }
if not FubenStageStrs[t.StageId] then
FubenStageStrs[t.StageId] = {}
end
FubenStageStrs[t.StageId].Count = count
FubenStageStrs[t.StageId].StarsMap = map
for k, v in ipairs(data.EnduranceList) do
CharEndurances[v.CharacterId] = v.EnduranceCount
end
-- CharEndurances[data.Endurance.CharacterId] = data.Endurance.EnduranceCount
if data.Bottom then
local key = tostring(data.Bottom.DropId) .. tostring(data.Bottom.BottomId)
StagePassCount[key] = data.Bottom.CurLevel
end
XArenaOnlineManager.HandlerStagePass(data.PassInfo)
end
-- 处理已通关卡
function XArenaOnlineManager.HandlerStagePass(data)
if data then
FirstPassList[data.StageId] = data
local stageInfo = XDataCenter.ArenaOnlineManager.GetStageInfo(data.StageId)
if stageInfo then
stageInfo.Passed = true
end
if next(data.SingleCharacterIds) then
local teamData = {}
teamData.TeamData = data.SingleCharacterIds
for k,v in ipairs(data.SingleCharacterIds) do
if v == data.CaptainId then
teamData.CaptainPos = k
end
if v == data.FirstFightId then
teamData.FirstFightPos = k
end
end
PlayerTeamData[data.StageId] = teamData
end
end
end
function XArenaOnlineManager.GetPlayerTeam(challengeId)
local teamId = XDataCenter.TeamManager.GetTeamId(TypeId)
if PlayerTeamData[challengeId] then
PlayerTeamData[challengeId].TeamId = teamId
return XTool.Clone(PlayerTeamData[challengeId])
else
DefaultTeam.TeamId = teamId
return XTool.Clone(DefaultTeam)
end
end
-- 处理周更新
function XArenaOnlineManager.HandlerWeekRefresh(data)
NextRefreshTime = data.NextRefreshTime
AreaChanged = true
SetAreasInfo(data.Areas)
FubenStageStrs = {}
CharEndurances = {}
FirstPassList = {}
XArenaOnlineManager.ResetStageInfo()
XEventManager.DispatchEvent(XEventId.EVENT_ARENAONLINE_WEEK_REFRESH)
end
--区域是否变更
function XArenaOnlineManager.IsAreaChanged()
return AreaChanged
end
--设置区域变更标记
function XArenaOnlineManager.SetAreaChanged(value)
AreaChanged = value
end
-- 区域联机更新回主界面处理
function XArenaOnlineManager.RunMain()
if InFightChangeCache then
return
end
if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") then
InFightChangeCache = true
return
end
local notDialogTip = true
XLuaUiManager.RunMain(notDialogTip)
XUiManager.TipMsg(CS.XTextManager.GetText("ArenaOnlineTimeOut"))
end
-- 处理日更新
function XArenaOnlineManager.HandlerDayRefresh()
XEventManager.DispatchEvent(XEventId.EVENT_ARENAONLINE_DAY_REFRESH)
end
-- 战斗结束后判断是否跳到主界面
function XArenaOnlineManager.JudgeGotoMainWhenFightOver(stageId)
local stageInfos = XDataCenter.FubenManager.GetStageInfo(stageId)
if not stageInfos or stageInfos.Type ~= XDataCenter.FubenManager.StageType.ArenaOnline then
return false
end
if not InFightChangeCache then
return false
end
InFightChangeCache = false
local notDialogTip = true
XUiManager.TipText("ArenaOnlineTimeOut")
XLuaUiManager.RunMain(notDialogTip)
return true
end
function XArenaOnlineManager.OpenPrivateChat(chatData)
if not XDataCenter.ArenaOnlineManager.CheckInviteTipShow() then
return
end
if chatData.MsgType ~= ChatMsgType.RoomMsg then
return
end
local contentData = XChatData.DecodeRoomMsg(chatData.Content)
if not contentData then
return
end
if chatData.SenderId == XPlayer.Id then
return
end
XArenaOnlineManager.RecordPrivateChatData(chatData)
if XArenaOnlineManager.IsShowMaskUI() or XDataCenter.MovieManager.IsPlayingMovie() then
return
end
if XLuaUiManager.IsUiShow("UiArenaOnlineInvitation")then
return
end
XLuaUiManager.Open("UiArenaOnlineInvitation")
end
function XArenaOnlineManager.RecordPrivateChatData(chatData)
if not XArenaOnlineManager.ChatDatas then
XArenaOnlineManager.ChatDatas = {}
end
table.insert(XArenaOnlineManager.ChatDatas, chatData)
end
function XArenaOnlineManager.ClearPrivateChatData()
XArenaOnlineManager.ChatDatas = {}
end
function XArenaOnlineManager.GetPrivateChatData()
return XArenaOnlineManager.ChatDatas
end
function XArenaOnlineManager.RemovePrivateChatData(senderId)
if not XArenaOnlineManager.ChatDatas then
return
end
local chatData
for i = #XArenaOnlineManager.ChatDatas, 1, -1 do
chatData = XArenaOnlineManager.ChatDatas[i]
if chatData and chatData.SenderId == senderId then
table.remove(XArenaOnlineManager.ChatDatas, i)
end
end
end
function XArenaOnlineManager.IsShowMaskUI()
for _,uiname in pairs(XArenaOnlineConfigs.MaskArenOnlineUIName)do
if XLuaUiManager.IsUiShow(uiname)then
return true
end
end
return false
end
function XArenaOnlineManager.Init()
XEventManager.AddEventListener(XEventId.EVENT_CHAT_RECEIVE_PRIVATECHAT, XArenaOnlineManager.OpenPrivateChat)
end
XArenaOnlineManager.Init()
return XArenaOnlineManager
end
-- 关闭合众战局功能
XRpc.NotifyArenaOnlineLoginData = function(data)
--XDataCenter.ArenaOnlineManager.HandlerLoginData(data)
end
XRpc.NotifyArenaOnlineFightEnd = function(data)
--XDataCenter.ArenaOnlineManager.HandlerFightEndData(data)
end
XRpc.NotifyArenaOnlineInfo = function(data)
--XDataCenter.ArenaOnlineManager.HandlerWeekRefresh(data)
end
XRpc.NotifyArenaOnlineDayRefresh = function()
--XDataCenter.ArenaOnlineManager.HandlerDayRefresh()
end