1383 lines
52 KiB
Lua
1383 lines
52 KiB
Lua
local CSXAudioManager = CS.XAudioManager
|
||
local XExFubenActivityManager = require("XEntity/XFuben/XExFubenActivityManager")
|
||
|
||
XMaverick2ManagerCreator = function()
|
||
local XMaverick2Manager = XExFubenActivityManager.New(XFubenConfigs.ChapterType.Maverick2, "Maverick2Manager")
|
||
|
||
-- 自定义数据
|
||
local LastPassStageId = nil -- 上一次通关关卡id,登陆游戏后未打是为nil
|
||
local ReFightData = {} -- 保存战斗的请求数据,可以在结算界面重新战斗
|
||
local IsRequestShopInfo = false -- 是否请求过商店
|
||
|
||
-- 服务器下发的数据
|
||
local ActivityId = 0
|
||
local ChapterDataDic = {} -- 章节数据 key为章节id
|
||
local CharacterDataDic = {} -- 机器人数据 key为机器人id
|
||
local StageDic = {} -- 关卡数据 key为关卡id
|
||
local DailyStageDic = {} -- 每日关卡列表
|
||
local ScoreStageRecord = {} -- 积分关记录(最后一关为积分关,只有一关)
|
||
local RankData = {} -- 排行榜数据
|
||
local MentalLevel = 0 -- 心智天赋等级
|
||
local AssistTalentLvDic = {} -- 支援技能等级,key为支援技能的TalentId
|
||
|
||
function XMaverick2Manager.Init()
|
||
end
|
||
|
||
function XMaverick2Manager.GetActivityId()
|
||
return ActivityId
|
||
end
|
||
|
||
function XMaverick2Manager.IsOpen()
|
||
if not XTool.IsNumberValid(ActivityId) or ActivityId == 0 then return false end
|
||
local config = XMaverick2Configs.GetMaverick2Activity(ActivityId, true)
|
||
return XFunctionManager.CheckInTimeByTimeId(config.TimeId)
|
||
end
|
||
|
||
function XMaverick2Manager.GetActivityStartTime()
|
||
local config = XMaverick2Configs.GetMaverick2Activity(ActivityId, true)
|
||
return XFunctionManager.GetStartTimeByTimeId(config.TimeId)
|
||
end
|
||
|
||
function XMaverick2Manager.GetActivityEndTime()
|
||
local config = XMaverick2Configs.GetMaverick2Activity(ActivityId, true)
|
||
return XFunctionManager.GetEndTimeByTimeId(config.TimeId)
|
||
end
|
||
|
||
function XMaverick2Manager.GetActivitySaveKey()
|
||
return string.format("Maverick2Manager_GetActivitySaveKey_XPlayer.Id:%s_ActivityId:%s_", XPlayer.Id, ActivityId)
|
||
end
|
||
|
||
-------------------------------------------------- 章节关卡 begin --------------------------------------------------
|
||
-- 设置章节数据
|
||
function XMaverick2Manager.SetChapterDatas(chapterDatas)
|
||
ChapterDataDic = {}
|
||
StageDic = {}
|
||
for i, chapter in ipairs(chapterDatas) do
|
||
ChapterDataDic[chapter.ChapterId] = chapter
|
||
for j, stage in ipairs(chapter.PassStageDatas) do
|
||
XMaverick2Manager.SetStageData(stage)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 获取章节数据
|
||
function XMaverick2Manager.GetChapterData(chapterId)
|
||
return ChapterDataDic[chapterId]
|
||
end
|
||
|
||
-- 章节是否解锁
|
||
function XMaverick2Manager.IsChapterUnlock(chapterId)
|
||
local chapterCfg = XMaverick2Configs.GetMaverick2Chapter(chapterId, true)
|
||
local isUnlock = chapterCfg.PreStageId == 0 or XMaverick2Manager.IsStagePassed(chapterCfg.PreStageId)
|
||
return isUnlock
|
||
end
|
||
|
||
-- 获取章节距离时间开启
|
||
function XMaverick2Manager.GetChapterOpenTime(chapterId)
|
||
local chapterCfg = XMaverick2Configs.GetMaverick2Chapter(chapterId, true)
|
||
local openTime = XMaverick2Manager.GetActivityStartTime() + chapterCfg.OpenTime
|
||
local curTime = XTime.GetServerNowTimestamp()
|
||
if openTime > curTime then
|
||
return openTime - curTime
|
||
end
|
||
|
||
return 0
|
||
end
|
||
|
||
-- 章节是否到了开启时间
|
||
function XMaverick2Manager.IsChapterOpenTime(chapterId)
|
||
local chapterCfg = XMaverick2Configs.GetMaverick2Chapter(chapterId, true)
|
||
local openTime = XMaverick2Manager.GetActivityStartTime() + chapterCfg.OpenTime
|
||
local curTime = XTime.GetServerNowTimestamp()
|
||
local isOpen = curTime >= openTime
|
||
return isOpen
|
||
end
|
||
|
||
-- 获取最后解锁的章节id
|
||
function XMaverick2Manager.GetLastUnlockChapterId()
|
||
local chapterId = 1
|
||
local chapterCfgs = XMaverick2Configs.GetMaverick2Chapter()
|
||
for _, chapter in ipairs(chapterCfgs) do
|
||
local isUnlock = chapter.PreStageId == 0 or XMaverick2Manager.IsStagePassed(chapter.PreStageId)
|
||
local isOpen = XMaverick2Manager.IsChapterOpenTime(chapter.ChapterId)
|
||
if isUnlock and isOpen then
|
||
chapterId = chapter.ChapterId
|
||
end
|
||
end
|
||
return chapterId
|
||
end
|
||
|
||
-- 获取章节进度
|
||
function XMaverick2Manager.GetChapterProgress(chapterId)
|
||
local allStageCnt = 0
|
||
local passStageCnt = 0
|
||
|
||
local stageCfgs = XMaverick2Configs.GetChapterStages(chapterId)
|
||
for _, stageCfg in pairs(stageCfgs) do
|
||
-- 忽略每日关卡
|
||
if stageCfg.StageType ~= XMaverick2Configs.StageType.Daily then
|
||
allStageCnt = allStageCnt + 1
|
||
local isPass = XMaverick2Manager.IsStagePassed(stageCfg.StageId)
|
||
if isPass then
|
||
passStageCnt = passStageCnt + 1
|
||
end
|
||
end
|
||
end
|
||
|
||
return passStageCnt, allStageCnt
|
||
end
|
||
|
||
-- 章节是否显示红点
|
||
function XMaverick2Manager.IsChapterShowRed(chapterId)
|
||
local key = XMaverick2Manager.GetChapterRedSaveKey(chapterId)
|
||
local isRemove = XSaveTool.GetData(key) == true
|
||
return not isRemove
|
||
end
|
||
|
||
-- 移除章节红点
|
||
function XMaverick2Manager.RemveChapterRed(chapterId)
|
||
local key = XMaverick2Manager.GetChapterRedSaveKey(chapterId)
|
||
XSaveTool.SaveData(key, true)
|
||
end
|
||
|
||
-- 章节红点key
|
||
function XMaverick2Manager.GetChapterRedSaveKey(chapterId)
|
||
return XDataCenter.Maverick2Manager.GetActivitySaveKey() .. "XMaverick2Manager_GetChapterRedSaveKey_chapterId:" .. tostring(chapterId)
|
||
end
|
||
|
||
-- 获取下个挑战关卡,解锁且未通关
|
||
function XMaverick2Manager.GetNextStageId()
|
||
local stageId = nil
|
||
local chapterId = XMaverick2Manager.GetLastUnlockChapterId()
|
||
local stageCfgs = XMaverick2Configs.GetChapterStages(chapterId)
|
||
for _, stageCfg in ipairs(stageCfgs) do
|
||
-- 忽略每日关卡
|
||
if stageCfg.StageType ~= XMaverick2Configs.StageType.Daily then
|
||
local isPass = XMaverick2Manager.IsStagePassed(stageCfg.StageId)
|
||
local isUnlock = XMaverick2Manager.IsStageUnlock(stageCfg.StageId)
|
||
if isUnlock and not isPass then
|
||
stageId = stageCfg.StageId
|
||
end
|
||
end
|
||
end
|
||
return stageId
|
||
end
|
||
|
||
-- 获取已通关卡数据
|
||
function XMaverick2Manager.GetStageData(stageId)
|
||
local stageData = StageDic[stageId]
|
||
if stageData then
|
||
return stageData
|
||
else
|
||
return {
|
||
StageId = stageId,
|
||
GotFirstReward = false,
|
||
StarCount = 0,
|
||
}
|
||
end
|
||
end
|
||
|
||
-- 设置关卡数据
|
||
function XMaverick2Manager.SetStageData(stageData)
|
||
StageDic[stageData.StageId] = stageData
|
||
end
|
||
|
||
-- 获取关卡是否通关
|
||
function XMaverick2Manager.IsStagePassed(stageId)
|
||
local stageCfg = XMaverick2Configs.GetMaverick2Stage(stageId, true)
|
||
if stageCfg.StageType == XMaverick2Configs.StageType.Daily then
|
||
return false -- 过滤每日关卡
|
||
end
|
||
|
||
return StageDic[stageId] ~= nil
|
||
end
|
||
|
||
-- 获取关卡是否解锁
|
||
function XMaverick2Manager.IsStageUnlock(stageId)
|
||
local stageCfg = XMaverick2Configs.GetMaverick2Stage(stageId, true)
|
||
if stageCfg.StageType == XMaverick2Configs.StageType.Daily then
|
||
return false -- 过滤每日关卡
|
||
end
|
||
|
||
local isChapterUnlock = XMaverick2Manager.IsChapterUnlock(stageCfg.ChapterId)
|
||
if not isChapterUnlock then
|
||
return false
|
||
end
|
||
|
||
local isUnlock = stageCfg.PreStageId == 0 or XMaverick2Manager.IsStagePassed(stageCfg.PreStageId)
|
||
return isUnlock
|
||
end
|
||
|
||
-- 关卡是否播解锁动画
|
||
function XMaverick2Manager.IsStagePlayUnlockAnim(stageId)
|
||
local stageCfg = XMaverick2Configs.GetMaverick2Stage(stageId, true)
|
||
local lastStageUnlock = stageCfg.PreStageId ~= 0 and stageCfg.PreStageId == LastPassStageId
|
||
if not lastStageUnlock then
|
||
return false
|
||
end
|
||
|
||
local saveKey = XMaverick2Manager.GetUnlockAnimSaveKey(stageId)
|
||
local isPlayed = XSaveTool.GetData(saveKey) == true
|
||
return not isPlayed
|
||
end
|
||
|
||
-- 设置关卡已播解锁动画
|
||
function XMaverick2Manager.SetStagePlayUnlockAnim(stageId)
|
||
local saveKey = XMaverick2Manager.GetUnlockAnimSaveKey(stageId)
|
||
XSaveTool.SaveData(saveKey, true)
|
||
end
|
||
|
||
function XMaverick2Manager.GetUnlockAnimSaveKey(stageId)
|
||
return XDataCenter.Maverick2Manager.GetActivitySaveKey() .. "XMaverick2Manager_GetUnlockAnimSaveKey_stageId:" .. tostring(stageId)
|
||
end
|
||
|
||
-- 上一次通关的关卡id
|
||
function XMaverick2Manager.GetLastPassStageId()
|
||
return LastPassStageId
|
||
end
|
||
|
||
-- 获取每日关卡
|
||
function XMaverick2Manager.GetDailyStage()
|
||
return DailyStageDic
|
||
end
|
||
|
||
-- 是否显示每日关卡
|
||
function XMaverick2Manager.IsShowDailyStage(stageId)
|
||
return DailyStageDic[stageId] == true
|
||
end
|
||
|
||
-- 是否解锁困难章节列表
|
||
function XMaverick2Manager.IsUnlockDifficultChapterList()
|
||
local configs = XMaverick2Configs.GetMaverick2Chapter()
|
||
for _, config in ipairs(configs) do
|
||
local isUnlock = config.PreStageId == 0 or XMaverick2Manager.IsStagePassed(config.PreStageId)
|
||
if isUnlock and config.IfFlag == 1 then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- 获取积分关卡记录
|
||
function XMaverick2Manager.GetScoreStageRecord()
|
||
return ScoreStageRecord
|
||
end
|
||
|
||
-- 播放BGM
|
||
function XMaverick2Manager.PlayBGM()
|
||
local chapterId = XDataCenter.Maverick2Manager.GetLastUnlockChapterId()
|
||
local chapterCfg = XMaverick2Configs.GetMaverick2Chapter(chapterId, true)
|
||
local cueId = chapterCfg.Bgm
|
||
|
||
-- 通用结算界面挂了组件在destroy时播放203音效,这里延迟一帧播放
|
||
XScheduleManager.ScheduleOnce(function()
|
||
CSXAudioManager.StopAll()
|
||
CSXAudioManager.PlayMusicWithAnalyzer(cueId)
|
||
end, 100)
|
||
end
|
||
|
||
-- 播放章节动画
|
||
function XMaverick2Manager.PlayChapterMovie(chapterId, cb)
|
||
local key = XMaverick2Manager.GetActivitySaveKey() .. "XMaverick2Manager_PlayChapterMovie_" .. tostring(chapterId)
|
||
local movieId = XMaverick2Configs.GetChapterOpenMovieId(chapterId)
|
||
if not XSaveTool.GetData(key) and movieId then
|
||
XDataCenter.MovieManager.PlayMovie(movieId, cb, nil, nil, false)
|
||
XSaveTool.SaveData(key, true)
|
||
else
|
||
if cb then
|
||
cb()
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 优先打开本地记录的上次所选章节,没有本地记录则打开最新章节
|
||
function XMaverick2Manager.GetLastSelChapterId()
|
||
local key = XMaverick2Manager.GetLastSelChapterSaveKey()
|
||
local chapterId = XSaveTool.GetData(key)
|
||
if chapterId then
|
||
return chapterId
|
||
else
|
||
return XMaverick2Manager.GetLastUnlockChapterId()
|
||
end
|
||
end
|
||
|
||
-- 保存最后选中的章节记录
|
||
function XMaverick2Manager.SaveLastSelChapterId(chapterId)
|
||
local key = XMaverick2Manager.GetLastSelChapterSaveKey()
|
||
XSaveTool.SaveData(key, chapterId)
|
||
end
|
||
|
||
function XMaverick2Manager.GetLastSelChapterSaveKey()
|
||
return XMaverick2Manager.GetActivitySaveKey() .. "XUiMaverick2Explore_GetLastSelChapterKey"
|
||
end
|
||
|
||
-- 是否打开过每日关卡
|
||
function XMaverick2Manager.IsOpenedDailyStage()
|
||
local key = XMaverick2Manager.GetOpenDailyStageSaveKey()
|
||
return XSaveTool.GetData(key) == true
|
||
end
|
||
|
||
-- 保存打开过每日关卡
|
||
function XMaverick2Manager.SaveOpenDailyStage()
|
||
local key = XMaverick2Manager.GetOpenDailyStageSaveKey()
|
||
XSaveTool.SaveData(key, true)
|
||
end
|
||
|
||
function XMaverick2Manager.GetOpenDailyStageSaveKey()
|
||
return XMaverick2Manager.GetActivitySaveKey() .. "XUiMaverick2Explore_GetOpenDailyStageSaveKey"
|
||
end
|
||
|
||
-------------------------------------------------- 章节关卡 end --------------------------------------------------
|
||
|
||
|
||
-------------------------------------------------- 心智天赋 begin --------------------------------------------------
|
||
|
||
-- 获取心智单元数量
|
||
function XMaverick2Manager.GetUnitCount()
|
||
return XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.Maverick2Unit)
|
||
end
|
||
|
||
-- 获取心智天赋等级
|
||
function XMaverick2Manager.GetMentalLv()
|
||
return MentalLevel
|
||
end
|
||
|
||
-- 获取心智天赋最高等级
|
||
function XMaverick2Manager.GetMentalMaxLv()
|
||
local configs = XMaverick2Configs.GetMaverick2Mental()
|
||
return #configs
|
||
end
|
||
|
||
-- 检测心智天赋升级
|
||
function XMaverick2Manager.CheckMentalLvUp(callback)
|
||
-- 计算等级
|
||
local ownUnitCnt = XMaverick2Manager.GetUnitCount() -- 当前已拥有的单元数量
|
||
local configs = XMaverick2Configs.GetMaverick2Mental()
|
||
local lastLv = MentalLevel
|
||
local lv = MentalLevel
|
||
for _, config in ipairs(configs) do
|
||
if ownUnitCnt >= config.NeedUnit then
|
||
lv = config.Level
|
||
end
|
||
end
|
||
|
||
-- 请求协议
|
||
if lv > MentalLevel then
|
||
local request = { MentalLevel = lv }
|
||
XNetwork.Call("Maverick2UpgradeMentalLevelRequest", request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
MentalLevel = lv
|
||
|
||
if callback then
|
||
callback()
|
||
end
|
||
|
||
-- 打开升级成功界面,从0升到1级不弹界面
|
||
if lv ~= 1 then
|
||
XLuaUiManager.Open("UiMaverick2LevelUp", lastLv, lv)
|
||
end
|
||
end)
|
||
end
|
||
end
|
||
|
||
-- 获取解锁的天赋组id列表
|
||
local GetTalentUnlockGroupIds = function(robotId)
|
||
local unlockGroupIds = {}
|
||
local treeCfgs = XMaverick2Configs.GetRobotTalentCfg(robotId)
|
||
local mentalLv = XDataCenter.Maverick2Manager.GetMentalLv()
|
||
for _, treeCfg in ipairs(treeCfgs) do
|
||
local isUnlock = mentalLv >= treeCfg.NeedMentalLv
|
||
if isUnlock then
|
||
table.insert(unlockGroupIds, treeCfg.TalentGroupId)
|
||
end
|
||
end
|
||
|
||
return unlockGroupIds
|
||
end
|
||
|
||
-- 是否显示心智天赋的红点
|
||
function XMaverick2Manager.IsShowTalentRed(robotId)
|
||
local unlockGroupIds = GetTalentUnlockGroupIds(robotId)
|
||
local lastUnlockGroupIds = XMaverick2Manager.GetTalentRedUnlockGroupIds(robotId)
|
||
return #unlockGroupIds > #lastUnlockGroupIds and #unlockGroupIds > 1
|
||
end
|
||
|
||
-- 获取本地保存的解锁天赋组id列表
|
||
function XMaverick2Manager.GetTalentRedUnlockGroupIds(robotId)
|
||
local key = XMaverick2Manager.GetTalentRedSaveKey(robotId)
|
||
return XSaveTool.GetData(key) or {}
|
||
end
|
||
|
||
-- 刷新本地保存的解锁天赋组id列表
|
||
function XMaverick2Manager.RefreshTalentRedUnlockGroupIds(robotId)
|
||
local groupIds = GetTalentUnlockGroupIds(robotId)
|
||
local key = XMaverick2Manager.GetTalentRedSaveKey(robotId)
|
||
XSaveTool.SaveData(key, groupIds)
|
||
end
|
||
|
||
function XMaverick2Manager.GetTalentRedSaveKey(robotId)
|
||
return XMaverick2Manager.GetActivitySaveKey() .. "XMaverick2Manager_GetTalentRedSaveKey_robotId:" .. tostring(robotId)
|
||
end
|
||
|
||
-------------------------------------------------- 心智天赋 end --------------------------------------------------
|
||
|
||
|
||
-------------------------------------------------- 机器人 begin --------------------------------------------------
|
||
-- 设置机器人数据
|
||
function XMaverick2Manager.SetCharacterDatas(characterDatas)
|
||
CharacterDataDic = {}
|
||
for _, charData in ipairs(characterDatas) do
|
||
local robotId = charData.RobotId
|
||
local newCharData = {} -- 这里把TalentGroupDatas和TalentDatas从list转成dic保存,方便读取
|
||
newCharData.RobotId = robotId
|
||
newCharData.TalentGroupDatas = {}
|
||
for _, groupData in ipairs(charData.TalentGroupDatas) do
|
||
local groupId = groupData.TalentGroupId
|
||
local newGroupData = {}
|
||
newGroupData.TalentGroupId = groupId
|
||
newGroupData.TalentDatas = {}
|
||
for _, talentData in ipairs(groupData.TalentDatas) do
|
||
newGroupData.TalentDatas[talentData.TalentId] = talentData
|
||
end
|
||
|
||
newCharData.TalentGroupDatas[groupId] = newGroupData
|
||
end
|
||
|
||
CharacterDataDic[robotId] = newCharData
|
||
newCharData.AssignUnit = charData.AssignUnit
|
||
newCharData.AssignActiveUnit = XMaverick2Manager.CalcAssignActiveUnitCnt(robotId)
|
||
end
|
||
end
|
||
|
||
-- 获取机器人数据
|
||
function XMaverick2Manager.GetCharacterData(robotId)
|
||
return CharacterDataDic[robotId]
|
||
end
|
||
|
||
-- 新增一个刚解锁的机器人
|
||
function XMaverick2Manager.AddCharacterData(robotId)
|
||
if not CharacterDataDic[robotId] then
|
||
local charData = {}
|
||
CharacterDataDic[robotId] = charData
|
||
charData.RobotId = robotId
|
||
charData.AssignUnit = 0
|
||
charData.AssignActiveUnit = 0
|
||
charData.TalentGroupDatas = {}
|
||
end
|
||
end
|
||
|
||
-- 是否有机器人数据
|
||
function XMaverick2Manager.HaveCharacterData()
|
||
for _, charData in pairs(CharacterDataDic) do
|
||
if charData then
|
||
return true
|
||
end
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
-- 获取机器人的天赋等级
|
||
function XMaverick2Manager.GetTalentLv(robotId, groupId, talentId)
|
||
local robotData = CharacterDataDic[robotId]
|
||
if robotData then
|
||
local groupData = robotData.TalentGroupDatas[groupId]
|
||
if groupData then
|
||
local talentData = groupData.TalentDatas[talentId]
|
||
if talentData then
|
||
return talentData.Level
|
||
end
|
||
end
|
||
end
|
||
|
||
return 0
|
||
end
|
||
|
||
-- 获取机器人当前天赋等级对应的配置表列表
|
||
function XMaverick2Manager.GetRobotTalentCfgs(robotId)
|
||
local talentCfgList = {}
|
||
local robotData = CharacterDataDic[robotId]
|
||
if robotData then
|
||
for _, groupData in pairs(robotData.TalentGroupDatas) do
|
||
for _, talentData in pairs(groupData.TalentDatas) do
|
||
if talentData.Level > 0 then
|
||
local config = XMaverick2Configs.GetTalentLvConfig(talentData.TalentId, talentData.Level)
|
||
if config then
|
||
table.insert(talentCfgList, config)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
return talentCfgList
|
||
end
|
||
|
||
-- 获取机器人当前天赋汇总
|
||
function XMaverick2Manager.GetRobotSummaryInfos(robotId, summaryTab)
|
||
local talenInfos = {}
|
||
local robotData = CharacterDataDic[robotId]
|
||
if robotData then
|
||
for _, groupData in pairs(robotData.TalentGroupDatas) do
|
||
for _, talentData in pairs(groupData.TalentDatas) do
|
||
local talentInfo = XMaverick2Configs.GetTalentInfo(talentData.TalentId)
|
||
local isShow = talentData.Level > 0 and talentInfo.SummaryTab == summaryTab and XMaverick2Manager.IsTalentGroupUnlock(robotId, groupData.TalentGroupId)
|
||
if isShow then
|
||
local config = XMaverick2Configs.GetTalentLvConfig(talentData.TalentId, talentData.Level)
|
||
local info = {TalentId = talentData.TalentId, Name = talentInfo.Name, Desc = config.Desc, Icon = config.Icon, Level = talentData.Level}
|
||
table.insert(talenInfos, info)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
table.sort(talenInfos, function(a, b)
|
||
return a.TalentId < b.TalentId
|
||
end)
|
||
|
||
return talenInfos
|
||
end
|
||
|
||
-- 获取机器人累计分配的心智单元
|
||
function XMaverick2Manager.GetAssignUnitCnt(robotId)
|
||
local robotData = CharacterDataDic[robotId]
|
||
if robotData then
|
||
return robotData.AssignUnit
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function XMaverick2Manager.CalcAssignUnitCnt(robotId)
|
||
local robotData = CharacterDataDic[robotId]
|
||
if robotData then
|
||
local assignUnit = 0
|
||
for _, gData in pairs(robotData.TalentGroupDatas) do
|
||
for _, tData in pairs(gData.TalentDatas) do
|
||
assignUnit = assignUnit + XMaverick2Configs.GetTalentLvCostUnit(tData.TalentId, tData.Level)
|
||
end
|
||
end
|
||
return assignUnit
|
||
end
|
||
return 0
|
||
end
|
||
|
||
-- 获取机器人累计分配且激活的心智单元
|
||
function XMaverick2Manager.GetAssignActiveUnitCnt(robotId)
|
||
local robotData = CharacterDataDic[robotId]
|
||
if robotData then
|
||
return robotData.AssignActiveUnit
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function XMaverick2Manager.CalcAssignActiveUnitCnt(robotId)
|
||
local robotData = CharacterDataDic[robotId]
|
||
if robotData then
|
||
local assignActiveUnit = 0
|
||
local treeCfgs = XMaverick2Configs.GetRobotTalentCfg(robotId)
|
||
for _, treeCfg in ipairs(treeCfgs) do
|
||
if assignActiveUnit >= treeCfg.NeedUnit then
|
||
local groupData = robotData.TalentGroupDatas[treeCfg.TalentGroupId]
|
||
if groupData then
|
||
for _, tData in pairs(groupData.TalentDatas) do
|
||
assignActiveUnit = assignActiveUnit + XMaverick2Configs.GetTalentLvCostUnit(tData.TalentId, tData.Level)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return assignActiveUnit
|
||
end
|
||
return 0
|
||
end
|
||
|
||
-- 获取机器人剩余可分配的心智单元
|
||
function XMaverick2Manager.GetRemainUnitCnt(robotId)
|
||
local allCnt = XMaverick2Manager.GetUnitCount()
|
||
local assignCnt = XMaverick2Manager.GetAssignUnitCnt(robotId)
|
||
return allCnt - assignCnt
|
||
end
|
||
|
||
-- 请求升级天赋
|
||
function XMaverick2Manager.RequestUpgradeTalent(robotId, groupId, talentId, cb)
|
||
local request = { RobotId = robotId, GroupId = groupId, TalentId = talentId }
|
||
XNetwork.Call("Maverick2UpgradeTalentRequest", request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
-- 更新数据
|
||
local curLv = XMaverick2Manager.GetTalentLv(robotId, groupId, talentId)
|
||
XMaverick2Manager.UpdateRobotTalentLv(robotId, groupId, talentId, curLv + 1)
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 请求重置单个天赋
|
||
function XMaverick2Manager.RequestResetSingleTalent(robotId, groupId, talentId, cb)
|
||
local request = { RobotId = robotId, GroupId = groupId, TalentId = talentId }
|
||
XNetwork.Call("Maverick2ResetSingleTalentRequest", request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
-- 更新数据
|
||
XMaverick2Manager.UpdateRobotTalentLv(robotId, groupId, talentId, 0)
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 更新机器人天赋等级
|
||
function XMaverick2Manager.UpdateRobotTalentLv(robotId, groupId, talentId, lv)
|
||
-- 创建/更新天赋等级
|
||
local robotData = CharacterDataDic[robotId]
|
||
local groupData = robotData.TalentGroupDatas[groupId]
|
||
if not groupData then
|
||
groupData = {}
|
||
groupData.TalentGroupId = groupId
|
||
groupData.TalentDatas = {}
|
||
robotData.TalentGroupDatas[groupId] = groupData
|
||
end
|
||
|
||
local talentData = groupData.TalentDatas[talentId]
|
||
if not talentData then
|
||
talentData = {}
|
||
talentData.TalentId = talentId
|
||
groupData.TalentDatas[talentId] = talentData
|
||
end
|
||
talentData.Level = lv
|
||
|
||
robotData.AssignUnit = XMaverick2Manager.CalcAssignUnitCnt(robotId)
|
||
robotData.AssignActiveUnit = XMaverick2Manager.CalcAssignActiveUnitCnt(robotId)
|
||
end
|
||
|
||
-- 重置机器人的所有天赋
|
||
function XMaverick2Manager.RequestResetRobotAllTalent(robotId, cb)
|
||
local robotData = CharacterDataDic[robotId]
|
||
if robotData == nil or robotData.AssignUnit == 0 then
|
||
return
|
||
end
|
||
|
||
local request = { RobotId = robotId }
|
||
XNetwork.Call("Maverick2ResetAllTalentRequest", request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
-- 重置机器人所有天赋数据
|
||
XMaverick2Manager.ResetRobotAllTalent(robotId)
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 重置机器人所有天赋数据
|
||
function XMaverick2Manager.ResetRobotAllTalent(robotId)
|
||
local robotData = CharacterDataDic[robotId]
|
||
for _, groupData in pairs(robotData.TalentGroupDatas) do
|
||
for _, talentData in pairs(groupData.TalentDatas) do
|
||
talentData.Level = 0
|
||
end
|
||
end
|
||
robotData.AssignUnit = 0
|
||
robotData.AssignActiveUnit = 0
|
||
end
|
||
|
||
-- 获取机器人天赋组是否解锁
|
||
function XMaverick2Manager.IsTalentGroupUnlock(robotId, talentGroupId)
|
||
local treeCfg = XMaverick2Configs.GetTalentTreeConfig(robotId, talentGroupId)
|
||
local assignUnit = XDataCenter.Maverick2Manager.GetAssignActiveUnitCnt(robotId)
|
||
local mentalLv = XDataCenter.Maverick2Manager.GetMentalLv()
|
||
local isLock = mentalLv < treeCfg.NeedMentalLv or assignUnit < treeCfg.NeedUnit
|
||
return not isLock
|
||
end
|
||
|
||
-- 根据关卡获取机器人列表
|
||
function XMaverick2Manager.GetRobotCfgList(stageId, isFilterLock)
|
||
local list = {}
|
||
local robotCfgs = XMaverick2Configs.GetMaverick2Robot()
|
||
for _, robotCfg in pairs(robotCfgs) do
|
||
if isFilterLock then
|
||
local isUnlock = XMaverick2Manager.IsRobotUnlock(robotCfg.RobotId)
|
||
if isUnlock then
|
||
table.insert(list, robotCfg)
|
||
end
|
||
else
|
||
table.insert(list, robotCfg)
|
||
end
|
||
end
|
||
|
||
-- 禁止机器人id列表
|
||
local forbidIds = {}
|
||
if stageId then
|
||
local stageCfg = XMaverick2Configs.GetMaverick2Stage(stageId, true)
|
||
for _, forbidId in ipairs(stageCfg.ForbidRobot) do
|
||
forbidIds[forbidId] = true
|
||
end
|
||
end
|
||
|
||
-- 排序
|
||
table.sort(list, function(a, b)
|
||
local isUnlockA = XMaverick2Manager.IsRobotUnlock(a.RobotId) and 1 or 0
|
||
local isUnlockB = XMaverick2Manager.IsRobotUnlock(b.RobotId) and 1 or 0
|
||
if isUnlockA ~= isUnlockB then
|
||
return isUnlockA > isUnlockB
|
||
else
|
||
local isUnForbidA = forbidIds[a.RobotId] and 0 or 1
|
||
local isUnForbidB = forbidIds[b.RobotId] and 0 or 1
|
||
if isUnForbidA ~= isUnForbidB then
|
||
return isUnForbidA > isUnForbidB
|
||
else
|
||
return a.RobotId < b.RobotId
|
||
end
|
||
end
|
||
end)
|
||
|
||
return list
|
||
end
|
||
|
||
-- 判断机器人是否被禁用
|
||
function XMaverick2Manager.IsRobotForbid(robotId, stageId)
|
||
if not stageId then
|
||
return false
|
||
end
|
||
|
||
local stageCfg = XMaverick2Configs.GetMaverick2Stage(stageId, true)
|
||
for _, forbidId in ipairs(stageCfg.ForbidRobot) do
|
||
if forbidId == robotId then
|
||
return true
|
||
end
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
-- 机器人是否解锁
|
||
function XMaverick2Manager.IsRobotUnlock(robotId)
|
||
local isUnlock = XMaverick2Manager.GetCharacterData(robotId) ~= nil
|
||
return isUnlock
|
||
end
|
||
|
||
-- 机器人是否达到解锁条件
|
||
function XMaverick2Manager.IsRobotUnlockCondition(robotId)
|
||
local robotCfg = XMaverick2Configs.GetMaverick2Robot(robotId, true)
|
||
local isUnlock = true
|
||
if robotCfg.Condition ~= 0 then
|
||
isUnlock = XConditionManager.CheckCondition(robotCfg.Condition)
|
||
end
|
||
return isUnlock
|
||
end
|
||
|
||
-- 保存最后选中的机器人记录
|
||
function XMaverick2Manager.SaveLastSelRobotId(robotId)
|
||
local key = XMaverick2Manager.GetLastSelRobotSaveKey()
|
||
XSaveTool.SaveData(key, robotId)
|
||
end
|
||
|
||
-- 获取上次所选机器人,没有则返回第一个
|
||
function XMaverick2Manager.GetLastSelRobotId()
|
||
local key = XMaverick2Manager.GetLastSelRobotSaveKey()
|
||
local robotId = XSaveTool.GetData(key)
|
||
if robotId then
|
||
return robotId
|
||
else
|
||
local robotCfgs = XMaverick2Configs.GetMaverick2Robot()
|
||
for _, robotCfg in pairs(robotCfgs) do
|
||
local isUnlock = XMaverick2Manager.IsRobotUnlock(robotCfg.RobotId)
|
||
if isUnlock then
|
||
return robotCfg.RobotId
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function XMaverick2Manager.GetLastSelRobotSaveKey()
|
||
return XDataCenter.Maverick2Manager.GetActivitySaveKey() .. "XUiMaverick2Explore_GetLastSelRobotSaveKey"
|
||
end
|
||
|
||
-- 保存机器人选中的支援技能
|
||
function XMaverick2Manager.SaveRobotSelHelpSkill(robotId, talentId)
|
||
local key = XMaverick2Manager.GetRobotSelHelpSkillSaveKey(robotId)
|
||
XSaveTool.SaveData(key, talentId)
|
||
end
|
||
|
||
-- 获取上次机器人选中的支援技能
|
||
function XMaverick2Manager.GetRobotSelHelpSkill(robotId)
|
||
local key = XMaverick2Manager.GetRobotSelHelpSkillSaveKey(robotId)
|
||
local talentId = XSaveTool.GetData(key)
|
||
return talentId
|
||
end
|
||
|
||
function XMaverick2Manager.GetRobotSelHelpSkillSaveKey(robotId)
|
||
return XDataCenter.Maverick2Manager.GetActivitySaveKey() .. "XUiMaverick2Explore_GetRobotSelHelpSkillSaveKey_robotId:" .. robotId
|
||
end
|
||
|
||
-- 获取机器人的所有属性
|
||
function XMaverick2Manager.GetRobotPropertyList(robotId)
|
||
local allAttr = {}
|
||
|
||
-- 角色基础
|
||
local robotCfg = XMaverick2Configs.GetMaverick2Robot(robotId, true)
|
||
for i, attrId in ipairs(robotCfg.AttrId) do
|
||
local attr = {AttrId = attrId, AttrValue = robotCfg.AttrValue[i] }
|
||
table.insert(allAttr, attr)
|
||
end
|
||
|
||
-- 心智等级
|
||
local mentalLv = XDataCenter.Maverick2Manager.GetMentalLv()
|
||
if mentalLv ~= 0 then
|
||
local mentalCfg = XMaverick2Configs.GetMaverick2Mental(mentalLv, true)
|
||
for i, attrId in ipairs(mentalCfg.AttrId) do
|
||
local attr = {AttrId = attrId, AttrValue = mentalCfg.AttrValue[i] }
|
||
table.insert(allAttr, attr)
|
||
end
|
||
end
|
||
|
||
-- 天赋加成
|
||
local talentCfgs = XDataCenter.Maverick2Manager.GetRobotTalentCfgs(robotId)
|
||
for _, talentCfg in ipairs(talentCfgs) do
|
||
if talentCfg.AttrId ~= 0 then
|
||
local attr = {AttrId = talentCfg.AttrId, AttrValue = talentCfg.AttrValue }
|
||
table.insert(allAttr, attr)
|
||
end
|
||
end
|
||
|
||
-- 整合数据
|
||
local attDic = {}
|
||
for _, attr in ipairs(allAttr) do
|
||
if attDic[attr.AttrId] then
|
||
attDic[attr.AttrId] = attDic[attr.AttrId] + attr.AttrValue
|
||
else
|
||
attDic[attr.AttrId] = attr.AttrValue
|
||
end
|
||
end
|
||
local attrList = {}
|
||
for attrId, attrValue in pairs(attDic) do
|
||
local attr = {AttrId = attrId, AttrValue = attrValue}
|
||
table.insert(attrList, attr)
|
||
end
|
||
table.sort(attrList, function(a, b)
|
||
local configA = XMaverick2Configs.GetMaverick2Attribute(a.AttrId, true)
|
||
local configB = XMaverick2Configs.GetMaverick2Attribute(b.AttrId, true)
|
||
return configA.Order < configB.Order
|
||
end)
|
||
|
||
return attrList
|
||
end
|
||
|
||
-- 检测是否有机器人解锁
|
||
function XMaverick2Manager.CheckRobotUnlock()
|
||
local robotCfgs = XMaverick2Configs.GetMaverick2Robot()
|
||
for _, robotCfg in pairs(robotCfgs) do
|
||
local robotId = robotCfg.RobotId
|
||
local robotData = XDataCenter.Maverick2Manager.GetCharacterData(robotId)
|
||
local isUnlock = XDataCenter.Maverick2Manager.IsRobotUnlockCondition(robotId)
|
||
if not robotData and isUnlock then
|
||
local request = { RobotId = robotId }
|
||
XNetwork.Call("Maverick2UnlockCharacterRequest", request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
XDataCenter.Maverick2Manager.AddCharacterData(robotId)
|
||
|
||
-- 打开解锁界面
|
||
if robotCfg.Condition ~= 0 then
|
||
local data = {}
|
||
data.Title = XUiHelper.GetText("Maverick2RobotlUnlock")
|
||
data.Name = robotCfg.Name
|
||
data.Desc = robotCfg.UnLockDesc
|
||
data.Icon = robotCfg.Icon
|
||
XLuaUiManager.Open("UiMaverick2Unlock", data)
|
||
end
|
||
end)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 机器人是否显示红点
|
||
function XMaverick2Manager.IsRobotRed(robotId)
|
||
local isUnlock = XMaverick2Manager.IsRobotUnlock(robotId)
|
||
if not isUnlock then
|
||
return false
|
||
end
|
||
|
||
local saveKey = XMaverick2Manager.GetRobotSaveKey(robotId)
|
||
local isRemove = XSaveTool.GetData(saveKey) == true
|
||
return not isRemove
|
||
end
|
||
|
||
-- 移除机器人红点
|
||
function XMaverick2Manager.RemoveRobotRed(robotId)
|
||
local saveKey = XMaverick2Manager.GetRobotSaveKey(robotId)
|
||
XSaveTool.SaveData(saveKey, true)
|
||
end
|
||
|
||
function XMaverick2Manager.GetRobotSaveKey(robotId)
|
||
return XMaverick2Manager.GetActivitySaveKey() .. "XMaverick2Manager_GetRobotSaveKey_robotId:" .. tostring(robotId)
|
||
end
|
||
|
||
-------------------------------------------------- 机器人 end --------------------------------------------------
|
||
|
||
|
||
-------------------------------------------------- 支援技 begin --------------------------------------------------
|
||
-- 设置支援技
|
||
function XMaverick2Manager.SetAssistTalentDatas(assistTalentDatas)
|
||
AssistTalentLvDic = {}
|
||
for _, groupData in ipairs(assistTalentDatas) do
|
||
for _, talentData in ipairs(groupData.TalentDatas) do
|
||
XMaverick2Manager.UpdateAssistTalentLv(talentData.TalentId, talentData.Level)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 获取支援技等级
|
||
function XMaverick2Manager.GetAssistTalentLv(talentId)
|
||
local lv = AssistTalentLvDic[talentId]
|
||
return lv and lv or 0
|
||
end
|
||
|
||
-- 获取支援技是否解锁
|
||
function XMaverick2Manager.IsAssistTalentUnlock(talentId)
|
||
local lv = XMaverick2Manager.GetAssistTalentLv(talentId)
|
||
return lv > 0
|
||
end
|
||
|
||
-- 更新支援技等级
|
||
function XMaverick2Manager.UpdateAssistTalentLv(talentId, lv)
|
||
AssistTalentLvDic[talentId] = lv
|
||
end
|
||
|
||
-- 检测支援技升级
|
||
function XMaverick2Manager.CheckAssistTalentLvUp()
|
||
local configs = XMaverick2Configs.GetRobotAssistSkillConfigs()
|
||
for _, config in ipairs(configs) do
|
||
local groupId = config.TalentGroupId
|
||
local talentId = config.TalentId
|
||
local lvConfigs = XMaverick2Configs.GetTalentLvConfigs(talentId)
|
||
local lv = XMaverick2Manager.GetAssistTalentLv(talentId)
|
||
local nextLv = lv + 1
|
||
local nextLvCfg = lvConfigs[nextLv]
|
||
if nextLvCfg then
|
||
local isUnlock = true
|
||
if nextLvCfg.Condition ~= 0 then
|
||
isUnlock = XConditionManager.CheckCondition(nextLvCfg.Condition)
|
||
end
|
||
if isUnlock then
|
||
local request = { GroupId = groupId, TalentId = talentId }
|
||
XNetwork.Call("Maverick2UpgradeAssistTalentRequest", request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
XMaverick2Manager.UpdateAssistTalentLv(talentId, nextLv)
|
||
|
||
-- 打开解锁界面
|
||
if nextLvCfg.Condition then
|
||
local data = {}
|
||
data.Title = XUiHelper.GetText("Maverick2HelpSkillUnlock")
|
||
data.Name = nextLvCfg.UnlockName
|
||
data.Desc = nextLvCfg.UnlockDesc
|
||
data.Icon = nextLvCfg.Icon
|
||
data.IsSkill = true
|
||
XLuaUiManager.Open("UiMaverick2Unlock", data)
|
||
end
|
||
end)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
-------------------------------------------------- 支援技 end --------------------------------------------------
|
||
|
||
|
||
|
||
|
||
|
||
-------------------------------------------------- 任务 begin --------------------------------------------------
|
||
|
||
-- 检查所有任务是否有奖励可领取
|
||
function XMaverick2Manager.CheckTaskCanReward()
|
||
if not XMaverick2Manager.IsOpen() then
|
||
return false
|
||
end
|
||
local groupIdList = XMaverick2Configs.GetTaskGroupIds()
|
||
for _, groupId in pairs(groupIdList) do
|
||
if XDataCenter.TaskManager.CheckLimitTaskList(groupId) then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
-------------------------------------------------- 任务 end --------------------------------------------------
|
||
|
||
|
||
-------------------------------------------------- 商店 begin --------------------------------------------------
|
||
-- 请求商店数据
|
||
function XMaverick2Manager.RequestShopInfoList(cb)
|
||
local shopIds = XMaverick2Configs.GetShopIds()
|
||
XShopManager.GetShopInfoList(shopIds, function()
|
||
if cb then
|
||
cb()
|
||
end
|
||
end, XShopManager.ActivityShopType.Maverick2)
|
||
end
|
||
|
||
-- 打开商店界面
|
||
function XMaverick2Manager.OpenUiShop()
|
||
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.ShopCommon)
|
||
or XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.ShopActive) then
|
||
|
||
XMaverick2Manager.RequestShopInfoList(function()
|
||
local shopIds = XMaverick2Configs.GetShopIds()
|
||
XLuaUiManager.Open("UiMaverick2Shop", shopIds)
|
||
end)
|
||
end
|
||
end
|
||
|
||
-- 获取商店解锁的商品id列表
|
||
local GetShopUnlockGoodIds = function(shopIds)
|
||
local goodIdList = {}
|
||
for _, shopId in ipairs(shopIds) do
|
||
local shopGoods = XShopManager.GetShopGoodsList(shopId)
|
||
for _, good in ipairs(shopGoods) do
|
||
local isUnlock = true
|
||
local conditionIds = good.ConditionIds
|
||
if conditionIds and #conditionIds > 0 then
|
||
for _, id in pairs(conditionIds) do
|
||
local ret, desc = XConditionManager.CheckCondition(id)
|
||
isUnlock = isUnlock and ret
|
||
end
|
||
end
|
||
if isUnlock then
|
||
table.insert(goodIdList, good.Id)
|
||
end
|
||
end
|
||
end
|
||
|
||
return goodIdList
|
||
end
|
||
|
||
function XMaverick2Manager.IsShowShopRed()
|
||
local isRed = false
|
||
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.ShopCommon, nil, true)
|
||
or XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.ShopActive, nil, true) then
|
||
|
||
local shopIds = XMaverick2Configs.GetShopIds()
|
||
local unlockGoodIds = IsRequestShopInfo and GetShopUnlockGoodIds(shopIds) or {}
|
||
local lastGoodIds = XMaverick2Manager.GetShopLocalUnlockGoodIds()
|
||
isRed = #unlockGoodIds > #lastGoodIds
|
||
|
||
-- 未请求商店数据时,请求商店数据后发送事件刷新
|
||
if not IsRequestShopInfo then
|
||
IsRequestShopInfo = true
|
||
XMaverick2Manager.RequestShopInfoList(function()
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_ACTIVITY_CHAPTER_REFRESH_RED)
|
||
end)
|
||
end
|
||
end
|
||
|
||
return isRed
|
||
end
|
||
|
||
-- 获取本地保存的解锁商品id列表
|
||
function XMaverick2Manager.GetShopLocalUnlockGoodIds()
|
||
local key = XMaverick2Manager.GetShopGoodUnlockSaveKey()
|
||
return XSaveTool.GetData(key) or {}
|
||
end
|
||
|
||
-- 刷新本地保存的解锁商品id列表
|
||
function XMaverick2Manager.RefreshShopLocalUnlockGoodIds()
|
||
local shopIds = XMaverick2Configs.GetShopIds()
|
||
local goodIds = IsRequestShopInfo and GetShopUnlockGoodIds(shopIds) or {}
|
||
local key = XMaverick2Manager.GetShopGoodUnlockSaveKey()
|
||
XSaveTool.SaveData(key, goodIds)
|
||
end
|
||
|
||
function XMaverick2Manager.GetShopGoodUnlockSaveKey()
|
||
return XMaverick2Manager.GetActivitySaveKey() .. "XMaverick2Manager_GetShopGoodUnlockSaveKey"
|
||
end
|
||
-------------------------------------------------- 商店 end --------------------------------------------------
|
||
|
||
|
||
-------------------------------------------------- 排行榜 begin --------------------------------------------------
|
||
|
||
function XMaverick2Manager.OpenUiRank()
|
||
local request = { ActivityId = ActivityId }
|
||
XNetwork.Call("Maverick2GetRankRequest", request, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
RankData = res
|
||
|
||
XLuaUiManager.Open("UiMaverick2Rank")
|
||
end)
|
||
end
|
||
|
||
function XMaverick2Manager.GetRankingList()
|
||
return RankData.RankPlayerInfos
|
||
end
|
||
|
||
function XMaverick2Manager.GetMyRankInfo()
|
||
local myRank = {}
|
||
local percentRank = 100 -- 101名及以上显示百分比
|
||
local rank = RankData.Rank
|
||
if RankData.Rank > percentRank then
|
||
rank = math.floor(RankData.Rank * 100 / RankData.TotalCount) .. "%"
|
||
elseif RankData.Rank == 0 then
|
||
rank = XUiHelper.GetText("ExpeditionNoRanking")
|
||
end
|
||
myRank["Rank"] = rank
|
||
myRank["Id"] = XPlayer.Id
|
||
myRank["Name"] = XPlayer.Name
|
||
myRank["HeadPortraitId"] = XPlayer.CurrHeadPortraitId
|
||
myRank["HeadFrameId"] = XPlayer.CurrHeadFrameId
|
||
myRank["Score"] = RankData.Score
|
||
myRank["RobotIds"] = RankData.RobotIds
|
||
return myRank
|
||
end
|
||
|
||
function XMaverick2Manager.GetRankingSpecialIcon(rank)
|
||
if type(rank) ~= "number" or rank < 1 or rank > 3 then return end
|
||
local icon = CS.XGame.ClientConfig:GetString("BabelTowerRankIcon"..rank)
|
||
return icon
|
||
end
|
||
-------------------------------------------------- 排行榜 end --------------------------------------------------
|
||
|
||
|
||
-------------------------------------------------- 战斗 begin --------------------------------------------------
|
||
|
||
-- 进入战斗
|
||
function XMaverick2Manager.EnterFight(stageId, robotId, talentGroupId, talentId)
|
||
ReFightData = {StageId = stageId, RobotId = robotId, TalentGroupId = talentGroupId, TalentId = talentId}
|
||
XDataCenter.FubenManager.EnterMaverick2Fight(stageId, robotId, talentGroupId, talentId)
|
||
end
|
||
|
||
function XMaverick2Manager.ReEnterFight()
|
||
local isOpen = XMaverick2Manager.IsOpen()
|
||
if isOpen then
|
||
XDataCenter.FubenManager.EnterMaverick2Fight(ReFightData.StageId, ReFightData.RobotId, ReFightData.TalentGroupId, ReFightData.TalentId)
|
||
else
|
||
-- 活动结束弹出主界面
|
||
XLuaUiManager.RunMain()
|
||
XUiManager.TipMsg(XUiHelper.GetText("ActivityAlreadyOver"))
|
||
end
|
||
end
|
||
-------------------------------------------------- 战斗 end --------------------------------------------------
|
||
|
||
|
||
-------------------------------------------------- manager接口重写 begin --------------------------------------------------
|
||
function XMaverick2Manager.ExOpenMainUi()
|
||
--功能没开启
|
||
if not XFunctionManager.DetectionFunction(XMaverick2Manager.ExGetFunctionNameType()) then
|
||
return
|
||
end
|
||
--活动没开放
|
||
if not XMaverick2Manager.IsOpen() then
|
||
XUiManager.TipText("CommonActivityNotStart")
|
||
return
|
||
end
|
||
XLuaUiManager.Open("UiMaverick2Main")
|
||
end
|
||
|
||
function XMaverick2Manager.ExGetFunctionNameType()
|
||
return XFunctionManager.FunctionName.Maverick2
|
||
end
|
||
|
||
function XMaverick2Manager.InitStageInfo()
|
||
local cfgs = XMaverick2Configs.GetMaverick2Stage()
|
||
for k, cfg in pairs(cfgs) do
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(cfg.StageId)
|
||
stageInfo.Type = XDataCenter.FubenManager.StageType.Maverick2
|
||
end
|
||
end
|
||
|
||
function XMaverick2Manager.CallFinishFight()
|
||
local res = XDataCenter.FubenManager.FubenSettleResult
|
||
XDataCenter.FubenManager.FubenSettling = false
|
||
XDataCenter.FubenManager.FubenSettleResult = nil
|
||
|
||
--通知战斗结束,关闭战斗设置页面
|
||
CS.XGameEventManager.Instance:Notify(XEventId.EVENT_FIGHT_FINISH)
|
||
|
||
if not res then
|
||
-- 强退
|
||
XMaverick2Manager.ChallengeLose()
|
||
return
|
||
end
|
||
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
XMaverick2Manager.ChallengeLose()
|
||
CS.XGameEventManager.Instance:Notify(XEventId.EVENT_FUBEN_SETTLE_FAIL, res.Code)
|
||
return
|
||
end
|
||
|
||
local stageId = res.Settle.StageId
|
||
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FIGHT_RESULT, res.Settle)
|
||
|
||
XSoundManager.StopCurrentBGM()
|
||
XMaverick2Manager.FinishFight(res.Settle)
|
||
end
|
||
|
||
-- 战斗结束回调
|
||
function XMaverick2Manager.FinishFight(settle)
|
||
if settle.IsWin then
|
||
XMaverick2Manager.ChallengeWin(settle)
|
||
else
|
||
XMaverick2Manager.ChallengeLose()
|
||
end
|
||
end
|
||
|
||
-- 战斗胜利回调
|
||
function XMaverick2Manager.ChallengeWin(settleData)
|
||
local beginData = XDataCenter.FubenManager.GetFightBeginData()
|
||
local winData = XDataCenter.FubenManager.GetChallengeWinData(beginData, settleData)
|
||
local stage = XDataCenter.FubenManager.GetStageCfg(settleData.StageId)
|
||
local isKeepPlayingStory = stage and XFubenConfigs.IsKeepPlayingStory(stage.StageId) and (stage.EndStoryId)
|
||
local isNotPass = stage and stage.EndStoryId and not beginData.LastPassed
|
||
|
||
if isKeepPlayingStory or isNotPass then
|
||
-- 播放剧情
|
||
CsXUiManager.Instance:SetRevertAndReleaseLock(true)
|
||
XDataCenter.MovieManager.PlayMovie(stage.EndStoryId, function()
|
||
-- 弹出结算
|
||
CsXUiManager.Instance:SetRevertAndReleaseLock(false)
|
||
-- 防止带着bgm离开战斗
|
||
XSoundManager.StopCurrentBGM()
|
||
|
||
XMaverick2Manager.ShowReward(winData)
|
||
end)
|
||
else
|
||
-- 弹出结算
|
||
XMaverick2Manager.ShowReward(winData)
|
||
end
|
||
|
||
XEventManager.DispatchEvent(XEventId.EVENT_FIGHT_RESULT_WIN)
|
||
end
|
||
|
||
local GetStarsCount = function(starsMark)
|
||
local count = (starsMark & 1) + (starsMark & 2 > 0 and 1 or 0) + (starsMark & 4 > 0 and 1 or 0)
|
||
local map = {(starsMark & 1) > 0, (starsMark & 2) > 0, (starsMark & 4) > 0 }
|
||
return count, map
|
||
end
|
||
|
||
-- 打开奖励结算界面
|
||
function XMaverick2Manager.ShowReward(settleResult)
|
||
local settle = settleResult.SettleData
|
||
local stageId = settle.StageId
|
||
local stageCfg = XMaverick2Configs.GetMaverick2Stage(stageId, true)
|
||
|
||
-- 更新关卡数据
|
||
LastPassStageId = stageId
|
||
local starCnt, starsMap
|
||
if stageCfg.StageType == XMaverick2Configs.StageType.Daily then
|
||
DailyStageDic[stageId] = nil
|
||
else
|
||
local stageData = XMaverick2Manager.GetStageData(stageId)
|
||
starCnt, starsMap = GetStarsCount(settle.StarsMark)
|
||
if starCnt > stageData.StarCount then
|
||
stageData.StarCount = starCnt
|
||
end
|
||
XMaverick2Manager.SetStageData(stageData)
|
||
end
|
||
|
||
-- 更新积分数据
|
||
local oldScore = ScoreStageRecord.Score
|
||
local newScore = 0
|
||
if stageCfg.StageType == XMaverick2Configs.StageType.Score then
|
||
if settle.Maverick2SettleResult and settle.Maverick2SettleResult.Score > ScoreStageRecord.Score then
|
||
ScoreStageRecord.Score = settle.Maverick2SettleResult.Score
|
||
ScoreStageRecord.RobotIds = { ReFightData.RobotId }
|
||
newScore = settle.Maverick2SettleResult.Score
|
||
end
|
||
end
|
||
|
||
-- 打开结算界面
|
||
XLuaUiManager.Remove("UiMaverick2Character")
|
||
if stageCfg.StageType == XMaverick2Configs.StageType.Score then
|
||
XLuaUiManager.Open("UiMaverick2ScoreResult", settle, oldScore, newScore)
|
||
else
|
||
local beginData = XDataCenter.FubenManager.GetFightBeginData()
|
||
local winData = XDataCenter.FubenManager.GetChallengeWinData(beginData, settle)
|
||
winData.StarsMap = starsMap
|
||
|
||
local isBoss = stageCfg.StageType == XMaverick2Configs.StageType.MainLineBoss
|
||
local starDescs = XFubenConfigs.GetStarDesc(stageId)
|
||
local isShowCondition = isBoss and starDescs and #starDescs > 0
|
||
if isShowCondition then
|
||
XLuaUiManager.Open("UiSettleWinMainLine", winData)
|
||
else
|
||
XLuaUiManager.Open("UiSettleWin", winData, nil, nil, true)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- XFubenManager战斗失败回调
|
||
function XMaverick2Manager.ChallengeLose()
|
||
XLuaUiManager.Open("UiMaverick2Lose", XMaverick2Manager.ReEnterFight)
|
||
end
|
||
|
||
-------------------------------------------------- manager接口重写 end --------------------------------------------------
|
||
|
||
-- 活动数据刷新
|
||
function XMaverick2Manager.RefreshDataByServer(data)
|
||
ActivityId = data.ActivityId
|
||
-- 章节信息
|
||
XMaverick2Manager.SetChapterDatas(data.ChapterDatas)
|
||
-- 机器人数据
|
||
XMaverick2Manager.SetCharacterDatas(data.CharacterDatas)
|
||
-- 支援技
|
||
XMaverick2Manager.SetAssistTalentDatas(data.AssistTalentDatas)
|
||
-- 积分关
|
||
ScoreStageRecord = data.StagePassRecordForRank
|
||
-- 心智天赋
|
||
MentalLevel = data.MentalLevel
|
||
-- 每日关卡
|
||
XMaverick2Manager.RefreshDailyStageIds(data.DailyStageIds)
|
||
|
||
-- 重置自定义数据
|
||
LastPassStageId = nil
|
||
end
|
||
|
||
-- 每日关卡重置
|
||
function XMaverick2Manager.RefreshDailyStageIds(dailyStageIds)
|
||
DailyStageDic = {}
|
||
for _, stageId in ipairs(dailyStageIds) do
|
||
DailyStageDic[stageId] = true
|
||
end
|
||
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_MAVERICK2_UPDATE_DAILY)
|
||
end
|
||
|
||
XMaverick2Manager.Init()
|
||
return XMaverick2Manager
|
||
end
|
||
|
||
|
||
-- =========网络=========
|
||
|
||
-- 通知活动数据
|
||
XRpc.NotifyMaverick2Data = function(data)
|
||
XDataCenter.Maverick2Manager.RefreshDataByServer(data.Maverick2Data)
|
||
end
|
||
|
||
-- 通知每日关卡重置
|
||
XRpc.NotifyMaverick2DailyReset = function(data)
|
||
XDataCenter.Maverick2Manager.RefreshDailyStageIds(data.DailyStageIds)
|
||
end
|