2023-07-14 19:35:33 +00:00
|
|
|
|
local XNieRChapter = require("XEntity/XNieR/XNieRChapter")
|
|
|
|
|
local XNieRCharacter = require("XEntity/XNieR/XNieRCharacter")
|
|
|
|
|
local XNieRRepeat = require("XEntity/XNieR/XNieRRepeat")
|
|
|
|
|
local XNieRBoss = require("XEntity/XNieR/XNieRBoss")
|
|
|
|
|
local XNierPOD = require("XEntity/XNieR/XNierPOD")
|
|
|
|
|
--尼尔玩法管理器
|
|
|
|
|
XNieRManagerCreator = function()
|
|
|
|
|
local XNieRManager = {}
|
|
|
|
|
local NieRRepeatPOIndex = 3--复刷权限关在主线关卡位置
|
|
|
|
|
local ActivityId = XNieRConfigs.GetDefaultActivityId()
|
|
|
|
|
local CurActivityConfig = {}
|
|
|
|
|
local ChapterDataList = {}
|
|
|
|
|
local ChapterDataDic = {}
|
|
|
|
|
local RepeatDataList = {}
|
|
|
|
|
local RepeatDataDic = {}
|
|
|
|
|
local BossStageIdToChapterId = {}
|
|
|
|
|
|
|
|
|
|
local IsActivityEnd = true
|
|
|
|
|
local PassMainStageCount = 0
|
|
|
|
|
local AllMainStageCount = 0
|
|
|
|
|
|
|
|
|
|
local NieRCharacterDic = {}
|
|
|
|
|
local NieRRobotIdToCharacterIdDic = {}
|
|
|
|
|
local SelCharacterId = 0
|
|
|
|
|
local NieRBossDic = {}
|
|
|
|
|
|
|
|
|
|
local NieRMainLineStageDic = {}
|
|
|
|
|
local NieRMainLineBossStageDic = {}
|
|
|
|
|
local NieRRepeatMainStage = {}
|
|
|
|
|
local NieRRepeatStage = {}
|
|
|
|
|
local NieREasterEggStage = {}
|
|
|
|
|
local NieRTeachingStage = {}
|
|
|
|
|
local SaveRepeatConsumCount = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local NierPODData = nil
|
|
|
|
|
|
|
|
|
|
local BeginNieRData = {}
|
|
|
|
|
|
|
|
|
|
local PlayerTeamData = {}
|
|
|
|
|
local TypeId = CS.XGame.Config:GetInt("TypeIdNieR")
|
|
|
|
|
local RepeatTypeId = CS.XGame.Config:GetInt("TypeIdNieRRepeat")
|
|
|
|
|
local DefaultTeam = {
|
|
|
|
|
CaptainPos = 1,
|
|
|
|
|
FirstFightPos = 1,
|
|
|
|
|
TeamData = { 0, 0, 0 },
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local IsRegisterEditBattleProxy = false
|
|
|
|
|
local NierFubenPassed = false
|
|
|
|
|
|
|
|
|
|
local NieREasterEggData = {}
|
|
|
|
|
local IsNieREasterEggDataRealPass = false
|
|
|
|
|
local CurSelEasterEggDataIndex = 0
|
|
|
|
|
local LastSelEasterEggDataIndex = 0
|
|
|
|
|
|
|
|
|
|
local NieRRpc = {
|
|
|
|
|
NieRCharacterChangeFashion = "NieRCharacterChangeFashionRequest", --更换涂装请求
|
|
|
|
|
NieRUpdateBossScore = "NieRUpdateBossScoreRequest", --保存BOSS分数
|
|
|
|
|
NieRUpgradeSupportSkill = "NieRUpgradeSupportSkillRequest", --辅助机技能升级
|
|
|
|
|
NieRSelectSupportSkill = "NieRSelectSupportSkillRequest", --选择辅助机技能
|
|
|
|
|
NieREasterEggLeaveMessage = "NieREasterEggLeaveMessageRequest", --尼尔彩蛋关留言请求
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local NieREasterEggStageShow = false
|
|
|
|
|
|
|
|
|
|
local NierCharacterAbilityDicInit = false
|
|
|
|
|
local NieRCharacterAbilityDic = {}
|
|
|
|
|
local NieRRepeatExStagePass = false
|
|
|
|
|
|
|
|
|
|
local NieRMainLineUITipsInfoInit = false
|
|
|
|
|
local NieRCharacterOpenDic = {}
|
|
|
|
|
local NieRRepeatPoStageOpenDic = {}
|
|
|
|
|
local NieRBossStageOpenDic = {}
|
|
|
|
|
local NierMainLineStagePass = false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function XNieRManager.RegisterEditBattleProxy()
|
|
|
|
|
if IsRegisterEditBattleProxy then return end
|
|
|
|
|
IsRegisterEditBattleProxy = true
|
|
|
|
|
XUiNewRoomSingleProxy.RegisterProxy(XDataCenter.FubenManager.StageType.NieR,
|
|
|
|
|
require("XUi/XUiNieR/XUiNieRNewRoomSingle"))
|
|
|
|
|
end
|
|
|
|
|
-- 初始化副本info
|
|
|
|
|
function XNieRManager.InitStageInfo()
|
|
|
|
|
local nieRType = XDataCenter.FubenManager.StageType.NieR
|
|
|
|
|
local nierChapterCfgs = XNieRConfigs.GetAllChapterConfig()
|
|
|
|
|
local nierCharacterCfgs = XNieRConfigs.GetAllCharacterConfig()
|
|
|
|
|
--主线剧情关
|
|
|
|
|
for _, chapterCfg in pairs(nierChapterCfgs) do
|
|
|
|
|
for index, stageId in ipairs(chapterCfg.StageIds) do
|
|
|
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|
|
|
|
if stageInfo then
|
|
|
|
|
if stageInfo.Type and stageInfo.Type ~= nieRType then
|
|
|
|
|
XLog.Error(string.format("%s已设置了Type", stageId))
|
|
|
|
|
end
|
|
|
|
|
stageInfo.Type = nieRType
|
|
|
|
|
else
|
|
|
|
|
XLog.Error(string.format("没有找到StageInfo,stageId:%s", stageId))
|
|
|
|
|
end
|
|
|
|
|
NieRMainLineStageDic[stageId] = chapterCfg.ChapterId
|
|
|
|
|
end
|
|
|
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(chapterCfg.BossStageId)
|
|
|
|
|
if stageInfo then
|
|
|
|
|
if stageInfo.Type and stageInfo.Type ~= nieRType then
|
|
|
|
|
XLog.Error(string.format("%s已设置了Type", stageId))
|
|
|
|
|
end
|
|
|
|
|
stageInfo.Type = nieRType
|
|
|
|
|
else
|
|
|
|
|
XLog.Error(string.format("没有找到StageInfo,stageId:%s", chapterCfg.BossStageId))
|
|
|
|
|
end
|
|
|
|
|
NieRMainLineBossStageDic[chapterCfg.BossStageId] = chapterCfg.ChapterId
|
|
|
|
|
end
|
|
|
|
|
-- --教学关
|
|
|
|
|
for _, characterCfg in pairs(nierCharacterCfgs) do
|
|
|
|
|
for _, stageId in pairs(characterCfg.TeachingStageIds) do
|
|
|
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|
|
|
|
if stageInfo then
|
|
|
|
|
if stageInfo.Type and stageInfo.Type ~= nieRType then
|
|
|
|
|
XLog.Error(string.format("%s已设置了Type", stageId))
|
|
|
|
|
end
|
|
|
|
|
stageInfo.Type = nieRType
|
|
|
|
|
else
|
|
|
|
|
XLog.Error(string.format("没有%s", stageId))
|
|
|
|
|
end
|
|
|
|
|
NieRTeachingStage[stageId] = characterCfg.CharacterId
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
--复刷关
|
|
|
|
|
local repeatableCfgs = XNieRConfigs.GetRepeatableStageConfig()
|
|
|
|
|
for _, repeatableCfg in pairs(repeatableCfgs) do
|
|
|
|
|
for _, stageId in pairs(repeatableCfg.ExStageIds) do
|
|
|
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
|
|
|
|
if stageInfo then
|
|
|
|
|
if stageInfo.Type and stageInfo.Type ~= nieRType then
|
|
|
|
|
XLog.Error(string.format("%s已设置了Type", stageId))
|
|
|
|
|
end
|
|
|
|
|
stageInfo.Type = nieRType
|
|
|
|
|
else
|
|
|
|
|
XLog.Error(string.format("没有找到StageInfo,stageId:%s", stageId))
|
|
|
|
|
end
|
|
|
|
|
NieRRepeatStage[stageId] = repeatableCfg.RepeatableStageId
|
|
|
|
|
end
|
|
|
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(repeatableCfg.RepeatableStageId)
|
|
|
|
|
if stageInfo then
|
|
|
|
|
if stageInfo.Type and stageInfo.Type ~= nieRType then
|
|
|
|
|
XLog.Error(string.format("%s已设置了Type", stageId))
|
|
|
|
|
end
|
|
|
|
|
stageInfo.Type = nieRType
|
|
|
|
|
else
|
|
|
|
|
XLog.Error(string.format("没有找到StageInfo,stageId:%s", repeatableCfg.RepeatableStageId))
|
|
|
|
|
end
|
|
|
|
|
NieRRepeatMainStage[repeatableCfg.RepeatableStageId] = repeatableCfg.RepeatableStageId
|
|
|
|
|
end
|
|
|
|
|
--彩蛋关
|
|
|
|
|
local nieRActivityConfigs = XNieRConfigs.GetAllActivityConfig()
|
|
|
|
|
for _, nieRActiveityCfg in pairs(nieRActivityConfigs) do
|
|
|
|
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(nieRActiveityCfg.EasterEggStageId)
|
|
|
|
|
if stageInfo then
|
|
|
|
|
if stageInfo.Type and stageInfo.Type ~= nieRType then
|
|
|
|
|
XLog.Error(string.format("%s已设置了Type", stageId))
|
|
|
|
|
end
|
|
|
|
|
stageInfo.Type = nieRType
|
|
|
|
|
else
|
|
|
|
|
XLog.Error(string.format("没有找到StageInfo,stageId:%s", stageId))
|
|
|
|
|
end
|
|
|
|
|
NieREasterEggStage[nieRActiveityCfg.EasterEggStageId] = nieRActiveityCfg.EasterEggStageId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, nieRCharacter in pairs(NieRCharacterDic) do
|
|
|
|
|
nieRCharacter:ResetNeedUpdateNieRCharAbility()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.CheckPreFight(stage, challengeCount)
|
|
|
|
|
local stageId = stage.StageId
|
|
|
|
|
|
|
|
|
|
if NieRRepeatMainStage[stageId] then
|
|
|
|
|
local repeatData = XNieRManager.GetRepeatDataById(stageId)
|
|
|
|
|
local itemId, count = XDataCenter.NieRManager.GetRepeatStageConsumeId(), repeatData:GetNierRepeatStageConsumeCount()
|
|
|
|
|
local itemCount = XDataCenter.ItemManager.GetCount(itemId)
|
|
|
|
|
if not XDataCenter.ItemManager.DoNotEnoughBuyAsset(itemId, count, 1, nil, "NieRRepeatTickNotEnough") then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
elseif NieRRepeatStage[stageId] then
|
|
|
|
|
local repeatData = XNieRManager.GetRepeatDataById(NieRRepeatStage[stageId])
|
|
|
|
|
local itemId, count = repeatData:GetExConsumIdAndCount(stageId)
|
|
|
|
|
if not XDataCenter.ItemManager.DoNotEnoughBuyAsset(itemId, count, 1, nil, "NieRRepeatTickNotEnough") then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
--战斗开始前记录一部分数据
|
|
|
|
|
function XNieRManager.OpenFightLoading(stageId)
|
|
|
|
|
if NieRRepeatMainStage[stageId] or NieRRepeatStage[stageId] then
|
|
|
|
|
for _, nierCharcter in pairs(XNieRManager.GetNieRCharacterDic()) do
|
|
|
|
|
local tmpCharacter = {}
|
|
|
|
|
tmpCharacter.Id = nierCharcter:GetNieRCharacterId()
|
|
|
|
|
tmpCharacter.OldLevel = nierCharcter:GetNieRCharacterLevel()
|
|
|
|
|
tmpCharacter.OldExp = nierCharcter:GetNieRCharacterExp()
|
|
|
|
|
tmpCharacter.OldMaxExp = nierCharcter:GetNieRCharacterMaxExp()
|
|
|
|
|
tmpCharacter.IsOldMaxLevel = nierCharcter:CheckNieRCharacterMaxLevel()
|
|
|
|
|
BeginNieRData.NierCharacter = BeginNieRData.NierCharacter or {}
|
|
|
|
|
BeginNieRData.NierCharacter[nierCharcter:GetNieRCharacterUpLevelItemId()] = tmpCharacter
|
|
|
|
|
end
|
|
|
|
|
if NierPODData then
|
|
|
|
|
local tmpNieRPOD = {}
|
|
|
|
|
tmpNieRPOD.Id = NierPODData:GetNieRPODId()
|
|
|
|
|
tmpNieRPOD.OldLevel = NierPODData:GetNieRPODLevel()
|
|
|
|
|
tmpNieRPOD.OldExp = NierPODData:GetNieRPODExp()
|
|
|
|
|
tmpNieRPOD.IsOldMaxLevel = NierPODData:CheckNieRPODMaxLevel()
|
|
|
|
|
tmpNieRPOD.OldMaxExp = NierPODData:GetNieRPODMaxExp()
|
|
|
|
|
BeginNieRData.NierPOD = BeginNieRData.NierPOD or {}
|
|
|
|
|
BeginNieRData.NierPOD[NierPODData:GetNieRPODUpLevelItemId()] = tmpNieRPOD
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
NierFubenPassed = XDataCenter.FubenManager.CheckStageIsPass(stageId)
|
|
|
|
|
XDataCenter.FubenManager.OpenFightLoading(stageId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.ShowReward(winData)
|
|
|
|
|
if not winData then return end
|
|
|
|
|
if NierFubenPassed then
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_FUBEN_NIER_STAGE_REWARD)
|
|
|
|
|
NierFubenPassed = false
|
|
|
|
|
end
|
|
|
|
|
if winData.SettleData.NieRBossFightResult then
|
|
|
|
|
XLuaUiManager.Open("UiNieRBossFightResult", winData)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if NieREasterEggStage[winData.StageId] then
|
|
|
|
|
XLuaUiManager.Open("UiNieREasterEgg", true, false)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if NieRRepeatStage[winData.StageId] then
|
|
|
|
|
NieRRepeatExStagePass = true
|
|
|
|
|
end
|
|
|
|
|
if NieRMainLineStageDic[winData.StageId] then
|
|
|
|
|
NierMainLineStagePass = true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local closeCb = function()
|
|
|
|
|
local stageId = winData.StageId
|
|
|
|
|
if (NieRRepeatMainStage[stageId] or NieRRepeatStage[stageId]) and next(BeginNieRData) ~= nil then
|
|
|
|
|
local showList = {}
|
|
|
|
|
local podInfo
|
|
|
|
|
for _, item in pairs(winData.SettleData.RewardGoodsList) do
|
|
|
|
|
local nierCharacterData = BeginNieRData.NierCharacter[item.TemplateId]
|
|
|
|
|
if nierCharacterData then
|
|
|
|
|
-- local nierCharacterId = nierCharacterData.id
|
|
|
|
|
-- local nierCharcter = XNieRManager.GetNieRCharacterByCharacterId(nierCharacterId)
|
|
|
|
|
-- nierCharacterData.NewLevel = nierCharcter:GetNieRCharacterLevel()
|
|
|
|
|
-- nierCharacterData.NewExp = nierCharcter:GetNieRCharacterExp()
|
|
|
|
|
nierCharacterData.Item = item
|
|
|
|
|
table.insert(showList, nierCharacterData)
|
|
|
|
|
end
|
|
|
|
|
if not podInfo and BeginNieRData.NierPOD[item.TemplateId] then
|
|
|
|
|
podInfo = BeginNieRData.NierPOD[item.TemplateId]
|
|
|
|
|
if podInfo then
|
|
|
|
|
podInfo.Item = item
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if #showList > 0 or podInfo then
|
|
|
|
|
local donotShow = true
|
|
|
|
|
if #showList > 0 then
|
|
|
|
|
for _, info in ipairs(showList) do
|
|
|
|
|
if not info.IsOldMaxLevel then
|
|
|
|
|
donotShow = false
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if donotShow and podInfo and not podInfo.IsOldMaxLevel then
|
|
|
|
|
donotShow = false
|
|
|
|
|
end
|
|
|
|
|
if donotShow then
|
|
|
|
|
else
|
|
|
|
|
XLuaUiManager.Open("UiFubenNierShengji", showList, podInfo)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
elseif (NieRMainLineStageDic[stageId] or NieRMainLineBossStageDic[stageId]) then
|
|
|
|
|
local nieRChapterId = NieRMainLineStageDic[stageId] or NieRMainLineBossStageDic[stageId]
|
|
|
|
|
local nieRChapter = XNieRManager.GetChapterDataById(nieRChapterId)
|
|
|
|
|
if not nieRChapter:CheckNieRChapterUnLock() then
|
|
|
|
|
XUiManager.TipText("NieRActivityChapterEnd")
|
|
|
|
|
XLuaUiManager.RunMain()
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
BeginNieRData = {}
|
|
|
|
|
end
|
|
|
|
|
XLuaUiManager.Open("UiSettleWin", winData, nil, closeCb, true)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--判断活动是否开启
|
|
|
|
|
function XNieRManager.GetIsActivityEnd()
|
|
|
|
|
local timeNow = XTime.GetServerNowTimestamp()
|
|
|
|
|
local isEnd = timeNow >= XNieRManager.GetEndTime()
|
|
|
|
|
local isStart = timeNow >= XNieRManager.GetStartTime()
|
|
|
|
|
local inActivity = (not isEnd) and (isStart)
|
|
|
|
|
return IsActivityEnd or not inActivity, timeNow < XNieRManager.GetStartTime()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取本轮开始时间
|
|
|
|
|
function XNieRManager.GetStartTime()
|
|
|
|
|
if not CurActivityConfig then return 0 end
|
|
|
|
|
return XFunctionManager.GetStartTimeByTimeId(CurActivityConfig.TimeId) or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取本轮结束时间
|
|
|
|
|
function XNieRManager.GetEndTime()
|
|
|
|
|
if not CurActivityConfig then return 0 end
|
|
|
|
|
return XFunctionManager.GetEndTimeByTimeId(CurActivityConfig.TimeId) or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--===================
|
|
|
|
|
--获取活动配置简表
|
|
|
|
|
--===================
|
|
|
|
|
function XNieRManager.GetActivityChapters()
|
|
|
|
|
local chapters = {}
|
|
|
|
|
if CurActivityConfig and not XNieRManager.GetIsActivityEnd() then
|
|
|
|
|
local tempChapter = {}
|
|
|
|
|
tempChapter.Id = CurActivityConfig.Id
|
|
|
|
|
tempChapter.Name = XNieRManager.GetActivityName()
|
|
|
|
|
tempChapter.Type = XDataCenter.FubenManager.ChapterType.NieR
|
|
|
|
|
tempChapter.BannerBg = CurActivityConfig.BannerBg
|
|
|
|
|
table.insert(chapters, tempChapter)
|
|
|
|
|
-- else
|
|
|
|
|
-- local nieRActivityConfigs = XNieRConfigs.GetAllActivityConfig()
|
|
|
|
|
-- if nieRActivityConfigs then
|
|
|
|
|
-- for _, cfg in pairs(nieRActivityConfigs) do
|
|
|
|
|
-- local startTime = XFunctionManager.GetStartTimeByTimeId(cfg.TimeId)
|
|
|
|
|
-- local endTime = XFunctionManager.GetEndTimeByTimeId(cfg.TimeId)
|
|
|
|
|
-- local timeNow = XTime.GetServerNowTimestamp()
|
|
|
|
|
-- XLog.Debug(".GetActivityChapters..",startTime,endTime,timeNow)
|
|
|
|
|
-- if timeNow >= startTime and timeNow < endTime then
|
|
|
|
|
-- local tempChapter = {}
|
|
|
|
|
-- tempChapter.Id = cfg.Id
|
|
|
|
|
-- tempChapter.Name = cfg.Name or ""
|
|
|
|
|
-- tempChapter.Type = XDataCenter.FubenManager.ChapterType.NieR
|
|
|
|
|
-- tempChapter.BannerBg = cfg.BannerBg
|
|
|
|
|
-- table.insert(chapters, tempChapter)
|
|
|
|
|
-- break
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return chapters
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取当前已通过的关卡数
|
|
|
|
|
function XNieRManager.GetPassMainStageCount()
|
|
|
|
|
PassMainStageCount = 0
|
|
|
|
|
if not CurActivityConfig then
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
for index, chapterId in ipairs(CurActivityConfig.ChapterIds) do
|
|
|
|
|
local chapterConfig = XNieRConfigs.GetChapterConfigById(chapterId)
|
|
|
|
|
for __, stageId in ipairs(chapterConfig.StageIds) do
|
|
|
|
|
|
|
|
|
|
if XDataCenter.FubenManager.CheckStageIsPass(stageId) then
|
|
|
|
|
PassMainStageCount = PassMainStageCount + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if chapterConfig.BossStageId ~= 0 then
|
|
|
|
|
if XDataCenter.FubenManager.CheckStageIsPass(chapterConfig.BossStageId) then
|
|
|
|
|
PassMainStageCount = PassMainStageCount + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return PassMainStageCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取所有的关卡数
|
|
|
|
|
function XNieRManager.GetAllMainStageCount()
|
|
|
|
|
return AllMainStageCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取当前通关情况的字符串
|
|
|
|
|
function XNieRManager.GetChapterProgressStr()
|
|
|
|
|
return CS.XTextManager.GetText("NieRChapterProgressStr", XNieRManager.GetPassMainStageCount(), XNieRManager.GetAllMainStageCount())
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获得活动名字
|
|
|
|
|
function XNieRManager.GetActivityName()
|
|
|
|
|
if not CurActivityConfig then return "" end
|
|
|
|
|
return CurActivityConfig.Name or ""
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--处理当前活动状态改变的方法
|
|
|
|
|
function XNieRManager.CurActivtityConfigChange()
|
|
|
|
|
PassMainStageCount = 0
|
|
|
|
|
AllMainStageCount = 0
|
|
|
|
|
ChapterDataList = {}
|
|
|
|
|
ChapterDataDic = {}
|
|
|
|
|
RepeatDataList = {}
|
|
|
|
|
RepeatDataDic = {}
|
|
|
|
|
BossStageIdToChapterId = {}
|
|
|
|
|
|
|
|
|
|
NierCharacterAbilityDicInit = false
|
|
|
|
|
NieRCharacterAbilityDic = {}
|
|
|
|
|
NieRRepeatExStagePass = false
|
|
|
|
|
|
|
|
|
|
NieRMainLineUITipsInfoInit = false
|
|
|
|
|
NieRCharacterOpenDic = {}
|
|
|
|
|
NieRRepeatPoStageOpenDic = {}
|
|
|
|
|
NieRBossStageOpenDic = {}
|
|
|
|
|
NierMainLineStagePass = false
|
|
|
|
|
|
|
|
|
|
if ActivityId == 0 then return end
|
|
|
|
|
CurActivityConfig = XNieRConfigs.GetActivityConfigById(ActivityId)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not CurActivityConfig then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
for index, chapterId in ipairs(CurActivityConfig.ChapterIds) do
|
|
|
|
|
local chapterConfig = XNieRConfigs.GetChapterConfigById(chapterId)
|
|
|
|
|
|
|
|
|
|
for __, stageId in ipairs(chapterConfig.StageIds) do
|
|
|
|
|
AllMainStageCount = AllMainStageCount + 1
|
|
|
|
|
end
|
|
|
|
|
if chapterConfig.BossStageId ~= 0 then
|
|
|
|
|
AllMainStageCount = AllMainStageCount + 1
|
|
|
|
|
end
|
|
|
|
|
BossStageIdToChapterId[chapterConfig.BossStageId] = chapterId
|
|
|
|
|
XNieRManager.InitChapterEntity(chapterId, index)
|
|
|
|
|
end
|
|
|
|
|
for index, repeatId in ipairs(CurActivityConfig.RepeatableStageIds) do
|
|
|
|
|
XNieRManager.InitRepeatEntity(repeatId, index)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
IsActivityEnd = false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取当前活动的章节表
|
|
|
|
|
function XNieRManager.GetCurActivityChapterIds()
|
|
|
|
|
if not CurActivityConfig then return {} end
|
|
|
|
|
return CurActivityConfig.ChapterIds or {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetCurDevelopCharacterIds()
|
|
|
|
|
if not CurActivityConfig then return {} end
|
|
|
|
|
return CurActivityConfig.DevelopCharacterIds
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--初始化章节对象
|
|
|
|
|
function XNieRManager.InitChapterEntity(chapterId, index)
|
|
|
|
|
local tmpChapterData = XNieRChapter.New(chapterId, index)
|
|
|
|
|
local lastChapterData
|
|
|
|
|
if index > 1 then
|
|
|
|
|
lastChapterData = ChapterDataList[index - 1]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
table.insert(ChapterDataList, tmpChapterData)
|
|
|
|
|
ChapterDataDic[chapterId] = tmpChapterData
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取章节对象列表
|
|
|
|
|
function XNieRManager.GetChapterDataList()
|
|
|
|
|
return ChapterDataList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--根据Index获取章节对象
|
|
|
|
|
function XNieRManager.GetChapterDataByIndex(index)
|
|
|
|
|
return ChapterDataList[index]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--根据Id获取章节对象
|
|
|
|
|
function XNieRManager.GetChapterDataById(chapterId)
|
|
|
|
|
return ChapterDataDic[chapterId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--尼尔玩法复刷关信息
|
|
|
|
|
--初始化复刷关对象
|
|
|
|
|
function XNieRManager.InitRepeatEntity(repeatId, index)
|
|
|
|
|
local tmpRepeatData = XNieRRepeat.New(repeatId, index)
|
|
|
|
|
local lastChapterData
|
|
|
|
|
|
|
|
|
|
table.insert(RepeatDataList, tmpRepeatData)
|
|
|
|
|
RepeatDataDic[repeatId] = tmpRepeatData
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取复刷关对象列表
|
|
|
|
|
function XNieRManager.GetRepeatDataList()
|
|
|
|
|
return RepeatDataList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--根据Index获取复刷关对象
|
|
|
|
|
function XNieRManager.GetRepeatDataByIndex(index)
|
|
|
|
|
return RepeatDataList[index]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--根据Id获取复刷关对象
|
|
|
|
|
function XNieRManager.GetRepeatDataById(repeatId)
|
|
|
|
|
return RepeatDataDic[repeatId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--根据Id获取复刷关门票Id
|
|
|
|
|
function XNieRManager.GetRepeatStageConsumeId()
|
|
|
|
|
if not CurActivityConfig then return 0 end
|
|
|
|
|
return CurActivityConfig.RepeatableConsumeId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获得复刷关门票最大数量
|
|
|
|
|
function XNieRManager.GetNieRRepeatConsumeMaxCount()
|
|
|
|
|
if not CurActivityConfig then return 0 end
|
|
|
|
|
return CurActivityConfig.RepeatableConsumeMaxCount or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.CheckNieRRepeatMainStage(stageId)
|
|
|
|
|
return NieRRepeatMainStage[stageId] or false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--处理尼尔POD辅助机
|
|
|
|
|
function XNieRManager.UpdateNieRPODData(data)
|
|
|
|
|
if not NierPODData then
|
|
|
|
|
NierPODData = XNierPOD.New(data)
|
|
|
|
|
else
|
|
|
|
|
NierPODData:UpdateNierPOD(data)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetNieRPODData()
|
|
|
|
|
return NierPODData
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--处理尼尔Boss
|
|
|
|
|
function XNieRManager.UpdateNieRBossData(data)
|
|
|
|
|
local stageId = data.StageId
|
|
|
|
|
|
|
|
|
|
if not NieRBossDic[stageId] then
|
|
|
|
|
NieRBossDic[stageId] = XNieRBoss.New(data, BossStageIdToChapterId[stageId])
|
|
|
|
|
else
|
|
|
|
|
NieRBossDic[stageId]:UpdateData(data, BossStageIdToChapterId[stageId])
|
|
|
|
|
end
|
|
|
|
|
return NieRBossDic[stageId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetNieRBossDataById(stageId)
|
|
|
|
|
if not NieRBossDic[stageId] then
|
|
|
|
|
local data = {}
|
|
|
|
|
data.StageId = stageId
|
|
|
|
|
data.LeftHp = XNieRConfigs.GetChapterConfigById(BossStageIdToChapterId[stageId]).BossHp
|
|
|
|
|
data.Score = 0
|
|
|
|
|
NieRBossDic[stageId] = XNieRBoss.New(data, BossStageIdToChapterId[stageId])
|
|
|
|
|
end
|
|
|
|
|
return NieRBossDic[stageId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--处理尼尔角色
|
|
|
|
|
function XNieRManager.UpdateNieRCharacterData(data)
|
|
|
|
|
local characterId = data.CharacterId
|
|
|
|
|
if not NieRCharacterDic[characterId] then
|
|
|
|
|
NieRCharacterDic[characterId] = XNieRCharacter.New(data)
|
|
|
|
|
local robotId = NieRCharacterDic[characterId]:GetNieRCharacterRobotId()
|
|
|
|
|
NieRRobotIdToCharacterIdDic[robotId] = characterId
|
|
|
|
|
else
|
|
|
|
|
local nieRCharacter = NieRCharacterDic[characterId]
|
|
|
|
|
local lastRobotId = nieRCharacter:GetNieRCharacterRobotId()
|
|
|
|
|
NieRRobotIdToCharacterIdDic[lastRobotId] = nil
|
|
|
|
|
nieRCharacter:UpdateNieRCharacter(data)
|
|
|
|
|
local robotId = NieRCharacterDic[characterId]:GetNieRCharacterRobotId()
|
|
|
|
|
NieRRobotIdToCharacterIdDic[robotId] = characterId
|
|
|
|
|
NieRCharacterDic[characterId]:ResetNeedUpdateNieRCharAbility()
|
|
|
|
|
if lastRobotId ~= robotId then
|
|
|
|
|
XNieRManager.ChangeAllPlayerTeam(lastRobotId, robotId, TypeId)
|
|
|
|
|
XNieRManager.ChangeAllPlayerTeam(lastRobotId, robotId, RepeatTypeId)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获得角色列表
|
|
|
|
|
function XNieRManager.GetChapterCharacterList(repeatId, chapterId)
|
|
|
|
|
local CharacterList = {}
|
|
|
|
|
local CharacterDic = {}
|
|
|
|
|
if not repeatId then
|
|
|
|
|
local roboteIds = XNieRManager.GetChapterDataById(chapterId):GetNierChapterRobotIds() or {}
|
|
|
|
|
for _, robotId in ipairs(roboteIds) do
|
|
|
|
|
table.insert(CharacterList, robotId)
|
|
|
|
|
CharacterDic[robotId] = true
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
local nieRRepeat = XNieRManager.GetRepeatDataById(repeatId)
|
|
|
|
|
local roboteIds = nieRRepeat:GetNieRRepeatRobotIds() or {}
|
|
|
|
|
for _, robotId in ipairs(roboteIds) do
|
|
|
|
|
table.insert(CharacterList, robotId)
|
|
|
|
|
CharacterDic[robotId] = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
local characterIds = XNieRManager.GetCurDevelopCharacterIds()
|
|
|
|
|
for _, id in pairs(characterIds) do
|
|
|
|
|
local nieRCharacter = NieRCharacterDic[id]
|
|
|
|
|
if nieRCharacter:CheckNieRCharacterCondition() then
|
|
|
|
|
local robotId = nieRCharacter:GetNieRCharacterRobotId()
|
|
|
|
|
table.insert(CharacterList, robotId)
|
|
|
|
|
CharacterDic[robotId] = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return CharacterList, CharacterDic
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetCharacterCount()
|
|
|
|
|
local count, unlockCount = 0, 0
|
|
|
|
|
local characterIds = XNieRManager.GetCurDevelopCharacterIds() or {}
|
|
|
|
|
for _, id in pairs(characterIds) do
|
|
|
|
|
local nieRCharacter = NieRCharacterDic[id]
|
|
|
|
|
if nieRCharacter and nieRCharacter:CheckNieRCharacterCondition() then
|
|
|
|
|
unlockCount = unlockCount + 1
|
|
|
|
|
end
|
|
|
|
|
count = count + 1
|
|
|
|
|
end
|
|
|
|
|
return unlockCount, count
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--根据机器人Id获取尼尔角色的角色Id
|
|
|
|
|
function XNieRManager.GetCharacterIdByNieRRobotId(robotId)
|
|
|
|
|
return NieRRobotIdToCharacterIdDic[robotId] or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.SetSelCharacterId(value)
|
|
|
|
|
SelCharacterId = value
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetSelNieRCharacter()
|
|
|
|
|
return NieRCharacterDic[SelCharacterId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetNieRCharacterByCharacterId(characterId)
|
|
|
|
|
return NieRCharacterDic[characterId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetNieRCharacterDic()
|
|
|
|
|
return NieRCharacterDic
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取尼尔玩法队伍信息
|
|
|
|
|
function XNieRManager.GetPlayerTeamData(stageId)
|
|
|
|
|
local typeId = TypeId
|
|
|
|
|
local robotList
|
|
|
|
|
local robotDic = {}
|
|
|
|
|
local CurTeamData
|
|
|
|
|
local teamData
|
|
|
|
|
if NieREasterEggStage[stageId] then
|
|
|
|
|
local characterIds = XNieRManager.GetCurDevelopCharacterIds()
|
|
|
|
|
local CharacterList = {}
|
|
|
|
|
for _, id in pairs(characterIds) do
|
|
|
|
|
local nieRCharacter = NieRCharacterDic[id]
|
|
|
|
|
if nieRCharacter:CheckNieRCharacterCondition() and nieRCharacter:GetNieRCharacterCfgEasterEggFightTag() ~= 0 then
|
|
|
|
|
table.insert(CharacterList, nieRCharacter)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
table.sort(CharacterList, function(a, b)
|
|
|
|
|
return a:GetNieRCharacterCfgEasterEggFightTag() < b:GetNieRCharacterCfgEasterEggFightTag()
|
|
|
|
|
end)
|
|
|
|
|
teamData = XTool.Clone(DefaultTeam)
|
|
|
|
|
for key, id in pairs(teamData.TeamData) do
|
|
|
|
|
if CharacterList[key] then
|
|
|
|
|
teamData.TeamData[key] = CharacterList[key]:GetNieRCharacterRobotId()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return teamData
|
|
|
|
|
elseif NieRRepeatMainStage[stageId] or NieRRepeatStage[stageId] then
|
|
|
|
|
typeId = RepeatTypeId
|
|
|
|
|
robotList, robotDic = XDataCenter.NieRManager.GetChapterCharacterList(NieRRepeatMainStage[stageId] or NieRRepeatStage[stageId], nil)
|
|
|
|
|
elseif NieRMainLineBossStageDic[stageId] or NieRMainLineStageDic[stageId] then
|
|
|
|
|
typeId = TypeId
|
|
|
|
|
robotList, robotDic = XDataCenter.NieRManager.GetChapterCharacterList(nil, NieRMainLineBossStageDic[stageId] or NieRMainLineStageDic[stageId])
|
|
|
|
|
end
|
|
|
|
|
local teamId = XDataCenter.TeamManager.GetTeamId(typeId)
|
|
|
|
|
|
|
|
|
|
if XDataCenter.TeamManager.GetPlayerTeamData(teamId) then
|
|
|
|
|
CurTeamData = XDataCenter.TeamManager.GetPlayerTeamData(teamId)
|
|
|
|
|
teamData = XTool.Clone(CurTeamData)
|
|
|
|
|
else
|
|
|
|
|
DefaultTeam.TeamId = teamId
|
|
|
|
|
teamData = XTool.Clone(DefaultTeam)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for key, id in pairs(teamData.TeamData) do
|
|
|
|
|
if not robotDic[id] then
|
|
|
|
|
teamData.TeamData[key] = 0
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return teamData
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.SetPlayerTeamData(curTeam, stageId)
|
|
|
|
|
local typeId = TypeId
|
|
|
|
|
if NieRRepeatMainStage[stageId] or NieRRepeatStage[stageId] then
|
|
|
|
|
typeId = RepeatTypeId
|
|
|
|
|
elseif NieRMainLineBossStageDic[stageId] then
|
|
|
|
|
typeId = TypeId
|
|
|
|
|
end
|
|
|
|
|
XDataCenter.TeamManager.SetPlayerTeam(curTeam, false, function()
|
|
|
|
|
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.ChangeAllPlayerTeam(lastRobotId, robotId, typeId)
|
|
|
|
|
local teamId = XDataCenter.TeamManager.GetTeamId(typeId)
|
|
|
|
|
local CurTeamData = XDataCenter.TeamManager.GetPlayerTeamData(teamId)
|
|
|
|
|
if not CurTeamData or not CurTeamData.TeamData then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local needSaveToServer = false
|
|
|
|
|
for key, id in ipairs(CurTeamData.TeamData) do
|
|
|
|
|
if id == lastRobotId then
|
|
|
|
|
CurTeamData.TeamData[key] = robotId
|
|
|
|
|
needSaveToServer = true
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if needSaveToServer then
|
|
|
|
|
XDataCenter.TeamManager.SetPlayerTeam(CurTeamData, false, function()
|
|
|
|
|
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.CheckCharacterInformationUnlock(id, isUnlockClick)
|
|
|
|
|
local isUnlock = XSaveTool.GetData(string.format("%d%s%d", XPlayer.Id, "NieRCharacterInformation", id))
|
|
|
|
|
if not isUnlock then
|
|
|
|
|
XSaveTool.SaveData(string.format("%d%s%d", XPlayer.Id, "NieRCharacterInformation", id), isUnlockClick)
|
|
|
|
|
if isUnlockClick then
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_NIER_CHARACTER_UPDATE)
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
else
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.SaveSelRepeatStageId(stageId)
|
|
|
|
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NieRRepeatSelMainStageId"), stageId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetSelRepeatStageId()
|
|
|
|
|
local lastSelStageId = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "NieRRepeatSelMainStageId"))
|
|
|
|
|
return lastSelStageId or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.RemoveAllPreData()
|
|
|
|
|
local allCharacterConfig = XNieRConfigs.GetAllCharacterConfig()
|
|
|
|
|
for _, charConfig in pairs(allCharacterConfig) do
|
|
|
|
|
local inforList = XNieRConfigs.GetNieRCharacterInforListById(charConfig.CharacterId)
|
|
|
|
|
for _, config in ipairs(inforList) do
|
|
|
|
|
XSaveTool.RemoveData(string.format("%d%s%d", XPlayer.Id, "NieRCharacterInformation", config.Id))
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XSaveTool.RemoveData(string.format("%d%s", XPlayer.Id, "NieRRepeatSelMainStageId"))
|
|
|
|
|
XSaveTool.RemoveData(string.format("%d%s", XPlayer.Id, "NieREasterEggStageShow"))
|
|
|
|
|
XSaveTool.RemoveData(string.format("%d%s", XPlayer.Id, "NieRRepeatRedCheckCount"))
|
|
|
|
|
XSaveTool.RemoveData(string.format("%d%s", XPlayer.Id, "NieRActivityIdSave"))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--尼尔玩法商店信息
|
|
|
|
|
function XNieRManager.GetActivityShopIds()
|
|
|
|
|
if not CurActivityConfig then return {} end
|
|
|
|
|
return CurActivityConfig.ShopIds
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetActivityShopConditionByShopId(shopId)
|
|
|
|
|
return XShopManager.GetShopConditionIdList(shopId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetActivityShopGoodsByShopId(shopId)
|
|
|
|
|
local goods = XShopManager.GetShopGoodsList(shopId)
|
|
|
|
|
return goods
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetActivityShopBtnNameById(shopId)
|
|
|
|
|
return XNieRConfigs.GetNieRShopById(shopId).BtnName
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetActivityShopItemBgById(shopId)
|
|
|
|
|
return XNieRConfigs.GetNieRShopById(shopId).ShopItemBg
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetActivityShopBgById(shopId)
|
|
|
|
|
return XNieRConfigs.GetNieRShopById(shopId).ShopBg
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetActivityShopIconById(shopId)
|
|
|
|
|
return XNieRConfigs.GetNieRShopById(shopId).ShopIcon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetActivityNierTaskGroupList()
|
|
|
|
|
local taskGroupList = CurActivityConfig and CurActivityConfig.TaskGroupIds or {}
|
|
|
|
|
local taskGroupCfgsList = {}
|
|
|
|
|
|
|
|
|
|
for _, groupId in ipairs(taskGroupList) do
|
|
|
|
|
local cfg = XNieRConfigs.GetNieRTaskGroupByGroupId(groupId)
|
|
|
|
|
if not XNieRManager.CheckNieREasterEggStagePassed() and cfg.EasterEggTask == 1 then
|
|
|
|
|
else
|
|
|
|
|
table.insert(taskGroupCfgsList, cfg)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
table.sort(taskGroupCfgsList, function(a, b)
|
|
|
|
|
return a.Priority < b.Priority
|
|
|
|
|
end)
|
|
|
|
|
return taskGroupCfgsList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--处理尼尔玩法任务部分
|
|
|
|
|
function XNieRManager.GetActivityNierTaskByChapterId(groupId)
|
|
|
|
|
return XDataCenter.TaskManager.GetNierTaskListByGroupId(groupId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查尼尔玩法任务红点
|
|
|
|
|
function XNieRManager.CheckNieRTaskRed(groupId)
|
|
|
|
|
if XNieRManager.GetIsActivityEnd() then return false end
|
|
|
|
|
if groupId > 0 then
|
|
|
|
|
local taskList = XDataCenter.TaskManager.GetNierTaskListByGroupId(groupId)
|
|
|
|
|
for _, tasks in ipairs(taskList) do
|
|
|
|
|
if tasks ~= nil and tasks.State == XDataCenter.TaskManager.TaskState.Achieved then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
return XDataCenter.TaskManager.GetIsRewardForEx(XDataCenter.TaskManager.TaskType.NieR)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-----------------------------------------尼尔彩蛋关-----------------------------------------------
|
|
|
|
|
function XNieRManager.UpdateNieREasterEggData(players)
|
|
|
|
|
NieREasterEggData = {}
|
|
|
|
|
CurSelEasterEggDataIndex = 0
|
|
|
|
|
LastSelEasterEggDataIndex = 0
|
|
|
|
|
for _, info in pairs(players) do
|
|
|
|
|
local tmp = {}
|
|
|
|
|
tmp.PlayerId = info.PlayerId
|
|
|
|
|
tmp.PlayerName = info.PlayerName
|
|
|
|
|
tmp.MessageId = info.MessageId
|
|
|
|
|
tmp.Age = info.Age
|
|
|
|
|
tmp.LabelId = info.LabelId
|
|
|
|
|
table.insert(NieREasterEggData, tmp)
|
|
|
|
|
end
|
|
|
|
|
local needCount = XNieRManager.GetCurMaxEasterEggMessageCount() - #NieREasterEggData
|
|
|
|
|
if needCount > 0 then
|
|
|
|
|
local ConfigMsg = XNieRConfigs.GetNieREasterEggInitMessageConfig()
|
|
|
|
|
for i = 1, needCount do
|
|
|
|
|
local config = ConfigMsg[i]
|
|
|
|
|
if config then
|
|
|
|
|
local tmp = {}
|
|
|
|
|
tmp.PlayerName = config.PlayerName
|
|
|
|
|
tmp.MessageId = config.MessageId
|
|
|
|
|
tmp.Age = config.Age
|
|
|
|
|
tmp.LabelId = config.LabelId
|
|
|
|
|
table.insert(NieREasterEggData, tmp)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.NieREasterEggDataRealPass()
|
|
|
|
|
IsNieREasterEggDataRealPass = true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetNieREasterEggData()
|
|
|
|
|
return NieREasterEggData
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetCurNieREasterEggStageId()
|
|
|
|
|
if not CurActivityConfig then return 0 end
|
|
|
|
|
return CurActivityConfig.EasterEggStageId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetCurNieREasterEggAgeInfo()
|
|
|
|
|
if not CurActivityConfig then return 0, 0 end
|
|
|
|
|
return CurActivityConfig.EasterEggMinAge, CurActivityConfig.EasterEggMaxAge
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetCurMaxEasterEggMessageCount()
|
|
|
|
|
if not CurActivityConfig then return 0 end
|
|
|
|
|
return CurActivityConfig.MaxEasterEggMessageCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.OpenNieREasterEggCom()
|
|
|
|
|
if not XLuaUiManager.IsUiLoad("UiFunctionalOpen") then
|
|
|
|
|
XLuaUiManager.Open("UiFunctionalOpen", XNieRConfigs.GetNieREasterEggComConfig(), false, false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.OpenNieRDataSaveUi()
|
|
|
|
|
XLuaUiManager.Open("UiNieRSaveData")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.GetNieREasrerEggPlayerName()
|
|
|
|
|
local lastName, nowName
|
|
|
|
|
if LastSelEasterEggDataIndex == 0 then
|
|
|
|
|
CurSelEasterEggDataIndex = CurSelEasterEggDataIndex + 1
|
|
|
|
|
nowName = NieREasterEggData[CurSelEasterEggDataIndex].PlayerName
|
|
|
|
|
else
|
|
|
|
|
lastName = NieREasterEggData[LastSelEasterEggDataIndex].PlayerName
|
|
|
|
|
nowName = NieREasterEggData[CurSelEasterEggDataIndex].PlayerName
|
|
|
|
|
end
|
|
|
|
|
LastSelEasterEggDataIndex = CurSelEasterEggDataIndex
|
|
|
|
|
CurSelEasterEggDataIndex = CurSelEasterEggDataIndex + 1
|
|
|
|
|
CurSelEasterEggDataIndex = CurSelEasterEggDataIndex > XNieRManager.GetCurMaxEasterEggMessageCount() and 1 or CurSelEasterEggDataIndex
|
|
|
|
|
return lastName, nowName
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查是否需要显示彩蛋关(每次BOSS数据更新后检查)
|
|
|
|
|
function XNieRManager.CheckNieREasterEggStageShow()
|
|
|
|
|
if NieREasterEggStageShow then return end
|
|
|
|
|
for _, nieRBossData in pairs(NieRBossDic) do
|
|
|
|
|
if not nieRBossData:IsBossDeath() then
|
|
|
|
|
NieREasterEggStageShow = false
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
NieREasterEggStageShow = true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取彩蛋关显示状态
|
|
|
|
|
function XNieRManager.GetNieREasterEggStageShow()
|
|
|
|
|
return NieREasterEggStageShow
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--是否第一次通过所有BOSS播放彩蛋剧情
|
|
|
|
|
function XNieRManager.CheckFirstNieREasterEggStageShow()
|
|
|
|
|
if NieREasterEggStageShow then
|
|
|
|
|
if not XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "NieREasterEggStageShow")) then
|
|
|
|
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NieREasterEggStageShow"), true)
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查彩蛋关是否已经完成
|
|
|
|
|
function XNieRManager.CheckNieREasterEggStagePassed()
|
|
|
|
|
return IsNieREasterEggDataRealPass
|
|
|
|
|
end
|
|
|
|
|
-----------------------------------------尼尔彩蛋关结束-----------------------------------------------
|
|
|
|
|
-----------------------------------------尼尔内部条件检测----------------------------------------------
|
|
|
|
|
function XNieRManager.CheckNieRMainLineUITips()
|
|
|
|
|
local nierCharacterDic = XNieRManager.GetNieRCharacterDic() or {}
|
|
|
|
|
|
|
|
|
|
if not NieRMainLineUITipsInfoInit then
|
|
|
|
|
local nierChapterDataList = XNieRManager.GetChapterDataList() or {}
|
|
|
|
|
for key, nieRCharacter in pairs(nierCharacterDic) do
|
|
|
|
|
if not nieRCharacter:CheckNieRCharacterCondition() then
|
|
|
|
|
NieRCharacterOpenDic[key] = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for _, nieRChapter in pairs(nierChapterDataList) do
|
|
|
|
|
local stageId = nieRChapter:GetNieRRepeatPoStageId()
|
|
|
|
|
if not XDataCenter.FubenManager.CheckStageIsUnlock(stageId) then
|
|
|
|
|
NieRRepeatPoStageOpenDic[stageId] = true
|
|
|
|
|
end
|
|
|
|
|
stageId = nieRChapter:GetNieRBossStageId()
|
|
|
|
|
if not XDataCenter.FubenManager.CheckStageIsUnlock(stageId) then
|
|
|
|
|
NieRBossStageOpenDic[stageId] = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
NieRMainLineUITipsInfoInit = true
|
|
|
|
|
else
|
|
|
|
|
if not NierMainLineStagePass then return end
|
|
|
|
|
local haveOpenBoss = {}
|
|
|
|
|
local haveOpenCharacter = {}
|
|
|
|
|
local haveOpenRepeatPo = {}
|
|
|
|
|
for stageId, _ in pairs(NieRBossStageOpenDic) do
|
|
|
|
|
if XDataCenter.FubenManager.CheckStageIsUnlock(stageId) then
|
|
|
|
|
haveOpenBoss[stageId] = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for characterId, _ in pairs(NieRCharacterOpenDic) do
|
|
|
|
|
local character = nierCharacterDic[characterId]
|
|
|
|
|
if character and character:CheckNieRCharacterCondition() then
|
|
|
|
|
haveOpenCharacter[characterId] = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for stageId, _ in pairs(NieRRepeatPoStageOpenDic) do
|
|
|
|
|
if XDataCenter.FubenManager.CheckStageIsUnlock(stageId) then
|
|
|
|
|
haveOpenRepeatPo[stageId] = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for stageId, _ in pairs(haveOpenBoss) do
|
|
|
|
|
NieRBossStageOpenDic[stageId] = nil
|
|
|
|
|
XUiManager.TipMsgEnqueue(CS.XTextManager.GetText("NieRMainLineNewJieDuanOpenTips"))
|
|
|
|
|
end
|
|
|
|
|
for characterId, _ in pairs(haveOpenCharacter) do
|
|
|
|
|
NieRCharacterOpenDic[characterId] = nil
|
|
|
|
|
local character = nierCharacterDic[characterId]
|
|
|
|
|
if character then
|
|
|
|
|
local name = character:GetNieRCharName()
|
|
|
|
|
XUiManager.TipMsgEnqueue(CS.XTextManager.GetText("NieRNewCharacterOpenTips", name))
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for stageId, _ in pairs(haveOpenRepeatPo) do
|
|
|
|
|
NieRRepeatPoStageOpenDic[stageId] = nil
|
|
|
|
|
XUiManager.TipMsgEnqueue(CS.XTextManager.GetText("NieRNewQuanXianStageOpenTips"))
|
|
|
|
|
end
|
|
|
|
|
NierMainLineStagePass = false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查尼尔角色能力开启(优化TIPS弹出)
|
|
|
|
|
function XNieRManager.CheckNieRCharacterAbilityOpen()
|
|
|
|
|
local nierCharacterDic = XNieRManager.GetNieRCharacterDic() or {}
|
|
|
|
|
if not NierCharacterAbilityDicInit then
|
|
|
|
|
for _, nieRCharacter in pairs(nierCharacterDic) do
|
|
|
|
|
local abilityConfigList = nieRCharacter:GetAllNieRAbilityConfigList()
|
|
|
|
|
local tmpNotOpenAbility = {}
|
|
|
|
|
for _, config in pairs(abilityConfigList) do
|
|
|
|
|
if config.Condition ~= 0 and not XConditionManager.CheckCondition(config.Condition) then
|
|
|
|
|
tmpNotOpenAbility[config.Id] = config
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
NieRCharacterAbilityDic[nieRCharacter:GetNieRCharacterId()] = tmpNotOpenAbility
|
|
|
|
|
end
|
|
|
|
|
NierCharacterAbilityDicInit = true
|
|
|
|
|
else
|
|
|
|
|
if not NieRRepeatExStagePass then return end
|
|
|
|
|
for nieRCharacterId, notOpenAbilityList in pairs(NieRCharacterAbilityDic) do
|
|
|
|
|
local haveOpenAbility = {}
|
|
|
|
|
for _, config in pairs(notOpenAbilityList) do
|
|
|
|
|
if XConditionManager.CheckCondition(config.Condition) then
|
|
|
|
|
local tmp = {}
|
|
|
|
|
tmp.NieRCharacterId = nieRCharacterId
|
|
|
|
|
tmp.ConfigName = config.TitleStr or ""
|
|
|
|
|
haveOpenAbility[config.Id] = tmp
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for id, info in pairs(haveOpenAbility) do
|
|
|
|
|
notOpenAbilityList[id] = nil
|
|
|
|
|
local nierCharacter = nierCharacterDic[info.NieRCharacterId]
|
|
|
|
|
if nierCharacter then
|
|
|
|
|
local name = nierCharacter:GetNieRCharName()
|
|
|
|
|
XUiManager.TipMsgEnqueue(CS.XTextManager.GetText("NieRCharacterAbilityOpenTips", name, info.ConfigName))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
NieRRepeatExStagePass = false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-----------------------------------------尼尔内部条件检测结束-------------------------------------------
|
|
|
|
|
function XNieRManager.SaveNieRRepeatRedCheckCount()
|
|
|
|
|
-- local consumeId, consumCount = XNieRManager.GetRepeatStageConsumeId(), 0
|
|
|
|
|
-- local haveCount = XDataCenter.ItemManager.GetCount(consumeId)
|
|
|
|
|
-- SaveRepeatConsumCount = haveCount
|
|
|
|
|
-- XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NieRRepeatRedCheckCount"), haveCount)
|
|
|
|
|
local nowTime = XTime.GetServerNowTimestamp()
|
|
|
|
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NieRRepeatRedCheckCount"), nowTime)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.CheckNieRRepeatRedTime()
|
|
|
|
|
-- local saveCount
|
|
|
|
|
-- if SaveRepeatConsumCount ~= 0 then
|
|
|
|
|
-- saveCount = SaveRepeatConsumCount
|
|
|
|
|
-- else
|
|
|
|
|
-- saveCount = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "NieRRepeatRedCheckCount"))
|
|
|
|
|
-- end
|
|
|
|
|
-- if saveCount then
|
|
|
|
|
-- return tonumber(saveCount)
|
|
|
|
|
-- end
|
|
|
|
|
-- return 0
|
|
|
|
|
local saveTime = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "NieRRepeatRedCheckCount")) or 0
|
|
|
|
|
local nowTime = XTime.GetServerNowTimestamp()
|
|
|
|
|
local refreshTime = XTime.GetSeverTodayFreshTime()
|
|
|
|
|
local lastRefreshTime = XTime.GetSeverYesterdayFreshTime()
|
|
|
|
|
if saveTime <= refreshTime then
|
|
|
|
|
if saveTime > lastRefreshTime then
|
|
|
|
|
return false
|
|
|
|
|
else
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查尼尔玩法复刷关红点
|
|
|
|
|
function XNieRManager.CheckRepeatRed()
|
|
|
|
|
if XNieRManager.GetIsActivityEnd() then return false end
|
|
|
|
|
|
|
|
|
|
local nierRepeatList = XNieRManager.GetRepeatDataList()
|
|
|
|
|
local consumeId, consumCount = XNieRManager.GetRepeatStageConsumeId(), 0
|
|
|
|
|
local haveCount = XDataCenter.ItemManager.GetCount(consumeId)
|
|
|
|
|
local haveCountEx = 0
|
|
|
|
|
|
|
|
|
|
-- local saveCount
|
|
|
|
|
-- if SaveRepeatConsumCount ~= 0 then
|
|
|
|
|
-- saveCount = SaveRepeatConsumCount
|
|
|
|
|
-- else
|
|
|
|
|
-- saveCount = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "NieRRepeatRedCheckCount"))
|
|
|
|
|
-- end
|
|
|
|
|
-- if saveCount then
|
|
|
|
|
-- local numCount = tonumber(saveCount)
|
|
|
|
|
-- if numCount == haveCount then
|
|
|
|
|
-- return false
|
|
|
|
|
-- elseif numCount > haveCount then
|
|
|
|
|
-- SaveRepeatConsumCount = haveCount
|
|
|
|
|
-- XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NieRRepeatRedCheckCount"), haveCount)
|
|
|
|
|
-- return false
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
if not XNieRManager.CheckNieRRepeatRedTime() then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, repeatData in ipairs(nierRepeatList) do
|
|
|
|
|
if repeatData:CheckNieRRepeatMainStageUnlock() then
|
|
|
|
|
consumCount = repeatData:GetNierRepeatStageConsumeCount()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local needActionPoint = XDataCenter.FubenManager.GetRequireActionPoint(repeatData:GetNieRRepeatStageId())
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local haveActionPoint = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.ActionPoint)
|
|
|
|
|
if haveCount >= consumCount and haveActionPoint >= needActionPoint then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
-- for _, stageId in ipairs(repeatData:GetNieRExStageIds()) do
|
|
|
|
|
-- if repeatData:CheckNieRRepeatStageUnlock(stageId) then
|
|
|
|
|
-- consumeId, consumCount = repeatData:GetExConsumIdAndCount(stageId)
|
|
|
|
|
-- if consumeId ~= 0 then
|
|
|
|
|
-- haveCountEx = XDataCenter.ItemManager.GetCount(consumeId)
|
|
|
|
|
-- if haveCountEx >= consumCount then
|
|
|
|
|
-- return true
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查尼尔玩家红点
|
|
|
|
|
function XNieRManager.CheckNieRCharacterRed(characterId, isInfor, isTeach)
|
|
|
|
|
if XNieRManager.GetIsActivityEnd() then return false end
|
|
|
|
|
local nieRCharacterDic = XNieRManager.GetNieRCharacterDic() or {}
|
|
|
|
|
if characterId > 0 then
|
|
|
|
|
local nieRCharacter = nieRCharacterDic[characterId]
|
|
|
|
|
if nieRCharacter and nieRCharacter:CheckNieRCharacterCondition() then
|
|
|
|
|
if isInfor then
|
|
|
|
|
local inforList = XNieRConfigs.GetNieRCharacterInforListById(characterId)
|
|
|
|
|
for _, config in ipairs(inforList) do
|
|
|
|
|
local condit
|
|
|
|
|
if config.UnlockCondition ~= 0 then
|
|
|
|
|
condit = XConditionManager.CheckCondition(config.UnlockCondition)
|
|
|
|
|
else
|
|
|
|
|
condit = true
|
|
|
|
|
end
|
|
|
|
|
if condit then
|
|
|
|
|
if not XDataCenter.NieRManager.CheckCharacterInformationUnlock(config.Id, false) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if isTeach then
|
|
|
|
|
local teachingStageIds = nieRCharacter:GetTeachingStageIds()
|
|
|
|
|
for _, stageId in pairs(teachingStageIds) do
|
|
|
|
|
if XDataCenter.FubenManager.CheckStageIsUnlock(stageId) and not XDataCenter.FubenManager.CheckStageIsPass(stageId) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
for tmpCharacterId, nieRCharacter in pairs(nieRCharacterDic) do
|
|
|
|
|
if nieRCharacter:CheckNieRCharacterCondition() then
|
|
|
|
|
if isInfor then
|
|
|
|
|
local inforList = XNieRConfigs.GetNieRCharacterInforListById(tmpCharacterId)
|
|
|
|
|
for _, config in ipairs(inforList) do
|
|
|
|
|
local condit
|
|
|
|
|
if config.UnlockCondition ~= 0 then
|
|
|
|
|
condit = XConditionManager.CheckCondition(config.UnlockCondition)
|
|
|
|
|
else
|
|
|
|
|
condit = true
|
|
|
|
|
end
|
|
|
|
|
if condit then
|
|
|
|
|
if not XDataCenter.NieRManager.CheckCharacterInformationUnlock(config.Id, false) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if isTeach then
|
|
|
|
|
local teaChaningStageIds = nieRCharacter:GetTeachingStageIds()
|
|
|
|
|
for _, stageId in pairs(teaChaningStageIds) do
|
|
|
|
|
if XDataCenter.FubenManager.CheckStageIsUnlock(stageId) and not XDataCenter.FubenManager.CheckStageIsPass(stageId) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查尼尔POD红点
|
|
|
|
|
function XNieRManager.CheckNieRPODRed()
|
|
|
|
|
if XNieRManager.GetIsActivityEnd() then return false end
|
|
|
|
|
local nieRPODData = XNieRManager.GetNieRPODData()
|
|
|
|
|
if not nieRPODData then return false end
|
|
|
|
|
for _, skill in pairs(nieRPODData:GetNieRPODSkillList()) do
|
|
|
|
|
if nieRPODData:CheckNieRPODSkillActive(skill.SkillId) and nieRPODData:CheckNieRPODSkillUpLevel(skill.SkillId) then
|
|
|
|
|
local cousumId, consumCount = nieRPODData:GetNieRPODSkillUpLevelItem(skill.SkillId)
|
|
|
|
|
if cousumId ~= 0 then
|
|
|
|
|
local haveCount = XDataCenter.ItemManager.GetCount(cousumId)
|
|
|
|
|
if haveCount >= consumCount then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查尼尔活动入口可挑战条件
|
|
|
|
|
function XNieRManager.CheckNieRCanFightTag()
|
|
|
|
|
if not XNieRManager.CheckRepeatRed() then return false end
|
|
|
|
|
|
|
|
|
|
--有角色未达到满级
|
|
|
|
|
local nierCharacters = XNieRManager.GetCurDevelopCharacterIds()
|
|
|
|
|
for _, characterId in pairs(nierCharacters) do
|
|
|
|
|
local nieRCharacter = XNieRManager.GetNieRCharacterByCharacterId(characterId)
|
|
|
|
|
if nieRCharacter:CheckNieRCharacterCondition() and not nieRCharacter:CheckNieRCharacterMaxLevel() then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.OnActivityEnd()
|
|
|
|
|
if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
XUiManager.TipText("NieREnd")
|
|
|
|
|
XLuaUiManager.RunMain()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--服务端下推部分
|
|
|
|
|
--处理尼尔数据
|
|
|
|
|
function XNieRManager.AsyncNieRData(notifyData)
|
|
|
|
|
if notifyData.ActivityId ~= 0 then
|
|
|
|
|
ActivityId = notifyData.ActivityId
|
|
|
|
|
NieRRobotIdToCharacterIdDic = {}
|
|
|
|
|
NieRCharacterDic = {}
|
|
|
|
|
NieRBossDic = {}
|
|
|
|
|
NieREasterEggStageShow = false
|
|
|
|
|
IsNieREasterEggDataRealPass = false
|
|
|
|
|
XNieRManager.CurActivtityConfigChange()
|
|
|
|
|
local nierSaveActivityId = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "NieRActivityIdSave"))
|
|
|
|
|
if not nierSaveActivityId then
|
|
|
|
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NieRActivityIdSave"), ActivityId)
|
|
|
|
|
else
|
|
|
|
|
if nierSaveActivityId ~= ActivityId then
|
|
|
|
|
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "NieRActivityIdSave"), ActivityId)
|
|
|
|
|
XNieRManager.RemoveAllPreData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
ActivityId = XNieRConfigs.GetDefaultActivityId()
|
|
|
|
|
IsNieREasterEggDataRealPass = false
|
|
|
|
|
IsActivityEnd = true
|
|
|
|
|
CurActivityConfig = false
|
|
|
|
|
XNieRManager.CurActivtityConfigChange()
|
|
|
|
|
XNieRManager.RemoveAllPreData()
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_NIER_ACTIVITY_END)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, data in ipairs(notifyData.Characters) do
|
|
|
|
|
XNieRManager.UpdateNieRCharacterData(data)
|
|
|
|
|
end
|
|
|
|
|
if notifyData.Bosses then
|
|
|
|
|
for _, data in ipairs(notifyData.Bosses) do
|
|
|
|
|
XNieRManager.UpdateNieRBossData(data)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
XNieRManager.UpdateNieRPODData(notifyData.Support)
|
|
|
|
|
XNieRManager.RegisterEditBattleProxy()
|
|
|
|
|
XNieRManager.CheckNieREasterEggStageShow()
|
|
|
|
|
IsNieREasterEggDataRealPass = notifyData.EasterEggFinish
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_NIER_ACTIVITY_REFRESH)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--处理尼尔角色数据
|
|
|
|
|
function XNieRManager.AsyncNieRCharacterData(notifyData)
|
|
|
|
|
XNieRManager.UpdateNieRCharacterData(notifyData.Character)
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_NIER_CHARACTER_UPDATE, notifyData.Character.CharacterId)
|
|
|
|
|
end
|
|
|
|
|
--服务端下推部分结束
|
|
|
|
|
--服务器请求部分
|
|
|
|
|
function XNieRManager.NieRCharacterChangeFashion(characterId, fashionId, func)
|
|
|
|
|
XNetwork.Call(NieRRpc.NieRCharacterChangeFashion, {
|
|
|
|
|
CharacterId = characterId,
|
|
|
|
|
FashionId = fashionId
|
|
|
|
|
}, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
XNieRManager.GetNieRCharacterByCharacterId(characterId):ChangeNieRFashionId(fashionId)
|
|
|
|
|
if func then
|
|
|
|
|
func()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.NieRUpdateBossScore(func)
|
|
|
|
|
XNetwork.Call(NieRRpc.NieRUpdateBossScore, {
|
|
|
|
|
|
|
|
|
|
}, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if func then
|
|
|
|
|
func()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.NieRUpgradeSupportSkill(skillId, func)
|
|
|
|
|
XNetwork.Call(NieRRpc.NieRUpgradeSupportSkill, {
|
|
|
|
|
SkillId = skillId
|
|
|
|
|
}, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local nierPOD = XNieRManager.GetNieRPODData()
|
|
|
|
|
nierPOD:AddNieRPODSkillLevelById(skillId)
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_NIER_POD_UPDATE)
|
|
|
|
|
if func then
|
|
|
|
|
func()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.NieRSelectSupportSkill(skillId, func)
|
|
|
|
|
XNetwork.Call(NieRRpc.NieRSelectSupportSkill, {
|
|
|
|
|
SkillId = skillId
|
|
|
|
|
}, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local nierPOD = XNieRManager.GetNieRPODData()
|
|
|
|
|
nierPOD:SetNieRPODSelectSkillId(skillId)
|
|
|
|
|
if func then
|
|
|
|
|
func()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XNieRManager.NieREasterEggLeaveMessage(messageId, age, labelId, func)
|
|
|
|
|
XNetwork.Call(NieRRpc.NieREasterEggLeaveMessage, {
|
|
|
|
|
MessageId = messageId,
|
|
|
|
|
Age = age,
|
|
|
|
|
LabelId = labelId
|
|
|
|
|
}, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if func then
|
|
|
|
|
func(res.RewardGoodsList)
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
--服务器请求部分结束
|
|
|
|
|
--[[ ================
|
|
|
|
|
本地初始化管理器
|
|
|
|
|
================
|
|
|
|
|
]]
|
|
|
|
|
function XNieRManager.Init()
|
|
|
|
|
XNieRManager.CurActivtityConfigChange()
|
|
|
|
|
XNieRManager.UpdateNieREasterEggData({})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XNieRManager.Init()
|
|
|
|
|
return XNieRManager
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 通知玩法数据
|
|
|
|
|
XRpc.NotifyNieRData = function(notifyData)
|
|
|
|
|
XDataCenter.NieRManager.AsyncNieRData(notifyData)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 通知玩法角色数据
|
|
|
|
|
XRpc.NotifyNieRCharacterData = function(notifyData)
|
|
|
|
|
XDataCenter.NieRManager.AsyncNieRCharacterData(notifyData)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--通知玩法BOSS数据
|
|
|
|
|
XRpc.NotifyNieRBossData = function(notifyData)
|
|
|
|
|
local bossData = XDataCenter.NieRManager.UpdateNieRBossData(notifyData.Boss)
|
|
|
|
|
if bossData:IsBossDeath() then
|
|
|
|
|
XDataCenter.NieRManager.CheckNieREasterEggStageShow()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--通知辅助机数据
|
|
|
|
|
XRpc.NotifyNieRSupportData = function(notifyData)
|
|
|
|
|
XDataCenter.NieRManager.UpdateNieRPODData(notifyData.Support)
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_NIER_POD_UPDATE)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--通知彩蛋关数据
|
|
|
|
|
XRpc.NotifyNieREasterEggData = function(notifyData)
|
|
|
|
|
XDataCenter.NieRManager.UpdateNieREasterEggData(notifyData.Messages)
|
|
|
|
|
end
|