1831 lines
No EOL
69 KiB
Lua
1831 lines
No EOL
69 KiB
Lua
local XExFubenSimulationChallengeManager = require("XEntity/XFuben/XExFubenSimulationChallengeManager")
|
||
|
||
local XAdventureManager = require("XEntity/XBiancaTheatre/Adventure/XAdventureManager")
|
||
local XTheatreTaskManager = require("XEntity/XBiancaTheatre/Task/XTheatreTaskManager")
|
||
local XComboList = require("XEntity/XBiancaTheatre/Combo/XTheatreComboList")
|
||
local XAdventureEnd = require("XEntity/XBiancaTheatre/Adventure/XAdventureEnd")
|
||
local XAdventureDifficulty = require("XEntity/XBiancaTheatre/Adventure/XAdventureDifficulty")
|
||
|
||
XBiancaTheatreManagerCreator = function()
|
||
---@class XBiancaTheatreManager
|
||
local XBiancaTheatreManager = XExFubenSimulationChallengeManager.New(XFubenConfigs.ChapterType.BiancaTheatre)
|
||
-- 当前冒险管理 XAdventureManager
|
||
local CurrentAdventureManager = nil
|
||
-- 任务管理
|
||
local TaskManager = XTheatreTaskManager.New()
|
||
-- 完全经过的章节,章节ID
|
||
local _PassChapterIdList = {}
|
||
-- 已经完成的时间步骤
|
||
local _PassEventRecordDic = {}
|
||
-- 已完成的结局数据
|
||
local _EndingIdRecords = {}
|
||
-- 羁绊管理
|
||
local ComboList = XComboList.New()
|
||
-- 缓存当前等级,用于判断等级是否提升
|
||
local CurLevelCache = 0
|
||
-- 缓存当前图鉴数目,用于判断图鉴是否增加
|
||
local UnlockItemCountCache = 0
|
||
-- 对局结束时新增的解锁道具ID,用于道具解锁提示
|
||
local NewUnlockItemIdDic = {}
|
||
-- 正常的队伍人数
|
||
local _TeamCount = 3
|
||
|
||
-- 当前活动Id
|
||
local CurActivityId = 0
|
||
-- 当前章节Id
|
||
local CurChapterId = 0
|
||
-- 选择的难度ID
|
||
local DifficultyId = 0
|
||
-- 当前总经验
|
||
local TotalExp = 0
|
||
-- 已经领取的奖励
|
||
local GetRewardIds = {}
|
||
-- 已购买的强化
|
||
local StrengthenDbs = {}
|
||
-- 已解锁物品ID,用于图鉴
|
||
local UnlockItemIdDic = {}
|
||
-- 已解锁队伍ID
|
||
local UnlockTeamId = {}
|
||
-- 解锁难度
|
||
local UnlockDifficultyId = {}
|
||
-- 当前难度数据 XAdventureDifficulty
|
||
local CurrentDifficulty = nil
|
||
-- 历史分队数据
|
||
local TeamRecords = {}
|
||
-- 通关章节
|
||
local PassChapterIdDict = {}
|
||
-- 当局灵视是否开启
|
||
local IsOpenVision = false
|
||
-- 成就奖励领取记录
|
||
local GetAchievementRecords = {}
|
||
-- 新的队伍人数
|
||
local TeamCountEffect = _TeamCount
|
||
|
||
-- 累计获得道具总数
|
||
local HistoryTotalItemCount = 0
|
||
-- 累计通过战斗节点数
|
||
local HistoryTotalPassFightNodeCount = 0
|
||
-- 累计获得道具品质,数量
|
||
local HistoryItemObtainRecords = {}
|
||
-- 当前游戏通过战斗节点数
|
||
local GamePassNodeCount = 0
|
||
-- 经历的事件Id key = eventId, value = eventSetpId[]
|
||
local PassedEventRecord = {}
|
||
-- 成就是否开启
|
||
local AchievementContidion = false
|
||
-- 版本更新是否有旧冒险数据进行自动结算
|
||
local NewStage = false
|
||
|
||
function XBiancaTheatreManager.InitWithServerData(data)
|
||
CurActivityId = data.CurActivityId
|
||
XDataCenter.BiancaTheatreManager.UpdateTotalExp(data.TotalExp)
|
||
XDataCenter.BiancaTheatreManager.UpdateCurChapterId(data.CurChapterId)
|
||
XDataCenter.BiancaTheatreManager.UpdateGetRewardIds(data.GetRewardIds)
|
||
XDataCenter.BiancaTheatreManager.UpdateDifficultyId(data.DifficultyId)
|
||
XDataCenter.BiancaTheatreManager.UpdateDifficulty(XAdventureDifficulty.New(data.DifficultyId))
|
||
XDataCenter.BiancaTheatreManager.UpdateStrengthenDbs(data.StrengthenDbs)
|
||
XDataCenter.BiancaTheatreManager.UpdateUnlockItemId(data.UnlockItemId)
|
||
XDataCenter.BiancaTheatreManager.UpdateTeamRecords(data.TeamRecords)
|
||
XDataCenter.BiancaTheatreManager.UpdatePassCharacterIdDict(data.PassChapterIds)
|
||
XDataCenter.BiancaTheatreManager.UpdateUnlockDifficultyId(data.UnlockDifficultyId)
|
||
XDataCenter.BiancaTheatreManager.UpdateUnlockTeamId(data.UnlockTeamId)
|
||
XDataCenter.BiancaTheatreManager.UpdateIsOpenVision(data.IsOpenVision)
|
||
XDataCenter.BiancaTheatreManager.UpdateGetAchievementRecords(data.GetAchievementRecords)
|
||
XDataCenter.BiancaTheatreManager.UpdateAchievemenetContidion(XTool.IsNumberValid(data.AchievementCondition))
|
||
XDataCenter.BiancaTheatreManager.UpdateTeamCountEffect(data.TeamCountEffect)
|
||
|
||
XDataCenter.BiancaTheatreManager.UpdateHistoryTotalItemCount(data.HistoryTotalItemCount)
|
||
XDataCenter.BiancaTheatreManager.UpdateHistoryTotalPassFightNodeCount(data.HistoryTotalPassFightNodeCount)
|
||
XDataCenter.BiancaTheatreManager.UpdateHistoryItemObtainRecords(data.HistoryItemObtainRecords)
|
||
XDataCenter.BiancaTheatreManager.UpdateGamePassNodeCount(data.GamePassNodeCount)
|
||
XDataCenter.BiancaTheatreManager.UpdatePassedEventRecord(data.PassedEventRecord)
|
||
XDataCenter.BiancaTheatreManager.UpdateNewStage(XTool.IsNumberValid(data.NewStage))
|
||
|
||
XDataCenter.BiancaTheatreManager.SetCurLevelCache()
|
||
XDataCenter.BiancaTheatreManager.SetCacheUnlockItemCount()
|
||
-- 初始化数据时清空新增的道具解锁
|
||
XDataCenter.BiancaTheatreManager.ClearNewUnlockItemDic()
|
||
|
||
-- 更新当前冒险数据
|
||
if data.CurChapterDb then
|
||
XDataCenter.BiancaTheatreManager.UpdateCurrentAdventureManager(XAdventureManager.New())
|
||
CurrentAdventureManager:InitWithServerData({
|
||
CurChapterDb = data.CurChapterDb, -- 章节数据
|
||
DifficultyId = data.DifficultyId, -- 难度
|
||
CurTeamId = data.CurTeamId, -- 当前分队ID
|
||
CurRoleLv = data.CurRoleLv, -- 冒险等级
|
||
Characters = data.Characters, -- 已招募的角色 TheatreRoleAttr表的roleId
|
||
SingleTeamData = data.SingleTeamData, -- 单队伍数据
|
||
Items = data.Items, --本局拥有道具
|
||
})
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateTotalExp(totalExp)
|
||
TotalExp = totalExp
|
||
XEventManager.DispatchEvent(XEventId.EVENT_BIANCA_THEATRE_TOTAL_EXP_CHANGE)
|
||
end
|
||
|
||
--更新主界面外的部分背景
|
||
function XBiancaTheatreManager.UpdateChapterBg(rawImage)
|
||
if XTool.UObjIsNil(rawImage) then
|
||
return
|
||
end
|
||
local chapter = XBiancaTheatreManager.GetCurrentAdventureManager():GetCurrentChapter()
|
||
local chapterId = chapter and chapter:GetCurrentChapterId()
|
||
rawImage:SetRawImage(XBiancaTheatreConfigs.GetChapterOtherBg(chapterId))
|
||
end
|
||
|
||
-- 检查物品数量是否满足指定数量
|
||
function XBiancaTheatreManager.CheckItemCountIsEnough(itemId, count, stepItemType)
|
||
if XBiancaTheatreManager.GetItemCount(itemId, stepItemType) < count then
|
||
XUiManager.TipError(XUiHelper.GetText("AssetsBuyConsumeNotEnough", XBiancaTheatreConfigs.GetEventStepItemName(itemId, stepItemType)))
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetItemCount(itemId, stepItemType)
|
||
if stepItemType == XBiancaTheatreConfigs.XEventStepItemType.OutSideItem then
|
||
return XDataCenter.ItemManager.GetCount(itemId)
|
||
elseif stepItemType == XBiancaTheatreConfigs.XEventStepItemType.ItemBox or stepItemType == XBiancaTheatreConfigs.XEventStepItemType.Ticket then
|
||
return 0
|
||
else
|
||
return XBiancaTheatreManager.GetCurrentAdventureManager():GetTheatreItemCount(itemId)
|
||
end
|
||
end
|
||
|
||
|
||
------------- 背景音乐相关 begin -----------
|
||
--检查背景音乐的播放
|
||
function XBiancaTheatreManager.CheckBgmPlay()
|
||
local curChapter = XBiancaTheatreManager.GetCurrentAdventureManager():GetCurrentChapter(true)
|
||
local bgmCueId = XBiancaTheatreConfigs.GetChapterBgmCueId(curChapter:GetId())
|
||
XSoundManager.PlaySoundByType(bgmCueId, XSoundManager.SoundType.BGM)
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckEndBgmPlay(adventureEnd)
|
||
if not adventureEnd or not XTool.IsNumberValid(adventureEnd:GetBgmCueId()) then
|
||
return
|
||
end
|
||
XSoundManager.PlaySoundByType(adventureEnd:GetBgmCueId(), XSoundManager.SoundType.BGM)
|
||
end
|
||
------------- 背景音乐相关 end -----------
|
||
|
||
|
||
------------- 声效滤镜相关 end -----------
|
||
local CurAudioFilterVisionId = nil
|
||
|
||
function XBiancaTheatreManager.StartAudioFilter()
|
||
if CurAudioFilterVisionId then
|
||
return
|
||
end
|
||
local visionValue = XBiancaTheatreManager.GetCurrentAdventureManager():GetVisionValue()
|
||
XBiancaTheatreManager.OpenAudioFilter(XBiancaTheatreConfigs.GetVisionIdByValue(visionValue))
|
||
end
|
||
|
||
-- 开启滤镜
|
||
function XBiancaTheatreManager.OpenAudioFilter(audioFilterVisionId)
|
||
if not XBiancaTheatreManager.CheckVisionIsOpen() or not XTool.IsNumberValid(audioFilterVisionId) then
|
||
return
|
||
end
|
||
XBiancaTheatreManager.ResetAudioFilter(CurAudioFilterVisionId)
|
||
local cueId = XBiancaTheatreConfigs.GetVisionSoundFilterOpenCueId(audioFilterVisionId)
|
||
if XTool.IsNumberValid(cueId) then
|
||
XSoundManager.PlaySoundByType(cueId, XSoundManager.SoundType.Sound)
|
||
CurAudioFilterVisionId = audioFilterVisionId
|
||
XScheduleManager.Schedule(function ()
|
||
local audioInfo = XSoundManager.CheckHaveCue(cueId)
|
||
if audioInfo and audioInfo.Playing then
|
||
XSoundManager.ResetSystemAudioVolume()
|
||
end
|
||
end, 0, 60)
|
||
end
|
||
end
|
||
|
||
-- 关闭滤镜
|
||
function XBiancaTheatreManager.ResetAudioFilter(audioFilterVisionId)
|
||
local visionId = audioFilterVisionId or CurAudioFilterVisionId
|
||
if XTool.IsNumberValid(visionId) then
|
||
local openCueId = XBiancaTheatreConfigs.GetVisionSoundFilterOpenCueId(visionId)
|
||
-- local closeCueId = XBiancaTheatreConfigs.GetVisionSoundFilterCloseCueId(visionId)
|
||
-- if XTool.IsNumberValid(closeCueId) then
|
||
-- XSoundManager.PlaySoundByType(closeCueId, XSoundManager.SoundType.Sound)
|
||
-- XSoundManager.Stop(closeCueId)
|
||
-- end
|
||
if XTool.IsNumberValid(openCueId) then
|
||
XSoundManager.Stop(openCueId)
|
||
end
|
||
XSoundManager.ResetSystemAudioVolume()
|
||
end
|
||
CurAudioFilterVisionId = nil
|
||
end
|
||
|
||
---初始化音效滤镜
|
||
function XBiancaTheatreManager.InitAudioFilter()
|
||
local configs = XBiancaTheatreConfigs.GetBiancaTheatreVision()
|
||
-- local closeCueId
|
||
for _, config in ipairs(configs) do
|
||
-- if closeCueId ~= config.SoundFilterCloseCueId then
|
||
-- closeCueId = config.SoundFilterCloseCueId
|
||
-- if XTool.IsNumberValid(closeCueId) then
|
||
-- XSoundManager.PlaySoundByType(closeCueId, XSoundManager.SoundType.Sound)
|
||
-- XSoundManager.Stop(closeCueId)
|
||
-- end
|
||
-- end
|
||
local openCueId = config.SoundFilterOpenCueId
|
||
if XTool.IsNumberValid(openCueId) then
|
||
XSoundManager.Stop(openCueId)
|
||
end
|
||
end
|
||
XSoundManager.ResetSystemAudioVolume()
|
||
end
|
||
|
||
-- 返回主界面时关闭滤镜
|
||
function XBiancaTheatreManager.RunMain()
|
||
XBiancaTheatreManager.ResetAudioFilter()
|
||
XLuaUiManager.RunMain()
|
||
end
|
||
|
||
---播放奖励音效(1:领取秘藏箱 | 2:领取秘藏品 | 3:领取邀约)
|
||
---@param nodeRewardType number XNodeRewardType
|
||
---@param index number
|
||
function XBiancaTheatreManager.PlayGetRewardSound(nodeRewardType, index)
|
||
local targetIndex
|
||
if XTool.IsNumberValid(index) then
|
||
targetIndex = index
|
||
else
|
||
if nodeRewardType == XBiancaTheatreConfigs.XNodeRewardType.ItemBox then
|
||
targetIndex = 1
|
||
elseif nodeRewardType == XBiancaTheatreConfigs.XNodeRewardType.Ticket then
|
||
targetIndex = 3
|
||
end
|
||
end
|
||
local cueId = XBiancaTheatreConfigs.GetCueWhenGetReward(targetIndex)
|
||
if XTool.IsNumberValid(cueId) then
|
||
XSoundManager.PlaySoundByType(cueId, XSoundManager.SoundType.Sound)
|
||
end
|
||
end
|
||
------------- 声效滤镜相关 end -----------
|
||
|
||
|
||
------------- 难度相关 begin -----------
|
||
function XBiancaTheatreManager.GetDifficultyId()
|
||
return DifficultyId
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateDifficultyId(difficultyId)
|
||
DifficultyId = difficultyId
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateDifficulty(difficulty)
|
||
CurrentDifficulty = difficulty
|
||
end
|
||
|
||
function XBiancaTheatreManager:GetCurrentDifficulty()
|
||
return CurrentDifficulty
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateUnlockDifficultyId(ids)
|
||
if XTool.IsTableEmpty(ids) then return end
|
||
|
||
for _, id in ipairs(ids or {}) do
|
||
UnlockDifficultyId[id] = true
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckDifficultyUnlock(difficultyId)
|
||
return UnlockDifficultyId[difficultyId] and true or false
|
||
end
|
||
------------- 难度相关 end -----------
|
||
|
||
|
||
------------- 分队相关 begin -----------
|
||
---//历史分队数据
|
||
-- public class XBiancaTheatreChapterTeam
|
||
-- {
|
||
-- //分队ID
|
||
-- public int TeamId;
|
||
-- //已通关结局
|
||
-- public HashSet<int> EndRecords = new HashSet<int>();
|
||
-- }
|
||
function XBiancaTheatreManager.UpdateTeamRecords(teamRecords)
|
||
for _, chapterTeam in ipairs(teamRecords or {}) do
|
||
if not TeamRecords[chapterTeam.TeamId] then
|
||
TeamRecords[chapterTeam.TeamId] = {}
|
||
end
|
||
for _, endingId in pairs(chapterTeam.EndRecords) do
|
||
TeamRecords[chapterTeam.TeamId][endingId] = true
|
||
end
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetTeamEndingIsActive(teamId, endingId)
|
||
return TeamRecords[teamId] and TeamRecords[teamId][endingId]
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateUnlockTeamId(ids)
|
||
for _, id in ipairs(ids or {}) do
|
||
UnlockTeamId[id] = true
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckTeamUnlock(teamId)
|
||
return UnlockTeamId[teamId] and true or false
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetTeamIdList()
|
||
local teamIdList = {}
|
||
local teamIdListCfg = XBiancaTheatreConfigs.GetTeamIdList()
|
||
local timeId
|
||
for _, teamId in ipairs(teamIdListCfg) do
|
||
timeId = XBiancaTheatreConfigs.GetTeamTimeId(teamId)
|
||
if XFunctionManager.CheckInTimeByTimeId(timeId, true) then
|
||
table.insert(teamIdList, teamId)
|
||
end
|
||
end
|
||
return teamIdList
|
||
end
|
||
------------- 分队相关 end -------------
|
||
|
||
|
||
------------- 强化相关 begin -----------
|
||
function XBiancaTheatreManager.UpdateStrengthenDbs(strengthenDbs)
|
||
for _, strengthenId in ipairs(strengthenDbs or {}) do
|
||
StrengthenDbs[strengthenId] = true
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.IsBuyStrengthen(strengthenId)
|
||
return StrengthenDbs[strengthenId] or false
|
||
end
|
||
|
||
--是否已购买某个组里的所有强化项目
|
||
function XBiancaTheatreManager.IsStrengthenGroupAllBuy(strengthenGroupId)
|
||
local strengthenIdList = XTool.IsNumberValid(strengthenGroupId) and XBiancaTheatreConfigs.GetStrengthenIdList(strengthenGroupId) or {}
|
||
for _, strengthenId in ipairs(strengthenIdList) do
|
||
if not XBiancaTheatreManager.IsBuyStrengthen(strengthenId) then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
--检查技能是否解锁
|
||
function XBiancaTheatreManager.CheckStrengthenUnlock(strengthenId)
|
||
local preIds = XBiancaTheatreConfigs.GetStrengthenPreStrengthenIds(strengthenId)
|
||
if XTool.IsTableEmpty(preIds) then
|
||
return true
|
||
end
|
||
for _, id in ipairs(preIds) do
|
||
local isActive = XBiancaTheatreManager.IsBuyStrengthen(id)
|
||
if not isActive then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
------------- 强化相关 end -----------
|
||
|
||
|
||
------------- 奖励等级 begin -----------
|
||
function XBiancaTheatreManager.UpdateGetRewardIds(getRewardIds)
|
||
for _, theatreRewardId in ipairs(getRewardIds or {}) do
|
||
GetRewardIds[theatreRewardId] = true
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetTotalExp()
|
||
return TotalExp
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetCurExpWithLv(level)
|
||
local exp = TotalExp
|
||
for i = 1, level do
|
||
local unlockScore = XBiancaTheatreConfigs.GetLevelRewardUnlockScore(i)
|
||
exp = exp - unlockScore
|
||
end
|
||
return math.max(0, exp)
|
||
end
|
||
|
||
--获得当前奖励等级(配置Id必须从1开始累加)
|
||
function XBiancaTheatreManager.GetCurRewardLevel()
|
||
local configs = XBiancaTheatreConfigs.GetBiancaTheatreLevelReward()
|
||
local curLevel = 0
|
||
local curScore = 0
|
||
for id in pairs(configs) do
|
||
curScore = curScore + XBiancaTheatreConfigs.GetLevelRewardUnlockScore(id)
|
||
if TotalExp >= curScore then
|
||
curLevel = id
|
||
else
|
||
break
|
||
end
|
||
end
|
||
return curLevel
|
||
end
|
||
|
||
--判断是否提升等级
|
||
function XBiancaTheatreManager.CheckCurLevelIsUpdate()
|
||
if XBiancaTheatreManager.GetCurRewardLevel() > CurLevelCache then
|
||
XBiancaTheatreManager.SetCurLevelCache()
|
||
return true
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
--设置当前等级缓存,用于判断是否提升等级
|
||
function XBiancaTheatreManager.SetCurLevelCache()
|
||
CurLevelCache = XBiancaTheatreManager.GetCurRewardLevel()
|
||
end
|
||
|
||
--读取缓存等级用作升级显示
|
||
function XBiancaTheatreManager.GetCurLevelCache()
|
||
return CurLevelCache
|
||
end
|
||
|
||
--是否有未领取的奖励
|
||
function XBiancaTheatreManager.IsHaveReward()
|
||
local configs = XBiancaTheatreConfigs.GetBiancaTheatreLevelReward()
|
||
local curLevel = XBiancaTheatreManager.GetCurRewardLevel()
|
||
for id in pairs(configs) do
|
||
if not GetRewardIds[id] and id <= curLevel then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
--奖励是否已经领取
|
||
function XBiancaTheatreManager.CheckRewardReceived(lvRewardId)
|
||
return GetRewardIds[lvRewardId] and true or false
|
||
end
|
||
|
||
--奖励是否可以领取
|
||
function XBiancaTheatreManager.CheckRewardAbleToReceive(lvRewardId)
|
||
local isDraw = XDataCenter.BiancaTheatreManager.CheckRewardReceived(lvRewardId)
|
||
local level = XDataCenter.BiancaTheatreManager.GetCurRewardLevel()
|
||
return level >= lvRewardId and not isDraw
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetCanReceiveLevelRewardIds()
|
||
local configs = XBiancaTheatreConfigs.GetBiancaTheatreLevelReward()
|
||
local list = {}
|
||
for id, _ in pairs(configs) do
|
||
if XBiancaTheatreManager.CheckRewardAbleToReceive(id) then
|
||
table.insert(list, id)
|
||
end
|
||
end
|
||
|
||
table.sort(list, function(a, b)
|
||
return a < b
|
||
end)
|
||
|
||
return list
|
||
end
|
||
------------- 奖励等级 end -----------
|
||
|
||
function XBiancaTheatreManager.CheckIsGlobalFinishChapter(chapterId)
|
||
for _, v in pairs(_PassChapterIdList) do
|
||
if v == chapterId then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckIsGlobalFinishEvent(eventId, stepId)
|
||
if not _PassEventRecordDic[eventId] then return false end
|
||
if not _PassEventRecordDic[eventId][stepId] then return false end
|
||
return true
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckIsFinishEnding(id)
|
||
for _, v in pairs(_EndingIdRecords) do
|
||
if v == id then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateCurChapterId(chapterId)
|
||
CurChapterId = chapterId
|
||
end
|
||
|
||
--检查是否开始冒险了
|
||
function XBiancaTheatreManager.CheckHasAdventure()
|
||
return XTool.IsNumberValid(CurChapterId)
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetCurrentAdventureManager()
|
||
if not CurrentAdventureManager then
|
||
CurrentAdventureManager = XBiancaTheatreManager.CreateAdventureManager()
|
||
end
|
||
return CurrentAdventureManager
|
||
end
|
||
|
||
function XBiancaTheatreManager.CreateAdventureManager()
|
||
return XAdventureManager.New()
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateCurrentAdventureManager(value)
|
||
if CurrentAdventureManager then
|
||
CurrentAdventureManager:Release()
|
||
CurrentAdventureManager = nil
|
||
end
|
||
CurrentAdventureManager = value
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdatePassCharacterIdDict(ids)
|
||
if XTool.IsTableEmpty(ids) then return end
|
||
|
||
for _, id in ipairs(ids) do
|
||
PassChapterIdDict[id] = true
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckChapterPassed(chapterId)
|
||
return PassChapterIdDict[chapterId] and true or false
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckEndPassed(endId)
|
||
for _, records in pairs(TeamRecords) do
|
||
for endingId, value in pairs(records) do
|
||
if endingId == endId and value then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
|
||
------------------道具图鉴 begin---------------------
|
||
function XBiancaTheatreManager.UpdateUnlockItemId(unlockItemId)
|
||
-- 清空结算后新增的解锁道具字典
|
||
XBiancaTheatreManager.ClearNewUnlockItemDic()
|
||
|
||
for _, theatreItemId in ipairs(unlockItemId or {}) do
|
||
-- 添加结算后新增的解锁道具
|
||
if not UnlockItemIdDic[theatreItemId] then
|
||
table.insert(NewUnlockItemIdDic, theatreItemId)
|
||
end
|
||
UnlockItemIdDic[theatreItemId] = true
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.AddUnlockItemIds(unlockItemIds)
|
||
for _, theatreItemId in ipairs(unlockItemIds or {}) do
|
||
if not UnlockItemIdDic[theatreItemId.ItemId] then
|
||
UnlockItemIdDic[theatreItemId.ItemId] = true
|
||
end
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.IsUnlockItem(theatreItemId)
|
||
-- 没有Condition默认解锁
|
||
if not XTool.IsNumberValid(XBiancaTheatreConfigs.GetItemUnlockConditionId(theatreItemId)) then
|
||
return true
|
||
end
|
||
return UnlockItemIdDic[theatreItemId] or false
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetUnlockItemCount()
|
||
local count = 0
|
||
--遍历解锁的道具
|
||
for _, itemId in pairs(XBiancaTheatreConfigs.GetTheatreItemIdList()) do
|
||
if XBiancaTheatreManager.IsUnlockItem(itemId) then
|
||
count = count + 1
|
||
end
|
||
end
|
||
return count
|
||
end
|
||
|
||
-- 判断图鉴是否增加
|
||
function XBiancaTheatreManager.CheckUnlockItemUpdate()
|
||
if XBiancaTheatreManager.GetUnlockItemCount() > UnlockItemCountCache then
|
||
XBiancaTheatreManager.SetCacheUnlockItemCount()
|
||
return true
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
-- 设置图鉴数量缓存,用于判断结算后图鉴是否增加
|
||
function XBiancaTheatreManager.SetCacheUnlockItemCount()
|
||
UnlockItemCountCache = XBiancaTheatreManager.GetUnlockItemCount()
|
||
end
|
||
|
||
-- 情况结算后新增的解锁道具字典
|
||
function XBiancaTheatreManager.ClearNewUnlockItemDic()
|
||
NewUnlockItemIdDic = {}
|
||
end
|
||
|
||
-- 获取结算后新增的解锁道具字典
|
||
function XBiancaTheatreManager.GetNewUnlockItemDic()
|
||
return NewUnlockItemIdDic
|
||
end
|
||
------------------道具图鉴 end-----------------------
|
||
|
||
|
||
function XBiancaTheatreManager.GetHelpKey()
|
||
return XBiancaTheatreConfigs.GetClientConfig("HelpKey")
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetReopenHelpKey()
|
||
return XBiancaTheatreConfigs.GetClientConfig("ReopenHelpKey")
|
||
end
|
||
|
||
-- 局外显示资源
|
||
function XBiancaTheatreManager.GetAssetItemIds()
|
||
return {XBiancaTheatreConfigs.TheatreOutCoin}
|
||
end
|
||
|
||
-- 局内显示资源
|
||
function XBiancaTheatreManager.GetAdventureAssetItemIds()
|
||
return {XBiancaTheatreConfigs.TheatreInnerCoin, XBiancaTheatreConfigs.TheatreActionPoint}
|
||
end
|
||
|
||
-- 局内资源点击方法
|
||
function XBiancaTheatreManager.AdventureAssetItemOnBtnClick(func, index)
|
||
local itemId = XBiancaTheatreManager.GetAdventureAssetItemIds()[index]
|
||
XLuaUiManager.Open("UiBiancaTheatreTips", itemId)
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetAllCoinItemDatas()
|
||
local result = {}
|
||
local itemManager = XDataCenter.ItemManager
|
||
local coinCount = itemManager:GetCount(XBiancaTheatreConfigs.TheatreInnerCoin)
|
||
if coinCount > 0 then
|
||
table.insert(result, {
|
||
TemplateId = XBiancaTheatreConfigs.TheatreInnerCoin,
|
||
Count = coinCount
|
||
})
|
||
end
|
||
local decorationCoinCount = itemManager:GetCount(XBiancaTheatreConfigs.TheatreOutCoin)
|
||
if decorationCoinCount > 0 then
|
||
table.insert(result, {
|
||
TemplateId = XBiancaTheatreConfigs.TheatreOutCoin,
|
||
Count = decorationCoinCount
|
||
})
|
||
end
|
||
local favorCoinCount = itemManager:GetCount(XBiancaTheatreConfigs.TheatreExp)
|
||
if favorCoinCount > 0 then
|
||
table.insert(result, {
|
||
TemplateId = XBiancaTheatreConfigs.TheatreExp,
|
||
Count = favorCoinCount
|
||
})
|
||
end
|
||
return result
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetTaskManager()
|
||
return TaskManager
|
||
end
|
||
|
||
|
||
------------------ 副本相关 begin --------------------
|
||
function XBiancaTheatreManager.InitStageInfo()
|
||
-- 关卡池的关卡
|
||
local configs = XBiancaTheatreConfigs.GetBiancaTheatreFightStageTemplate()
|
||
local stageInfo = nil
|
||
for _, config in pairs(configs) do
|
||
stageInfo = XDataCenter.FubenManager.GetStageInfo(config.StageId)
|
||
if stageInfo then
|
||
stageInfo.Type = XDataCenter.FubenManager.StageType.BiancaTheatre
|
||
else
|
||
XLog.Error("肉鸽2.0找不到配置的关卡id:", config.StageId)
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
function XBiancaTheatreManager.CallFinishFight()
|
||
local fubenManager = XDataCenter.FubenManager
|
||
local res = fubenManager.FubenSettleResult
|
||
if not res then
|
||
-- 强退
|
||
local XFubenManager = XDataCenter.FubenManager
|
||
XFubenManager.FubenSettling = false
|
||
XFubenManager.FubenSettleResult = nil
|
||
--通知战斗结束,关闭战斗设置页面
|
||
CS.XGameEventManager.Instance:Notify(XEventId.EVENT_FIGHT_FINISH)
|
||
XBiancaTheatreManager.FinishFight({})
|
||
return
|
||
end
|
||
fubenManager.CallFinishFight()
|
||
end
|
||
|
||
function XBiancaTheatreManager.FinishFight(settle)
|
||
XBiancaTheatreManager.SetIsAutoOpen(true)
|
||
XBiancaTheatreManager.SetIsAutoOpenSettleWin(true)
|
||
if settle.IsWin then
|
||
XDataCenter.FubenManager.ChallengeWin(settle)
|
||
else
|
||
XBiancaTheatreManager.OpenBlackView()
|
||
XBiancaTheatreManager.RemoveStepView()
|
||
XBiancaTheatreManager.CheckOpenSettleWin()
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.ShowReward(winData, playEndStory)
|
||
winData.OperationQueueType = XBiancaTheatreConfigs.OperationQueueType.BattleSettle
|
||
CurrentAdventureManager:AddNextOperationData(winData, true)
|
||
|
||
XBiancaTheatreManager.OpenBlackView()
|
||
XBiancaTheatreManager.SetIsAutoOpen(true)
|
||
if XBiancaTheatreManager.GetIsCatchAdventureEnd() then
|
||
XBiancaTheatreManager.CheckOpenSettleWin()
|
||
else
|
||
XBiancaTheatreManager.CheckOpenView()
|
||
XBiancaTheatreManager.RemoveBlackView()
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.PreFight(stage, teamId, isAssist, challengeCount)
|
||
XBiancaTheatreManager.SetIsAutoOpen(false)
|
||
XBiancaTheatreManager.SetIsAutoOpenSettleWin(false)
|
||
local team = CurrentAdventureManager:GetSingleTeam()
|
||
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,
|
||
}
|
||
end
|
||
|
||
function XBiancaTheatreManager.OpenBlackView()
|
||
XLuaUiManager.Open("UiBiancaTheatreBlack")
|
||
end
|
||
|
||
function XBiancaTheatreManager.RemoveBlackView()
|
||
XLuaUiManager.Remove("UiBiancaTheatreBlack")
|
||
end
|
||
------------------ 副本相关 end --------------------
|
||
|
||
|
||
function XBiancaTheatreManager.CheckCondition(conditionKey, isShowTip)
|
||
local conditionId = XBiancaTheatreConfigs.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
|
||
|
||
|
||
------------------step 步骤相关 begin-------------------
|
||
local IsAutoOpen = true --是否检查自动打开界面
|
||
local IsSkipCheckLoading = false --是否跳过过渡界面的检查
|
||
--根据当前步骤打开相应界面
|
||
function XBiancaTheatreManager.CheckOpenView(isCheckNode, isShowLoading)
|
||
if not IsAutoOpen then
|
||
return
|
||
end
|
||
|
||
local adventureManager = XBiancaTheatreManager.GetCurrentAdventureManager()
|
||
local curStep = adventureManager:GetCurrentChapter():GetCurStep()
|
||
local stepType = curStep and curStep:GetStepType()
|
||
if not stepType then
|
||
return
|
||
end
|
||
|
||
local uiName
|
||
if isShowLoading then
|
||
--打开过渡界面
|
||
uiName = "UiBiancaTheatreLoading"
|
||
elseif stepType == XBiancaTheatreConfigs.XStepType.Node then
|
||
local nodeSlotType = isCheckNode and curStep:GetSelectNodeType() or "Default"
|
||
uiName = XBiancaTheatreConfigs.StepTypeToUiName[stepType][nodeSlotType]
|
||
else
|
||
uiName = XBiancaTheatreConfigs.StepTypeToUiName[stepType]
|
||
end
|
||
if not uiName then
|
||
return
|
||
end
|
||
|
||
XDataCenter.BiancaTheatreManager.CheckTipOpenList(function ()
|
||
XBiancaTheatreManager.RemoveStepView()
|
||
XLuaUiManager.Open(uiName)
|
||
local isVisionOpen = XBiancaTheatreManager.CheckVisionIsOpen()
|
||
if isVisionOpen then
|
||
XBiancaTheatreManager.StartAudioFilter()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--移除所有由步骤通知打开的界面
|
||
function XBiancaTheatreManager.RemoveStepView()
|
||
XLuaUiManager.Remove("UiBiancaTheatreChoice")
|
||
XLuaUiManager.Remove("UiBiancaTheatreRecruit")
|
||
XLuaUiManager.Remove("UiBiancaTheatrePlayMain")
|
||
XLuaUiManager.Remove("UiBiancaTheatreOutpost")
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetIsAutoOpen(isAutoOpen)
|
||
IsAutoOpen = isAutoOpen
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetIsSkipCheckLoading(isSkipCheckLoading)
|
||
IsSkipCheckLoading = isSkipCheckLoading
|
||
end
|
||
------------------step 步骤相关 end-------------------
|
||
|
||
|
||
|
||
------------------灵视系统相关 begin-------------------
|
||
function XBiancaTheatreManager.UpdateIsOpenVision(isOpenVision)
|
||
IsOpenVision = XTool.IsNumberValid(isOpenVision)
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckVisionIsOpen()
|
||
return IsOpenVision
|
||
end
|
||
|
||
function XBiancaTheatreManager.OpenVision()
|
||
local visionValue = XBiancaTheatreManager.GetCurrentAdventureManager():GetVisionValue()
|
||
XBiancaTheatreManager.OpenAudioFilter(XBiancaTheatreConfigs.GetVisionIdByValue(visionValue))
|
||
XEventManager.DispatchEvent(XEventId.EVENT_BIANCA_THEATRE_VISION_OPEN)
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateVisionSystemIsOpen()
|
||
local localSavedKey = string.format("BiancaTheatreData_%s_VisionSystemIsOpen", XPlayer.Id)
|
||
XSaveTool.SaveData(localSavedKey, true)
|
||
end
|
||
|
||
-- 灵视系统是否开启
|
||
function XBiancaTheatreManager.CheckVisionSystemIsOpen(isTips)
|
||
local cacheVisionSystemIsOpen = XSaveTool.GetData(string.format("BiancaTheatreData_%s_VisionSystemIsOpen", XPlayer.Id))
|
||
if cacheVisionSystemIsOpen then return cacheVisionSystemIsOpen end
|
||
local conditionId = tonumber(XBiancaTheatreConfigs.GetTheatreConfig("VisionConditionId").Value)
|
||
if XTool.IsNumberValid(conditionId) then
|
||
local unlock, desc = XConditionManager.CheckCondition(conditionId)
|
||
if not unlock and isTips then
|
||
XUiManager.TipMsg(desc)
|
||
end
|
||
return unlock, desc
|
||
end
|
||
return true
|
||
end
|
||
|
||
function XBiancaTheatreManager.ChangeVision(visionChangeId)
|
||
if not XBiancaTheatreManager.CheckVisionIsOpen() then
|
||
XBiancaTheatreManager.UpdateIsOpenVision(true)
|
||
XBiancaTheatreManager.OpenVision()
|
||
end
|
||
-- 添加提示弹窗数据
|
||
local visionValue = XBiancaTheatreManager.GetCurrentAdventureManager():GetVisionValue()
|
||
XBiancaTheatreManager.AddTipOpenData("UiBiancaTheatrePsionicVision", nil, false, visionChangeId, visionValue)
|
||
end
|
||
|
||
-- 灵视开启本地缓存记录
|
||
function XBiancaTheatreManager.GetVisionOpenTipCache()
|
||
local key = string.format("BiancaTheatreData_%s_VisionOpenTip", XPlayer.Id)
|
||
return XSaveTool.GetData(key)
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetVisionOpenTipCache()
|
||
local key = string.format("BiancaTheatreData_%s_VisionOpenTip", XPlayer.Id)
|
||
return XSaveTool.SaveData(key, true)
|
||
end
|
||
------------------灵视系统相关 end---------------------
|
||
|
||
|
||
------------------队伍人数相关 begin-------------------
|
||
|
||
function XBiancaTheatreManager.UpdateTeamCountEffect(teamCountEffect)
|
||
if teamCountEffect then
|
||
TeamCountEffect = teamCountEffect
|
||
else
|
||
TeamCountEffect = _TeamCount
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetTeamCountEffect()
|
||
return TeamCountEffect
|
||
end
|
||
|
||
-- 冒险结束重置
|
||
function XBiancaTheatreManager.ResetTeamCountEffect()
|
||
TeamCountEffect = _TeamCount
|
||
end
|
||
|
||
------------------队伍人数相关 end---------------------
|
||
|
||
|
||
------------------成就系统相关 begin-------------------
|
||
-- 数据处理部分详见XEntity/XBiancaTheatre/Task/XTheatreTaskManager
|
||
|
||
function XBiancaTheatreManager.UpdateGetAchievementRecords(getAchievementRecords)
|
||
for _, achievementRecord in ipairs(getAchievementRecords or {}) do
|
||
GetAchievementRecords[achievementRecord.NeedCountId] = true
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateAchievemenetContidion(isOpen)
|
||
AchievementContidion = isOpen or false
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetAchievemenetContidion()
|
||
return AchievementContidion
|
||
end
|
||
|
||
-- 该成就组任务奖励
|
||
function XBiancaTheatreManager.GetAchievementRewardIds(needCountId)
|
||
local config = XBiancaTheatreConfigs.GetBiancaTheatreActivity(CurActivityId)
|
||
if XTool.IsNumberValid(needCountId) then
|
||
if not XTool.IsTableEmpty(config.RewardIds) then
|
||
return config.RewardIds[needCountId]
|
||
end
|
||
else
|
||
return config.RewardIds
|
||
end
|
||
end
|
||
|
||
-- 该成就组任务解锁条件
|
||
function XBiancaTheatreManager.GetAchievementNeedCounts(needCountId)
|
||
local config = XBiancaTheatreConfigs.GetBiancaTheatreActivity(CurActivityId)
|
||
if XTool.IsNumberValid(needCountId) then
|
||
if not XTool.IsTableEmpty(config.NeedCounts) then
|
||
return config.NeedCounts[needCountId]
|
||
end
|
||
else
|
||
return config.NeedCounts
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckAchievementIsOpen(isTips)
|
||
local conditionId = XBiancaTheatreConfigs.GetTheatreConfig("AchievementConditionId").Value
|
||
conditionId = tonumber(conditionId)
|
||
if not XTool.IsNumberValid(conditionId) then
|
||
return true
|
||
end
|
||
local unlock, desc
|
||
local config = XConditionManager.GetConditionTemplate(conditionId)
|
||
-- 17111是单局内有效的condition,成就开启是外部的condition判断
|
||
-- 为符合策划需求后端利用17111这个conditionType进行特殊处理,因此该类型的condition判断由服务端下发的数据进行判断
|
||
if config.Type == 17111 then
|
||
unlock = AchievementContidion
|
||
desc = config.Desc
|
||
else
|
||
unlock, desc = XConditionManager.CheckCondition(conditionId)
|
||
end
|
||
if not unlock and isTips then
|
||
XUiManager.TipMsg(desc)
|
||
end
|
||
return unlock, desc
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckAchievementRecordIsGet(needCountId)
|
||
return GetAchievementRecords[needCountId]
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetAchievementGetRecord(needCountId)
|
||
GetAchievementRecords[needCountId] = true
|
||
end
|
||
|
||
-- 成就开启本地缓存
|
||
function XBiancaTheatreManager.GetAchievementOpenTipCache()
|
||
local key = string.format("BiancaTheatreData_%s_AchievementOpenTip", XPlayer.Id)
|
||
return XSaveTool.GetData(key)
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetAchievementOpenTipCache()
|
||
local key = string.format("BiancaTheatreData_%s_AchievementOpenTip", XPlayer.Id)
|
||
return XSaveTool.SaveData(key, true)
|
||
end
|
||
------------------成就系统相关 end---------------------
|
||
|
||
|
||
------------------进度数据相关 begin-------------------
|
||
|
||
function XBiancaTheatreManager.UpdateHistoryTotalItemCount(historyTotalItemCount)
|
||
HistoryTotalItemCount = historyTotalItemCount or 0
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetHistoryTotalItemCount()
|
||
return HistoryTotalItemCount
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateHistoryTotalPassFightNodeCount(historyTotalPassFightNodeCount)
|
||
HistoryTotalPassFightNodeCount = historyTotalPassFightNodeCount or 0
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetHistoryTotalPassFightNodeCount()
|
||
return HistoryTotalPassFightNodeCount
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateHistoryItemObtainRecords(historyItemObtainRecords)
|
||
if historyItemObtainRecords then
|
||
HistoryItemObtainRecords = historyItemObtainRecords
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetHistoryItemObtainRecords(quality)
|
||
return HistoryItemObtainRecords[quality] or 0
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetConditionProcess(conditionId)
|
||
if not conditionId then return end
|
||
local conditionConfig = XConditionManager.GetConditionTemplate(conditionId)
|
||
if XTool.IsTableEmpty(conditionConfig) then return end
|
||
|
||
local allProcess = 0
|
||
local curProcess = 0
|
||
if conditionConfig.Type == 17101 then
|
||
allProcess = conditionConfig.Params[1]
|
||
curProcess = XBiancaTheatreManager.GetHistoryTotalPassFightNodeCount()
|
||
elseif conditionConfig.Type == 17106 then
|
||
allProcess = conditionConfig.Params[1]
|
||
elseif conditionConfig.Type == 17113 then
|
||
local quality = conditionConfig.Params[2]
|
||
allProcess = conditionConfig.Params[1]
|
||
curProcess = quality == 0 and XBiancaTheatreManager.GetHistoryTotalItemCount() or XBiancaTheatreManager.GetHistoryItemObtainRecords(quality)
|
||
end
|
||
return curProcess, allProcess
|
||
end
|
||
|
||
------------------进度数据相关 end---------------------
|
||
|
||
|
||
------------------通过的事件步骤相关 begin-------------------
|
||
|
||
function XBiancaTheatreManager.UpdatePassedEventRecord(passedEventRecord)
|
||
PassedEventRecord = passedEventRecord or {}
|
||
end
|
||
|
||
-- 添加事件
|
||
function XBiancaTheatreManager.AddPassedEventRecord(eventId, stepId)
|
||
if not PassedEventRecord[eventId] then
|
||
PassedEventRecord[eventId] = {}
|
||
end
|
||
for _, eventStepId in ipairs(PassedEventRecord[eventId]) do
|
||
if stepId == eventStepId then
|
||
return
|
||
end
|
||
end
|
||
table.insert(PassedEventRecord[eventId], stepId)
|
||
end
|
||
|
||
-- 检查是否存在事件
|
||
function XBiancaTheatreManager.CheckPassedEventRecord(eventStepId)
|
||
for _, eventStepIds in pairs(PassedEventRecord) do
|
||
for _, stepId in ipairs(eventStepIds) do
|
||
if stepId == eventStepId then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
------------------通过的事件步骤相关 end---------------------
|
||
|
||
|
||
------------------冒险通过战斗节点相关 end---------------------
|
||
|
||
function XBiancaTheatreManager.UpdateGamePassNodeCount(gamePassNodeCount)
|
||
GamePassNodeCount = gamePassNodeCount or 0
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetGamePassNodeCount()
|
||
return GamePassNodeCount
|
||
end
|
||
|
||
------------------冒险通过战斗节点相关 begin-------------------
|
||
|
||
|
||
------------------自动播放剧情 begin-------------------
|
||
local GetLocalSavedKey = function(key)
|
||
return string.format("%s%d", key, XPlayer.Id)
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckAutoPlayStory()
|
||
local localSavedKey = GetLocalSavedKey("BiancaTheatreAutoStory")
|
||
local storyId = XBiancaTheatreConfigs.GetFirstStoryId()
|
||
if XSaveTool.GetData(localSavedKey) or not storyId then
|
||
XLuaUiManager.OpenWithCallback("UiBiancaTheatreMain", function ()
|
||
XBiancaTheatreManager.CheckVersionUpdateOldPlaySettleTip()
|
||
end)
|
||
return
|
||
end
|
||
|
||
XDataCenter.MovieManager.PlayMovie(storyId, function()
|
||
XLuaUiManager.OpenWithCallback("UiBiancaTheatreMain", function ()
|
||
XBiancaTheatreManager.CheckVersionUpdateOldPlaySettleTip()
|
||
end)
|
||
end, nil, nil, false)
|
||
XSaveTool.SaveData(localSavedKey, true)
|
||
end
|
||
|
||
function XBiancaTheatreManager.UpdateNewStage(newStage)
|
||
NewStage = newStage
|
||
end
|
||
|
||
-- 检查是否有版本更新旧冒险数据自动结算
|
||
function XBiancaTheatreManager.CheckVersionUpdateOldPlaySettleTip()
|
||
if NewStage then
|
||
XDataCenter.BiancaTheatreManager.RequestNewVersionAutoSettleTip(function ()
|
||
local tipTxt = XBiancaTheatreConfigs.GetVersionUpdateOldPlaySettleTip()
|
||
if not string.IsNilOrEmpty(tipTxt) then
|
||
XUiManager.TipError(tipTxt)
|
||
end
|
||
end)
|
||
XDataCenter.BiancaTheatreManager.UpdateNewStage(false)
|
||
end
|
||
end
|
||
------------------自动播放剧情 end---------------------
|
||
|
||
|
||
------------------自动弹窗 begin-----------------------
|
||
|
||
local TipOpenListIndex = 1
|
||
local TipOpenList = nil
|
||
local IsTipOpening = false
|
||
-- 添加提示弹窗数据
|
||
--【注】弹窗Ui第一个参数需要是方法类型
|
||
function XBiancaTheatreManager.AddTipOpenData(uiTipName, closeCb, openData1, openData2, openData3, openData4, openData5)
|
||
-- if IsTipOpening then
|
||
-- XLog.Error("It is not allowed to add tipOpenData when tip is Opening, please check the code!")
|
||
-- return
|
||
-- end
|
||
if string.IsNilOrEmpty(uiTipName) then
|
||
XLog.Error("Error:XBiancaTheatreManager.AddTipOpenData, uiTipName is null!")
|
||
return
|
||
end
|
||
if closeCb and type(closeCb) ~= "function" then
|
||
XLog.Error("Error:XBiancaTheatreManager.AddTipOpenData, closeCb is not a function!")
|
||
return
|
||
end
|
||
local data = {
|
||
UiName = uiTipName,
|
||
CloseCb = closeCb,
|
||
OpenData1 = openData1,
|
||
OpenData2 = openData2,
|
||
OpenData3 = openData3,
|
||
OpenData4 = openData4,
|
||
OpenData5 = openData5,
|
||
}
|
||
if XTool.IsTableEmpty(TipOpenList) then
|
||
TipOpenList = {}
|
||
end
|
||
table.insert(TipOpenList, data)
|
||
-- 排序优先级(小而优先,弹窗中不进行排序)
|
||
if not IsTipOpening then
|
||
table.sort(TipOpenList, function(itemDataA, itemDataB)
|
||
local orderA = XBiancaTheatreConfigs.TipOrder[itemDataA.UiName]
|
||
local orderB = XBiancaTheatreConfigs.TipOrder[itemDataB.UiName]
|
||
if not orderA then orderA = 0 end
|
||
if not orderB then orderB = 0 end
|
||
return orderA < orderB
|
||
end)
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetTipOpenList()
|
||
return TipOpenList
|
||
end
|
||
|
||
function XBiancaTheatreManager.ClearTipOpenList()
|
||
TipOpenList = nil
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetTipOpenList(tipOpenList)
|
||
TipOpenList = tipOpenList
|
||
TipOpenListIndex = 1
|
||
IsTipOpening = false
|
||
end
|
||
|
||
-- 弹窗执行
|
||
function XBiancaTheatreManager.CheckTipOpenList(cb, isCheckCb)
|
||
if IsTipOpening and not isCheckCb then
|
||
return
|
||
end
|
||
if not XTool.IsTableEmpty(TipOpenList) then
|
||
local tipOpenData = TipOpenList[TipOpenListIndex]
|
||
if not XTool.IsTableEmpty(tipOpenData) then
|
||
IsTipOpening = true
|
||
TipOpenListIndex = TipOpenListIndex + 1
|
||
XLuaUiManager.Open(tipOpenData.UiName, function ()
|
||
if tipOpenData.CloseCb then
|
||
tipOpenData.CloseCb()
|
||
end
|
||
if TipOpenList and XTool.IsTableEmpty(TipOpenList[TipOpenListIndex]) then
|
||
if cb then cb() end
|
||
end
|
||
XBiancaTheatreManager.CheckTipOpenList(cb, true)
|
||
end, tipOpenData.OpenData1, tipOpenData.OpenData2, tipOpenData.OpenData3, tipOpenData.OpenData4, tipOpenData.OpenData5)
|
||
else
|
||
XBiancaTheatreManager.SetTipOpenList(nil)
|
||
end
|
||
else
|
||
if cb then cb() end
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.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 XBiancaTheatreManager.CheckUnlockOwnRole()
|
||
local adventureManager = XBiancaTheatreManager.GetCurrentAdventureManager()
|
||
if not adventureManager then
|
||
return
|
||
end
|
||
|
||
local useOwnCharacterFa = XBiancaTheatreConfigs.GetTheatreConfig("UseOwnCharacterFa").Value
|
||
useOwnCharacterFa = useOwnCharacterFa and tonumber(useOwnCharacterFa)
|
||
if not useOwnCharacterFa then
|
||
return
|
||
end
|
||
|
||
local power = adventureManager:GeRoleAveragePower()
|
||
if power >= useOwnCharacterFa and XBiancaTheatreManager.CheckIsCookie(TheatreUnlockOwnRoleAutoWindowKey) then
|
||
XLuaUiManager.Open("UiTheatreUnlockTips", {ShowTipsPanel = XBiancaTheatreConfigs.UplockTipsPanel.OwnRole})
|
||
end
|
||
end
|
||
|
||
function XBiancaTheatreManager.RemoveOwnRoleCookie()
|
||
XSaveTool.RemoveData(TheatreUnlockOwnRoleAutoWindowKey)
|
||
end
|
||
------------------自动弹窗 end-----------------------
|
||
|
||
|
||
------------------红点相关 begin-----------------------
|
||
--检查是否有任务奖励可领取
|
||
function XBiancaTheatreManager.CheckTaskCanReward()
|
||
local theatreTask = XBiancaTheatreConfigs.GetBiancaTheatreTask()
|
||
for id in pairs(theatreTask) do
|
||
if XBiancaTheatreManager.CheckTaskCanRewardByTheatreTaskId(id) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckAchievementTaskCanAchieved()
|
||
if not XDataCenter.BiancaTheatreManager.CheckAchievementIsOpen() then
|
||
return false
|
||
end
|
||
|
||
local achievementIdList = XBiancaTheatreConfigs.GetAchievementIdList()
|
||
if XTool.IsTableEmpty(achievementIdList) then
|
||
return false
|
||
end
|
||
for _, achievementId in ipairs(achievementIdList) do
|
||
for _, taskId in pairs(XBiancaTheatreConfigs.GetAchievementTaskIds(achievementId)) do
|
||
if XDataCenter.TaskManager.CheckTaskAchieved(taskId) then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckAchievementTaskIsFinish()
|
||
if not XDataCenter.BiancaTheatreManager.CheckAchievementIsOpen() then
|
||
return false
|
||
end
|
||
|
||
local achievementIdList = XBiancaTheatreConfigs.GetAchievementIdList()
|
||
if XTool.IsTableEmpty(achievementIdList) then
|
||
return true
|
||
end
|
||
local achievementFinishCount = 0
|
||
for _, achievementId in ipairs(achievementIdList) do
|
||
for _, taskId in pairs(XBiancaTheatreConfigs.GetAchievementTaskIds(achievementId)) do
|
||
if XDataCenter.TaskManager.CheckTaskFinished(taskId) then
|
||
achievementFinishCount = achievementFinishCount + 1
|
||
end
|
||
end
|
||
end
|
||
local needCounts = XBiancaTheatreManager.GetAchievementNeedCounts()
|
||
for _, needCount in ipairs(needCounts) do
|
||
if needCount > achievementFinishCount then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckTaskCanRewardByTheatreTaskId(theatreTaskId)
|
||
local taskIdList = XBiancaTheatreConfigs.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 XBiancaTheatreManager.CheckTaskStartTimeOpen()
|
||
local taskIdList = XBiancaTheatreConfigs.GetTheatreTaskHaveStartTimeIdList()
|
||
for _, taskId in ipairs(taskIdList) do
|
||
if XBiancaTheatreManager.CheckTaskStartTimeOpenByTaskId(taskId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XBiancaTheatreManager.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 XBiancaTheatreManager.CheckIsCookie(_TaskStartTimeOpenCookieKey .. taskId, true) then
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckTaskStartTimeOpenByTheatreTaskId(theatreTaskId)
|
||
local taskIdList = XBiancaTheatreConfigs.GetTaskIdList(theatreTaskId)
|
||
for _, taskId in ipairs(taskIdList) do
|
||
if XBiancaTheatreManager.CheckTaskStartTimeOpenByTaskId(taskId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XBiancaTheatreManager.SaveTaskStartTimeOpenCookie(theatreTaskId)
|
||
local taskIdList = XBiancaTheatreConfigs.GetTaskIdList(theatreTaskId)
|
||
for _, taskId in ipairs(taskIdList) do
|
||
if XBiancaTheatreManager.CheckTaskStartTimeOpenByTaskId(taskId) then
|
||
XSaveTool.SaveData(GetLocalSavedKey(_TaskStartTimeOpenCookieKey .. taskId), true)
|
||
end
|
||
end
|
||
end
|
||
|
||
--检查是否显示图鉴红点
|
||
function XBiancaTheatreManager.CheckFieldGuideRedPoint()
|
||
for itemId, _ in pairs(UnlockItemIdDic) do
|
||
if XBiancaTheatreManager.CheckFieldGuideGridRedPoint(itemId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- 图鉴单个道具红点
|
||
function XBiancaTheatreManager.CheckFieldGuideGridRedPoint(itemId)
|
||
-- 默认解锁无需红点
|
||
if not XTool.IsNumberValid(XBiancaTheatreConfigs.GetItemUnlockConditionId(itemId)) then
|
||
return false
|
||
end
|
||
|
||
if not XBiancaTheatreManager.GetFieldGuideGridRedPointIsClear(itemId) and XBiancaTheatreManager.IsUnlockItem(itemId) then
|
||
return true
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
-- 道具红点缓存键值
|
||
function XBiancaTheatreManager.GetFieldGuideGridRedPointKey(itemId)
|
||
return string.format("BiancaTheatreData_%s_%s_ItemRedDotIsClear", XPlayer.Id, itemId)
|
||
end
|
||
|
||
-- 缓存道具红点点击状态
|
||
function XBiancaTheatreManager.SetFieldGuideGridRedPointClear(itemId)
|
||
-- 已解锁未点击、未解锁状态、默认解锁则无需点击
|
||
if XBiancaTheatreManager.GetFieldGuideGridRedPointIsClear(itemId) or not XBiancaTheatreManager.IsUnlockItem(itemId) then
|
||
return
|
||
end
|
||
XSaveTool.SaveData(XBiancaTheatreManager.GetFieldGuideGridRedPointKey(itemId), true)
|
||
end
|
||
|
||
-- 读取道具红点点击状态缓存
|
||
function XBiancaTheatreManager.GetFieldGuideGridRedPointIsClear(itemId)
|
||
return XSaveTool.GetData(XBiancaTheatreManager.GetFieldGuideGridRedPointKey(itemId))
|
||
end
|
||
|
||
-- 外循环强化解锁缓存键值
|
||
function XBiancaTheatreManager.GetStrengthenUnlockCacheKey()
|
||
return string.format("BiancaTheatreData_%s_StrengthenUnlock", XPlayer.Id)
|
||
end
|
||
|
||
-- 读取外循环强化解锁状态缓存
|
||
function XBiancaTheatreManager.GetStrengthenUnlockCache()
|
||
return XSaveTool.GetData(XBiancaTheatreManager.GetStrengthenUnlockCacheKey())
|
||
end
|
||
|
||
-- 保存外循环强化解锁状态缓存
|
||
function XBiancaTheatreManager.SetStrengthenUnlockCache()
|
||
return XSaveTool.SaveData(XBiancaTheatreManager.GetStrengthenUnlockCacheKey(), true)
|
||
end
|
||
|
||
-- 读取外循环强化解锁提示缓存
|
||
function XBiancaTheatreManager.GetStrengthenUnlockTipsCache()
|
||
local key = string.format("BiancaTheatreData_%s_StrengthenUnlockTip", XPlayer.Id)
|
||
return XSaveTool.GetData(key)
|
||
end
|
||
|
||
-- 保存外循环强化解锁提示缓存
|
||
function XBiancaTheatreManager.SetStrengthenUnlockTipsCache()
|
||
local key = string.format("BiancaTheatreData_%s_StrengthenUnlockTip", XPlayer.Id)
|
||
return XSaveTool.SaveData(key, true)
|
||
end
|
||
|
||
-- 是否有新等级
|
||
function XBiancaTheatreManager.GetIsReadNewRewardLevel()
|
||
local lastLevelKey = string.format("BiancaTheatreData_%s_LastLevelCount", XPlayer.Id)
|
||
local lastLevelCount = XSaveTool.GetData(lastLevelKey) or 0
|
||
return XBiancaTheatreConfigs.GetMaxRewardLevel() > lastLevelCount
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetIsReadNewRewardLevel()
|
||
local lastLevelKey = string.format("BiancaTheatreData_%s_LastLevelCount", XPlayer.Id)
|
||
return XSaveTool.SaveData(lastLevelKey, XBiancaTheatreConfigs.GetMaxRewardLevel())
|
||
end
|
||
------------------红点相关 end-------------------------
|
||
|
||
|
||
------------------羁绊相关 begin-----------------------
|
||
function XBiancaTheatreManager.GetComboList()
|
||
return ComboList
|
||
end
|
||
------------------羁绊相关 end-------------------------
|
||
|
||
|
||
------------------结算相关 begin-----------------------
|
||
---@type XBiancaTheatreAdventureEnd
|
||
local CatchAdventureEnd --缓存的结局类
|
||
local IsAutoOpenSettleWin = false --是否收到通知自动打开结算界面
|
||
local IsInMovie = false --是否在结局剧情
|
||
|
||
function XBiancaTheatreManager.SetAdventureEnd(settleData)
|
||
CatchAdventureEnd = XAdventureEnd.New(settleData.EndId)
|
||
CatchAdventureEnd:InitWithServerData(settleData)
|
||
XBiancaTheatreManager.UpdatePassCharacterIdDict(settleData.PassChapterIds)
|
||
XBiancaTheatreManager.UpdateUnlockDifficultyId(settleData.UnlockDifficultyId)
|
||
-- 更新道具解锁数据
|
||
XBiancaTheatreManager.UpdateUnlockItemId(settleData.UnlockItemId)
|
||
XBiancaTheatreManager.UpdateUnlockTeamId(settleData.UnlockTeamId)
|
||
XBiancaTheatreManager.UpdateTeamRecords(settleData.TeamRecords)
|
||
-- 更新历史数据:用以调查团进度
|
||
XBiancaTheatreManager.UpdateHistoryTotalItemCount(settleData.HistoryTotalItemCount)
|
||
XBiancaTheatreManager.UpdateHistoryTotalPassFightNodeCount(settleData.HistoryTotalPassFightNodeCount)
|
||
XBiancaTheatreManager.UpdateHistoryItemObtainRecords(settleData.HistoryItemObtainRecords)
|
||
end
|
||
|
||
function XBiancaTheatreManager.CheckOpenSettleWin()
|
||
if not CatchAdventureEnd then
|
||
return false
|
||
end
|
||
|
||
XBiancaTheatreManager.RemoveStepView()
|
||
local adventureEnd = XTool.Clone(CatchAdventureEnd)
|
||
local storyId = adventureEnd:GetStoryId()
|
||
if XTool.IsNumberValid(storyId) then
|
||
--结局剧情
|
||
XDataCenter.MovieManager.PlayMovie(storyId, function()
|
||
XBiancaTheatreManager.RemoveBlackView()
|
||
XLuaUiManager.Open("UiBiancaTheatreEndLoading", adventureEnd)
|
||
end, nil, nil, false)
|
||
XBiancaTheatreManager.SetInMovieState(true)
|
||
else
|
||
XBiancaTheatreManager.RemoveBlackView()
|
||
XLuaUiManager.Open("UiBiancaTheatreEndLoading", adventureEnd)
|
||
end
|
||
CatchAdventureEnd = nil
|
||
return true
|
||
end
|
||
|
||
-- 主界面判断是否剧情结算完用
|
||
function XBiancaTheatreManager.CheckIsInMovie()
|
||
local state = IsInMovie
|
||
if state then
|
||
-- 能进主界面判断代表结束剧情,直接设为false
|
||
XBiancaTheatreManager.SetInMovieState(false)
|
||
end
|
||
return state
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetInMovieState(state)
|
||
IsInMovie = state
|
||
end
|
||
|
||
--结算初始化数据
|
||
function XBiancaTheatreManager.SettleInitData()
|
||
-- 还原滤镜
|
||
XBiancaTheatreManager.ResetAudioFilter()
|
||
-- 重置队伍人数限制
|
||
XBiancaTheatreManager.UpdateTeamCountEffect(0)
|
||
-- 更新灵视开启
|
||
XBiancaTheatreManager.UpdateIsOpenVision(0)
|
||
-- 清空已通过的事件
|
||
XBiancaTheatreManager.UpdatePassedEventRecord()
|
||
-- 清空局内通过战斗节点
|
||
XBiancaTheatreManager.UpdateGamePassNodeCount(0)
|
||
-- 更新全局通过的章节和事件数据
|
||
XBiancaTheatreManager.UpdateCurChapterId(0)
|
||
XBiancaTheatreManager.UpdateDifficultyId(0)
|
||
-- 清除队伍数据
|
||
XBiancaTheatreManager.GetCurrentAdventureManager():ClearTeam()
|
||
end
|
||
|
||
function XBiancaTheatreManager.SetIsAutoOpenSettleWin(isAcitve)
|
||
IsAutoOpenSettleWin = isAcitve
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetIsAutoOpenSettleWin()
|
||
return IsAutoOpenSettleWin
|
||
end
|
||
|
||
function XBiancaTheatreManager.GetIsCatchAdventureEnd()
|
||
return CatchAdventureEnd ~= nil
|
||
end
|
||
------------------结算相关 end-----------------------
|
||
|
||
|
||
------------------协议 begin--------------------
|
||
--选择分队
|
||
function XBiancaTheatreManager.RequestSelectTeam(teamId, callback)
|
||
local requestBody = {
|
||
TeamId = teamId, --肉鸽分队Id
|
||
}
|
||
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreSelectTeamRequest", requestBody, function(res)
|
||
XBiancaTheatreManager.GetCurrentAdventureManager():UpdateCurTeamId(requestBody.TeamId)
|
||
if callback then callback() end
|
||
end)
|
||
end
|
||
|
||
--强化技能
|
||
function XBiancaTheatreManager.RequestStrengthen(id, callback)
|
||
local requestBody = {
|
||
Id = id,
|
||
}
|
||
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreStrengthenRequest", requestBody, function(res)
|
||
StrengthenDbs[id] = true
|
||
XEventManager.DispatchEvent(XEventId.EVENT_BIANCA_THEATRE_STRENGTHEN_ACTIVE, id)
|
||
|
||
local groupId = XBiancaTheatreConfigs.GetStrengthenGroupId(id)
|
||
if XBiancaTheatreManager.IsStrengthenGroupAllBuy(groupId) then
|
||
XEventManager.DispatchEvent(XEventId.EVENT_BIANCA_THEATRE_GROUP_STRENGTHEN_ACTIVE, groupId)
|
||
end
|
||
|
||
if callback then callback() end
|
||
end)
|
||
end
|
||
|
||
--单独领取
|
||
function XBiancaTheatreManager.RequestGetReward(id, callback)
|
||
--local isAdventure = XDataCenter.BiancaTheatreManager.CheckHasAdventure()
|
||
--if isAdventure then
|
||
-- XUiManager.TipMsg(XBiancaTheatreConfigs.GetRewardTips(2))
|
||
-- return
|
||
--end
|
||
local requestBody = {
|
||
Id = id, --领奖id
|
||
}
|
||
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreGetRewardRequest", requestBody, function(res)
|
||
XLuaUiManager.Open("UiBiancaTheatreTipReward", nil, res.RewardGoodsList)
|
||
GetRewardIds[id] = true
|
||
|
||
if callback then callback() end
|
||
end)
|
||
end
|
||
|
||
--一键领取
|
||
function XBiancaTheatreManager.RequestGetAllReward(callback)
|
||
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreGetAllRewardRequest", nil, function(res)
|
||
XLuaUiManager.Open("UiBiancaTheatreTipReward", nil, res.RewardGoodsList)
|
||
XBiancaTheatreManager.UpdateGetRewardIds(res.GetRewardIds)
|
||
|
||
if callback then callback() end
|
||
end)
|
||
end
|
||
|
||
-- 领取成就奖励
|
||
function XBiancaTheatreManager.RequestAchievementReward(needCountId, callback)
|
||
local requestBody = {
|
||
NeedCountId = needCountId, --成就完成数id
|
||
}
|
||
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreGetAchievementRewardRequest", requestBody, function(res)
|
||
if table.nums(res.RewardGoodsList) > 0 then
|
||
XLuaUiManager.Open("UiBiancaTheatreTipReward", callback, res.RewardGoodsList)
|
||
XBiancaTheatreManager.SetAchievementGetRecord(needCountId)
|
||
else
|
||
if callback then callback() end
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 检查是否有版本更新旧冒险数据自动结算
|
||
function XBiancaTheatreManager.RequestNewVersionAutoSettleTip(callback)
|
||
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreNewStageRequest", nil, function(res)
|
||
XDataCenter.BiancaTheatreManager.UpdateNewStage(false)
|
||
if callback then callback() end
|
||
end)
|
||
end
|
||
------------------协议 end----------------------
|
||
|
||
|
||
------------------副本入口扩展 start-------------------------
|
||
function XBiancaTheatreManager:ExOpenMainUi()
|
||
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.BiancaTheatre) then
|
||
XBiancaTheatreManager.CheckAutoPlayStory()
|
||
end
|
||
end
|
||
|
||
-- 检查是否展示红点
|
||
function XBiancaTheatreManager:ExCheckIsShowRedPoint()
|
||
if not XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.BiancaTheatre) then
|
||
return false
|
||
end
|
||
return XBiancaTheatreManager.IsHaveReward() or XBiancaTheatreManager.GetIsReadNewRewardLevel()
|
||
end
|
||
|
||
function XBiancaTheatreManager:ExGetProgressTip()
|
||
local curLevel = XBiancaTheatreManager.GetCurRewardLevel()
|
||
local maxLevel = curLevel
|
||
local configs = XBiancaTheatreConfigs.GetBiancaTheatreLevelReward()
|
||
for id, _ in pairs(configs or {}) do
|
||
maxLevel = math.max(id, maxLevel)
|
||
end
|
||
local desc = XBiancaTheatreConfigs.GetTheatreClientConfig("BannerProgress").Values[1]
|
||
return string.format(desc, curLevel, maxLevel)
|
||
end
|
||
|
||
function XBiancaTheatreManager:ExCheckInTime()
|
||
local config = XBiancaTheatreConfigs.GetBiancaTheatreActivity()
|
||
for i, v in pairs(config) do
|
||
if XFunctionManager.CheckInTimeByTimeId(v.TimeId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XBiancaTheatreManager:ExCheckIsFinished(cb)
|
||
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.BiancaTheatre, nil, true) then
|
||
if cb then cb(false) end
|
||
return false
|
||
end
|
||
|
||
local curLevel = XBiancaTheatreManager.GetCurRewardLevel()
|
||
local maxLevel = XBiancaTheatreConfigs.GetMaxRewardLevel()
|
||
local isGetAllLvReward = curLevel == maxLevel and XTool.IsTableEmpty(XBiancaTheatreManager.GetCanReceiveLevelRewardIds())
|
||
|
||
--等级奖励全领取 & 成就奖励全领取
|
||
if isGetAllLvReward and XBiancaTheatreManager.CheckAchievementTaskIsFinish() then
|
||
self.IsClear = true
|
||
if cb then cb(true) end
|
||
return true
|
||
end
|
||
self.IsClear = false
|
||
if cb then cb(false) end
|
||
return false
|
||
end
|
||
|
||
------------------副本入口扩展 end-------------------------
|
||
|
||
XBiancaTheatreManager.InitAudioFilter()
|
||
|
||
return XBiancaTheatreManager
|
||
end
|
||
|
||
--登陆下发
|
||
XRpc.NotifyBiancaTheatreActivityData = function(data)
|
||
XDataCenter.BiancaTheatreManager.InitWithServerData(data)
|
||
end
|
||
|
||
-- 新的步骤
|
||
XRpc.NotifyBiancaTheatreAddStep = function(data)
|
||
local adventureManager = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager()
|
||
local currentChapter = adventureManager:GetCurrentChapter(false)
|
||
local chapterId = data.ChapterId
|
||
local isNewChapter = currentChapter and currentChapter:GetCurrentChapterId() ~= chapterId
|
||
|
||
if currentChapter == nil or isNewChapter then
|
||
currentChapter = adventureManager:CreatreChapterById(chapterId)
|
||
end
|
||
|
||
if #currentChapter:GetCurrentNodes() > 0
|
||
and not currentChapter:CheckHasMovieNode()
|
||
and data.Step.StepType == XBiancaTheatreConfigs.XStepType.Node then
|
||
currentChapter:AddPassNodeCount(1)
|
||
end
|
||
if #currentChapter:GetCurrentNodes() > 0 then
|
||
for _, node in ipairs(currentChapter:GetCurrentNodes()) do
|
||
-- 选中且是事件节点
|
||
if node:GetIsSelected() and node.EventConfig then
|
||
XDataCenter.BiancaTheatreManager.AddPassedEventRecord(node.EventConfig.EventId, node.EventConfig.StepId)
|
||
end
|
||
end
|
||
end
|
||
|
||
currentChapter:AddStep(data.Step)
|
||
|
||
--步骤是招募角色或腐化,刷新角色字典
|
||
if data.Step.StepType == XBiancaTheatreConfigs.XStepType.RecruitCharacter or
|
||
data.Step.StepType == XBiancaTheatreConfigs.XStepType.DecayRecruitCharacter then
|
||
currentChapter:UpdateRecruitRoleDic()
|
||
end
|
||
|
||
XDataCenter.BiancaTheatreManager.CheckOpenView(nil, isNewChapter)
|
||
if isNewChapter then
|
||
XDataCenter.BiancaTheatreManager.SetIsAutoOpen(false)
|
||
end
|
||
end
|
||
|
||
--战斗结束,事件进行到下一步
|
||
XRpc.NotifyBiancaTheatreNodeNextStep = function(data)
|
||
if data.NextStepId <= 0 then -- 事件战斗结束后没有下一步了
|
||
return
|
||
end
|
||
|
||
local chapter = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager():GetCurrentChapter()
|
||
local curStep = chapter:GetCurStep()
|
||
local eventNode = chapter:GetEventNode(data.EventId)
|
||
if not eventNode then
|
||
XLog.Error("NotifyBiancaTheatreNodeNextStep找不到事件节点, data:", data, curStep)
|
||
return
|
||
end
|
||
eventNode:UpdateNextStepEvent(data.NextStepId, nil, curStep)
|
||
end
|
||
|
||
--获得物品,加入到已获得道具列表
|
||
XRpc.NotifyBiancaTheatreAddItem = function(data)
|
||
local adventureManager = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager()
|
||
if adventureManager then
|
||
for _, itemData in pairs(data.BiancaTheatreItems) do
|
||
adventureManager:UpdateItemData(itemData)
|
||
end
|
||
end
|
||
end
|
||
|
||
--通知结算,可能会登录下发
|
||
XRpc.NotifyBiancaTheatreAdventureSettle = function(data)
|
||
local manager = XDataCenter.BiancaTheatreManager
|
||
manager.SettleInitData()
|
||
manager.SetAdventureEnd(data.SettleData)
|
||
manager.ResetTeamCountEffect()
|
||
if XDataCenter.BiancaTheatreManager.GetIsAutoOpenSettleWin() then
|
||
manager.RemoveStepView()
|
||
manager.CheckOpenSettleWin()
|
||
end
|
||
end
|
||
|
||
XRpc.NotifyBiancaTheatreTotalExp = function(data)
|
||
XDataCenter.BiancaTheatreManager.UpdateTotalExp(data.TotalExp)
|
||
end
|
||
|
||
XRpc.NotifyBiancaTheatreAbnormalExit = function()
|
||
end
|
||
|
||
-- 灵视系统开启
|
||
XRpc.NotifyBiancaTheatreVisionCondition = function()
|
||
XDataCenter.BiancaTheatreManager.UpdateVisionSystemIsOpen()
|
||
end
|
||
|
||
-- 灵视变化(选择奖励、获得某些道具、腐化事件下发)
|
||
XRpc.NotifyBiancaTheatreVisionChange = function(data)
|
||
XDataCenter.BiancaTheatreManager.ChangeVision(data.VisionId)
|
||
end
|
||
|
||
-- 通知获得队伍人数改变效果(获得时效果时、登录下发)(中止冒险重置)
|
||
XRpc.NotifyBiancaTheatreFightTeamEffect = function(data)
|
||
XDataCenter.BiancaTheatreManager.UpdateTeamCountEffect(data.TeamCountEffect)
|
||
end
|
||
|
||
-- 通知成就解锁
|
||
XRpc.NotifyBiancaTheatreAchievementCondition = function()
|
||
XDataCenter.BiancaTheatreManager.UpdateAchievemenetContidion(true)
|
||
end
|
||
|
||
-- 通知战斗节点次数改变(结算,登陆,改变时下发)
|
||
XRpc.NotifyBiancaTheatreFightNodeCountChange = function(data)
|
||
XDataCenter.BiancaTheatreManager.UpdateGamePassNodeCount(data.FightNodeCount)
|
||
end |