1004 lines
No EOL
39 KiB
Lua
1004 lines
No EOL
39 KiB
Lua
local XAdventureManager = require("XEntity/XTheatre/Adventure/XAdventureManager")
|
||
local XTheatreTokenManager = require("XEntity/XTheatre/Token/XTheatreTokenManager")
|
||
local XTheatreDecorationManager = require("XEntity/XTheatre/Decoration/XTheatreDecorationManager")
|
||
local XTheatrePowerManager = require("XEntity/XTheatre/Power/XTheatrePowerManager")
|
||
local XTheatreTaskManager = require("XEntity/XTheatre/Task/XTheatreTaskManager")
|
||
local XExFubenSimulationChallengeManager = require("XEntity/XFuben/XExFubenSimulationChallengeManager")
|
||
|
||
XTheatreManagerCreator = function()
|
||
---@class XTheatreManager:XExFubenSimulationChallengeManager
|
||
local XTheatreManager = XExFubenSimulationChallengeManager.New(XFubenConfigs.ChapterType.Theatre)
|
||
-- 当前冒险管理 XAdventureManager
|
||
---@type XTheatreAdventureManager
|
||
local CurrentAdventureManager = nil
|
||
-- 信物管理 XTheatreTokenManager
|
||
local TokenManager = nil
|
||
-- 装修改造管理
|
||
local DecorationManager = XTheatreDecorationManager.New()
|
||
-- 好感度管理
|
||
local PowerManager = XTheatrePowerManager.New()
|
||
-- 任务管理
|
||
local TaskManager = XTheatreTaskManager.New()
|
||
-- 完全经过的章节,章节ID
|
||
local _PassChapterIdList = {}
|
||
-- 已经完成的时间步骤
|
||
local _PassEventRecordDic = {}
|
||
-- 是否连续挑战多关卡
|
||
local _AutoMultiFight = false
|
||
-- 是否挑战多关卡
|
||
local _MultiFight = false
|
||
-- 当前正在挑战的多关卡下标
|
||
local _CurFightStageIndex = 0
|
||
-- 已完成的结局数据
|
||
local _EndingIdRecords = {}
|
||
|
||
function XTheatreManager.InitWithServerData(data)
|
||
local tokenManager = XTheatreManager.GetTokenManager()
|
||
tokenManager:UpdateData(data)
|
||
DecorationManager:UpdateData(data.Decorations)
|
||
PowerManager:UpdateData(data)
|
||
|
||
XTheatreManager.UpdatePassChapterIds(data.PassChapterId)
|
||
XTheatreManager.UpdatePassEventRecord(data.PassEventRecord)
|
||
XTheatreManager.UpdateEndingIdRecords(data.EndingRecord)
|
||
|
||
-- 更新当前冒险数据
|
||
if data.CurChapterDb then
|
||
XTheatreManager.UpdateCurrentAdventureManager(XAdventureManager.New())
|
||
CurrentAdventureManager:InitWithServerData({
|
||
CurChapterDb = data.CurChapterDb, -- 章节数据
|
||
DifficultyId = data.DifficultyId, -- 难度
|
||
KeepsakeId = data.KeepsakeId, -- 信物
|
||
CurRoleLv = data.CurRoleLv, -- 冒险等级
|
||
ReopenCount = data.ReopenCount, -- 重开次数
|
||
Skills = data.Skills, -- 拥有技能
|
||
RecruitRole = data.RecruitRole, -- 已招募的角色 TheatreRoleAttr表的roleId
|
||
SingleTeamData = data.SingleTeamData, -- 单队伍数据
|
||
MultiTeamDatas = data.MultiTeamDatas, -- 多队伍数据
|
||
UseOwnCharacter = data.UseOwnCharacter, -- 是否使用自己的角色 0否 1是
|
||
FavorCoin = data.FavorCoin, -- 当前章节获取的好感度
|
||
DecorationCoin = data.DecorationCoin, -- 当前章节获取的装修点
|
||
PassNodeCount = data.PassNodeCount, -- 当前章节通过的节点数
|
||
})
|
||
end
|
||
end
|
||
|
||
function XTheatreManager.UpdatePassChapterIds(value)
|
||
_PassChapterIdList = value or {}
|
||
end
|
||
|
||
function XTheatreManager.UpdatePassEventRecord(value)
|
||
_PassEventRecordDic = value or {}
|
||
end
|
||
|
||
function XTheatreManager.UpdateEndingIdRecords(value)
|
||
_EndingIdRecords = value or {}
|
||
end
|
||
|
||
function XTheatreManager.CheckIsGlobalFinishChapter(chapterId)
|
||
for _, v in pairs(_PassChapterIdList) do
|
||
if v == chapterId then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XTheatreManager.CheckIsGlobalFinishEvent(eventId, stepId)
|
||
if not _PassEventRecordDic[eventId] then return false end
|
||
if not _PassEventRecordDic[eventId][stepId] then return false end
|
||
return true
|
||
end
|
||
|
||
function XTheatreManager.CheckIsFinishEnding(id)
|
||
for _, v in pairs(_EndingIdRecords) do
|
||
if v == id then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XTheatreManager.CheckHasAdventure()
|
||
return CurrentAdventureManager ~= nil
|
||
end
|
||
|
||
function XTheatreManager.GetDecorationManager()
|
||
return DecorationManager
|
||
end
|
||
|
||
---@return XTheatreAdventureManager
|
||
function XTheatreManager.GetCurrentAdventureManager()
|
||
return CurrentAdventureManager
|
||
end
|
||
|
||
function XTheatreManager.CreateAdventureManager()
|
||
return XAdventureManager.New()
|
||
end
|
||
|
||
function XTheatreManager.UpdateCurrentAdventureManager(value)
|
||
if CurrentAdventureManager then
|
||
CurrentAdventureManager:Release()
|
||
CurrentAdventureManager = nil
|
||
end
|
||
CurrentAdventureManager = value
|
||
end
|
||
|
||
function XTheatreManager.GetTokenManager()
|
||
if TokenManager == nil then
|
||
TokenManager = XTheatreTokenManager.New()
|
||
end
|
||
return TokenManager
|
||
end
|
||
|
||
function XTheatreManager.GetPowerManager()
|
||
return PowerManager
|
||
end
|
||
|
||
function XTheatreManager.GetHelpKey()
|
||
return XTheatreConfigs.GetClientConfig("HelpKey")
|
||
end
|
||
|
||
function XTheatreManager.GetReopenHelpKey()
|
||
return XTheatreConfigs.GetClientConfig("ReopenHelpKey")
|
||
end
|
||
|
||
-- 局外显示资源
|
||
function XTheatreManager.GetAssetItemIds()
|
||
return {XTheatreConfigs.TheatreOutsideCoin
|
||
, XTheatreConfigs.TheatreDecorationCoin
|
||
, XTheatreConfigs.TheatreFavorCoin}
|
||
end
|
||
|
||
-- 局内显示资源
|
||
function XTheatreManager.GetAdventureAssetItemIds()
|
||
return {XTheatreConfigs.TheatreCoin}
|
||
end
|
||
|
||
function XTheatreManager.GetAllCoinItemDatas()
|
||
local result = {}
|
||
local itemManager = XDataCenter.ItemManager
|
||
local coinCount = itemManager:GetCount(XTheatreConfigs.TheatreCoin)
|
||
if coinCount > 0 then
|
||
table.insert(result, {
|
||
TemplateId = XTheatreConfigs.TheatreCoin,
|
||
Count = coinCount
|
||
})
|
||
end
|
||
local decorationCoinCount = itemManager:GetCount(XTheatreConfigs.TheatreDecorationCoin)
|
||
if decorationCoinCount > 0 then
|
||
table.insert(result, {
|
||
TemplateId = XTheatreConfigs.TheatreDecorationCoin,
|
||
Count = decorationCoinCount
|
||
})
|
||
end
|
||
local favorCoinCount = itemManager:GetCount(XTheatreConfigs.TheatreFavorCoin)
|
||
if favorCoinCount > 0 then
|
||
table.insert(result, {
|
||
TemplateId = XTheatreConfigs.TheatreFavorCoin,
|
||
Count = favorCoinCount
|
||
})
|
||
end
|
||
return result
|
||
end
|
||
|
||
-- 副本相关
|
||
function XTheatreManager.InitStageInfo()
|
||
-- 关卡池的关卡
|
||
local configs = XTheatreConfigs.GetTheatreStage()
|
||
local stageInfo = nil
|
||
for _, config in pairs(configs) do
|
||
for _, id in ipairs(config.StageId) do
|
||
if id > 0 then
|
||
stageInfo = XDataCenter.FubenManager.GetStageInfo(id)
|
||
if stageInfo then
|
||
stageInfo.Type = XDataCenter.FubenManager.StageType.Theatre
|
||
else
|
||
XLog.Error("肉鸽找不到配置的关卡id:" .. id)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
-- 事件的关卡
|
||
configs = XTheatreConfigs.GetTheatreEvent()
|
||
for _, config in pairs(configs) do
|
||
if config.StageId > 0 then
|
||
stageInfo = XDataCenter.FubenManager.GetStageInfo(config.StageId)
|
||
if stageInfo then
|
||
stageInfo.Type = XDataCenter.FubenManager.StageType.Theatre
|
||
else
|
||
XLog.Error("肉鸽找不到配置的关卡id:" .. config.StageId)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function XTheatreManager.OpenFightLoading(stageId)
|
||
if not _AutoMultiFight then
|
||
XDataCenter.FubenManager.OpenFightLoading(stageId)
|
||
return
|
||
end
|
||
|
||
local nextBattleIndex = CurrentAdventureManager:GetAdventureMultiDeploy():GetNextBattleIndex()
|
||
XLuaUiManager.Open("UiTheatreMultiBattleInfo", nextBattleIndex, stageId)
|
||
end
|
||
|
||
function XTheatreManager.CloseFightLoading(stageId)
|
||
if not _AutoMultiFight then
|
||
XDataCenter.FubenManager.CloseFightLoading(stageId)
|
||
else
|
||
XLuaUiManager.Remove("UiTheatreMultiBattleInfo")
|
||
end
|
||
end
|
||
|
||
function XTheatreManager.CallFinishFight()
|
||
local fubenManager = XDataCenter.FubenManager
|
||
local res = fubenManager.FubenSettleResult
|
||
if not res then
|
||
-- 强退
|
||
XTheatreManager.ClearMultiFightState()
|
||
end
|
||
fubenManager.CallFinishFight()
|
||
end
|
||
|
||
function XTheatreManager.FinishFight(settle)
|
||
if settle.IsWin then
|
||
XDataCenter.FubenManager.ChallengeWin(settle)
|
||
else
|
||
local beginData = XDataCenter.FubenManager.GetFightBeginData()
|
||
local winData = XDataCenter.FubenManager.GetChallengeWinData(beginData, settle)
|
||
XTheatreManager.ShowRewardUpdateMultiFight(winData)
|
||
XDataCenter.FubenManager.ChallengeLose(settle)
|
||
end
|
||
end
|
||
|
||
function XTheatreManager.ShowReward(winData, playEndStory)
|
||
winData.OperationQueueType = XTheatreConfigs.OperationQueueType.BattleSettle
|
||
CurrentAdventureManager:AddNextOperationData(winData, true)
|
||
XTheatreManager.ShowRewardUpdateMultiFight(winData)
|
||
|
||
--去掉了奖励结算界面,战后播完剧情会没恢复被释放的UI
|
||
if not _AutoMultiFight and not _MultiFight and not XLuaUiManager.IsUiLoad("UiTheatrePlayMain") and playEndStory then
|
||
--XLuaUiManager.Remove("UiTheatrePlayMain")
|
||
--XLuaUiManager.Open("UiTheatrePlayMain")
|
||
--v2.6 UiTheatrePlayMain的enable处理导致Ui连续open卡死锁,故这么写
|
||
CurrentAdventureManager:ShowNextOperation()
|
||
end
|
||
end
|
||
|
||
function XTheatreManager.ShowRewardUpdateMultiFight(winData)
|
||
local currentNode = CurrentAdventureManager:GetCurrentChapter():GetCurrentNode()
|
||
local adventureManager = XDataCenter.TheatreManager.GetCurrentAdventureManager()
|
||
local playableCount = adventureManager and adventureManager:GetPlayableCount() or 0
|
||
if not currentNode or (not _AutoMultiFight and not _MultiFight) then
|
||
XTheatreManager.ClearMultiFightState()
|
||
XLuaUiManager.Remove("UiTheatreDeploy")
|
||
return
|
||
end
|
||
|
||
local theatreStageId = currentNode.GetTheatreStageId and currentNode:GetTheatreStageId()
|
||
if winData.SettleData.IsWin then
|
||
if currentNode.SetStageFinish then
|
||
currentNode:SetStageFinish(winData.StageId, _CurFightStageIndex)
|
||
end
|
||
elseif (_MultiFight or _AutoMultiFight) and theatreStageId and playableCount > 0 then
|
||
XTheatreManager.ClearMultiFightState()
|
||
end
|
||
|
||
if playableCount <= 0 then
|
||
XLuaUiManager.Remove("UiTheatreDeploy")
|
||
return
|
||
end
|
||
|
||
local isAllStageFinish = CurrentAdventureManager:GetAdventureMultiDeploy():IsAllFinished()
|
||
if isAllStageFinish then
|
||
XTheatreManager.ClearMultiFightState()
|
||
XLuaUiManager.Remove("UiTheatreDeploy")
|
||
elseif _AutoMultiFight then
|
||
--多队伍连续战斗
|
||
local nextBattleIndex = CurrentAdventureManager:GetAdventureMultiDeploy():GetNextBattleIndex()
|
||
local stageIdList = theatreStageId and XTheatreConfigs.GetTheatreStageIdList(theatreStageId)
|
||
local stageId = stageIdList and stageIdList[nextBattleIndex]
|
||
XTheatreManager.SetCurFightStageIndex(nextBattleIndex)
|
||
if stageId then
|
||
CurrentAdventureManager:EnterFight(theatreStageId, nextBattleIndex)
|
||
else
|
||
XTheatreManager.ClearMultiFightState()
|
||
XLuaUiManager.Remove("UiTheatreDeploy")
|
||
end
|
||
else
|
||
XTheatreManager.ClearMultiFightState()
|
||
end
|
||
end
|
||
|
||
function XTheatreManager.ClearMultiFightState()
|
||
XTheatreManager.SetMultiFightState(false)
|
||
XTheatreManager.SetAutoMultiFight(false)
|
||
end
|
||
|
||
function XTheatreManager.SetAutoMultiFight(state)
|
||
_AutoMultiFight = state
|
||
end
|
||
|
||
function XTheatreManager.SetMultiFightState(state)
|
||
_MultiFight = state
|
||
end
|
||
|
||
function XTheatreManager.SetCurFightStageIndex(index)
|
||
_CurFightStageIndex = index
|
||
end
|
||
|
||
function XTheatreManager.GetTaskManager()
|
||
return TaskManager
|
||
end
|
||
|
||
function XTheatreManager.PreFight(stage, teamId, isAssist, challengeCount, challengeId)
|
||
local team = CurrentAdventureManager:GetTeamById(teamId)
|
||
local cardIds, robotIds = CurrentAdventureManager:GetCardIdsAndRobotIdsFromTeam(team)
|
||
local teamIndex = team and team:GetTeamIndex() or 0
|
||
return {
|
||
StageId = stage.StageId,
|
||
IsHasAssist = isAssist,
|
||
ChallengeCount = challengeCount,
|
||
CaptainPos = team:GetCaptainPos(),
|
||
FirstFightPos = team:GetFirstFightPos(),
|
||
CardIds = cardIds,
|
||
RobotIds = robotIds,
|
||
TeamIndex = teamIndex,
|
||
}
|
||
end
|
||
|
||
function XTheatreManager.CheckCondition(conditionKey, isShowTip)
|
||
local conditionId = XTheatreConfigs.GetTheatreConfig(conditionKey).Value
|
||
conditionId = conditionId and tonumber(conditionId)
|
||
local isUnLock, desc
|
||
if XTool.IsNumberValid(conditionId) then
|
||
isUnLock, desc = XConditionManager.CheckCondition(conditionId)
|
||
else
|
||
isUnLock, desc = true, ""
|
||
end
|
||
if not isUnLock then
|
||
if isShowTip then
|
||
XUiManager.TipError(desc)
|
||
end
|
||
return isUnLock
|
||
end
|
||
return isUnLock
|
||
end
|
||
|
||
--更新界面显示的3D背景
|
||
local _UiModel
|
||
local _UiModelGo
|
||
local _SceneInfo
|
||
local _CurLoadSceneChapterId --当前加载场景的章节
|
||
function XTheatreManager.UpdateSceneUrl(rootUi)
|
||
if not rootUi or not rootUi.Ui then
|
||
return
|
||
end
|
||
|
||
local adventureManager = XDataCenter.TheatreManager.GetCurrentAdventureManager()
|
||
local chapter = adventureManager and adventureManager:GetCurrentChapter()
|
||
local chapterId = (_CurLoadSceneChapterId) or (chapter and chapter:GetId()) or XTheatreConfigs.GetDefaultChapterId()
|
||
local sceneUrl = XTheatreConfigs.GetChapterSceneUrl(chapterId)
|
||
local modelUrl = XTheatreConfigs.GetChapterModelUrl(chapterId)
|
||
|
||
if XTool.UObjIsNil(_UiModel) or XTool.UObjIsNil(_UiModelGo) or not _SceneInfo or _CurLoadSceneChapterId ~= chapterId then
|
||
--会加载不同的UiModel,隐藏旧的
|
||
if not XTool.UObjIsNil(_UiModelGo) then
|
||
_UiModelGo.gameObject:SetActiveEx(false)
|
||
end
|
||
XTheatreManager.SetSceneActive(false)
|
||
|
||
rootUi:LoadUiScene(sceneUrl, modelUrl, nil, false)
|
||
--rootUi:SetGameObject()
|
||
_UiModel = rootUi.UiModel
|
||
_UiModelGo = rootUi.UiModelGo
|
||
_SceneInfo = rootUi.UiSceneInfo
|
||
end
|
||
_UiModel.UiTransfrom = rootUi.Transform
|
||
_UiModelGo.gameObject:SetActiveEx(true)
|
||
XTheatreManager.SetSceneActive(true)
|
||
XTheatreManager.SetCurLoadSceneChapterId(chapterId)
|
||
end
|
||
|
||
function XTheatreManager.SetCurLoadSceneChapterId(chapterId)
|
||
_CurLoadSceneChapterId = chapterId
|
||
end
|
||
|
||
function XTheatreManager.SetSceneActive(isActive)
|
||
if not _SceneInfo or XTool.UObjIsNil(_SceneInfo.GameObject) then
|
||
return
|
||
end
|
||
_SceneInfo.GameObject:SetActiveEx(isActive)
|
||
if isActive then
|
||
_SceneInfo.SceneSetting.enabled = false
|
||
XScheduleManager.ScheduleOnce(function()
|
||
if not _SceneInfo or XTool.UObjIsNil(_SceneInfo.GameObject) then
|
||
return
|
||
end
|
||
_SceneInfo.SceneSetting.enabled = true
|
||
end, 1)
|
||
|
||
if _UiModel then
|
||
_UiModel.gameObject:SetActiveEx(false)
|
||
_UiModel.gameObject:SetActiveEx(true)
|
||
end
|
||
|
||
--播放剧情会把物理相机关了
|
||
local uiNearCamera = _UiModel and _UiModel.UiNearCamera
|
||
if uiNearCamera then
|
||
uiNearCamera.usePhysicalProperties = true
|
||
end
|
||
end
|
||
end
|
||
|
||
function XTheatreManager.GetUiModelGo()
|
||
return _UiModelGo
|
||
end
|
||
|
||
--显示角色模型的摄像机
|
||
--showFarCameraText, showNearCameraText:要显示的摄像机名
|
||
--isActiveSceneBlur:是否激活动态模糊
|
||
function XTheatreManager.ShowRoleModelCamera(rootUi, showFarCameraText, showNearCameraText, isActiveSceneBlur)
|
||
if XTool.UObjIsNil(_UiModelGo) then
|
||
return
|
||
end
|
||
|
||
local uiModelGoTransform = _UiModelGo.transform
|
||
if XTool.UObjIsNil(uiModelGoTransform) then
|
||
return
|
||
end
|
||
|
||
local showFarCamera = uiModelGoTransform:FindTransform(showFarCameraText)
|
||
local showNearCamera = uiModelGoTransform:FindTransform(showNearCameraText)
|
||
local farCameraMain = uiModelGoTransform:FindTransform("FarCameraMain")
|
||
local farCameraChoose = uiModelGoTransform:FindTransform("FarCameraChoose")
|
||
local farCameraRecruit = uiModelGoTransform:FindTransform("FarCameraRecruit")
|
||
local farCameraPlayMain = uiModelGoTransform:FindTransform("FarCameraPlayMain")
|
||
local farCameraChooseBuff = uiModelGoTransform:FindTransform("FarCameraChooseBuff")
|
||
local nearCameraMain = uiModelGoTransform:FindTransform("NearCameraMain")
|
||
local nearCameraChoose = uiModelGoTransform:FindTransform("NearCameraChoose")
|
||
local nearCameraRecruit = uiModelGoTransform:FindTransform("NearCameraRecruit")
|
||
local nearCameraPlayMain = uiModelGoTransform:FindTransform("NearCameraPlayMain")
|
||
local nearCameraChooseBuff = uiModelGoTransform:FindTransform("NearCameraChooseBuff")
|
||
local scene3DBlur = uiModelGoTransform:FindTransform("UiFarCamera"):GetComponent("XUiScene3DBlur")
|
||
if farCameraMain then
|
||
farCameraMain.gameObject:SetActiveEx(false)
|
||
end
|
||
if farCameraChoose then
|
||
farCameraChoose.gameObject:SetActiveEx(false)
|
||
end
|
||
if farCameraRecruit then
|
||
farCameraRecruit.gameObject:SetActiveEx(false)
|
||
end
|
||
if farCameraPlayMain then
|
||
farCameraPlayMain.gameObject:SetActiveEx(false)
|
||
end
|
||
if farCameraChooseBuff then
|
||
farCameraChooseBuff.gameObject:SetActiveEx(false)
|
||
end
|
||
if nearCameraMain then
|
||
nearCameraMain.gameObject:SetActiveEx(false)
|
||
end
|
||
if nearCameraChoose then
|
||
nearCameraChoose.gameObject:SetActiveEx(false)
|
||
end
|
||
if nearCameraRecruit then
|
||
nearCameraRecruit.gameObject:SetActiveEx(false)
|
||
end
|
||
if nearCameraPlayMain then
|
||
nearCameraPlayMain.gameObject:SetActiveEx(false)
|
||
end
|
||
if nearCameraChooseBuff then
|
||
nearCameraChooseBuff.gameObject:SetActiveEx(false)
|
||
end
|
||
if showFarCamera then
|
||
showFarCamera.gameObject:SetActiveEx(true)
|
||
end
|
||
if showNearCamera then
|
||
showNearCamera.gameObject:SetActiveEx(true)
|
||
end
|
||
if scene3DBlur then
|
||
scene3DBlur.enabled = isActiveSceneBlur or false
|
||
end
|
||
end
|
||
|
||
------------------自动播放剧情 begin-------------------
|
||
local GetLocalSavedKey = function(key)
|
||
return string.format("%s%d", key, XPlayer.Id)
|
||
end
|
||
|
||
function XTheatreManager.CheckAutoPlayStory()
|
||
local localSavedKey = GetLocalSavedKey("TheatreAutoStory")
|
||
local storyId = XTheatreConfigs.GetFirstStoryId()
|
||
if XSaveTool.GetData(localSavedKey) or not storyId then
|
||
XLuaUiManager.Open("UiTheatreMain")
|
||
return
|
||
end
|
||
|
||
XDataCenter.MovieManager.PlayMovie(storyId, function()
|
||
--播完剧情会把最上层的界面打开,加个延迟防止先打开本界面
|
||
XScheduleManager.ScheduleOnce(function()
|
||
XLuaUiManager.Open("UiTheatreMain")
|
||
end, 1)
|
||
end)
|
||
XSaveTool.SaveData(localSavedKey, true)
|
||
end
|
||
------------------自动播放剧情 end---------------------
|
||
|
||
------------------自动弹窗 begin-----------------------
|
||
function XTheatreManager.CheckIsCookie(key, isNotSave)
|
||
local localSavedKey = GetLocalSavedKey(key)
|
||
if XSaveTool.GetData(localSavedKey) then
|
||
return false
|
||
end
|
||
if not isNotSave then
|
||
XSaveTool.SaveData(localSavedKey, true)
|
||
end
|
||
return true
|
||
end
|
||
|
||
local TheatreUnlockOwnRoleAutoWindowKey = "TheatreUnlockOwnRoleAutoWindow"
|
||
-- 检查是否打开解锁自用角色弹窗
|
||
function XTheatreManager.CheckUnlockOwnRole()
|
||
local adventureManager = XTheatreManager.GetCurrentAdventureManager()
|
||
if not adventureManager then
|
||
return
|
||
end
|
||
|
||
local useOwnCharacterFa = XTheatreConfigs.GetTheatreConfig("UseOwnCharacterFa").Value
|
||
useOwnCharacterFa = useOwnCharacterFa and tonumber(useOwnCharacterFa)
|
||
if not useOwnCharacterFa then
|
||
return
|
||
end
|
||
|
||
local power = adventureManager:GeRoleAveragePower()
|
||
if power >= useOwnCharacterFa and XTheatreManager.CheckIsCookie(TheatreUnlockOwnRoleAutoWindowKey) then
|
||
XLuaUiManager.Open("UiTheatreUnlockTips", {ShowTipsPanel = XTheatreConfigs.UplockTipsPanel.OwnRole})
|
||
end
|
||
end
|
||
|
||
function XTheatreManager.RemoveOwnRoleCookie()
|
||
XSaveTool.RemoveData(TheatreUnlockOwnRoleAutoWindowKey)
|
||
end
|
||
|
||
-- 检查周期任务是否刷新,弹窗提醒(没周任务了,先屏蔽)
|
||
function XTheatreManager.CheckWeeklyTaskWindows()
|
||
-- local nowTime = XTime.GetServerNowTimestamp()
|
||
-- local saveKey = GetLocalSavedKey("TheatreWeeklyTaskWindows")
|
||
-- local refreshTime = XSaveTool.GetData(saveKey) or 0
|
||
-- if refreshTime <= nowTime then
|
||
-- local monday = 1
|
||
-- local nextWeekOfDayStartWithMon = XTime.GetSeverNextWeekOfDayRefreshTime(monday)
|
||
-- XSaveTool.SaveData(saveKey, nextWeekOfDayStartWithMon)
|
||
-- XUiManager.TipText("TheatreWeekTaskRefresh")
|
||
-- end
|
||
end
|
||
|
||
--检查配置指定的装修组是否可升级
|
||
function XTheatreManager.CheckDecorationGroupIndexLvUp()
|
||
local groupIndex = XTheatreConfigs.GetCheckDecorationGroupIndex()
|
||
if not groupIndex then
|
||
return
|
||
end
|
||
|
||
local decorationIds = XTheatreConfigs.GetDecorationIdsByGroupIndex(groupIndex)
|
||
for _, decorationId in ipairs(decorationIds or {}) do
|
||
if XTheatreManager.IsDecorationLvUp(decorationId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
------------------自动弹窗 end-----------------------
|
||
|
||
------------------红点相关 begin-----------------------
|
||
--检查是否有任务奖励可领取
|
||
function XTheatreManager.CheckTaskCanReward()
|
||
local theatreTask = XTheatreConfigs.GetTheatreTask()
|
||
local taskIdList
|
||
for id in pairs(theatreTask) do
|
||
if XTheatreManager.CheckTaskCanRewardByTheatreTaskId(id) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XTheatreManager.CheckTaskCanRewardByTheatreTaskId(theatreTaskId)
|
||
local taskIdList = XTheatreConfigs.GetTaskIdList(theatreTaskId)
|
||
for _, taskId in ipairs(taskIdList) do
|
||
if XDataCenter.TaskManager.CheckTaskAchieved(taskId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
local _TaskStartTimeOpenCookieKey = "TheatreTaskStartTimeOpen_"
|
||
--检查是否有任务过了开启时间
|
||
function XTheatreManager.CheckTaskStartTimeOpen()
|
||
local taskIdList = XTheatreConfigs.GetTheatreTaskHaveStartTimeIdList()
|
||
for _, taskId in ipairs(taskIdList) do
|
||
if XTheatreManager.CheckTaskStartTimeOpenByTaskId(taskId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XTheatreManager.CheckTaskStartTimeOpenByTaskId(taskId)
|
||
local template = XTaskConfig.GetTaskTemplate()[taskId]
|
||
if not template then
|
||
return false
|
||
end
|
||
|
||
local startTime = XTime.ParseToTimestamp(template.StartTime)
|
||
local now = XTime.GetServerNowTimestamp()
|
||
if startTime and startTime <= now and not XTheatreManager.CheckIsCookie(_TaskStartTimeOpenCookieKey .. taskId, true) then
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XTheatreManager.CheckTaskStartTimeOpenByTheatreTaskId(theatreTaskId)
|
||
local taskIdList = XTheatreConfigs.GetTaskIdList(theatreTaskId)
|
||
for _, taskId in ipairs(taskIdList) do
|
||
if XTheatreManager.CheckTaskStartTimeOpenByTaskId(taskId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XTheatreManager.SaveTaskStartTimeOpenCookie(theatreTaskId)
|
||
local taskIdList = XTheatreConfigs.GetTaskIdList(theatreTaskId)
|
||
for _, taskId in ipairs(taskIdList) do
|
||
if XTheatreManager.CheckTaskStartTimeOpenByTaskId(taskId) then
|
||
XSaveTool.SaveData(GetLocalSavedKey(_TaskStartTimeOpenCookieKey .. taskId), true)
|
||
end
|
||
end
|
||
end
|
||
|
||
local _TheatreWeekTaskRefreshTimeCookieKey = "TheatreWeekTaskRefreshTime"
|
||
--周任务刷新检查红点(没周任务了,先屏蔽)
|
||
function XTheatreManager.CheckWeeklyTaskRedPoint()
|
||
-- if XTheatreManager.CheckIsCookie(_TheatreWeekTaskRefreshTimeCookieKey, true) then
|
||
-- return true
|
||
-- end
|
||
-- local refreshTime = XSaveTool.GetData(GetLocalSavedKey(_TheatreWeekTaskRefreshTimeCookieKey))
|
||
-- local nowTime = XTime.GetServerNowTimestamp()
|
||
-- return refreshTime <= nowTime
|
||
return false
|
||
end
|
||
|
||
--缓存下周一的服务器更新时间
|
||
function XTheatreManager.SaveWeeklyTaskStartWithMonCookie()
|
||
local monday = 1
|
||
local nextWeekOfDayStartWithMon = XTime.GetSeverNextWeekOfDayRefreshTime(monday)
|
||
XSaveTool.SaveData(GetLocalSavedKey(_TheatreWeekTaskRefreshTimeCookieKey), nextWeekOfDayStartWithMon)
|
||
end
|
||
|
||
--检查是否显示图鉴红点
|
||
local _TheatreGuideGainFieldCookieKey = "TheatreGuideGainField_"
|
||
function XTheatreManager.CheckFieldGuideRedPoint()
|
||
return XTheatreManager.CheckGuideGainFieldRedPoint() or XTheatreManager.CheckGuidePropRedPoint()
|
||
end
|
||
|
||
--检查是否显示增益图鉴的红点
|
||
function XTheatreManager.CheckGuideGainFieldRedPoint()
|
||
local configs = XTheatreConfigs.GetTheatreSkill()
|
||
for id in pairs(configs) do
|
||
if XTheatreManager.GetTokenManager():IsActiveSkill(id) and XTheatreManager.CheckIsCookie(_TheatreGuideGainFieldCookieKey .. id, true) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
--检查是否显示装修的红点
|
||
function XTheatreManager.CheckDecorationRedPoint()
|
||
if not XTheatreManager.CheckCondition("DecorationConditionId") then
|
||
return false
|
||
end
|
||
|
||
local decorationIds = XTheatreConfigs.GetTheatreDecorationIds()
|
||
local decorationManager = XTheatreManager.GetDecorationManager()
|
||
for decorationId in pairs(decorationIds) do
|
||
if XTheatreManager.IsDecorationLvUp(decorationId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
--装修项是否可升级
|
||
function XTheatreManager.IsDecorationLvUp(decorationId)
|
||
local decorationManager = XTheatreManager.GetDecorationManager()
|
||
local theatreDecorationId = decorationManager:GetTheatreDecorationId(decorationId)
|
||
if theatreDecorationId then
|
||
local maxLevel = XTheatreConfigs.GetTheatreDecorationMaxLv(decorationId)
|
||
local curLevel = decorationManager:GetDecorationLv(decorationId)
|
||
local isMaxLv = curLevel >= maxLevel
|
||
local conditionId = decorationManager:GetTheatreDecorationNextLvConditionId(decorationId)
|
||
local ret = not XTool.IsNumberValid(conditionId) and true or XConditionManager.CheckCondition(conditionId)
|
||
local costItemId = XTheatreConfigs.GetDecorationUpgradeCostItemId(theatreDecorationId)
|
||
local costUpgradeCost = XTheatreConfigs.GetDecorationUpgradeCost(theatreDecorationId)
|
||
local costCostCount = XDataCenter.ItemManager.GetCount(costItemId)
|
||
local isLevelUp = not isMaxLv and ret and costCostCount >= costUpgradeCost
|
||
if isLevelUp then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
--检查是否显示势力好感的红点
|
||
function XTheatreManager.CheckFavorRedPoint()
|
||
if not XTheatreManager.CheckCondition("FavorConditionId") then
|
||
return false
|
||
end
|
||
|
||
local powerManager = XTheatreManager.GetPowerManager()
|
||
local powerIdList = XTheatreConfigs.GetPowerConditionIdList()
|
||
local powerFavorId
|
||
local upgradeCost = XDataCenter.ItemManager.GetCount(XTheatreConfigs.TheatreFavorCoin)
|
||
local upgradeCostConfig
|
||
local powerCurLv
|
||
|
||
for _, powerId in ipairs(powerIdList) do
|
||
if (powerManager:IsUnlockPower(powerId)) and not powerManager:IsPowerMaxLv(powerId) then
|
||
powerCurLv = powerManager:GetPowerCurLv(powerId)
|
||
powerFavorId = XTheatreConfigs.GetTheatrePowerIdAndLvToId(powerId, powerCurLv)
|
||
upgradeCostConfig = XTheatreConfigs.GetPowerFavorUpgradeCost(powerFavorId)
|
||
if not powerManager:IsUnlockPowerFavor(powerFavorId) and upgradeCost >= upgradeCostConfig then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XTheatreManager.SaveGuideGainFieldRedPoint()
|
||
local configs = XTheatreConfigs.GetTheatreSkill()
|
||
for id in pairs(configs) do
|
||
if XTheatreManager:GetTokenManager():IsActiveSkill(id) then
|
||
XTheatreManager.CheckIsCookie(_TheatreGuideGainFieldCookieKey .. id)
|
||
end
|
||
end
|
||
end
|
||
|
||
--检查是否显示其他道具图鉴的红点
|
||
local _TheatreGuidePropCookieKey = "TheatreGuideProp_"
|
||
function XTheatreManager.CheckGuidePropRedPoint()
|
||
local configs = XTheatreConfigs.GetTheatreItem()
|
||
for id in pairs(configs) do
|
||
if XTheatreManager:GetTokenManager():IsActiveToken(id) and XTheatreManager.CheckIsCookie(_TheatreGuidePropCookieKey .. id, true) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XTheatreManager.SaveGuidePropRedPoint()
|
||
local configs = XTheatreConfigs.GetTheatreItem()
|
||
for id in pairs(configs) do
|
||
if XTheatreManager:GetTokenManager():IsActiveToken(id) then
|
||
XTheatreManager.CheckIsCookie(_TheatreGuidePropCookieKey .. id)
|
||
end
|
||
end
|
||
end
|
||
|
||
local TheatreSPModeRedPointCookieKey = "TheatreSPModeRedPoint"
|
||
function XTheatreManager.CheckSPModeRedPoint()
|
||
if not XTheatreManager.CheckSPModeIsOpen() then
|
||
return false
|
||
end
|
||
return XTheatreManager.CheckIsCookie(TheatreSPModeRedPointCookieKey)
|
||
end
|
||
------------------红点相关 end-------------------------
|
||
|
||
------------------副本入口扩展 start-------------------------
|
||
|
||
function XTheatreManager:ExOpenMainUi()
|
||
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Theatre) then
|
||
XTheatreManager.CheckAutoPlayStory()
|
||
end
|
||
end
|
||
|
||
-- 检查是否展示红点
|
||
function XTheatreManager:ExCheckIsShowRedPoint()
|
||
return XRedPointConditionTheatreAllRedPoint.Check()
|
||
end
|
||
|
||
---商店买空即为Clear
|
||
function XTheatreManager:ExCheckIsFinished(cb)
|
||
local result = false
|
||
self.IsClear = result
|
||
|
||
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.ShopCommon, nil, true)
|
||
or not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Theatre, nil, true) then
|
||
if cb then cb(result) end
|
||
return
|
||
end
|
||
local shopIdList = XTheatreConfigs.GetShopIds()
|
||
if XTool.IsTableEmpty(shopIdList) then
|
||
if cb then cb(result) end
|
||
return
|
||
end
|
||
|
||
local SetShopIsFinish = function()
|
||
local tempTotalBuyTimes
|
||
local tempBuyTimesLimit
|
||
for _, shopId in ipairs(shopIdList) do
|
||
local shopGoods = XShopManager.GetShopGoodsList(shopId, true)
|
||
for _, shopGood in pairs(shopGoods) do
|
||
tempTotalBuyTimes = shopGood.TotalBuyTimes
|
||
tempBuyTimesLimit = shopGood.BuyTimesLimit
|
||
|
||
if tempTotalBuyTimes and tempBuyTimesLimit
|
||
and tempBuyTimesLimit ~= 0
|
||
and tempTotalBuyTimes ~= tempBuyTimesLimit then
|
||
if cb then cb(result) end
|
||
return
|
||
end
|
||
end
|
||
end
|
||
|
||
result = true
|
||
self.IsClear = result
|
||
if cb then cb(result) end
|
||
end
|
||
|
||
if XTool.IsTableEmpty(XShopManager.GetShopGoodsList(shopIdList[1], true)) then
|
||
XShopManager.GetShopInfoList(shopIdList, SetShopIsFinish, XShopManager.ActivityShopType.TheatreShop, true)
|
||
else
|
||
SetShopIsFinish()
|
||
end
|
||
end
|
||
------------------副本入口扩展 end-------------------------
|
||
|
||
--region 冒险模式
|
||
function XTheatreManager.CheckSPModeIsOpen(isTip)
|
||
local conditionId = XTheatreConfigs.GetSPModeConditionId()
|
||
if not XTool.IsNumberValid(conditionId) then
|
||
return false
|
||
end
|
||
local ret, desc = XConditionManager.CheckCondition(conditionId)
|
||
if isTip and not ret then
|
||
XUiManager.TipError(desc)
|
||
end
|
||
return ret
|
||
end
|
||
|
||
---@return boolean
|
||
function XTheatreManager.GetSPMode()
|
||
if not XTheatreManager.CheckSPModeIsOpen() then
|
||
return false
|
||
end
|
||
local key = GetLocalSavedKey("TheatreSPMode_")
|
||
return XSaveTool.GetData(key, false)
|
||
end
|
||
|
||
function XTheatreManager.SetSPMode(isOn, isTip)
|
||
local key = GetLocalSavedKey("TheatreSPMode_")
|
||
if isTip then
|
||
if isOn then
|
||
XUiManager.TipError(XTheatreConfigs.GetSPModeOpenTile())
|
||
else
|
||
XUiManager.TipError(XTheatreConfigs.GetSPModeCloseTile())
|
||
end
|
||
end
|
||
return XSaveTool.SaveData(key, isOn)
|
||
end
|
||
|
||
function XTheatreManager.SetSPModeRedPoint()
|
||
local key = GetLocalSavedKey(TheatreSPModeRedPointCookieKey)
|
||
XSaveTool.SaveData(key, true)
|
||
end
|
||
--endregion
|
||
|
||
return XTheatreManager
|
||
end
|
||
|
||
XRpc.NotifyTheatreData = function(data)
|
||
XDataCenter.TheatreManager.InitWithServerData(data)
|
||
end
|
||
|
||
-- 信物升级
|
||
XRpc.NotifyTheatreKeepsakeUpgrade = function(data)
|
||
XDataCenter.TheatreManager:GetTokenManager():UpdateKeepsakeLv(data)
|
||
end
|
||
|
||
-- 节点奖励
|
||
XRpc.NotifyTheatreNodeReward = function(data)
|
||
local adventureManager = XDataCenter.TheatreManager.GetCurrentAdventureManager()
|
||
local chapter = adventureManager:GetCurrentChapter()
|
||
-- 技能选择奖励
|
||
if data.RewardType == XTheatreConfigs.AdventureRewardType.SelectSkill then
|
||
chapter:UpdateWaitSelectableSkillIds(data.Skills)
|
||
-- 升级
|
||
elseif data.RewardType == XTheatreConfigs.AdventureRewardType.LevelUp then
|
||
data.LastLevel = adventureManager:GetCurrentLevel()
|
||
data.LastAveragePower = adventureManager:GeRoleAveragePower()
|
||
adventureManager:UpdateCurrentLevel(data.Lv)
|
||
XDataCenter.TheatreManager.CheckUnlockOwnRole()
|
||
-- 装修点
|
||
elseif data.RewardType == XTheatreConfigs.AdventureRewardType.Decoration then
|
||
-- 好感度
|
||
elseif data.RewardType == XTheatreConfigs.AdventureRewardType.PowerFavor then
|
||
end
|
||
data.OperationQueueType = XTheatreConfigs.OperationQueueType.NodeReward
|
||
adventureManager:AddNextOperationData(data)
|
||
end
|
||
|
||
-- 新的节点
|
||
XRpc.NotifyTheatreAddNode = function(data)
|
||
local adventureManager = XDataCenter.TheatreManager.GetCurrentAdventureManager()
|
||
local currentChapter = adventureManager:GetCurrentChapter(false)
|
||
if currentChapter == nil then
|
||
currentChapter = adventureManager:CreatreChapterById(data.ChapterId)
|
||
end
|
||
if #currentChapter:GetCurrentNodes() > 0
|
||
and not currentChapter:CheckHasMovieNode() then
|
||
currentChapter:AddPassNodeCount(1)
|
||
end
|
||
currentChapter:UpdateCurrentNode(data)
|
||
end
|
||
|
||
-- 冒险结算,重开次数用完,或者没有下一章
|
||
XRpc.NotifyTheatreAdventureSettle = function(data)
|
||
local theatreManager = XDataCenter.TheatreManager
|
||
theatreManager.SetCurLoadSceneChapterId(nil)
|
||
theatreManager.RemoveOwnRoleCookie()
|
||
local adventureManager = theatreManager.GetCurrentAdventureManager()
|
||
adventureManager:ClearTeam()
|
||
data.LastChapteEndStoryId = adventureManager:GetCurrentChapter(false):GetEndStoryId()
|
||
data.OperationQueueType = XTheatreConfigs.OperationQueueType.AdventureSettle
|
||
adventureManager:AddNextOperationData(data)
|
||
theatreManager.UpdatePassChapterIds(data.SettleData.PassChapterId)
|
||
theatreManager.UpdatePassEventRecord(data.SettleData.PassEventRecord)
|
||
theatreManager.UpdateEndingIdRecords(data.SettleData.EndingRecord)
|
||
end
|
||
|
||
-- 章节结算,打完一章,并且还有下一章
|
||
XRpc.NotifyTheatreChapterSettle = function(data)
|
||
local theatreManager = XDataCenter.TheatreManager
|
||
local adventureManager = theatreManager.GetCurrentAdventureManager()
|
||
-- 更新到下一个章节
|
||
data.LastChapteEndStoryId = adventureManager:GetCurrentChapter(false):GetEndStoryId()
|
||
adventureManager:UpdateNextChapter()
|
||
data.OperationQueueType = XTheatreConfigs.OperationQueueType.ChapterSettle
|
||
adventureManager:AddNextOperationData(data)
|
||
theatreManager.UpdatePassChapterIds(data.SettleData.PassChapterId)
|
||
theatreManager.UpdatePassEventRecord(data.SettleData.PassEventRecord)
|
||
theatreManager.UpdateEndingIdRecords(data.SettleData.EndingRecord)
|
||
end
|
||
|
||
XRpc.TheatreNodeNextStep = function(data)
|
||
local chapter = XDataCenter.TheatreManager.GetCurrentAdventureManager():GetCurrentChapter()
|
||
if data.NextStepId <= 0 then -- 事件战斗结束后没有下一步了
|
||
return
|
||
end
|
||
local eventNode = chapter:GetEventNode(data.EventId)
|
||
eventNode:UpdateNextStepEventNode(data.NextStepId)
|
||
end
|
||
|
||
XRpc.NotifyTheatreReopenCount = function(data)
|
||
XDataCenter.TheatreManager.GetCurrentAdventureManager():UpdateReopenCount(data.ReopenCount)
|
||
end
|
||
|
||
XRpc.NotifyTheatreUseOwnCharacter = function(data)
|
||
XDataCenter.TheatreManager.GetCurrentAdventureManager():UpdateUseOwnCharacter(data.UseOwnCharacter)
|
||
end
|
||
|
||
XRpc.NotifyTheatreCoinChange = function(data)
|
||
local adventureManager = XDataCenter.TheatreManager.GetCurrentAdventureManager()
|
||
adventureManager:UpdateCurrentFavorCoin(data.FavorCoin)
|
||
adventureManager:UpdateCurrentDecorationCoin(data.DecorationCoin)
|
||
end
|
||
|
||
--通知解锁信物
|
||
XRpc.NotifyUnlockKeepsake = function(data)
|
||
XDataCenter.TheatreManager.GetTokenManager():UpdateKeepsake(data.Keepsake)
|
||
end |