PGRData/Script/matrix/xmanager/XFubenExploreManager.lua

374 lines
13 KiB
Lua
Raw Normal View History

XFubenExploreManagerCreator = function()
local XFubenExploreManager = {}
--服务器数据
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
XFubenExploreManager.Init()
return XFubenExploreManager
end
XRpc.NotifyExploreData = function(data)
XDataCenter.FubenExploreManager.HandleExploreData(data)
end
XRpc.NotifyExploreUnlockEvent = function(data)
XDataCenter.FubenExploreManager.HandleExploreUnlockEvent(data)
end