317 lines
No EOL
11 KiB
Lua
317 lines
No EOL
11 KiB
Lua
local XExFubenSimulationChallengeManager = require("XEntity/XFuben/XExFubenSimulationChallengeManager")
|
||
local XDlcHuntChapter = require("XEntity/XDlcHunt/XDlcHuntChapter")
|
||
local XDlcHuntWorld = require("XEntity/XDlcHunt/XDlcHuntWorld")
|
||
local XDlcHuntSettle = require("XEntity/XDlcHunt/XDlcHuntSettle")
|
||
local XDlcHuntPlayerDetail = require("XEntity/XDlcHunt/XDlcHuntPlayerDetail")
|
||
|
||
XDlcHuntManagerCreator = function()
|
||
local _Chapters = false
|
||
local _Worlds = {}
|
||
local _Rank = {}
|
||
local _PassedWorld = {}
|
||
local _GainAssistPoint = 0
|
||
local _GainSocialAssistPoint = 0
|
||
local _HasReceiveAssistPoint = false
|
||
|
||
local RequestProto = {
|
||
RankData = "DlcRankingRequest",
|
||
PlayerDetail = "QueryPlayerDlcChipRequest",
|
||
ReceiveAssistPoint = "DlcReceiveAssistPointRequest",
|
||
}
|
||
|
||
local config = XFubenConfigs.GetChapterBannerByType(XFubenConfigs.ChapterType.DlcHunt)
|
||
---@class XDlcHuntManager
|
||
local XDlcHuntManager = XExFubenSimulationChallengeManager.New(XFubenConfigs.ChapterType.DlcHunt, config)
|
||
|
||
function XDlcHuntManager.InitDataFromServer(data)
|
||
-- expired
|
||
if data.DlcPlayerData then
|
||
XDlcHuntManager.SetDlcPlayerData(data.DlcPlayerData)
|
||
end
|
||
if data.DlcCharacterList then
|
||
XDataCenter.DlcHuntCharacterManager.InitDataFromServer(data.DlcCharacterList)
|
||
end
|
||
|
||
if data.DlcChipList then
|
||
XDataCenter.DlcHuntChipManager.InitDataFromServer(data.DlcChipList)
|
||
end
|
||
|
||
-- DLC战中断线重连
|
||
--if data.WorldInfo then
|
||
-- XDataCenter.DlcRoomManager.SetReJoinWorldInfo(data.WorldInfo)
|
||
--end
|
||
end
|
||
|
||
function XDlcHuntManager.SetWorldPassed(worldId)
|
||
_PassedWorld[worldId] = true
|
||
end
|
||
|
||
function XDlcHuntManager.SetDlcPlayerData(data)
|
||
_PassedWorld = {}
|
||
for i, worldId in pairs(data.PassWorldId) do
|
||
XDlcHuntManager.SetWorldPassed(worldId)
|
||
end
|
||
|
||
_GainAssistPoint = data.GainAssistPoint or 0
|
||
_GainSocialAssistPoint = data.GainSocialAssistPoint or 0
|
||
_HasReceiveAssistPoint = data.HasReceiveAssistPoint or false
|
||
end
|
||
|
||
function XDlcHuntManager.IsGainAssistPointMax()
|
||
return _GainAssistPoint >= XDlcHuntConfigs.GetWeekGainAssistLimit()
|
||
end
|
||
|
||
function XDlcHuntManager.IsGainSocialAssistPointMax()
|
||
return _GainSocialAssistPoint >= XDlcHuntConfigs.GetWeekGainSocialAssistLimit()
|
||
end
|
||
|
||
function XDlcHuntManager.OpenMain()
|
||
if not XDlcHuntManager.IsOpen() then
|
||
XUiManager.TipText("CommonActivityNotStart")
|
||
return
|
||
end
|
||
XLuaUiManager.Open("UiDlcHuntMain")
|
||
end
|
||
|
||
function XDlcHuntManager.OpenUiObtain(...)
|
||
-- 等待父级ui中列表异步刷新完成,以保证弹窗的截图效果正常
|
||
if XUiManager.IsTableAsyncLoading() then
|
||
local params = { ... }
|
||
XUiManager.WaitTableLoadComplete(function()
|
||
XLuaUiManager.Open("UiDlcRwlTip", table.unpack(params))
|
||
end)
|
||
else
|
||
XLuaUiManager.Open("UiDlcRwlTip", ...)
|
||
end
|
||
end
|
||
|
||
function XDlcHuntManager.IsOpen()
|
||
return XDlcHuntManager.ExCheckInTime(XDlcHuntManager)
|
||
end
|
||
|
||
function XDlcHuntManager.ExCheckInTime()
|
||
local timeId = XDlcHuntConfigs.GetTimeId()
|
||
return XFunctionManager.CheckInTimeByTimeId(timeId)
|
||
end
|
||
|
||
function XDlcHuntManager.IsShowRedDotTask()
|
||
return true
|
||
end
|
||
|
||
function XDlcHuntManager.GetAllChapters()
|
||
if not _Chapters then
|
||
_Chapters = {}
|
||
local allChapter = XDlcHuntWorldConfig.GetAllChapter()
|
||
for chapterId, config in pairs(allChapter) do
|
||
_Chapters[chapterId] = XDlcHuntChapter.New(chapterId)
|
||
end
|
||
end
|
||
return _Chapters
|
||
end
|
||
|
||
---@return XDlcHuntChapter
|
||
function XDlcHuntManager.GetChapter(chapterId)
|
||
return XDlcHuntManager.GetAllChapters()[chapterId]
|
||
end
|
||
|
||
---@return XDlcHuntWorld
|
||
function XDlcHuntManager.GetWorld(worldId)
|
||
if not XDlcHuntWorldConfig.IsWorldExist(worldId) then
|
||
return false
|
||
end
|
||
if not _Worlds[worldId] then
|
||
_Worlds[worldId] = XDlcHuntWorld.New(worldId)
|
||
end
|
||
return _Worlds[worldId]
|
||
end
|
||
|
||
function XDlcHuntManager.IsPassed(worldId)
|
||
return _PassedWorld[worldId]
|
||
end
|
||
|
||
function XDlcHuntManager.GetRankTab()
|
||
local result = {}
|
||
local difficultyConfigs = XDlcHuntWorldConfig.GetAllChapter()
|
||
for chapterId, chapterConfig in pairs(difficultyConfigs) do
|
||
local chapter = XDataCenter.DlcHuntManager.GetChapter(chapterId)
|
||
if chapter:IsRank() then
|
||
result[#result + 1] = {
|
||
ChapterId = chapterId,
|
||
Name = chapterConfig.Name
|
||
}
|
||
end
|
||
end
|
||
table.sort(result, function(a, b)
|
||
return a.ChapterId < b.ChapterId
|
||
end)
|
||
return result
|
||
end
|
||
|
||
function XDlcHuntManager.GetRankData(chapterId)
|
||
return _Rank[chapterId]
|
||
end
|
||
|
||
function XDlcHuntManager.RequestRank(chapterId)
|
||
local rankData = XDlcHuntManager.GetRankData(chapterId)
|
||
if rankData then
|
||
if XTime.GetServerNowTimestamp() - rankData.RequestTime < 30 then
|
||
return
|
||
end
|
||
end
|
||
|
||
XNetwork.Call(RequestProto.RankData, {
|
||
ChapterId = chapterId,
|
||
}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
local rankInfo = res.BossRankInfo
|
||
local list = {}
|
||
local myData = false
|
||
local myPlayerId = XPlayer.Id
|
||
|
||
for key, teamData in pairs(rankInfo.RankTeamInfos) do
|
||
local worldId = teamData.WorldId or 1
|
||
local members = {}
|
||
for i = 1, #teamData.PlayerInfo do
|
||
local player = teamData.PlayerInfo[i]
|
||
local npcId = player.CharacterId
|
||
local characterId = XDlcHuntCharacterConfigs.GetCharacterIdByNpcId(npcId)
|
||
members[#members + 1] = {
|
||
Name = player.Name,
|
||
Icon = characterId ~= 0 and XDlcHuntCharacterConfigs.GetCharacterIcon(characterId) or "",
|
||
PlayerId = player.Id,
|
||
IsLeader = player.TeamId > 0,
|
||
}
|
||
end
|
||
local data = {
|
||
Rank = teamData.Rank,
|
||
Time = XUiHelper.GetTime(teamData.FinishTime, XUiHelper.TimeFormatType.HOUR_MINUTE_SECOND),
|
||
DifficultyName = XDlcHuntWorldConfig.GetWorldDifficultyName(worldId),
|
||
Members = members
|
||
}
|
||
list[#list + 1] = data
|
||
end
|
||
table.sort(list, function(a, b)
|
||
return a.Rank < b.Rank
|
||
end)
|
||
|
||
for i = 1, #list do
|
||
local data = list[i]
|
||
local isFind = false
|
||
for j = 1, #data.Members do
|
||
local member = data.Members[j]
|
||
if member.PlayerId == myPlayerId then
|
||
myData = data
|
||
isFind = true
|
||
break
|
||
end
|
||
end
|
||
if isFind then
|
||
break
|
||
end
|
||
end
|
||
|
||
_Rank[chapterId] = {
|
||
List = list,
|
||
MyData = myData,
|
||
RequestTime = XTime.GetServerNowTimestamp(),
|
||
}
|
||
XEventManager.DispatchEvent(XEventId.EVENT_DLC_HUNT_RANK_UPDATE)
|
||
end)
|
||
end
|
||
|
||
-- 预处理结算数据
|
||
function XDlcHuntManager.OnNotifyFightSettle(result)
|
||
if XLuaUiManager.IsUiShow("UiSet") then
|
||
XLuaUiManager.Close("UiSet")
|
||
else
|
||
XLuaUiManager.Remove("UiSet")
|
||
end
|
||
|
||
---@type XDlcHuntSettle
|
||
local settle = XDlcHuntSettle.New()
|
||
settle:SetData(result)
|
||
if settle.IsWin then
|
||
XDataCenter.DlcHuntManager.SetWorldPassed(settle.WorldId)
|
||
|
||
if XLuaUiManager.IsUiShow("UiBiancaTheatreBlack") then
|
||
XLuaUiManager.PopThenOpen("UiDlcHuntSettlement", settle)
|
||
else
|
||
XLuaUiManager.Open("UiDlcHuntSettlement", settle)
|
||
end
|
||
else
|
||
if settle:IsFail4FightingPower() then
|
||
if XLuaUiManager.IsUiShow("UiBiancaTheatreBlack") then
|
||
XLuaUiManager.PopThenOpen("UiDlcHuntPowerSettleLose", settle)
|
||
else
|
||
XLuaUiManager.Open("UiDlcHuntPowerSettleLose", settle)
|
||
end
|
||
else
|
||
if XLuaUiManager.IsUiShow("UiBiancaTheatreBlack") then
|
||
XLuaUiManager.PopThenOpen("UiDlcHuntSettleLose", settle)
|
||
else
|
||
XLuaUiManager.Open("UiDlcHuntSettleLose", settle)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function XDlcHuntManager.OpenPlayerDetail(playerId)
|
||
if not playerId then
|
||
return
|
||
end
|
||
playerId = tonumber(playerId)
|
||
XNetwork.Call(RequestProto.PlayerDetail, {
|
||
PlayerId = playerId,
|
||
}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
---@type XDlcHuntPlayerDetail
|
||
local dataDetail = XDlcHuntPlayerDetail.New()
|
||
dataDetail:SetData(res)
|
||
XLuaUiManager.Open("UiDlcHuntPlayerInfo", dataDetail)
|
||
end)
|
||
end
|
||
|
||
function XDlcHuntManager.ReceiveAssistPointRequest()
|
||
if _HasReceiveAssistPoint then
|
||
return
|
||
end
|
||
if XDlcHuntManager.IsGainSocialAssistPointMax() then
|
||
return
|
||
end
|
||
XNetwork.Call(RequestProto.ReceiveAssistPoint, {}, function(res)
|
||
_HasReceiveAssistPoint = true
|
||
if res.Code ~= XCode.Success then
|
||
--XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
--local itemData = XDataCenter.ItemManager.GetItemTemplate(res.ItemId)
|
||
--local item = XItem.New(nil, itemData)
|
||
--item:SetCount(res.ItemCount)
|
||
--XLuaUiManager.Open("UiDlcHuntTip", item)
|
||
local rewardGoodList = {
|
||
{
|
||
RewardType = XRewardManager.XRewardType.Item,
|
||
TemplateId = res.ItemId,
|
||
Count = res.ItemCount
|
||
}
|
||
}
|
||
XDlcHuntManager.OpenUiObtain(rewardGoodList, XUiHelper.GetText("DlcHuntAssistPointReward"))
|
||
end)
|
||
end
|
||
|
||
return XDlcHuntManager
|
||
end
|
||
|
||
XRpc.DlcBossSettleResponse = function(res)
|
||
XDataCenter.DlcHuntManager.OnNotifyFightSettle(res.SettleData)
|
||
end
|
||
|
||
XRpc.NotifyDlcPlayerDataDb = function(res)
|
||
XDataCenter.DlcHuntManager.SetDlcPlayerData(res.DlcPlayerData)
|
||
end |