forked from endernon/PGRData
1283 lines
No EOL
51 KiB
Lua
1283 lines
No EOL
51 KiB
Lua
XPivotCombatManagerCreator = function()
|
||
|
||
--region 局部变量
|
||
|
||
--数据结构
|
||
local XPivotCombatManager = {} -- 管理类
|
||
local _ActivityId = 0 --当前开放的活动Id
|
||
local _IsOpening = true --活动是否开放(能否进入活动)
|
||
local _IsReceiveAgreement = false --是否收到协议
|
||
local _SecondaryRegion = {} --次级区域配置
|
||
local _RegionId2Region = {} --次级区域Id-对应配置
|
||
local _CenterRegion = {} --中心区域配置
|
||
local _StageInfo = {} --关卡信息
|
||
local _RegionDifficult = 0 --区域难度
|
||
local _LockCharacterIdDic = {} --被锁定的角色
|
||
|
||
local _MaxRankMember = 100 --排行榜显示最大的人数
|
||
local _MaxScore = 0 --中心枢纽最高分
|
||
local _FightTimeScore = XPivotCombatConfigs.FightTimeScoreInitialValue --通关时间积分
|
||
local _HightestLevel = 0 --中心枢纽最高评级
|
||
local _LastRefreshScore = -1 --上次进入排行榜时的分数
|
||
local _HistoryScore = 0 --历史最高分数
|
||
local _HistoryHightestLevel = 0 --历史最高评级
|
||
local _TeamDict = {} --各区域队伍数据队伍
|
||
local _Robots = {} --机器人配置
|
||
local _MaxTeamMember = 3 --最大队员数量
|
||
local _LastSyncServerTimes = {} --上次请求排行榜时间
|
||
local _SyncServerTime = 20 --同步时长
|
||
local _RankData = {} --排行榜数据缓存
|
||
local _EventCache = {} --事件缓存
|
||
|
||
--请求后端函数名
|
||
local REQUEST_FUNC_NAME = {
|
||
CancelLockCharacterPivotCombatRequest = "CancelLockCharacterPivotCombatRequest",
|
||
GetRankInfoPivotCombatRequest = "GetRankInfoPivotCombatRequest",
|
||
SelectDifficultyPivotCombatRequest = "SelectDifficultyPivotCombatRequest",
|
||
}
|
||
|
||
--引用
|
||
local XPivotCombatRankItem = require("XEntity/XPivotCombat/XPivotCombatRankItem")
|
||
local XTeam = require("XEntity/XTeam/XTeam")
|
||
local XRobot = require("XEntity/XRobot/XRobot")
|
||
local XPivotCombatRegionItem = require("XEntity/XPivotCombat/XPivotCombatRegionItem")
|
||
|
||
--key相关
|
||
local _StagePrefabKey = "UiPivotCombatChapterGrid" --关卡预制体key
|
||
local _StageLockPrefabKey = "UiPivotCombatFinalChapterGrid" --锁角色关卡预制体key
|
||
local _TeamDataKey = "_TeamDataKey" --队伍数据key
|
||
local _NoLearnSkillKey = "_NoLearnSkillKey" --未学独域技能key
|
||
|
||
--endregion
|
||
|
||
--region 局部函数
|
||
|
||
--===========================================================================
|
||
---@desc 根据活动id初始化配置
|
||
--===========================================================================
|
||
local InitConfigs = function(activityId)
|
||
if not XTool.IsNumberValid(activityId) then
|
||
_ActivityId = XPivotCombatConfigs.GetDefaultActivityId()
|
||
else
|
||
_ActivityId = activityId
|
||
end
|
||
|
||
XPivotCombatConfigs.InitConfigsByActivity(_ActivityId)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取当前活动,切为当前难度下的区域配置
|
||
--===========================================================================
|
||
local InitRegionConfig = function()
|
||
----获取当期活动开放的区域配置
|
||
if not XTool.IsNumberValid(_RegionDifficult) then
|
||
return
|
||
end
|
||
--置空
|
||
_CenterRegion = {}
|
||
_SecondaryRegion = {}
|
||
_RegionId2Region = {}
|
||
local regions = XPivotCombatConfigs.GetCurRegionConfigs()
|
||
for regionId, config in pairs(regions[_RegionDifficult] or {}) do
|
||
local regionItem = XPivotCombatRegionItem.New(regionId)
|
||
regionItem:InitData(config)
|
||
if regionItem:IsCenterRegion() then
|
||
_CenterRegion = regionItem
|
||
else
|
||
table.insert(_SecondaryRegion, regionItem)
|
||
end
|
||
_RegionId2Region[regionId] = regionItem
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取或新创建机器人
|
||
--===========================================================================
|
||
local GetRobot = function(robotId)
|
||
local robot = _Robots[robotId]
|
||
if not robot then
|
||
robot = XRobot.New(robotId)
|
||
_Robots[robotId] = robot
|
||
end
|
||
return robot
|
||
end
|
||
|
||
local GetRegionKey = function(regionId)
|
||
return "Region_"..regionId.."_IsOpen"
|
||
end
|
||
|
||
--检查活动开启状态
|
||
local CheckActivityState = function(activityId)
|
||
local func = function()
|
||
if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") or XLuaUiManager.IsUiLoad("UiSettleLose") or
|
||
XLuaUiManager.IsUiLoad("UiSettleWin") then
|
||
table.insert(_EventCache, true)
|
||
return
|
||
end
|
||
XEventManager.DispatchEvent(XEventId.EVENT_PIVOTCOMBAT_ACTIVITY_END)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_ACTIVITY_ON_RESET, XDataCenter.FubenManager.StageType.PivotCombat)
|
||
end
|
||
|
||
--服务端发送了小于0的活动id
|
||
if not _IsOpening then
|
||
func()
|
||
return
|
||
end
|
||
|
||
--在线开启了新一期活动
|
||
if activityId > 0 and activityId ~= _ActivityId then
|
||
func()
|
||
return
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 初始化历史评分相关
|
||
--===========================================================================
|
||
local InitHistoryScore = function()
|
||
_HistoryScore = _MaxScore
|
||
_HistoryHightestLevel = _HightestLevel
|
||
|
||
end
|
||
|
||
--endregion
|
||
|
||
--region 活动入口相关
|
||
|
||
--===========================================================================
|
||
---@desc 获取当前开放的活动信息
|
||
---@return {table} 活动信息
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetActivityChapters()
|
||
--未收到协议,且不在活动开放时间内
|
||
if not ( _IsReceiveAgreement and XPivotCombatManager.IsDuringOpenTime()) then
|
||
return {}
|
||
end
|
||
local chapters = {}
|
||
table.insert(chapters, {
|
||
Id = _ActivityId,
|
||
Type = XDataCenter.FubenManager.ChapterType.PivotCombat,
|
||
BannerBg = XPivotCombatConfigs.GetActivityBanner(_ActivityId),
|
||
Name = XPivotCombatConfigs.GetActivityName(_ActivityId)
|
||
})
|
||
return chapters
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 当前活动总体进度
|
||
---@return {string} 总体进度
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetActivityProgress()
|
||
local taskList = XDataCenter.PivotCombatManager.GetTaskList()
|
||
local finished = 0
|
||
for _, task in ipairs(taskList) do
|
||
if task.State == XDataCenter.TaskManager.TaskState.Finish then
|
||
finished = finished + 1
|
||
end
|
||
end
|
||
return CSXTextManagerGetText("PivotCombatProgress", finished, #taskList)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 当前活动名
|
||
---@return {string} 当前活动名
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetActivityName()
|
||
return XPivotCombatConfigs.GetActivityName(_ActivityId)
|
||
end
|
||
|
||
--==============================
|
||
---@desc 活动代币
|
||
---@return number 物品Id
|
||
--==============================
|
||
function XPivotCombatManager.GetActivityCoinId()
|
||
return XPivotCombatConfigs.GetCoinId(_ActivityId)
|
||
end
|
||
|
||
--==============================
|
||
---@desc 商店类型
|
||
---@return number 商店type
|
||
--==============================
|
||
function XPivotCombatManager.GetActivityShopType()
|
||
return XPivotCombatConfigs.GetShopType(_ActivityId)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 当前活动剩余时间,例:23天
|
||
---@return {string} 显示规则为XUiHelper.TimeFormatType.ACTIVITY
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetActivityLeftTime()
|
||
local timeOfNow = XTime.GetServerNowTimestamp()
|
||
local timeOfEnd = XPivotCombatConfigs.GetActivityEndTime(_ActivityId)
|
||
return XUiHelper.GetTime(timeOfEnd - timeOfNow, XUiHelper.TimeFormatType.PIVOT_COMBAT)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 检测活动是否开启
|
||
---@return [bool] 是否开启
|
||
--===========================================================================
|
||
function XPivotCombatManager.IsOpen()
|
||
if not XTool.IsNumberValid(_ActivityId) then
|
||
return false
|
||
end
|
||
|
||
if not _IsOpening then
|
||
return false
|
||
end
|
||
|
||
return XPivotCombatManager.IsDuringOpenTime()
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 是否在活动开放时间内
|
||
--===========================================================================
|
||
function XPivotCombatManager.IsDuringOpenTime()
|
||
local timeOfNow = XTime.GetServerNowTimestamp()
|
||
local timeOfBegin = XPivotCombatConfigs.GetActivityStartTime(_ActivityId)
|
||
local timeOfEnd = XPivotCombatConfigs.GetActivityEndTime(_ActivityId)
|
||
return timeOfBegin <= timeOfNow and timeOfNow < timeOfEnd
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取当前活动开放时间
|
||
---@return {int} 当前活动开放时间戳
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetActivityBeginTime()
|
||
return XPivotCombatConfigs.GetActivityStartTime(_ActivityId)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取当前活动结束时间
|
||
---@return {int} 当前活动结束时间戳
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetActivityEndTime()
|
||
return XPivotCombatConfigs.GetActivityEndTime(_ActivityId)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 跳转到活动主界面
|
||
--===========================================================================
|
||
function XPivotCombatManager.JumpTo()
|
||
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.PivotCombat) then
|
||
return
|
||
end
|
||
if not XPivotCombatManager.IsOpen() then
|
||
XUiManager.TipText("FubenRepeatNotInActivityTime")
|
||
return
|
||
end
|
||
if XDataCenter.PivotCombatManager.IsShowSelectDifficult() then
|
||
XLuaUiManager.Open("UiPivotCombatSelectDifficult")
|
||
else
|
||
XLuaUiManager.Open("UiPivotCombatMain")
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 活动结束回调
|
||
--===========================================================================
|
||
function XPivotCombatManager.OnActivityEnd()
|
||
XPivotCombatManager.ResetData()
|
||
XLuaUiManager.RunMain()
|
||
XUiManager.TipText("CommonActivityEnd")
|
||
end
|
||
|
||
--==============================
|
||
---@desc 根据事件缓存判断是否需要关闭活动
|
||
--==============================
|
||
function XPivotCombatManager.CheckNeedClose()
|
||
local isEmpty = XTool.IsTableEmpty(_EventCache)
|
||
if isEmpty then return end
|
||
XDataCenter.PivotCombatManager.OnActivityEnd()
|
||
end
|
||
|
||
--==============================
|
||
---@desc 清除本期活动的缓存
|
||
--==============================
|
||
function XPivotCombatManager.ResetData()
|
||
_SecondaryRegion = {}
|
||
_RegionId2Region = {}
|
||
_CenterRegion = {}
|
||
_LockCharacterIdDic = {}
|
||
_HistoryHightestLevel = 0
|
||
_LastRefreshScore = -1
|
||
_StageInfo = {}
|
||
_RankData = {}
|
||
_HightestLevel = 0
|
||
_HistoryScore = 0
|
||
_MaxScore = 0
|
||
_EventCache = {}
|
||
_FightTimeScore = XPivotCombatConfigs.FightTimeScoreInitialValue
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 刷新头像通用接口
|
||
---@param {charIds} 通关角色id
|
||
---@param {headList} 头像控件列表
|
||
---@param {targetUiList} 用于初始化Ui
|
||
--===========================================================================
|
||
function XPivotCombatManager.RefreshHeadIcon(charIds, headList, targetUiList)
|
||
charIds = charIds or {}
|
||
for idx = 1, _MaxTeamMember do
|
||
local charId = charIds[idx]
|
||
local head = headList[idx]
|
||
if not head then
|
||
head = {}
|
||
XTool.InitUiObjectByUi(head, targetUiList[idx])
|
||
head.PanelWenhao.gameObject:SetActiveEx(false)
|
||
table.insert(headList, head)
|
||
end
|
||
if XTool.IsNumberValid(charId) then
|
||
head.StandIcon.gameObject:SetActiveEx(true)
|
||
head.PanelLose.gameObject:SetActiveEx(false)
|
||
local icon = XDataCenter.CharacterManager.GetCharSmallHeadIcon(charId)
|
||
head.StandIcon:SetRawImage(icon)
|
||
else
|
||
--head.StandIcon.gameObject:SetActiveEx(false)
|
||
--head.PanelLose.gameObject:SetActiveEx(true)
|
||
head.GameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
return headList
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 所有次级区域是否全部开放
|
||
--===========================================================================
|
||
function XPivotCombatManager.IsAllSecondaryOpen()
|
||
for _, region in ipairs(_SecondaryRegion) do
|
||
local isOpen, _ = region:IsOpen()
|
||
if not isOpen then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
--endregion
|
||
|
||
--region 红点检测条件
|
||
--===========================================================================
|
||
---@desc 检查任务奖励是否显示红点
|
||
---@return {bool} 是否显示红点
|
||
--===========================================================================
|
||
function XPivotCombatManager.CheckTaskRewardRedPoint()
|
||
if not XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.PivotCombat) then
|
||
return false
|
||
end
|
||
if not XPivotCombatManager.IsOpen() then
|
||
return false
|
||
end
|
||
local taskList = XDataCenter.PivotCombatManager.GetTaskList()
|
||
for _, task in ipairs(taskList) do
|
||
--有任务已经完成但是未领取
|
||
if task.State == XDataCenter.TaskManager.TaskState.Achieved then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 检查是否是新开放的区域
|
||
---@return {bool} 是否是新开放区域
|
||
--===========================================================================
|
||
function XPivotCombatManager.CheckNewAreaOpenRedPoint(regionId)
|
||
if not XTool.IsNumberValid(regionId) or regionId == 0 then
|
||
return false
|
||
end
|
||
if not XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.PivotCombat) then
|
||
return false
|
||
end
|
||
if not XPivotCombatManager.IsOpen() then
|
||
return false
|
||
end
|
||
local region = _RegionId2Region[regionId]
|
||
if not region then
|
||
return false
|
||
end
|
||
local isOpen, _ = region:IsOpen()
|
||
--有供能,可能清除了缓存数据
|
||
if not isOpen or region:GetCurSupplyEnergy() > 0 then
|
||
return false
|
||
end
|
||
local key = XPivotCombatManager.GetCookieKey(GetRegionKey(regionId))
|
||
if not XSaveTool.GetData(key) then
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
|
||
--endregion
|
||
|
||
--region 区域配置
|
||
|
||
|
||
--===========================================================================
|
||
---@desc 中心区域最高分
|
||
---@return {int} 最高分
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetMaxScore()
|
||
return _MaxScore
|
||
end
|
||
|
||
--==============================
|
||
---@desc 战斗时间积分
|
||
---@return number
|
||
--==============================
|
||
function XPivotCombatManager.GetFightTimeScore()
|
||
return _FightTimeScore
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 更新最大分数
|
||
--===========================================================================
|
||
function XPivotCombatManager.RefreshMaxScore(score, fightTimeScore)
|
||
if score < _MaxScore then return end
|
||
_MaxScore = score
|
||
_FightTimeScore = fightTimeScore
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取历史最高分数,跟最大积分区分开来
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetHistoryScore()
|
||
|
||
return _HistoryScore
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 刷新历史最高积分
|
||
--===========================================================================
|
||
function XPivotCombatManager.RefreshHistoryScore(score)
|
||
if score < _HistoryScore then return end
|
||
_HistoryScore = score
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取历史最高评分
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetHistoryRankingLevel()
|
||
|
||
return _HistoryHightestLevel
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 刷新历史最高评分
|
||
--===========================================================================
|
||
function XPivotCombatManager.RefreshHistoryRankingLevel(score)
|
||
if score < _HistoryHightestLevel then return end
|
||
_HistoryHightestLevel = score
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 刷新最高评分
|
||
--===========================================================================
|
||
function XPivotCombatManager.RefreshHightestRankingLevel(score)
|
||
if score < _HightestLevel then return end
|
||
_HightestLevel = score
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取当前活动的次级区域配置
|
||
---@return {XPivotCombatRegionItem}
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetSecondaryRegions()
|
||
return _SecondaryRegion
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 根据区域id获取对应的实体类
|
||
---@param {regionId} 区域Id
|
||
---@return {XPivotCombatRegionItem}
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetRegion(regionId)
|
||
return _RegionId2Region[regionId]
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取中心区域配置
|
||
---@return {XPivotCombatRegionItem}
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetCenterRegion()
|
||
return _CenterRegion
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取次级区域的区域id列表
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetSecondaryRegionIds()
|
||
local regionIds = {}
|
||
for _, region in ipairs(_SecondaryRegion) do
|
||
local regionId = region:GetRegionId()
|
||
if XTool.IsNumberValid(regionId) then
|
||
table.insert(regionIds, regionId)
|
||
end
|
||
end
|
||
return regionIds
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取排行榜最大显示人数
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetMaxRankMember()
|
||
return _MaxRankMember
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取难度
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetDifficulty()
|
||
return _RegionDifficult
|
||
end
|
||
|
||
--==============================
|
||
---@desc 是否需要显示难度选择
|
||
---@return boolean
|
||
--==============================
|
||
function XPivotCombatManager.IsShowSelectDifficult()
|
||
return not XTool.IsNumberValid(_RegionDifficult)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 检查次级区域供能是否满足进入中枢战区
|
||
--===========================================================================
|
||
function XPivotCombatManager.IsSecondaryEnergySupplyEnough()
|
||
--次级区域的供能必须大于1才能进入中枢
|
||
for _, region in ipairs(_SecondaryRegion) do
|
||
if region:GetCurSupplyEnergy() < 1 then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 根据关卡库Id获取对应的关卡列表
|
||
---@param {stageLibId} 关卡库id
|
||
---@return {table} 对应的配置
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetStageConfigs(stageLibId)
|
||
if not XTool.IsNumberValid(stageLibId) then
|
||
return {}
|
||
end
|
||
return XPivotCombatConfigs.GetStageLibConfig(stageLibId)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取普通关卡预制体
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetStagePrefabPath()
|
||
return XUiConfigs.GetComponentUrl(_StagePrefabKey)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取锁角色关卡预制体
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetLockRoleStagePrefabPath()
|
||
return XUiConfigs.GetComponentUrl(_StageLockPrefabKey)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 所有次级区域能够提供的最大能量
|
||
---@return {int} 提供的能源等级
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetSecondaryRegionTotalMaxEnergy()
|
||
local totalEnergy = 0
|
||
for _, region in ipairs(_SecondaryRegion) do
|
||
totalEnergy = totalEnergy + region:GetMaxSupplyEnergy()
|
||
end
|
||
return totalEnergy
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 所有次级区域当前提供的能量
|
||
---@return {int} 提供的能源等级
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetSecondaryRegionTotalCurEnergy()
|
||
local totalEnergy = 0
|
||
for _, region in ipairs(_SecondaryRegion) do
|
||
totalEnergy = totalEnergy + region:GetCurSupplyEnergy()
|
||
end
|
||
return totalEnergy
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 刷新区域数据
|
||
---@param {regionData} 枢纽作战区域数据,具体内容查看XPivotCombatRegionItem的XPivotCombatRegionData
|
||
--===========================================================================
|
||
function XPivotCombatManager.RefreshRegionData(regionData)
|
||
if XTool.IsTableEmpty(regionData) then
|
||
return
|
||
end
|
||
for _, data in ipairs(regionData) do
|
||
local regionId = data.RegionId
|
||
local item = _RegionId2Region[regionId]
|
||
if item then
|
||
item:RefreshRegionData(data)
|
||
end
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 刷新锁定角色字典
|
||
--===========================================================================
|
||
function XPivotCombatManager.RefreshLockCharacterDict(dict)
|
||
for id, tbId in pairs(dict or {}) do
|
||
if XTool.IsNumberValid(id) and XTool.IsNumberValid(tbId) then
|
||
_LockCharacterIdDic[id] = tbId
|
||
end
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 移除锁定角色字典
|
||
--===========================================================================
|
||
function XPivotCombatManager.RemoveLockCharacterDict(dict)
|
||
for id, _ in pairs(dict or {}) do
|
||
_LockCharacterIdDic[id] = nil
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取锁定角色字典
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetLockCharacterDict()
|
||
return _LockCharacterIdDic
|
||
end
|
||
|
||
--==============================
|
||
---@desc 检查角色是否被锁定
|
||
---@stageId 关卡Id
|
||
---@characterId 角色Id
|
||
---@return boolean
|
||
--==============================
|
||
function XPivotCombatManager.CheckCharacterLocked(stageId, characterId)
|
||
if not XTool.IsNumberValid(stageId)
|
||
or not XTool.IsNumberValid(characterId) then
|
||
return false
|
||
end
|
||
local stage = XDataCenter.PivotCombatManager.GetStage(stageId)
|
||
if not stage or stage:CanUseLockedRole() then
|
||
return false
|
||
end
|
||
return _LockCharacterIdDic[characterId] and true or false
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 界面处理通用事件
|
||
--===========================================================================
|
||
function XPivotCombatManager.OnNotify(evt, args)
|
||
if evt == XEventId.EVENT_PIVOTCOMBAT_ACTIVITY_END then
|
||
XDataCenter.PivotCombatManager.OnActivityEnd()
|
||
elseif evt == XEventId.EVENT_ACTIVITY_ON_RESET then
|
||
if args[1] ~= XDataCenter.FubenManager.StageType.PivotCombat then return end
|
||
XDataCenter.PivotCombatManager.OnActivityEnd()
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取次级区域的积分加成(万分比)
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetTotalScoreAddition()
|
||
local totalScoreAddition = 0
|
||
for _, region in ipairs(_SecondaryRegion) do
|
||
totalScoreAddition = totalScoreAddition + region:GetScoreAddition()
|
||
end
|
||
return totalScoreAddition / 10000
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 是否是教学关
|
||
--===========================================================================
|
||
function XPivotCombatManager.CheckIsTeachStage(stageId)
|
||
return stageId == XPivotCombatConfigs.TeachStageId or stageId == XPivotCombatConfigs.DynamicScoreTeachStageId
|
||
end
|
||
|
||
|
||
--===========================================================================
|
||
---@desc 进入次级界面
|
||
--===========================================================================
|
||
function XPivotCombatManager.OnEnterRegion(region)
|
||
if not region then return end
|
||
local regionId = region:GetRegionId()
|
||
local key = XPivotCombatManager.GetCookieKey(GetRegionKey(regionId))
|
||
if not XSaveTool.GetData(key) then
|
||
XSaveTool.SaveData(key, true)
|
||
end
|
||
XLuaUiManager.Open("UiPivotCombatSecondary", region)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取当前期数的任务
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetTaskList()
|
||
if XTool.IsTableEmpty(_CenterRegion) then return {} end
|
||
|
||
return XDataCenter.TaskManager.GetTaskList(TaskType.PivotCombat, _CenterRegion:GetTaskGroupId())
|
||
end
|
||
|
||
function XPivotCombatManager.ShowDialogHintTip(characterId, negativeCb, positiveCb)
|
||
if XPivotCombatManager.IsShowedDialogHintTip() then
|
||
return
|
||
end
|
||
local title = CSXTextManagerGetText("PivotCombatNoSpecialSkillTitle")
|
||
local content = CSXTextManagerGetText("PivotCombatNoSpecialSkillContent")
|
||
local status = XDataCenter.PivotCombatManager.IsShowedDialogHintTip()
|
||
local hintInfo = {
|
||
SetHintCb = XDataCenter.PivotCombatManager.SetDialogHintCookie,
|
||
Status = status,
|
||
IsNeedClose = false,
|
||
}
|
||
|
||
XUiManager.DialogHintTip(title, content, "", negativeCb, positiveCb, hintInfo)
|
||
end
|
||
|
||
--==============================
|
||
---@desc 获取战斗时间
|
||
---@fightScoreTime 通关时间积分
|
||
---@return string format 00:00
|
||
--==============================
|
||
function XPivotCombatManager.GetFightTime(fightScoreTime)
|
||
if not XTool.IsNumberValid(fightScoreTime) then return "00:00" end
|
||
-- 计算公式 时间积分 = 初始值 - 通关时间秒数
|
||
local time = XPivotCombatConfigs.FightTimeScoreInitialValue - fightScoreTime
|
||
local min = math.floor(time / 60)
|
||
local sec = math.floor(time % 60)
|
||
return string.format("%02d:%02d", min, sec)
|
||
end
|
||
|
||
--endregion
|
||
|
||
--region 队伍信息
|
||
|
||
--===========================================================================
|
||
---@desc 获取队伍信息
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetTeam(regionId)
|
||
local key = regionId.._TeamDataKey
|
||
local teamId = XPivotCombatManager.GetCookieKey(key)
|
||
local team = _TeamDict[teamId]
|
||
if not team then
|
||
team = XTeam.New(teamId)
|
||
_TeamDict[teamId] = team
|
||
end
|
||
--检查服务端是否被清档,本地team仍然存在这个角色的情况
|
||
local entityIds = team:GetEntityIds()
|
||
for _, id in ipairs(entityIds or {}) do
|
||
if not XTool.IsNumberValid(id) then
|
||
goto CONTINUE
|
||
end
|
||
if XRobotManager.CheckIsRobotId(id) then
|
||
goto CONTINUE
|
||
end
|
||
local isOwnerCharacter = XDataCenter.CharacterManager.IsOwnCharacter(id)
|
||
--如果这个角色在队伍中,
|
||
if not isOwnerCharacter then
|
||
team:Clear()
|
||
break
|
||
end
|
||
::CONTINUE::
|
||
end
|
||
return team
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 清空队伍信息
|
||
--===========================================================================
|
||
function XPivotCombatManager.ClearTeam()
|
||
for _, team in pairs(_TeamDict) do
|
||
if team then
|
||
team:Clear()
|
||
end
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取所有能够参战角色信息
|
||
---@param {characterType}角色类型
|
||
---@return {table} 角色列表
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetFightEntities(characterType)
|
||
local result = {}
|
||
--玩家拥有的角色
|
||
local characters = XDataCenter.CharacterManager.GetOwnCharacterList()
|
||
for _, character in ipairs(characters or {}) do
|
||
if character:GetCharacterViewModel():GetCharacterType() == characterType then
|
||
table.insert(result, character)
|
||
end
|
||
end
|
||
--配置机器人
|
||
local robots = XPivotCombatManager.GetFightRobots()
|
||
for _, robot in ipairs(robots or {}) do
|
||
if robot:GetCharacterViewModel():GetCharacterType() == characterType then
|
||
table.insert(result, robot)
|
||
end
|
||
end
|
||
return result
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取配置的机器人
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetFightRobots()
|
||
local robots = {}
|
||
local allRobots = XPivotCombatConfigs.GetRobotSources()
|
||
for _, config in ipairs(allRobots) do
|
||
local robotId = config.RobotId
|
||
if XTool.IsNumberValid(robotId) and XRobotManager.CheckIsRobotId(robotId) then
|
||
local robot = GetRobot(robotId)
|
||
table.insert(robots, robot)
|
||
end
|
||
end
|
||
return robots
|
||
end
|
||
|
||
--endregion
|
||
|
||
--region 本地缓存
|
||
|
||
function XPivotCombatManager.GetCookieKey(key)
|
||
if not key then return end
|
||
|
||
if not XTool.IsNumberValid(_ActivityId) then
|
||
return
|
||
end
|
||
return string.format("XPivotCombatManager_%d_%d_%s", XPlayer.Id, _ActivityId, key)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 是否已经显示每日提示
|
||
--===========================================================================
|
||
function XPivotCombatManager.IsShowedDialogHintTip()
|
||
local key = XPivotCombatManager.GetCookieKey(_NoLearnSkillKey)
|
||
|
||
local updateTime = XSaveTool.GetData(key)
|
||
if not updateTime then
|
||
return false
|
||
end
|
||
return XTime.GetServerNowTimestamp() < updateTime
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 选中今日不再提示,isSelect 是否选择今日不再提示
|
||
--===========================================================================
|
||
function XPivotCombatManager.SetDialogHintCookie(isSelect)
|
||
local key = XPivotCombatManager.GetCookieKey(_NoLearnSkillKey)
|
||
if not isSelect then
|
||
XSaveTool.RemoveData(key)
|
||
else
|
||
if XPivotCombatManager.IsShowedDialogHintTip() then return end
|
||
local updateTime = XTime.GetSeverTomorrowFreshTime()
|
||
XSaveTool.SaveData(key, updateTime)
|
||
end
|
||
end
|
||
|
||
--endregion
|
||
|
||
--region 适配FubenManager内的方法
|
||
|
||
--===========================================================================
|
||
---@desc 初始化StageInfo
|
||
--===========================================================================
|
||
function XPivotCombatManager.InitStageInfo()
|
||
local stageIds = XPivotCombatConfigs.GetAllStageIds()
|
||
for _, stageId in ipairs(stageIds) do
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
if stageInfo then
|
||
stageInfo.Type = XDataCenter.FubenManager.StageType.PivotCombat
|
||
end
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 战斗前的检查与数据准备
|
||
--===========================================================================
|
||
function XPivotCombatManager.PreFight(stage, teamId, isAssist, challengeCount, challengeId)
|
||
local preFight = {}
|
||
preFight.CardIds = {0, 0, 0}
|
||
preFight.RobotIds = {0, 0, 0}
|
||
preFight.StageId = stage.StageId
|
||
preFight.IsHasAssist = isAssist and true or false
|
||
preFight.ChallengeCount = challengeCount or 1
|
||
|
||
local robotIds = stage.RobotId
|
||
if robotIds and #robotIds > 0 then
|
||
for i, id in ipairs(preFight.RobotIds) do
|
||
local robotId = robotIds[i]
|
||
if robotId and robotId > 0 then
|
||
preFight.CaptainPos = i
|
||
preFight.FirstFightPos = i
|
||
preFight.RobotIds[i] = robotId
|
||
else
|
||
preFight.RobotIds[i] = 0
|
||
end
|
||
end
|
||
else
|
||
local team = _TeamDict[teamId]
|
||
if not team then
|
||
team = XTeam.New(teamId)
|
||
_TeamDict[teamId] = team
|
||
end
|
||
local teamData = team:GetEntityIds()
|
||
for teamIndex, characterId in pairs(teamData) do
|
||
if XRobotManager.CheckIsRobotId(characterId) then
|
||
preFight.RobotIds[teamIndex] = characterId
|
||
else
|
||
preFight.CardIds[teamIndex] = characterId
|
||
end
|
||
end
|
||
preFight.CaptainPos = team:GetCaptainPos()
|
||
preFight.FirstFightPos = team:GetFirstFightPos()
|
||
end
|
||
return preFight
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 自定义进入战斗
|
||
--===========================================================================
|
||
function XPivotCombatManager.CustomOnEnterFight(preFight, callback)
|
||
local stageId = preFight.StageId
|
||
if XPivotCombatManager.CheckIsTeachStage(stageId) then
|
||
XPivotCombatManager.DoEnterFightWithLocal(preFight)
|
||
else
|
||
XPivotCombatManager.DoEnterFightWithNetwork(preFight, callback)
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 本地构造战斗
|
||
--===========================================================================
|
||
function XPivotCombatManager.DoEnterFightWithLocal(preFight)
|
||
local stageId = preFight.StageId
|
||
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
||
|
||
local fightData = {}
|
||
fightData.RoleData = {}
|
||
fightData.FightId = 1
|
||
fightData.Online = false
|
||
fightData.Seed = 1
|
||
fightData.StageId = stageId
|
||
|
||
local roleData = {}
|
||
roleData.NpcData = {}
|
||
table.insert(fightData.RoleData, roleData)
|
||
roleData.Id = XPlayer.Id
|
||
roleData.Name = CSXTextManagerGetText("Aha")
|
||
roleData.Camp = 1
|
||
|
||
for idx, robotId in ipairs(stageCfg.RobotId or {}) do
|
||
if XRobotManager.CheckIsRobotId(robotId) then
|
||
local robot = XRobotManager.GetRobotById(robotId)
|
||
local npcData = robot:GetNpcData()
|
||
npcData.Character.FashionId = robot:GetCharacterViewModel().FashionId
|
||
roleData.NpcData[idx - 1] = npcData
|
||
end
|
||
end
|
||
|
||
fightData.RebootId = stageCfg.RebootId
|
||
|
||
local endFightCb = function()
|
||
if stageCfg.EndStoryId then
|
||
XDataCenter.MovieManager.PlayMovie(stageCfg.EndStoryId)
|
||
end
|
||
end
|
||
|
||
local enterFightFunc = function()
|
||
XDataCenter.FubenManager.CallOpenFightLoading(stageId)
|
||
|
||
local args = CS.XFightClientArgs()
|
||
args.RoleId = XPlayer.Id
|
||
args.CloseLoadingCb = function()
|
||
XDataCenter.FubenManager.CallCloseFightLoading(stageId)
|
||
end
|
||
args.FinishCbAfterClear = function()
|
||
endFightCb()
|
||
end
|
||
args.ClientOnly = true
|
||
CS.XFight.Enter(fightData, args)
|
||
end
|
||
enterFightFunc()
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 联网战斗
|
||
--===========================================================================
|
||
function XPivotCombatManager.DoEnterFightWithNetwork(preFight, callback)
|
||
XNetwork.Call("PreFightRequest", { PreFightData = preFight }, function(res)
|
||
if callback then callback(res) end
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
local fightData = res.FightData
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(fightData.StageId)
|
||
local stage = XDataCenter.FubenManager.GetStageCfg(fightData.StageId)
|
||
local isKeepPlayingStory = stage and XFubenConfigs.IsKeepPlayingStory(stage.StageId) and (stage.BeginStoryId)
|
||
local isNotPass = stage and stage.BeginStoryId and (not stageInfo or not stageInfo.Passed)
|
||
if isKeepPlayingStory or isNotPass then
|
||
-- 播放剧情,进入战斗
|
||
XDataCenter.FubenManager.EnterRealFight(preFight, fightData, stage.BeginStoryId)
|
||
else
|
||
-- 直接进入战斗
|
||
XDataCenter.FubenManager.EnterRealFight(preFight, fightData)
|
||
end
|
||
end)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 检查关卡是否通关
|
||
--===========================================================================
|
||
function XPivotCombatManager.CheckPassedByStageId(stageId)
|
||
local stage = _StageInfo[stageId]
|
||
if not stage then
|
||
return false
|
||
end
|
||
return stage:GetPassed()
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 检查关卡是否解锁
|
||
--===========================================================================
|
||
function XPivotCombatManager.CheckUnlockByStageId(stageId)
|
||
--教学关卡默认开启
|
||
if XPivotCombatManager.CheckIsTeachStage(stageId) then
|
||
return true
|
||
end
|
||
local stage = _StageInfo[stageId]
|
||
if not stage then
|
||
return false
|
||
end
|
||
return stage:CheckIsUnlock()
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 刷新关卡状态
|
||
--===========================================================================
|
||
function XPivotCombatManager.RefreshStageInfo(stageId, stage)
|
||
_StageInfo[stageId] = stage
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取关卡配置
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetStage(stageId)
|
||
return _StageInfo[stageId]
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 处理战斗结束
|
||
--===========================================================================
|
||
function XPivotCombatManager.FinishFight(settle)
|
||
if settle.IsWin then
|
||
local stage = XPivotCombatManager.GetStage(settle.StageId)
|
||
if stage then
|
||
stage:SetPassed(true)
|
||
end
|
||
XDataCenter.FubenManager.ChallengeWin(settle)
|
||
else
|
||
XDataCenter.FubenManager.ChallengeLose(settle)
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 处理战斗胜利界面
|
||
--===========================================================================
|
||
function XPivotCombatManager.ShowReward(winData)
|
||
local stageId = winData.StageId
|
||
local stage = _StageInfo[stageId]
|
||
if stage and stage:CheckIsScoreStage() then
|
||
XLuaUiManager.Open("UiPivotCombatCenterSettle", winData)
|
||
else
|
||
XDataCenter.FubenManager.ShowReward(winData)
|
||
end
|
||
end
|
||
|
||
--==============================
|
||
---@desc 新副本界面进度
|
||
---@return string
|
||
--==============================
|
||
function XPivotCombatManager.GetProgressTips()
|
||
return XPivotCombatManager.GetActivityProgress()
|
||
end
|
||
|
||
--endregion
|
||
|
||
--region 双端交互
|
||
|
||
--===========================================================================
|
||
---@desc 推送枢纽作战数据信息, 登录下发
|
||
---@param {data} 枢纽作战基础数据 (XPivotCombatBaseData)
|
||
--[[ data = {
|
||
int ActivityId; 活动Id
|
||
int Difficulty; 难度
|
||
int Score; 中心区域最高分
|
||
List<XPivotCombatRegionData> RegionDataList; 区域数据列表
|
||
}
|
||
]]--
|
||
--===========================================================================
|
||
function XPivotCombatManager.NotifyPivotCombatData(data)
|
||
--收到协议,需要显示活动入口
|
||
_IsReceiveAgreement = true
|
||
local pivotData = data.PivotCombatData
|
||
local activityId = pivotData.ActivityId
|
||
_IsOpening = activityId > 0 and true or false
|
||
--检查活动是否结束,或者更换期数
|
||
CheckActivityState(activityId)
|
||
InitConfigs(activityId)
|
||
_RegionDifficult = pivotData.Difficulty
|
||
InitRegionConfig()
|
||
XPivotCombatManager.RefreshRegionData(pivotData.RegionDataList)
|
||
|
||
--刷新评分相关
|
||
InitHistoryScore()
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 推送区域供能等级变更信息
|
||
---@param {data} {int RegionId; int SupplyEnergyLevel; 变更后供能等级}
|
||
---@return nil
|
||
--===========================================================================
|
||
function XPivotCombatManager.NotifyRegionDataChangeInfo(data)
|
||
local regionId = data.RegionId
|
||
local item = _RegionId2Region[regionId]
|
||
if item then
|
||
item:RefreshSingleStage(data)
|
||
end
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 取消锁定角色请求
|
||
---@param {cb} 收到服务器回应成功后的回调
|
||
---@param {regionId} 区域ID
|
||
---@param {stageId} 关卡ID
|
||
--===========================================================================
|
||
function XPivotCombatManager.CancelLockCharacterPivotCombatRequest(regionId, stageId, cb)
|
||
local request = {
|
||
RegionId = regionId,
|
||
StageId = stageId,
|
||
}
|
||
|
||
XNetwork.Call(REQUEST_FUNC_NAME.CancelLockCharacterPivotCombatRequest, request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
local rgId = res.RegionId
|
||
local item = _RegionId2Region[rgId]
|
||
if item then
|
||
item:CancelLockCharacter(res.SupplyEnergyLevel, res.StageId)
|
||
end
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--===========================================================================
|
||
---@desc 获取指定难度排行信息响应
|
||
---@param {difficulty} 难度
|
||
--===========================================================================
|
||
function XPivotCombatManager.GetRankInfoPivotCombatRequest(difficulty, cb)
|
||
local timeOfNow = XTime.GetServerNowTimestamp()
|
||
local timeOfLast = _LastSyncServerTimes[difficulty]
|
||
if timeOfLast and timeOfLast + _SyncServerTime >= timeOfNow then
|
||
local data = _RankData[difficulty]
|
||
if not data then
|
||
XLog.Warning("No Rank Data, difficulty = "..difficulty)
|
||
return
|
||
end
|
||
if cb then
|
||
cb(data.RankList, data.Ranking, data.TotalCount)
|
||
end
|
||
return
|
||
end
|
||
--排行榜的难度是玩家本期活动难度,只有玩家分数突破记录才刷新
|
||
if difficulty == _RegionDifficult and _MaxScore <= _LastRefreshScore then
|
||
local data = _RankData[difficulty]
|
||
if not data then
|
||
XLog.Warning("No Rank Data, difficulty = "..difficulty)
|
||
return
|
||
end
|
||
if cb then
|
||
cb(data.RankList, data.Ranking, data.TotalCount)
|
||
end
|
||
return
|
||
end
|
||
local request = { Difficulty = difficulty }
|
||
--[[
|
||
res = {
|
||
XCode Code; 状态码
|
||
int Ranking; 自己排名
|
||
long TotalCount; 排行榜总人数(参与玩法的人数,可能量很大)
|
||
List<XPivotCombatRankPlayerInfo> RankPlayerInfoList; 排行榜玩家信息列表(索引就是排名,从零开始)
|
||
}
|
||
]]
|
||
XNetwork.Call(REQUEST_FUNC_NAME.GetRankInfoPivotCombatRequest, request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
_LastSyncServerTimes[difficulty] = timeOfNow
|
||
local totalCount = res.TotalCount
|
||
local tmpCount = totalCount > _MaxRankMember and _MaxRankMember or totalCount
|
||
local rankList = {}
|
||
for idx, info in ipairs(res.RankPlayerInfoList or {}) do
|
||
if idx > tmpCount then break end
|
||
local item = XPivotCombatRankItem.New(info, idx, totalCount)
|
||
table.insert(rankList, item)
|
||
end
|
||
|
||
if cb then
|
||
cb(rankList, res.Ranking, totalCount)
|
||
end
|
||
|
||
--更新缓存
|
||
_RankData[difficulty] = {
|
||
RankList = rankList,
|
||
Ranking = res.Ranking,
|
||
TotalCount = totalCount
|
||
}
|
||
--刷新上次进入排行榜的分数
|
||
if difficulty == _RegionDifficult then
|
||
_LastRefreshScore = _MaxScore
|
||
end
|
||
end)
|
||
end
|
||
|
||
--==============================
|
||
---@desc 选择难度
|
||
---@difficulty 难度参数
|
||
---@cb 选择难度回调
|
||
--==============================
|
||
function XPivotCombatManager.SelectDifficultyPivotCombatRequest(difficulty, cb)
|
||
local request = { Difficulty = difficulty }
|
||
-- res = { XCode Code }
|
||
|
||
XNetwork.Call(REQUEST_FUNC_NAME.SelectDifficultyPivotCombatRequest, request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
_RegionDifficult = difficulty
|
||
InitRegionConfig()
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--endregion
|
||
|
||
return XPivotCombatManager
|
||
end
|
||
|
||
--region S2CFunction
|
||
XRpc.NotifyPivotCombatData = function(data)
|
||
XDataCenter.PivotCombatManager.NotifyPivotCombatData(data)
|
||
end
|
||
XRpc.NotifyRegionDataChangeInfo = function(data)
|
||
XDataCenter.PivotCombatManager.NotifyRegionDataChangeInfo(data)
|
||
end
|
||
--endregion |