1384 lines
52 KiB
Lua
1384 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
|