PGRData/Script/matrix/xmanager/XPartnerTeachingManager.lua

129 lines
No EOL
4.9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

XPartnerTeachingManagerCreator = function()
local XPartnerTeachingManager = {}
-------------------------------------------------------副本相关------------------------------------------------------
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
return XPartnerTeachingManager
end