2023-07-14 19:35:33 +00:00
|
|
|
|
local XEscapeData = require("XEntity/XEscape/XEscapeData")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local XEscapeTactics = require("XEntity/XEscape/Tactics/XEscapeTactics")
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local XTeam = require("XEntity/XTeam/XTeam")
|
|
|
|
|
|
|
|
|
|
XEscapeManagerCreator = function()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XEscapeData
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local EscapeData = XEscapeData.New()
|
|
|
|
|
local CurActivityId
|
|
|
|
|
local EscapeDataCopy
|
|
|
|
|
local IsOpenChapterSettle
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@class XEscapeManager
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local XEscapeManager = {}
|
|
|
|
|
local Team
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local _TacticsDir = {}
|
|
|
|
|
|
|
|
|
|
local GetCacheKey = function(key)
|
|
|
|
|
local activityId = XEscapeManager.IsOpen() and CurActivityId or 0
|
|
|
|
|
return string.format("Escape_%s_PlayId_%s_%s", activityId, XPlayer.Id, key)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
function XEscapeManager.UpdateActivityId()
|
|
|
|
|
local configs = XEscapeConfigs.GetEscapeActivity()
|
|
|
|
|
for id, v in pairs(configs) do
|
|
|
|
|
if XFunctionManager.CheckInTimeByTimeId(v.TimeId) then
|
|
|
|
|
CurActivityId = id
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if XTool.IsNumberValid(v.TimeId) then
|
|
|
|
|
CurActivityId = id
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--region Ui
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XEscapeManager.OnOpenMain()
|
|
|
|
|
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Escape) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if not XEscapeManager.IsOpen() then
|
|
|
|
|
XUiManager.TipText("CommonActivityNotStart")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if XEscapeManager._IsSetActivityChallenge() then
|
|
|
|
|
XEscapeManager._SetIsNeedActivityChallenge()
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local openMainCb = function()
|
|
|
|
|
XLuaUiManager.Open("UiEscapeMain")
|
|
|
|
|
end
|
|
|
|
|
if EscapeData:IsCurChapterClear() then
|
|
|
|
|
XEscapeManager.RequestEscapeSettleChapter(openMainCb, openMainCb)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
openMainCb()
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---进入战斗选人界面
|
|
|
|
|
function XEscapeManager.OpenBattleRoleRoom(chapterId, stageId)
|
|
|
|
|
--2期开放选角
|
|
|
|
|
--local team = XEscapeManager.GetTeam()
|
|
|
|
|
--if not team:GetIsEmpty() and XTool.IsNumberValid(EscapeData:GetChapterId()) then
|
|
|
|
|
-- XUiManager.TipErrorWithKey("EscapeFightingNotUpdateTeam")
|
|
|
|
|
-- return
|
|
|
|
|
--end
|
|
|
|
|
XEscapeManager.SetCurSelectChapterId(chapterId)
|
|
|
|
|
XLuaUiManager.Open("UiBattleRoleRoom"
|
|
|
|
|
, stageId
|
|
|
|
|
, XEscapeManager.GetTeam()
|
|
|
|
|
, require("XUi/XUiEscape/BattleRoom/XUiEscapeBattleRoleRoom")
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---结算
|
|
|
|
|
function XEscapeManager.OpenUiEscapeSettle(isWin)
|
|
|
|
|
-- 关闭其他无用界面
|
|
|
|
|
local UiNameList = {
|
|
|
|
|
"UiEscapeFuben",
|
|
|
|
|
"UiEscape2Fuben"
|
|
|
|
|
}
|
|
|
|
|
for _, name in ipairs(UiNameList) do
|
|
|
|
|
if XLuaUiManager.IsUiLoad(name) then
|
|
|
|
|
XLuaUiManager.Remove(name)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if isWin then -- 清除数据残留
|
|
|
|
|
EscapeData:SetChapterId(false)
|
|
|
|
|
end
|
|
|
|
|
XLuaUiManager.Open("UiEscapeSettle", XEscapeConfigs.ShowSettlePanel.AllWinInfo, isWin)
|
|
|
|
|
end
|
|
|
|
|
--endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---@return XEscapeData
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XEscapeManager.GetEscapeData()
|
|
|
|
|
return EscapeData
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetTeam()
|
|
|
|
|
if not Team then
|
|
|
|
|
Team = XDataCenter.TeamManager.GetXTeamByTypeId(CS.XGame.Config:GetInt("TypeIdEscape"))
|
|
|
|
|
local isRobot
|
|
|
|
|
for teamPos, entityId in ipairs(Team:GetEntityIds()) do
|
|
|
|
|
--清除队伍中不存在的角色
|
|
|
|
|
isRobot = XRobotManager.CheckIsRobotId(entityId)
|
|
|
|
|
if (isRobot and not XEscapeConfigs.IsStageTypeRobot(entityId)) or
|
|
|
|
|
(not isRobot and not XDataCenter.CharacterManager.IsOwnCharacter(entityId)) then
|
|
|
|
|
Team:UpdateEntityTeamPos(0, teamPos, true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return Team
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetTaskDataList(taskGroupId)
|
|
|
|
|
local taskIdList = XEscapeConfigs.GetTaskIdList(taskGroupId)
|
|
|
|
|
local taskList = {}
|
|
|
|
|
local tastData
|
|
|
|
|
for _, taskId in pairs(taskIdList) do
|
|
|
|
|
tastData = XDataCenter.TaskManager.GetTaskDataById(taskId)
|
|
|
|
|
if tastData then
|
|
|
|
|
table.insert(taskList, tastData)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local achieved = XDataCenter.TaskManager.TaskState.Achieved
|
|
|
|
|
local finish = XDataCenter.TaskManager.TaskState.Finish
|
|
|
|
|
table.sort(taskList, function(a, b)
|
|
|
|
|
if a.State ~= b.State then
|
|
|
|
|
if a.State == achieved then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
if b.State == achieved then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
if a.State == finish then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
if b.State == finish then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local templatesTaskA = XDataCenter.TaskManager.GetTaskTemplate(a.Id)
|
|
|
|
|
local templatesTaskB = XDataCenter.TaskManager.GetTaskTemplate(b.Id)
|
|
|
|
|
return templatesTaskA.Priority > templatesTaskB.Priority
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
return taskList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.IsOpen()
|
|
|
|
|
if not CurActivityId then return false end
|
|
|
|
|
local timeId = XEscapeConfigs.GetActivityTimeId(CurActivityId)
|
|
|
|
|
return XFunctionManager.CheckInTimeByTimeId(timeId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetActivityStartTime()
|
|
|
|
|
if not CurActivityId then return 0 end
|
|
|
|
|
local timeId = XEscapeConfigs.GetActivityTimeId(CurActivityId)
|
|
|
|
|
return XFunctionManager.GetStartTimeByTimeId(timeId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetActivityEndTime()
|
|
|
|
|
if not CurActivityId then return 0 end
|
|
|
|
|
local timeId = XEscapeConfigs.GetActivityTimeId(CurActivityId)
|
|
|
|
|
return XFunctionManager.GetEndTimeByTimeId(timeId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.HandleActivityEndTime()
|
|
|
|
|
XLuaUiManager.RunMain()
|
|
|
|
|
XUiManager.TipMsg(XUiHelper.GetText("ActivityAlreadyOver"))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetActivityChapters()
|
|
|
|
|
local chapters = {}
|
|
|
|
|
if XEscapeManager.IsOpen() then
|
|
|
|
|
local temp = {}
|
|
|
|
|
temp.Id = CurActivityId
|
|
|
|
|
temp.Name = XEscapeConfigs.GetActivityName(CurActivityId)
|
|
|
|
|
temp.BannerBg = XEscapeConfigs.GetActivityBackground(CurActivityId)
|
|
|
|
|
temp.Type = XDataCenter.FubenManager.ChapterType.Escape
|
|
|
|
|
table.insert(chapters, temp)
|
|
|
|
|
end
|
|
|
|
|
return chapters
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetLayerChallengeState(chapterId, layerId)
|
|
|
|
|
local layerIds = XEscapeConfigs.GetChapterLayerIds(chapterId)
|
|
|
|
|
local preLayerId
|
|
|
|
|
local preLayerIndex
|
|
|
|
|
for i, layerIdConfig in ipairs(layerIds) do
|
|
|
|
|
if layerIdConfig == layerId then
|
|
|
|
|
preLayerIndex = i - 1
|
|
|
|
|
preLayerId = layerIds[preLayerIndex]
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--当前层已通关
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local layerClearCount = EscapeData:GetLayerClearNodeCount(layerId, true)
|
|
|
|
|
local layerClearStageCountConfig = XEscapeConfigs.GetLayerNodeCount(layerId)
|
|
|
|
|
if layerClearCount >= layerClearStageCountConfig then
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return XEscapeConfigs.LayerState.Pass, ""
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--不存在上一层的Id,当前层可挑战
|
|
|
|
|
if not preLayerId then
|
|
|
|
|
return XEscapeConfigs.LayerState.Now, ""
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--战斗节点
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local stageIdList = XEscapeConfigs.GetLayerStageIds(preLayerId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local clearNodeCount = XEscapeConfigs.GetLayerNodeCount(preLayerId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
for _, stageId in ipairs(stageIdList) do
|
|
|
|
|
if EscapeData:IsCurChapterStageClear(stageId) then
|
2024-09-01 20:49:41 +00:00
|
|
|
|
clearNodeCount = clearNodeCount - 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--策略节点
|
|
|
|
|
local nodeIdList = XEscapeConfigs.GetLayerTacticsNodeIds(preLayerId)
|
|
|
|
|
for _, nodeId in ipairs(nodeIdList) do
|
|
|
|
|
if EscapeData:IsCurChapterTacticsNodeClear(nodeId) then
|
|
|
|
|
clearNodeCount = clearNodeCount - 1
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local preStageClear = clearNodeCount <= 0
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local challengeConditionDesc = not preStageClear and XUiHelper.GetText("EscapeNotClearLayerDesc", preLayerIndex) or ""
|
|
|
|
|
return preStageClear and XEscapeConfigs.LayerState.Now or XEscapeConfigs.LayerState.Lock, challengeConditionDesc
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获得达到开启条件的最高区域Id
|
|
|
|
|
function XEscapeManager.GetChapterOpenId()
|
|
|
|
|
local chapterGroupIdList = XEscapeConfigs.GetEscapeChapterGroupIdList()
|
|
|
|
|
for i = #chapterGroupIdList, 1, -1 do
|
|
|
|
|
local groupId = chapterGroupIdList[i]
|
|
|
|
|
local chapterIdList = XEscapeConfigs.GetEscapeChapterIdListByGroupId(groupId)
|
|
|
|
|
local normalChapterId = chapterIdList[1] --普通难度的章节Id
|
|
|
|
|
local timeId = XEscapeConfigs.GetChapterTimeId(normalChapterId)
|
|
|
|
|
local conditionId = XEscapeConfigs.GetChapterOpenCondition(normalChapterId)
|
|
|
|
|
local isOpen = XFunctionManager.CheckInTimeByTimeId(timeId)
|
|
|
|
|
if not isOpen then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
isOpen = not XTool.IsNumberValid(conditionId) or XConditionManager.CheckCondition(conditionId)
|
|
|
|
|
if isOpen then
|
|
|
|
|
return normalChapterId
|
|
|
|
|
end
|
|
|
|
|
:: continue ::
|
|
|
|
|
end
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.IsChapterClear(chapterId)
|
|
|
|
|
return EscapeData:IsChapterClear(chapterId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.IsChapterOpen(chapterId, isShowTips)
|
|
|
|
|
local timeId = XEscapeConfigs.GetChapterTimeId(chapterId)
|
|
|
|
|
if not XFunctionManager.CheckInTimeByTimeId(timeId) then
|
|
|
|
|
if isShowTips then
|
|
|
|
|
XUiManager.TipErrorWithKey("EscapeTimeNotReached")
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local conditionId = XEscapeConfigs.GetChapterOpenCondition(chapterId)
|
|
|
|
|
if XTool.IsNumberValid(conditionId) then
|
|
|
|
|
local isOpen, desc = XConditionManager.CheckCondition(conditionId)
|
|
|
|
|
if not isOpen then
|
|
|
|
|
if isShowTips then
|
|
|
|
|
XUiManager.TipError(desc)
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--region Tactics
|
|
|
|
|
---@return XEscapeTactics[]
|
|
|
|
|
function XEscapeManager.GetAllTactics()
|
|
|
|
|
local result = {}
|
|
|
|
|
local configs = XEscapeConfigs.GetAllTactics()
|
|
|
|
|
for _, config in pairs(configs) do
|
|
|
|
|
local tactics = XEscapeManager.GetTactics(config.Id)
|
|
|
|
|
result[#result + 1] = tactics
|
|
|
|
|
end
|
|
|
|
|
---@param a XEscapeTactics
|
|
|
|
|
---@param b XEscapeTactics
|
|
|
|
|
table.sort(result, function(a, b)
|
|
|
|
|
if a:IsUnlock() ~= b:IsUnlock() then
|
|
|
|
|
return a:IsUnlock()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return a:GetId() < b:GetId()
|
|
|
|
|
end)
|
|
|
|
|
return result
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---@return XEscapeTactics[]
|
|
|
|
|
function XEscapeManager.GetTacticsByList(list)
|
|
|
|
|
local result = {}
|
|
|
|
|
if XTool.IsTableEmpty(list) then
|
|
|
|
|
return result
|
|
|
|
|
end
|
|
|
|
|
for _, id in ipairs(list) do
|
|
|
|
|
result[#result + 1] = XEscapeManager.GetTactics(id)
|
|
|
|
|
end
|
|
|
|
|
return result
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---@return XEscapeTactics
|
|
|
|
|
function XEscapeManager.GetTactics(id)
|
|
|
|
|
if not _TacticsDir[id] then
|
|
|
|
|
local tactics = XEscapeTactics.New(id)
|
|
|
|
|
_TacticsDir[id] = tactics
|
|
|
|
|
end
|
|
|
|
|
return _TacticsDir[id]
|
|
|
|
|
end
|
|
|
|
|
--endregion
|
|
|
|
|
|
|
|
|
|
--region Difficulty
|
|
|
|
|
function XEscapeManager.GetDifficulty()
|
|
|
|
|
if EscapeData and XTool.IsNumberValid(EscapeData:GetChapterId()) then
|
|
|
|
|
return XEscapeConfigs.GetChapterDifficulty(EscapeData:GetChapterId())
|
|
|
|
|
end
|
|
|
|
|
local key = GetCacheKey("Difficulty")
|
|
|
|
|
return XSaveTool.GetData(key) or XEscapeConfigs.Difficulty.Normal
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.SwitchDifficulty(difficulty)
|
|
|
|
|
if EscapeData and XTool.IsNumberValid(EscapeData:GetChapterId()) then
|
|
|
|
|
local curChapterDifficulty = XEscapeConfigs.GetChapterDifficulty(EscapeData:GetChapterId())
|
|
|
|
|
if difficulty == curChapterDifficulty then
|
|
|
|
|
return false
|
|
|
|
|
else
|
|
|
|
|
XUiManager.TipErrorWithKey("EscapeInChallengeMode", XEscapeConfigs.GetDifficultyName(curChapterDifficulty))
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
local key = GetCacheKey("Difficulty")
|
|
|
|
|
XSaveTool.SaveData(key, difficulty)
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
--endregion
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
---------------------缓存数据 begin---------------------
|
|
|
|
|
local CurSelectChapterId
|
|
|
|
|
function XEscapeManager.SetCurSelectChapterId(chapterId)
|
|
|
|
|
CurSelectChapterId = chapterId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetCurSelectChapterId()
|
|
|
|
|
return CurSelectChapterId or EscapeData:GetChapterId()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.CatchEscapeData()
|
|
|
|
|
EscapeDataCopy = XTool.Clone(EscapeData)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetEscapeDataCopy()
|
|
|
|
|
return EscapeDataCopy
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.CheckOpenChapterSettle()
|
|
|
|
|
if EscapeData:IsCurChapterClear() then
|
|
|
|
|
if not XEscapeManager.GetIsOpenChapterSettle() then
|
|
|
|
|
XEscapeManager.CatchEscapeData()
|
|
|
|
|
end
|
|
|
|
|
XEscapeManager.SetOpenChapterSettle(true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.SetOpenChapterSettle(isOpenChapterSettle)
|
|
|
|
|
IsOpenChapterSettle = isOpenChapterSettle
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.GetIsOpenChapterSettle()
|
|
|
|
|
return IsOpenChapterSettle
|
|
|
|
|
end
|
|
|
|
|
---------------------缓存数据 end-----------------------
|
|
|
|
|
|
|
|
|
|
---------------------副本相关 begin-------------------------
|
|
|
|
|
function XEscapeManager.InitStageInfo()
|
|
|
|
|
local stageIdList = XEscapeConfigs.GetEscapeStageIdList()
|
|
|
|
|
local stageInfo
|
|
|
|
|
for _, stageId in ipairs(stageIdList) do
|
|
|
|
|
stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|
|
|
|
if stageInfo then
|
|
|
|
|
stageInfo.Type = XDataCenter.FubenManager.StageType.Escape
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.PreFight(stage, teamId, isAssist, challengeCount, challengeId)
|
|
|
|
|
local team = XEscapeManager.GetTeam()
|
|
|
|
|
local cardIds = {0, 0, 0}
|
|
|
|
|
local robotIds = {0, 0, 0}
|
|
|
|
|
local role
|
|
|
|
|
for pos, entityId in ipairs(team:GetEntityIds()) do
|
|
|
|
|
if entityId > 0 then
|
|
|
|
|
if XEntityHelper.GetIsRobot(entityId) then
|
|
|
|
|
robotIds[pos] = entityId
|
|
|
|
|
else
|
|
|
|
|
cardIds[pos] = entityId
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return {
|
|
|
|
|
StageId = stage.StageId,
|
|
|
|
|
IsHasAssist = isAssist,
|
|
|
|
|
ChallengeCount = challengeCount,
|
|
|
|
|
CaptainPos = team:GetCaptainPos(),
|
|
|
|
|
FirstFightPos = team:GetFirstFightPos(),
|
|
|
|
|
CardIds = cardIds,
|
|
|
|
|
RobotIds = robotIds,
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.ShowReward(winData)
|
|
|
|
|
XLuaUiManager.Open("UiEscapeSettle", XEscapeConfigs.ShowSettlePanel.SelfWinInfo, nil, winData)
|
|
|
|
|
end
|
|
|
|
|
---------------------副本相关 end-------------------------
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--region RedPoint
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--检查是否有任务奖励可领取
|
|
|
|
|
function XEscapeManager.CheckTaskCanReward()
|
|
|
|
|
local configs = XEscapeConfigs.GetEscapeTask()
|
|
|
|
|
for id in pairs(configs) do
|
|
|
|
|
if XEscapeManager.CheckTaskCanRewardByEscapeTaskId(id) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.CheckTaskCanRewardByEscapeTaskId(escapeTaskId)
|
|
|
|
|
local taskIdList = XEscapeConfigs.GetTaskIdList(escapeTaskId)
|
|
|
|
|
for _, taskId in ipairs(taskIdList) do
|
|
|
|
|
if XDataCenter.TaskManager.CheckTaskAchieved(taskId) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
--活动前四天刷tag
|
|
|
|
|
local timeOffset = 3600 * 24 * 4
|
|
|
|
|
function XEscapeManager.CheckIsNeedActivityChallenge()
|
|
|
|
|
local startTime = XEscapeManager.GetActivityStartTime()
|
|
|
|
|
local endTime = startTime + timeOffset
|
|
|
|
|
local nowTime = XTime.GetServerNowTimestamp()
|
|
|
|
|
if startTime <= nowTime and nowTime < endTime then
|
|
|
|
|
return true
|
|
|
|
|
elseif nowTime >= endTime then
|
|
|
|
|
return not XEscapeManager._GetIsNeedActivityChallenge()
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---活动看板tag标记判断
|
|
|
|
|
function XEscapeManager._IsSetActivityChallenge()
|
|
|
|
|
local startTime = XEscapeManager.GetActivityStartTime()
|
|
|
|
|
local endTime = startTime + timeOffset
|
|
|
|
|
local nowTime = XTime.GetServerNowTimestamp()
|
|
|
|
|
return nowTime >= endTime
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager._GetIsNeedActivityChallenge()
|
|
|
|
|
local key = GetCacheKey("IsNeedActivityChallenge")
|
|
|
|
|
return XSaveTool.GetData(key) or false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager._SetIsNeedActivityChallenge()
|
|
|
|
|
local key = GetCacheKey("IsNeedActivityChallenge")
|
|
|
|
|
return XSaveTool.SaveData(key, true)
|
|
|
|
|
end
|
|
|
|
|
--endregion
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
---------------------protocol begin------------------
|
|
|
|
|
--推送数据
|
|
|
|
|
function XEscapeManager.NotifyEscapeData(data)
|
|
|
|
|
EscapeData:UpdateData(data)
|
|
|
|
|
XDataCenter.EscapeManager.CheckOpenChapterSettle()
|
|
|
|
|
XDataCenter.EscapeManager.UpdateActivityId()
|
|
|
|
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_ESCAPE_DATA_NOTIFY)
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_ESCAPE_DATA_NOTIFY)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEscapeManager.NotifyEscapeStageResult(data)
|
|
|
|
|
EscapeData:UpdateStageResult(data)
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
---检查/生成策略节点数据
|
|
|
|
|
function XEscapeManager.RequestEscapeCheckTacticsNode(chapterId, layerId, tacticsNodeId, successCallback, failCallback)
|
|
|
|
|
local requestBody = {
|
|
|
|
|
LayerId = layerId,
|
|
|
|
|
TacticsNodeId = tacticsNodeId,
|
|
|
|
|
}
|
|
|
|
|
XNetwork.CallWithAutoHandleErrorCode("EscapeCheckTacticsNodeRequest", requestBody, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
if failCallback then
|
|
|
|
|
failCallback()
|
|
|
|
|
end
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
EscapeData:AddTacticsNodes(res.TacticsNode)
|
|
|
|
|
-- 如果第一层就是策略则初始化章节选择及初始时间
|
|
|
|
|
local layerIdList = XEscapeConfigs.GetChapterLayerIds(chapterId)
|
|
|
|
|
if not XTool.IsTableEmpty(layerIdList) and layerId == layerIdList[1] then
|
|
|
|
|
EscapeData:SetChapterId(chapterId)
|
|
|
|
|
EscapeData:SetRemainTime(XEscapeConfigs.GetChapterInitialTime(chapterId))
|
|
|
|
|
end
|
|
|
|
|
if successCallback then
|
|
|
|
|
successCallback()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---选择策略节点策略/跳过选择则tacticsId = -1
|
|
|
|
|
function XEscapeManager.RequestEscapeSelectTactics(layerId, tacticsNodeId, tacticsId, successCallback, failCallback)
|
|
|
|
|
local requestBody = {
|
|
|
|
|
LayerId = layerId,
|
|
|
|
|
TacticsNodeId = tacticsNodeId,
|
|
|
|
|
TacticsId = tacticsId,
|
|
|
|
|
}
|
|
|
|
|
XNetwork.Call("EscapeSelectTacticsRequest", requestBody, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
if failCallback then
|
|
|
|
|
failCallback()
|
|
|
|
|
end
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
EscapeData:TacticsNodeSelectTactics(tacticsNodeId, tacticsId)
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_ESCAPE_DATA_NOTIFY)
|
|
|
|
|
if successCallback then
|
|
|
|
|
successCallback()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--重置关卡
|
|
|
|
|
function XEscapeManager.RequestEscapeResetStage(stageId)
|
|
|
|
|
local requestBody = {
|
|
|
|
|
StageId = stageId
|
|
|
|
|
}
|
|
|
|
|
XNetwork.CallWithAutoHandleErrorCode("EscapeResetStageRequest", requestBody)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--结算章节/放弃当前进度
|
|
|
|
|
function XEscapeManager.RequestEscapeSettleChapter(successCallback, failCallback)
|
|
|
|
|
XEscapeManager.CatchEscapeData()
|
|
|
|
|
XNetwork.Call("EscapeSettleChapterRequest", nil, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
if failCallback then
|
|
|
|
|
failCallback()
|
|
|
|
|
end
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if successCallback then
|
|
|
|
|
successCallback()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
---------------------protocol end---------------------
|
|
|
|
|
|
|
|
|
|
XEscapeManager.UpdateActivityId()
|
|
|
|
|
return XEscapeManager
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XRpc.NotifyEscapeData = function(data)
|
|
|
|
|
XDataCenter.EscapeManager.NotifyEscapeData(data)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XRpc.NotifyEscapeStageResult = function(data)
|
|
|
|
|
XDataCenter.EscapeManager.NotifyEscapeStageResult(data)
|
|
|
|
|
end
|