forked from endernon/PGRData
175 lines
No EOL
8.4 KiB
Lua
175 lines
No EOL
8.4 KiB
Lua
local XChapterViewModel = require("XEntity/XFuben/XChapterViewModel")
|
|
local XExFubenBaseManager = require("XEntity/XFuben/XExFubenBaseManager")
|
|
-- 外篇旧闻
|
|
local XExFubenExtralChapterManager = XClass(XExFubenBaseManager, "XExFubenExtralChapterManager")
|
|
|
|
function XExFubenExtralChapterManager:ExOpenChapterUi(viewModel, difficulty)
|
|
if difficulty == nil then difficulty = XDataCenter.FubenManager.DifficultNormal end
|
|
local chapterId = viewModel:GetId()
|
|
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfo(chapterId)
|
|
local chapterCfg = XDataCenter.ExtraChapterManager.GetChapterDetailsCfgByChapterIdAndDifficult(chapterInfo.ChapterMainId, difficulty)
|
|
if chapterInfo.Unlock then
|
|
local doneCb = function()
|
|
XLuaUiManager.Open("UiFubenMainLineChapterFw", chapterCfg, nil, false)
|
|
end -- doneCb
|
|
XDataCenter.DlcManager.CheckDownloadForEntry(XDlcConfig.EntryType.ExtraChapter, chapterId, doneCb)
|
|
elseif chapterInfo.IsActivity then
|
|
local ret, desc = XDataCenter.ExtraChapterManager.CheckActivityCondition(chapterId)
|
|
if not ret then
|
|
XUiManager.TipError(desc)
|
|
end
|
|
else
|
|
local ret, desc = XDataCenter.ExtraChapterManager.CheckOpenCondition(chapterId)
|
|
if not ret then
|
|
XUiManager.TipError(desc)
|
|
return
|
|
end
|
|
local tipMsg = XDataCenter.FubenManager.GetFubenOpenTips(chapterInfo.FirstStage)
|
|
XUiManager.TipMsg(tipMsg)
|
|
end
|
|
end
|
|
|
|
function XExFubenExtralChapterManager:ExGetFunctionNameType()
|
|
return XFunctionManager.FunctionName.Extra
|
|
end
|
|
|
|
-- 检查是否展示红点
|
|
function XExFubenExtralChapterManager:ExCheckIsShowRedPoint()
|
|
for _, viewModel in ipairs(self:ExGetChapterViewModels(XDataCenter.FubenManager.DifficultNormal)) do
|
|
if viewModel:CheckHasRedPoint() then
|
|
return true
|
|
end
|
|
end
|
|
for _, viewModel in ipairs(self:ExGetChapterViewModels(XDataCenter.FubenManager.DifficultHard)) do
|
|
if viewModel:CheckHasRedPoint() then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- Id为该值的Chapter 不进行任何隐藏关的计算(策划说的,这个是以前遗留的留空问题
|
|
function XExFubenExtralChapterManager:ExGetSpecialHideChapterId()
|
|
return 2000
|
|
end
|
|
|
|
-- 检查是否有限时开放标志
|
|
function XExFubenExtralChapterManager:ExCheckHasTimeLimitTag()
|
|
for _, viewModel in ipairs(self:ExGetChapterViewModels(XDataCenter.FubenManager.DifficultNormal)) do
|
|
if viewModel:CheckHasTimeLimitTag() then
|
|
return true
|
|
end
|
|
end
|
|
for _, viewModel in ipairs(self:ExGetChapterViewModels(XDataCenter.FubenManager.DifficultHard)) do
|
|
if viewModel:CheckHasTimeLimitTag() then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function XExFubenExtralChapterManager:ExGetChapterViewModels(difficulty)
|
|
if difficulty == nil then difficulty = XDataCenter.FubenManager.DifficultNormal end
|
|
if self.__ChapterViewModelDic == nil then self.__ChapterViewModelDic = {} end
|
|
if self.__ChapterViewModelDic[difficulty] then return self.__ChapterViewModelDic[difficulty] end
|
|
self.__ChapterViewModelDic[difficulty] = {}
|
|
local chapterConfigs = XDataCenter.ExtraChapterManager.GetChapterExtraCfgs(difficulty)
|
|
for _, config in ipairs(chapterConfigs) do
|
|
local id = config.ChapterId[difficulty]
|
|
table.insert(self.__ChapterViewModelDic[difficulty], self:ExGetChapterViewModelById(id, difficulty))
|
|
end
|
|
return self.__ChapterViewModelDic[difficulty]
|
|
end
|
|
|
|
function XExFubenExtralChapterManager:ExGetChapterViewModelById(id, difficulty)
|
|
local chapterMainId = XFubenExtraChapterConfigs.GetChapterMainIdByChapterId(id)
|
|
local config = XDataCenter.ExtraChapterManager.GetChapterCfg(chapterMainId)
|
|
local subChapterId = config.ChapterId[difficulty]
|
|
if self.__ChapterViewModelIdDic == nil then self.__ChapterViewModelIdDic = {} end
|
|
if self.__ChapterViewModelIdDic[subChapterId] then return self.__ChapterViewModelIdDic[subChapterId] end
|
|
local result = nil
|
|
if subChapterId ~= nil and subChapterId > 0 then
|
|
result = CreateAnonClassInstance({
|
|
GetCurrentAndMaxProgress = function(proxy)
|
|
local normalCurStars, normalTotalStars = XDataCenter.ExtraChapterManager.GetChapterStars(proxy:GetId())
|
|
-- 再加上剧情进度计算:1个剧情关算1颗星
|
|
local styPassCount, styTotal = XDataCenter.FubenManagerEx.GetStoryStagePassCount(XDataCenter.ExtraChapterManager.GetStageList(proxy:GetId()))
|
|
normalCurStars = normalCurStars + styPassCount
|
|
normalTotalStars = normalTotalStars + styTotal
|
|
-- 如果有隐藏模式 要把隐藏模式的进度一起算上
|
|
local hideId = config.ChapterId[XDataCenter.FubenManager.DifficultHard]
|
|
if hideId and proxy:GetId() ~= self:ExGetSpecialHideChapterId() then
|
|
local styPassCount2, styTotal2 = XDataCenter.FubenManagerEx.GetStoryStagePassCount(XDataCenter.ExtraChapterManager.GetStageList(hideId))
|
|
normalCurStars = normalCurStars + styPassCount2
|
|
normalTotalStars = normalTotalStars + styTotal2
|
|
local hideCurStars, hideTotalStars = XDataCenter.ExtraChapterManager.GetCurrentAndMaxProgressByChapterId(hideId)
|
|
normalCurStars = normalCurStars + hideCurStars
|
|
normalTotalStars = normalTotalStars + hideTotalStars
|
|
end
|
|
return normalCurStars, normalTotalStars
|
|
end,
|
|
CheckHasRedPoint = function(proxy)
|
|
return XRedPointConditionExtraChapterReward.Check(proxy:GetId())
|
|
end,
|
|
CheckHasNewTag = function(proxy)
|
|
return XDataCenter.ExtraChapterManager.CheckChapterNew(proxy:GetId())
|
|
end,
|
|
CheckHasTimeLimitTag = function(proxy)
|
|
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfo(proxy:GetId())
|
|
return chapterInfo and chapterInfo.IsActivity
|
|
end,
|
|
GetWeeklyChallengeCount = function(proxy)
|
|
return XDataCenter.FubenZhouMuManager.GetZhouMuNumber(config.ZhouMuId)
|
|
end,
|
|
GetIsLocked = function(proxy)
|
|
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfo(proxy:GetId())
|
|
if chapterInfo.Unlock then return false end
|
|
if chapterInfo.IsActivity then
|
|
local isUnLock, _ = XDataCenter.ExtraChapterManager.CheckActivityCondition(proxy:GetId())
|
|
if isUnLock then
|
|
XDataCenter.ExtraChapterManager.UnlockChapterViaActivity(proxy:GetId())
|
|
end
|
|
return not isUnLock
|
|
else
|
|
return true
|
|
end
|
|
end,
|
|
GetLockTip = function(proxy)
|
|
local isActivity = proxy:CheckHasTimeLimitTag()
|
|
if isActivity then
|
|
local ret, desc = XDataCenter.ExtraChapterManager.CheckActivityCondition(proxy:GetId())
|
|
if not ret then
|
|
return desc
|
|
end
|
|
else
|
|
local ret, desc = XDataCenter.ExtraChapterManager.CheckOpenCondition(proxy:GetId())
|
|
if not ret then
|
|
return desc
|
|
end
|
|
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfo(proxy:GetId())
|
|
local tipMsg = XDataCenter.FubenManager.GetFubenOpenTips(chapterInfo.FirstStage)
|
|
return tipMsg
|
|
end
|
|
end,
|
|
GetDifficulty = function(proxy)
|
|
return difficulty
|
|
end
|
|
}, XChapterViewModel
|
|
, {
|
|
Id = subChapterId,
|
|
ExtralName = XDataCenter.ExtraChapterManager.GetChapterDetailsStageTitle(subChapterId),
|
|
Name = config.ChapterEn,
|
|
Icon = config.Icon,
|
|
FirstStage = XDataCenter.ExtraChapterManager.GetChapterInfo(subChapterId).FirstStage,
|
|
ActivityCondition = XDataCenter.ExtraChapterManager.GetChapterDetailsCfg(subChapterId).ActivityCondition
|
|
})
|
|
end
|
|
self.__ChapterViewModelIdDic[subChapterId] = result
|
|
return result
|
|
end
|
|
|
|
function XExFubenExtralChapterManager:ExCheckHasOtherDifficulty()
|
|
return true
|
|
end
|
|
|
|
return XExFubenExtralChapterManager |