PGRData/Script/matrix/xmanager/XFubenExploreManager.lua
2024-09-01 22:49:41 +02:00

400 lines
No EOL
14 KiB
Lua
Raw Permalink 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.

local XExFubenSimulationChallengeManager = require("XEntity/XFuben/XExFubenSimulationChallengeManager")
XFubenExploreManagerCreator = function()
local XFubenExploreManager = XExFubenSimulationChallengeManager.New(XFubenConfigs.ChapterType.Explore)
--服务器数据
local ExploreChapterData = {}
--处理后的关卡数据
local ExploreNodeData = {}
--保存战斗关卡使用的角色,胜利后扣除体力
local CurTeam = {}
local CurSelectChapterId = 1
local CurNodeId = 1
function XFubenExploreManager.Init()
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_SETTLE_REWARD, XFubenExploreManager.HandlerFightResult)
end
function XFubenExploreManager.InitNodeData()
ExploreNodeData = {}
local nodeData = XFubenExploreConfigs.GetExploreNodeCfg()
for k, v in pairs(nodeData) do
ExploreNodeData[k] = { tableData = v }
end
for _, v in pairs(ExploreNodeData) do
XFubenExploreManager.UpdateNodeData(v)
end
XEventManager.DispatchEvent(XEventId.EVENT_FUBEN_EXPLORE_UPDATE)
end
function XFubenExploreManager.UpdateNodeData(nodeData)
if XFubenExploreManager.IsNodeFinish(nodeData.tableData.ChapterId, nodeData.tableData.Id) then
nodeData.State = XFubenExploreConfigs.NodeStateEnum.Complete
else
nodeData.State = XFubenExploreConfigs.NodeStateEnum.Visivle
for j = 1, #nodeData.tableData.PreShowId do
if #nodeData.tableData.PreShowId > 0 then
if XFubenExploreManager.IsNodeFinish(nodeData.tableData.ChapterId, nodeData.tableData.PreShowId[j]) == false then
nodeData.State = XFubenExploreConfigs.NodeStateEnum.Invisivle
break
end
end
end
if nodeData.State == XFubenExploreConfigs.NodeStateEnum.Visivle then
nodeData.State = XFubenExploreConfigs.NodeStateEnum.Availavle
for j = 1, #nodeData.tableData.PreOpenId do
if XFubenExploreManager.IsNodeFinish(nodeData.tableData.ChapterId, nodeData.tableData.PreOpenId[j]) == false then
nodeData.State = XFubenExploreConfigs.NodeStateEnum.Visivle
break
end
end
end
end
end
function XFubenExploreManager.InitStageInfo()
local battleIdList = {}
local allNodeData = XFubenExploreConfigs.GetExploreNodeCfg()
for _, v in pairs(allNodeData) do
if v.Type == XFubenExploreConfigs.NodeTypeEnum.Stage then
table.insert(battleIdList, tonumber(v.TypeValue))
end
end
for _, v in pairs(battleIdList) do
local stageInfo = XDataCenter.FubenManager.GetStageInfo(v)
stageInfo.Type = XDataCenter.FubenManager.StageType.Explore
end
end
--Get
--根据原型ID获取对应角色在某一章的已使用的耐力值
function XFubenExploreManager.GetEndurance(chapterId, characterId)
local chapterData = XFubenExploreManager.GetChapterData(chapterId)
for i = 1, #chapterData.EnduranceInfos do
if chapterData.EnduranceInfos[i].Id == characterId then
return chapterData.EnduranceInfos[i].Use
end
end
--找不到说明体力还是满的已使用0
return 0
end
--获取某一章里的最大耐力(每个角色都一样)
function XFubenExploreManager.GetMaxEndurance(chapterId)
local chapterData = XFubenExploreConfigs.GetChapterData(chapterId)
return chapterData.Endurance
end
--获取某一章的数据
function XFubenExploreManager.GetChapterData(chapterId)
for i = 1, #ExploreChapterData do
if ExploreChapterData[i].Id == chapterId then
return ExploreChapterData[i]
end
end
local tempChapterData = {
EnduranceInfos = {},
RewardStatus = 0,
Id = chapterId,
FinishNodes = {},
UnlockEvents = {},
}
table.insert(ExploreChapterData, tempChapterData)
return tempChapterData
end
--获取某一章所有节点的数据(处理后)
function XFubenExploreManager.GetAllNodeData(chapterId)
local tempList = {}
for _, v in pairs(ExploreNodeData) do
if v.tableData.ChapterId == chapterId then
table.insert(tempList, v)
end
end
return tempList
end
--获取某一关的数据(处理后)
function XFubenExploreManager.GetNodeData(nodeId)
return ExploreNodeData[nodeId]
end
--获取某一章探索率
function XFubenExploreManager.GetExploreProgress(chapterId)
local allLevelData = XFubenExploreConfigs.GetAllLevel(chapterId)
local allPassLevelData = XFubenExploreManager.GetChapterData(chapterId)
if allPassLevelData == nil then
return 0
else
return #allPassLevelData.FinishNodes / #allLevelData
end
end
--获取某一章的已打开的记录
function XFubenExploreManager.GetChapterStoryText(chapterId)
local allStoryText = XFubenExploreConfigs.GetChapterStoryText(chapterId)
local tempList = {}
for i = 1, #allStoryText do
if allStoryText[i].UnlockNodeId == 0 or XFubenExploreManager.IsNodeFinish(chapterId, allStoryText[i].UnlockNodeId) then
table.insert(tempList, allStoryText[i])
end
end
return tempList
end
--获取当前选中的章节ID
function XFubenExploreManager.GetCurChapterId()
return CurSelectChapterId
end
--获取当前能打的最新章节ID
function XFubenExploreManager.GetNewestChapterId()
local allChapterData = XFubenExploreConfigs.GetExploreChapterCfg()
for i = 1, #allChapterData do
if XFubenExploreManager.GetExploreProgress(allChapterData[i].Id) ~= 1 then
return allChapterData[i].Id
end
end
return nil
end
--获取当前进入的关卡节点ID
function XFubenExploreManager.GetCurNodeId()
return CurNodeId
end
--获取当前进入的关卡消耗体力值
function XFubenExploreManager:GetCurNodeEndurance()
return XFubenExploreConfigs.GetLevel(XFubenExploreManager.GetCurNodeId()).CostEndurance
end
--获取当前进度的章节名
function XFubenExploreManager.GetCurProgressName()
local allChapterData = XFubenExploreConfigs.GetExploreChapterCfg()
for i = 1, #allChapterData do
if XFubenExploreManager.GetExploreProgress(allChapterData[i].Id) ~= 1 then
return allChapterData[i].Name
end
end
return nil
end
--某个buff的解锁进度
function XFubenExploreManager.GetBuffUnlockProgress(buffInfo)
local unlockNum = 0
for _, v in pairs(buffInfo.UnlockEvent) do
if XFubenExploreManager.IsBuffUnlockEvent(buffInfo, v) then
unlockNum = unlockNum + 1
end
end
return unlockNum / #buffInfo.UnlockEvent
end
--Get end
--Set
function XFubenExploreManager.SetNodeFinish(chapterId, nodeId)
if XFubenExploreManager.IsNodeFinish(chapterId, nodeId) then
return
end
local chapterData = XFubenExploreManager.GetChapterData(chapterId)
local curNode = XFubenExploreManager.GetNodeData(nodeId)
if chapterData ~= nil then
table.insert(chapterData.FinishNodes, nodeId)
else
local tempChapterData = {
EnduranceInfos = {},
RewardStatus = 0,
Id = chapterId,
FinishNodes = {},
UnlockEvents = {},
}
table.insert(tempChapterData.FinishNodes, chapterId, nodeId)
table.insert(ExploreChapterData, tempChapterData)
end
chapterData = XFubenExploreManager.GetChapterData(chapterId)
if curNode.tableData.CostEndurance > 0 then
for i = 1, #CurTeam.TeamData do
local hasId = false
for j = 1, #chapterData.EnduranceInfos do
if chapterData.EnduranceInfos[j].Id == CurTeam.TeamData[i] then
chapterData.EnduranceInfos[j].Use = chapterData.EnduranceInfos[j].Use + curNode.tableData.CostEndurance
hasId = true
end
end
if not hasId then
table.insert(chapterData.EnduranceInfos, { Id = CurTeam.TeamData[i], Use = curNode.tableData.CostEndurance })
end
end
end
XFubenExploreManager.InitNodeData()
end
function XFubenExploreManager.SetCurChapterId(id)
CurSelectChapterId = id
end
function XFubenExploreManager.SetCurNodeId(id)
CurNodeId = id
end
function XFubenExploreManager.SetCurTeam(team)
CurTeam = team
end
--Set end
--Is
--某一关是否完成
function XFubenExploreManager.IsNodeFinish(chapterId, nodeId)
local chapterData = XFubenExploreManager.GetChapterData(chapterId)
if chapterData ~= nil then
for i = 1, #chapterData.FinishNodes do
if chapterData.FinishNodes[i] == nodeId then
return true
end
end
end
--找不到,说明没完成
return false
end
--检测是否有东西没领
function XFubenExploreManager.IsRedPoint()
for i = 1, #ExploreChapterData do
if ExploreChapterData[i].RewardStatus == 0 and XFubenExploreManager.GetExploreProgress(ExploreChapterData[i].Id) == 1 then
return true
end
end
return false
end
--某章是否有奖励没领
function XFubenExploreManager.IsChapterRedPoint(chapterId)
local chapterData = XFubenExploreManager.GetChapterData(chapterId)
if chapterData then
return chapterData.RewardStatus == 0 and XFubenExploreManager.GetExploreProgress(chapterId) == 1
else
return false
end
end
--某个buff是否解锁
function XFubenExploreManager.IsBuffUnlock(buffInfo)
local isUnlock = true
for _, v in pairs(buffInfo.UnlockEvent) do
if not XFubenExploreManager.IsBuffUnlockEvent(buffInfo, v) then
isUnlock = false
end
end
return isUnlock
end
--某个buff的某个条件是否满足
function XFubenExploreManager.IsBuffUnlockEvent(buffInfo, eventId)
local isUnlock = false
local chapterData = XFubenExploreManager.GetChapterData(buffInfo.ChapterId)
for _, v in pairs(chapterData.UnlockEvents) do
if v == eventId then
isUnlock = true
break
end
end
return isUnlock
end
--是否完成全部章节
function XFubenExploreManager.IsFinishAll()
if not XFubenExploreManager.IsRedPoint() and XFubenExploreManager.GetCurProgressName() == nil then
return true
end
return false
end
--Is end
-- Network
-- 完成剧情关卡请求
function XFubenExploreManager.FinishNode(chapterId, nodeId, cb)
XNetwork.Call("ExploreFinishNodeRequest", { Id = nodeId }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XFubenExploreManager.SetNodeFinish(chapterId, nodeId)
if cb then cb() end
end)
end
-- 领取章节奖励
function XFubenExploreManager.GetChapterReward(chapterId, cb)
XNetwork.Call("ExploreGetRewardRequest", { Id = chapterId }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XFubenExploreManager.GetChapterData(chapterId).RewardStatus = 1
if res.RewardGoodsList and #res.RewardGoodsList > 0 then
XUiManager.OpenUiObtain(res.RewardGoodsList, nil, cb)
end
end)
end
--Network end
--Handle
function XFubenExploreManager.HandleExploreData(data)
--清空数据
ExploreChapterData = {}
--赋值
ExploreChapterData = data.ChapterDatas
XFubenExploreManager.InitNodeData()
end
function XFubenExploreManager.HandlerFightResult(evt)
if evt ~= nil and evt.IsWin then
local stage = XDataCenter.FubenManager.GetStageInfo(evt.StageId)
if stage.Type == XDataCenter.FubenManager.StageType.Explore then
XFubenExploreManager.SetNodeFinish(XFubenExploreManager.GetCurChapterId(), XFubenExploreManager.GetCurNodeId())
end
end
end
function XFubenExploreManager.HandleExploreUnlockEvent(evt)
local chapterData = XFubenExploreManager.GetChapterData(evt.Id)
chapterData.UnlockEvents = evt.UnlockEvents
XEventManager.DispatchEvent(XEventId.EVENT_FUBEN_EXPLORE_UPDATEBUFF)
end
--Handle end
------------------副本入口扩展 start-------------------------
-- 获取进度提示
function XFubenExploreManager:ExGetProgressTip()
local str = ""
if not self:ExGetIsLocked() then
if XFubenExploreManager.GetCurProgressName() ~= nil then
str = CS.XTextManager.GetText("ExploreBannerProgress") .. XFubenExploreManager.GetCurProgressName()
else
str = CS.XTextManager.GetText("ExploreBannerProgressEnd")
end
end
return str
end
function XFubenExploreManager:ExOpenMainUi()
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.FubenExplore) then
XLuaUiManager.Open("UiFubenExploreChapter")
end
end
------------------副本入口扩展 end-------------------------
XFubenExploreManager.Init()
return XFubenExploreManager
end
XRpc.NotifyExploreData = function(data)
XDataCenter.FubenExploreManager.HandleExploreData(data)
end
XRpc.NotifyExploreUnlockEvent = function(data)
XDataCenter.FubenExploreManager.HandleExploreUnlockEvent(data)
end