758 lines
25 KiB
Lua
758 lines
25 KiB
Lua
|
local XAdventureChapter = require("XEntity/XBiancaTheatre/Adventure/XAdventureChapter")
|
|||
|
local XAdventureDifficulty = require("XEntity/XBiancaTheatre/Adventure/XAdventureDifficulty")
|
|||
|
local XAdventureMultiDeploy = require("XEntity/XBiancaTheatre/Adventure/Deploy/XAdventureMultiDeploy")
|
|||
|
local XTheatreItem = require("XEntity/XBiancaTheatre/Item/XTheatreItem")
|
|||
|
local XTheatreTeam = require("XEntity/XBiancaTheatre/XTheatreTeam")
|
|||
|
local XAdventureRole = require("XEntity/XBiancaTheatre/Adventure/XAdventureRole")
|
|||
|
local XAdventureEnd = require("XEntity/XBiancaTheatre/Adventure/XAdventureEnd")
|
|||
|
local XAdventureManager = XClass(nil, "XAdventureManager")
|
|||
|
|
|||
|
--当前冒险管理
|
|||
|
function XAdventureManager:Ctor()
|
|||
|
-- 当前难度数据 XAdventureDifficulty
|
|||
|
self.CurrentDifficulty = nil
|
|||
|
-- 当前章节数据 XAdventureChapter
|
|||
|
self.CurrentChapter = nil
|
|||
|
-- 当前可用的角色 XAdventureRole
|
|||
|
self.CurrentRoles = {}
|
|||
|
-- 多队伍编队管理
|
|||
|
self.AdventureMultiDeploy = XAdventureMultiDeploy.New()
|
|||
|
-- 单队伍数据 XTheatreTeam
|
|||
|
self.SingleTeam = nil
|
|||
|
-- 当前的获取的技能 XAdventureSkill
|
|||
|
self.CurrentSkills = nil
|
|||
|
-- 当前操作队列
|
|||
|
self.OperationQueue = XQueue.New()
|
|||
|
-- 是否能够使用自己的角色
|
|||
|
self.CanUseLocalRole = true
|
|||
|
-- 当前获取的好感度
|
|||
|
self.CurrentFavorCoin = 0
|
|||
|
-- 当前获得的装修点
|
|||
|
self.CurrentDecorationCoin = 0
|
|||
|
-- 当前分队ID
|
|||
|
self.CurTeamId = 0
|
|||
|
-- 本局拥有道具(key:BiancaTheatreItem表Id)
|
|||
|
self.Items = {}
|
|||
|
-- 本局拥有道具列表
|
|||
|
self.ItemList = {}
|
|||
|
-- 当前选择的招募券Id
|
|||
|
self.SelectTickId = 0
|
|||
|
-- 灵视值
|
|||
|
self.VisionValue = 0
|
|||
|
self.OldVisionValue = self.VisionValue
|
|||
|
|
|||
|
-- 注册更新灵视值
|
|||
|
XDataCenter.ItemManager.AddCountUpdateListener(XBiancaTheatreConfigs.VisionItem, handler(self, self.UpdateVisionValue), self)
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:InitWithServerData(data)
|
|||
|
local chapaterData = data.CurChapterDb
|
|||
|
-- 更新当前章节数据
|
|||
|
self.CurrentChapter = XAdventureChapter.New(chapaterData.ChapterId)
|
|||
|
self.CurrentChapter:InitWithServerData({
|
|||
|
Steps = chapaterData.Steps, --当前步骤数据
|
|||
|
PassFightCount = chapaterData.PassFightCount, -- 完成战斗节点数
|
|||
|
PassChapter = chapaterData.PassChapter, -- 当前章节是否已通关
|
|||
|
PassNodeCount = chapaterData.PassNodeCount -- 当前已通过的节点数
|
|||
|
})
|
|||
|
-- 更新当前难度
|
|||
|
self.CurrentDifficulty = XAdventureDifficulty.New(data.DifficultyId)
|
|||
|
-- 更到当前选择的分队
|
|||
|
self:UpdateCurTeamId(data.CurTeamId)
|
|||
|
-- 更新当前可用的角色
|
|||
|
for _, characterData in ipairs(data.Characters) do
|
|||
|
self:AddRoleById(characterData.CharacterId, nil, nil, XTool.IsNumberValid(characterData.IsDecay))
|
|||
|
self:UpdateRoleLevel(characterData.CharacterId, characterData.Level)
|
|||
|
end
|
|||
|
-- 更新单队伍数据
|
|||
|
self:UpdateTeamByServerData(self:GetSingleTeam(), data.SingleTeamData)
|
|||
|
-- 更新本局拥有道具
|
|||
|
self.Items = {}
|
|||
|
self.ItemList = {}
|
|||
|
for _, itemData in pairs(data.Items) do
|
|||
|
self:UpdateItemData(itemData)
|
|||
|
end
|
|||
|
-- 更新灵视数据
|
|||
|
self:UpdateVisionValue()
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateCurTeamId(teamId)
|
|||
|
self.CurTeamId = teamId
|
|||
|
end
|
|||
|
|
|||
|
-- 更新本局选择的招募券Id
|
|||
|
function XAdventureManager:UpdateSelectTickId(tickId)
|
|||
|
self.SelectTickId = tickId
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetSelectTickId()
|
|||
|
return self.SelectTickId
|
|||
|
end
|
|||
|
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
-- 秘藏品相关
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
-- 更新本局拥有道具
|
|||
|
function XAdventureManager:UpdateItemData(itemData)
|
|||
|
local item = self.Items[itemData.ItemId]
|
|||
|
if not item then
|
|||
|
item = XTheatreItem.New(itemData.Uid)
|
|||
|
self.Items[itemData.ItemId] = item
|
|||
|
end
|
|||
|
item:UpdateData(itemData.ItemId)
|
|||
|
item:AddCount()
|
|||
|
table.insert(self.ItemList, 1, item)
|
|||
|
end
|
|||
|
|
|||
|
-- 移除本局拥有道具
|
|||
|
function XAdventureManager:RemoveItemData(itemId)
|
|||
|
local item = self.Items[itemId]
|
|||
|
if item then
|
|||
|
item:RemoveCount()
|
|||
|
if item:GetItemCount() <= 0 then
|
|||
|
self.Items[itemId] = nil
|
|||
|
end
|
|||
|
for i, theatreItem in ipairs(self.ItemList) do
|
|||
|
if theatreItem:GetItemId() == itemId then
|
|||
|
table.remove(self.ItemList, i)
|
|||
|
return
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 获得本局拥有道具列表
|
|||
|
function XAdventureManager:GetItemList()
|
|||
|
return self.ItemList
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:IsHaveTheatreItem(theatreItemId)
|
|||
|
return self.Items[theatreItemId]
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetTheatreItemCount(theatreItemId)
|
|||
|
local item = self:IsHaveTheatreItem(theatreItemId)
|
|||
|
return item and item:GetItemCount() or 0
|
|||
|
end
|
|||
|
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
-- 灵视相关
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
function XAdventureManager:GetVisionValue()
|
|||
|
return self.VisionValue
|
|||
|
end
|
|||
|
|
|||
|
---灵视变更前的值(结算用上)
|
|||
|
---@return number|nil
|
|||
|
function XAdventureManager:GetOldVisionValue()
|
|||
|
return self.OldVisionValue
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateVisionValue()
|
|||
|
self.OldVisionValue = self.VisionValue
|
|||
|
self.VisionValue = XDataCenter.ItemManager.GetCount(XBiancaTheatreConfigs.VisionItem)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_BIANCA_THEATRE_VISION_CHANGE)
|
|||
|
end
|
|||
|
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
function XAdventureManager:UpdateTeamByServerData(team, data)
|
|||
|
team:Clear()
|
|||
|
if data == nil then return end
|
|||
|
team:UpdateCaptainPos(data.CaptainPos)
|
|||
|
team:UpdateFirstFightPos(data.FirstFightPos)
|
|||
|
-- 本地角色处理
|
|||
|
for pos, id in ipairs(data.CardIds) do
|
|||
|
if id > 0 then
|
|||
|
team:UpdateEntityTeamPos(id, pos, true)
|
|||
|
end
|
|||
|
end
|
|||
|
-- 机器人角色处理
|
|||
|
for pos, id in ipairs(data.RobotIds) do
|
|||
|
if id > 0 then
|
|||
|
team:UpdateEntityTeamPos(id, pos, true)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateUseOwnCharacter(value)
|
|||
|
self.CanUseLocalRole = value == 1
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateCurrentFavorCoin(value)
|
|||
|
self.CurrentFavorCoin = value
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateCurrentDecorationCoin(value)
|
|||
|
self.CurrentDecorationCoin = value
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCurrentFavorCoin()
|
|||
|
return self.CurrentFavorCoin
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCurrentDecorationCoin()
|
|||
|
return self.CurrentDecorationCoin
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:Release()
|
|||
|
self:ClearTeam()
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:ClearTeam()
|
|||
|
if self.SingleTeam then
|
|||
|
self.SingleTeam:Clear()
|
|||
|
self.SingleTeam = nil
|
|||
|
end
|
|||
|
self.AdventureMultiDeploy:ClearTeam()
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:AddNextOperationData(data, isFront)
|
|||
|
if isFront then
|
|||
|
self.OperationQueue:EnqueueFront(data)
|
|||
|
else
|
|||
|
self.OperationQueue:Enqueue(data)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:ShowNextOperation(callback)
|
|||
|
if self.OperationQueue:IsEmpty() then
|
|||
|
if callback then callback() end
|
|||
|
return
|
|||
|
end
|
|||
|
local data = self.OperationQueue:Dequeue()
|
|||
|
local chapter = self:GetCurrentChapter()
|
|||
|
if data.OperationQueueType == XBiancaTheatreConfigs.OperationQueueType.NodeReward then
|
|||
|
-- 升级
|
|||
|
if data.RewardType == XBiancaTheatreConfigs.AdventureRewardType.LevelUp then
|
|||
|
XLuaUiManager.Open("UiTheatreTeamUp", data.LastLevel, data.LastAveragePower
|
|||
|
, function() self:ShowNextOperation(callback) end)
|
|||
|
-- 装修点
|
|||
|
elseif data.RewardType == XBiancaTheatreConfigs.AdventureRewardType.Decoration then
|
|||
|
XUiManager.OpenUiObtain({{
|
|||
|
RewardType = XRewardManager.XRewardType.Item,
|
|||
|
TemplateId = XBiancaTheatreConfigs.TheatreDecorationCoin,
|
|||
|
Count = data.DecorationPoint
|
|||
|
}}, nil, function() self:ShowNextOperation(callback) end)
|
|||
|
-- 好感度
|
|||
|
elseif data.RewardType == XBiancaTheatreConfigs.AdventureRewardType.PowerFavor then
|
|||
|
XUiManager.OpenUiObtain({{
|
|||
|
RewardType = XRewardManager.XRewardType.Item,
|
|||
|
TemplateId = XBiancaTheatreConfigs.TheatreFavorCoin,
|
|||
|
Count = data.FavorPoint
|
|||
|
}}, nil, function() self:ShowNextOperation(callback) end)
|
|||
|
end
|
|||
|
elseif data.OperationQueueType == XBiancaTheatreConfigs.OperationQueueType.ChapterSettle then
|
|||
|
XScheduleManager.ScheduleOnce(function()
|
|||
|
XLuaUiManager.Remove("UiBiancaTheatrePlayMain")
|
|||
|
-- 进入下一个章节
|
|||
|
self:EnterChapter(data.LastChapteEndStoryId)
|
|||
|
end, 1)
|
|||
|
-- if callback then callback() end
|
|||
|
elseif data.OperationQueueType == XBiancaTheatreConfigs.OperationQueueType.AdventureSettle then
|
|||
|
XLuaUiManager.Remove("UiBiancaTheatreOutpost")
|
|||
|
XLuaUiManager.Remove("UiBiancaTheatrePlayMain")
|
|||
|
local adventureEnd = XAdventureEnd.New(data.SettleData.Ending)
|
|||
|
adventureEnd:InitWithServerData(data.SettleData)
|
|||
|
XLuaUiManager.Open("UiTheatreInfiniteSettleWin", adventureEnd, data.LastChapteEndStoryId)
|
|||
|
-- if callback then callback() end
|
|||
|
elseif data.OperationQueueType == XBiancaTheatreConfigs.OperationQueueType.BattleSettle then
|
|||
|
if table.nums(data.RewardGoodsList) > 0 then
|
|||
|
XLuaUiManager.Open("UiBiancaTheatreTipReward", function() self:ShowNextOperation(callback) end,
|
|||
|
data.RewardGoodsList, nil)
|
|||
|
else
|
|||
|
self:ShowNextOperation(callback)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCurrentChapter(autoCreatre)
|
|||
|
if autoCreatre == nil then autoCreatre = true end
|
|||
|
if self.CurrentChapter == nil and autoCreatre then
|
|||
|
self:UpdateNextChapter()
|
|||
|
end
|
|||
|
return self.CurrentChapter
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:CreatreChapterById(id)
|
|||
|
self.CurrentChapter = XAdventureChapter.New(id)
|
|||
|
return self.CurrentChapter
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateNextChapter()
|
|||
|
if self.CurrentChapter == nil then
|
|||
|
self.CurrentChapter = XAdventureChapter.New(self:GetDefaultChapterId())
|
|||
|
else
|
|||
|
local nextChapterId = self.CurrentChapter:GetId() + 1
|
|||
|
if XBiancaTheatreConfigs.GetBiancaTheatreChapter(nextChapterId) then
|
|||
|
self.CurrentChapter = XAdventureChapter.New(nextChapterId)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetDefaultChapterId()
|
|||
|
return 1
|
|||
|
end
|
|||
|
|
|||
|
-- 角色相关
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
-- 检查是否能够使用本地角色
|
|||
|
function XAdventureManager:CheckCanUseLocalRole()
|
|||
|
return self.CanUseLocalRole
|
|||
|
end
|
|||
|
|
|||
|
--获得已招募的角色数量
|
|||
|
function XAdventureManager:GetRolesCount()
|
|||
|
return #self:GetCurrentRoles()
|
|||
|
end
|
|||
|
|
|||
|
--获得已招募的角色总星数
|
|||
|
function XAdventureManager:GetRolesStarCount()
|
|||
|
local starCount = 0
|
|||
|
for i, role in ipairs(self.CurrentRoles) do
|
|||
|
starCount = starCount + role:GetLevel()
|
|||
|
end
|
|||
|
return starCount
|
|||
|
end
|
|||
|
|
|||
|
-- includeLocal : 是否包含本地角色
|
|||
|
function XAdventureManager:GetCurrentRoles(includeLocal)
|
|||
|
if includeLocal == nil then includeLocal = false end
|
|||
|
local result = {}
|
|||
|
for _, role in ipairs(self.CurrentRoles) do
|
|||
|
--添加试玩角色的AdventureRole
|
|||
|
table.insert(result, role:GetRobotRole())
|
|||
|
if includeLocal then
|
|||
|
role:GenerateLocalRole()
|
|||
|
if role:GetIsLocalRole() then
|
|||
|
table.insert(result, role)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return result
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:AddRoleById(roleId, configId, isUplevel, isDecay)
|
|||
|
if configId == nil then configId = roleId end
|
|||
|
for _, role in ipairs(self.CurrentRoles or {}) do
|
|||
|
if role:GetId() == roleId then
|
|||
|
-- 升星
|
|||
|
if isUplevel then
|
|||
|
role:UpdateLevel(role:GetLevel() + 1)
|
|||
|
end
|
|||
|
if isDecay then
|
|||
|
role:UpdateDecay(isDecay)
|
|||
|
end
|
|||
|
-- 重复添加
|
|||
|
return role
|
|||
|
end
|
|||
|
end
|
|||
|
table.insert(self.CurrentRoles, XAdventureRole.New(roleId, nil, isDecay))
|
|||
|
return self.CurrentRoles[#self.CurrentRoles]
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateRoleLevel(roleId, level)
|
|||
|
for _, role in ipairs(self.CurrentRoles or {}) do
|
|||
|
if role:GetId() == roleId then
|
|||
|
role:UpdateLevel(level)
|
|||
|
return
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetRole(id)
|
|||
|
for _, role in ipairs(self:GetCurrentRoles(true)) do
|
|||
|
if role:GetId() == id then
|
|||
|
return role
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetRoleByCharacterId(characterId)
|
|||
|
for _, role in ipairs(self:GetCurrentRoles(true)) do
|
|||
|
if role:GetBaseId() == characterId then
|
|||
|
return role
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 获取角色平均战力
|
|||
|
function XAdventureManager:GeRoleAveragePower()
|
|||
|
local result = 0
|
|||
|
local roles = self:GetCurrentRoles(false)
|
|||
|
for _, role in ipairs(roles) do
|
|||
|
result = result + role:GetAbility()
|
|||
|
end
|
|||
|
if result == 0 then
|
|||
|
return 0
|
|||
|
end
|
|||
|
result = math.floor(result / #roles)
|
|||
|
return result
|
|||
|
end
|
|||
|
|
|||
|
-- 检查角色是否腐化
|
|||
|
function XAdventureManager:CheckRoleIsDecayByCharacterId(characterId)
|
|||
|
for _, role in ipairs(self.CurrentRoles) do
|
|||
|
if role:GetBaseId() == characterId and role:GetIsDecay() then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
-- 获取开启的所有难度数据
|
|||
|
function XAdventureManager:GetDifficulties(checkOpen)
|
|||
|
if checkOpen == nil then checkOpen = false end
|
|||
|
if self.__Difficulties == nil then
|
|||
|
self.__Difficulties = {}
|
|||
|
local difficultyConfigDic = XBiancaTheatreConfigs.GetTheatreDifficulty()
|
|||
|
for id, _ in pairs(difficultyConfigDic) do
|
|||
|
table.insert(self.__Difficulties, XAdventureDifficulty.New(id))
|
|||
|
end
|
|||
|
table.sort(self.__Difficulties, function(a, b)
|
|||
|
return a:GetId() < b:GetId()
|
|||
|
end)
|
|||
|
end
|
|||
|
if checkOpen then
|
|||
|
local result = {}
|
|||
|
for _, difficulty in ipairs(self.__Difficulties) do
|
|||
|
if difficulty:GetIsOpen() then
|
|||
|
table.insert(result, difficulty)
|
|||
|
end
|
|||
|
end
|
|||
|
return result
|
|||
|
end
|
|||
|
return self.__Difficulties
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateCurrentDifficulty(difficulty)
|
|||
|
self.CurrentDifficulty = difficulty
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCurrentDifficulty()
|
|||
|
return self.CurrentDifficulty
|
|||
|
end
|
|||
|
|
|||
|
-- 当前难度缓存键值
|
|||
|
function XAdventureManager:GetDifficultyLocalCacheKey()
|
|||
|
return string.format("BiancaTheatreData_%s_CurDifficultyId", XPlayer.Id)
|
|||
|
end
|
|||
|
|
|||
|
-- 读取当前难度缓存值
|
|||
|
function XAdventureManager:SaveDifficultyLocalCache(CurrentDifficulty)
|
|||
|
if not CurrentDifficulty then return end
|
|||
|
XSaveTool.SaveData(XAdventureManager:GetDifficultyLocalCacheKey(), CurrentDifficulty:GetId())
|
|||
|
end
|
|||
|
|
|||
|
-- 读取当前难度缓存值
|
|||
|
function XAdventureManager:GetDifficultyLocalCacheIndex()
|
|||
|
local difficultyId = XSaveTool.GetData(XAdventureManager:GetDifficultyLocalCacheKey())
|
|||
|
if not XTool.IsNumberValid(difficultyId) then return end
|
|||
|
for index, difficulty in ipairs(XAdventureManager:GetDifficulties(true)) do
|
|||
|
if difficulty:GetId() == difficultyId then
|
|||
|
return index
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetPlayableCount()
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetSingleTeam()
|
|||
|
if self.SingleTeam == nil then
|
|||
|
self.SingleTeam = XTheatreTeam.New("BiancaTheatre_Adventure_Single_Team")
|
|||
|
end
|
|||
|
return self.SingleTeam
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetMultipleTeamByIndex(index)
|
|||
|
return self.AdventureMultiDeploy:GetMultipleTeamByIndex(index)
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetTeamById(id)
|
|||
|
if self.SingleTeam and self.SingleTeam:GetId() == id then
|
|||
|
return self.SingleTeam
|
|||
|
end
|
|||
|
|
|||
|
return self.AdventureMultiDeploy:GetTeamById(id)
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetAdventureMultiDeploy()
|
|||
|
return self.AdventureMultiDeploy
|
|||
|
end
|
|||
|
|
|||
|
-- 获取冒险等级
|
|||
|
function XAdventureManager:GetCurrentLevel()
|
|||
|
return self.CurrentLevel
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateCurrentLevel(value)
|
|||
|
self.CurrentLevel = value
|
|||
|
self:UpdateCurrentRoleRobots(value)
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:UpdateCurrentRoleRobots(level)
|
|||
|
--for _, role in ipairs(self.CurrentRoles) do
|
|||
|
-- if not role:GetIsLocalRole() then
|
|||
|
-- role:GenerateNewRobot(level)
|
|||
|
-- end
|
|||
|
--end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCurrentSkills()
|
|||
|
return self.CurrentSkills or {}
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCoreSkills()
|
|||
|
local result = {}
|
|||
|
local additionalSkillCount = 0
|
|||
|
for _, skill in ipairs(self:GetCurrentSkills()) do
|
|||
|
if skill:GetSkillType() == XBiancaTheatreConfigs.SkillType.Core then
|
|||
|
table.insert(result, skill)
|
|||
|
else
|
|||
|
additionalSkillCount = additionalSkillCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
table.sort(result, function(aSkill, bSkill)
|
|||
|
return aSkill:GetPos() < bSkill:GetPos()
|
|||
|
end)
|
|||
|
return result, additionalSkillCount
|
|||
|
end
|
|||
|
|
|||
|
--获得对应位置的技能
|
|||
|
function XAdventureManager:GetCoreSkillByPos(pos)
|
|||
|
local coreSkills = self:GetCoreSkills()
|
|||
|
for i, v in ipairs(coreSkills) do
|
|||
|
if v:GetPos() == pos then
|
|||
|
return v
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCoreSkillLv(skillType)
|
|||
|
local coreSkills = self:GetCoreSkills()
|
|||
|
for _, v in ipairs(coreSkills) do
|
|||
|
local skillTypeList = XBiancaTheatreConfigs.GetTheatreSkillPosDefineSkillType(v:GetPos())
|
|||
|
for _, skillTypeTemp in ipairs(skillTypeList) do
|
|||
|
if skillType == skillTypeTemp then
|
|||
|
return v:GetCurrentLevel()
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetAdditionSkillDic()
|
|||
|
local result = {}
|
|||
|
local powerCountDic = {}
|
|||
|
local powerId = nil
|
|||
|
for _, skill in ipairs(self:GetCurrentSkills()) do
|
|||
|
if skill:GetSkillType() == XBiancaTheatreConfigs.SkillType.Additional then
|
|||
|
powerId = skill:GetPowerId()
|
|||
|
if not powerCountDic[powerId] then
|
|||
|
table.insert(result, skill)
|
|||
|
end
|
|||
|
powerCountDic[powerId] = powerCountDic[powerId] and powerCountDic[powerId] + 1 or 1
|
|||
|
end
|
|||
|
end
|
|||
|
return result, powerCountDic
|
|||
|
end
|
|||
|
|
|||
|
-- 获取当前所有技能附加的战力
|
|||
|
function XAdventureManager:GetCurrentSkillsPower()
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:EnterFight(inStageId, index, callback)
|
|||
|
if index == nil then index = 1 end
|
|||
|
local team = self:GetSingleTeam()
|
|||
|
local stageConfig = XDataCenter.FubenManager.GetStageCfg(inStageId)
|
|||
|
if stageConfig == nil then return end
|
|||
|
--local teamId = team:GetId()
|
|||
|
local teamId = 0
|
|||
|
local isAssist = false
|
|||
|
local challengeCount = 1
|
|||
|
XDataCenter.FubenManager.EnterFight(stageConfig, teamId, isAssist, challengeCount, nil, callback)
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCardIdsAndRobotIdsFromTeam(team)
|
|||
|
local cardIds = {0, 0, 0}
|
|||
|
local robotIds = {0, 0, 0}
|
|||
|
local role
|
|||
|
for pos, entityId in ipairs(team:GetEntityIds()) do
|
|||
|
if entityId > 0 then
|
|||
|
role = self:GetRole(entityId)
|
|||
|
if role then
|
|||
|
if role:GetIsLocalRole() then -- 本地角色
|
|||
|
cardIds[pos] = role:GetRawDataId()
|
|||
|
else
|
|||
|
robotIds[pos] = role:GetRawDataId()
|
|||
|
end
|
|||
|
else
|
|||
|
XLog.Error("肉鸽找不到角色,Id为" .. entityId)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return cardIds, robotIds
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetRoleIdByRobotId(robotId)
|
|||
|
return XBiancaTheatreConfigs.GetCharacterIdByRobotId(robotId)
|
|||
|
end
|
|||
|
|
|||
|
function XAdventureManager:GetCurTeamId()
|
|||
|
return self.CurTeamId
|
|||
|
end
|
|||
|
|
|||
|
-- 检查队伍是否受到人数显示效果影响
|
|||
|
function XAdventureManager:CheckIsLockTeamRoleCount()
|
|||
|
if not XTool.IsNumberValid(XDataCenter.BiancaTheatreManager.GetTeamCountEffect()) then
|
|||
|
return false
|
|||
|
end
|
|||
|
local curCount = 0
|
|||
|
local cardIds, robotIds = self:GetCardIdsAndRobotIdsFromTeam(self.SingleTeam)
|
|||
|
for _, cardId in ipairs(cardIds) do
|
|||
|
if XTool.IsNumberValid(cardId) then
|
|||
|
curCount = curCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for _, robotId in ipairs(robotIds) do
|
|||
|
if XTool.IsNumberValid(robotId) then
|
|||
|
curCount = curCount + 1
|
|||
|
end
|
|||
|
end
|
|||
|
return curCount > XDataCenter.BiancaTheatreManager.GetTeamCountEffect()
|
|||
|
end
|
|||
|
|
|||
|
--######################## 协议 begin ########################
|
|||
|
|
|||
|
-- 请求选择难度
|
|||
|
function XAdventureManager:RequestStartAdventure(callback)
|
|||
|
local requestBody = {
|
|||
|
Difficulty = self.CurrentDifficulty:GetId(), -- 难度Id
|
|||
|
}
|
|||
|
self.CurrentChapter = nil -- 避免其他GetChapter时创建了默认的章节数据
|
|||
|
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreSelectDifficultyRequest", requestBody, function(res)
|
|||
|
-- hack : 服务器通知节点有可能比该请求返回还要快,因此如果不为空就用节点通知的
|
|||
|
if self.CurrentChapter == nil then
|
|||
|
self.CurrentChapter = XAdventureChapter.New(res.ChapterId)
|
|||
|
end
|
|||
|
XDataCenter.BiancaTheatreManager.UpdateDifficultyId(requestBody.Difficulty)
|
|||
|
XDataCenter.BiancaTheatreManager.UpdateCurChapterId(res.ChapterId)
|
|||
|
-- 进入默认章节
|
|||
|
if callback then callback() end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
-- 请求结束冒险
|
|||
|
function XAdventureManager:RequestSettleAdventure(callback)
|
|||
|
local requestBody = {}
|
|||
|
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreSettleAdventureRequest", requestBody, function(res)
|
|||
|
XDataCenter.BiancaTheatreManager.SettleInitData()
|
|||
|
XDataCenter.BiancaTheatreManager.SetAdventureEnd(res.SettleData)
|
|||
|
if callback then callback() end
|
|||
|
|
|||
|
XDataCenter.BiancaTheatreManager.CheckOpenSettleWin()
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
-- 请求设置单队伍
|
|||
|
function XAdventureManager:RequestSetSingleTeam(callback)
|
|||
|
if self:CheckIsLockTeamRoleCount() then
|
|||
|
XUiManager.TipErrorWithKey("BiancaTheatreLockRollCount", XDataCenter.BiancaTheatreManager.GetTeamCountEffect())
|
|||
|
return
|
|||
|
end
|
|||
|
local cardIds, robotIds = self:GetCardIdsAndRobotIdsFromTeam(self.SingleTeam)
|
|||
|
local requestBody = {
|
|||
|
TeamData = {
|
|||
|
TeamIndex = 0,
|
|||
|
CaptainPos = self.SingleTeam:GetCaptainPos(),
|
|||
|
FirstFightPos = self.SingleTeam:GetFirstFightPos(),
|
|||
|
CardIds = cardIds,
|
|||
|
RobotIds = robotIds,
|
|||
|
}
|
|||
|
}
|
|||
|
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreSetSingleTeamRequest", requestBody, function(res)
|
|||
|
if callback then callback() end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--选择开道具箱奖励,3选1
|
|||
|
function XAdventureManager:RequestSelectItemReward(innerItemId, callback)
|
|||
|
local requestBody = {
|
|||
|
InnerItemId = innerItemId, --肉鸽item表ID
|
|||
|
}
|
|||
|
local adventureManager = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager()
|
|||
|
local curStep = adventureManager:GetCurrentChapter():GetCurStep()
|
|||
|
if curStep then
|
|||
|
curStep:SetOverdue(1)
|
|||
|
end
|
|||
|
|
|||
|
XNetwork.Call("BiancaTheatreSelectItemRewardRequest", requestBody, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
if curStep then
|
|||
|
curStep:SetOverdue(0)
|
|||
|
end
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
if callback then callback() end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--战斗结束————打开战斗奖励选择界面————领取战斗奖励
|
|||
|
--fightRewards:XARewardNode的列表,领取成功后更新数据
|
|||
|
function XAdventureManager:RequestRecvFightReward(uid, callback, fightRewards)
|
|||
|
local requestBody = {
|
|||
|
Uid = uid, --选择唯一ID
|
|||
|
}
|
|||
|
XNetwork.CallWithAutoHandleErrorCode("BiancaTheatreRecvFightRewardRequest", requestBody, function(res)
|
|||
|
for _, node in pairs(fightRewards or {}) do
|
|||
|
if node:GetUid() == uid then
|
|||
|
node:UpdateReceived(1)
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if not XTool.IsTableEmpty(res.RewardGoodsList) then
|
|||
|
XLuaUiManager.Open("UiBiancaTheatreTipReward", nil, res.RewardGoodsList)
|
|||
|
end
|
|||
|
if callback then callback() end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--事件/战斗节点————战斗结束————战斗奖励选择界面————领取战斗奖励————结束领取
|
|||
|
function XAdventureManager:RequestEndRecvFightReward(callback)
|
|||
|
local adventureManager = XDataCenter.BiancaTheatreManager.GetCurrentAdventureManager()
|
|||
|
local chapter = adventureManager:GetCurrentChapter()
|
|||
|
local curStep = chapter:GetCurStep()
|
|||
|
local isCheckOpen = curStep:GetRootStepIsSelectableEvent()
|
|||
|
if curStep then
|
|||
|
curStep:SetOverdue(1)
|
|||
|
end
|
|||
|
|
|||
|
XNetwork.Call("BiancaTheatreEndRecvFightRewardRequest", nil, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
if curStep then
|
|||
|
curStep:SetOverdue(0)
|
|||
|
end
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
if callback then callback() end
|
|||
|
|
|||
|
if isCheckOpen then
|
|||
|
XDataCenter.BiancaTheatreManager.CheckOpenView(true)
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
--######################## 协议 end ########################
|
|||
|
|
|||
|
return XAdventureManager
|