374 lines
13 KiB
Lua
374 lines
13 KiB
Lua
|
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
|