PGRData/Script/matrix/xmanager/XPartnerTeachingManager.lua

160 lines
6.1 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
local XExFubenCollegeStudyManager = require("XEntity/XFuben/XExFubenCollegeStudyManager")
XPartnerTeachingManagerCreator = function()
2024-09-01 20:49:41 +00:00
local XPartnerTeachingManager = XExFubenCollegeStudyManager.New(XFubenConfigs.ChapterType.PartnerTeaching)
-------------------------------------------------------副本相关------------------------------------------------------
function XPartnerTeachingManager.InitStageInfo()
local allChapterId = XPartnerTeachingConfigs.GetAllChapterId()
for _, chapterId in pairs(allChapterId) do
local stageIdList = XPartnerTeachingConfigs.GetChapterStageIds(chapterId)
for i, stageId in ipairs(stageIdList) do
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
stageInfo.Type = XDataCenter.FubenManager.StageType.PartnerTeaching
stageInfo.OrderId = i
end
end
end
--------------------------------------------------------------------------------------------------------------------
---
--- 'chapterId'章节是否处于活动时间
---@return boolean
function XPartnerTeachingManager.WhetherInActivity(chapterId)
local activeTimeId = XPartnerTeachingConfigs.GetChapterActivityTimeId(chapterId)
return XFunctionManager.CheckInTimeByTimeId(activeTimeId)
end
---
--- 获取活动的剩余时间戳
function XPartnerTeachingManager.GetLeftTimeStamp(chapterId)
local activeTimeId = XPartnerTeachingConfigs.GetChapterActivityTimeId(chapterId)
local endTime = XFunctionManager.GetEndTimeByTimeId(activeTimeId)
return endTime > 0 and endTime - XTime.GetServerNowTimestamp() or 0
end
---
--- 'chapterId'章节是否解锁,如果未解锁,额外返回未满足条件的描述
---@return boolean|string 是否解锁|未满足条件的描述
function XPartnerTeachingManager.WhetherUnLockChapter(chapterId)
local isInActive = XPartnerTeachingManager.WhetherInActivity(chapterId)
local conditionList
if isInActive then
conditionList = XPartnerTeachingConfigs.GetChapterActivityCondition(chapterId)
else
conditionList = XPartnerTeachingConfigs.GetChapterOpenCondition(chapterId)
end
local lockTip
local isUnlock = true
if conditionList or next(conditionList) then
for _, conditionId in ipairs(conditionList) do
local result, desc = XConditionManager.CheckCondition(conditionId)
if not result then
lockTip = desc
isUnlock = false
break
end
end
end
return isUnlock, lockTip
end
---
--- 得到排序后的教学章节Id数组
function XPartnerTeachingManager.GetSortedChapterList()
local allChapterIdList = XPartnerTeachingConfigs.GetAllChapterId()
table.sort(allChapterIdList, function(a, b)
-- 解锁 > 锁定
local aIsUnlock = XPartnerTeachingManager.WhetherUnLockChapter(a)
local bIsUnlock = XPartnerTeachingManager.WhetherUnLockChapter(b)
if aIsUnlock ~= bIsUnlock then
return aIsUnlock
end
-- 活动状态 > 普通状态
local aIsInActive = XPartnerTeachingManager.WhetherInActivity(a)
local bIsInActive = XPartnerTeachingManager.WhetherInActivity(b)
if aIsInActive ~= bIsInActive then
return aIsInActive
end
-- 未通关 > 通关
local aIsPass = XPartnerTeachingManager.WhetherPassChapter(a)
local bIsPass = XPartnerTeachingManager.WhetherPassChapter(b)
if aIsPass ~= bIsPass then
return bIsPass
end
return a < b
end)
return allChapterIdList
end
---
--- 得到 'chapterId' 的关卡进度
---@return number 通关关卡数|总关卡数
function XPartnerTeachingManager.GetChapterProgress(chapterId)
local stageIdList = XPartnerTeachingConfigs.GetChapterStageIds(chapterId)
local passNum = 0
local totalNum = #stageIdList
for _, stageId in ipairs(stageIdList) do
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
if stageInfo.Passed then
passNum = passNum + 1
end
end
return passNum, totalNum
end
---
--- 是否通关了 'chapterId' 章节
---@return boolean
function XPartnerTeachingManager.WhetherPassChapter(chapterId)
local passStageNum, totalStageNum = XPartnerTeachingManager.GetChapterProgress(chapterId)
return passStageNum == totalStageNum
end
---
--- 获取 'chapterId' 中 stageId' 的编号名称
function XPartnerTeachingManager.GetOrderName(chapterId, stageId)
local stagePrefix = XPartnerTeachingConfigs.GetChapterStagePrefix(chapterId)
local orderId = XDataCenter.FubenManager.GetStageOrderId(stageId)
return string.format("%s%d", stagePrefix, orderId)
end
2024-09-01 20:49:41 +00:00
------------------副本入口扩展 start-------------------------
function XPartnerTeachingManager:ExGetTagInfo()
for k, id in pairs(XPartnerTeachingConfigs.GetAllChapterId()) do
if XPartnerTeachingManager.WhetherInActivity(id) then
return true, CS.XTextManager.GetText("PartnerTeachingTag")
end
end
return false
end
function XPartnerTeachingManager:ExGetIcon()
for k, id in pairs(XPartnerTeachingConfigs.GetAllChapterId()) do
if XPartnerTeachingManager.WhetherInActivity(id) then
return XPartnerTeachingConfigs.GetActivityChapterIconById(id)
end
end
return self:ExGetConfig().Icon
end
function XPartnerTeachingManager:ExOpenMainUi()
if XFunctionManager.DetectionFunction(self:ExGetFunctionNameType()) then
XLuaUiManager.Open("UiPartnerTeachingBanner")
end
end
------------------副本入口扩展 end-------------------------
return XPartnerTeachingManager
end