PGRData/Resources/Scripts/XManager/XFubenInfestorExploreManager.lua

2270 lines
77 KiB
Lua
Raw Normal View History

2022-12-26 08:36:01 +00:00
-- -------------------(引用外部模块)begin---------------------
local XInfestorExploreMapNode = require("XEntity/XInfestorExplore/XInfestorExploreMapNode")
local XInfestorExplorePlayer = require("XEntity/XInfestorExplore/XInfestorExplorePlayer")
local XInfestorExploreCharacter = require("XEntity/XInfestorExplore/XInfestorExploreCharacter")
local XInfestorExploreCore = require("XEntity/XInfestorExplore/XInfestorExploreCore")
local XInfestorExploreTeam = require("XEntity/XInfestorExplore/XInfestorExploreTeam")
-- -------------------(引用外部模块)end---------------------
-- -------------------(lua api c#函数 api)begin------------------
local pairs = pairs
local tableInsert = table.insert
local tableRemove = table.remove
local tableSort = table.sort
local CSXTextManagerGetText = CS.XTextManager.GetText
-- -------------------(lua api c#函数 api)end------------------
local REQUEST_SYNC_INFO_CD = CS.XGame.Config:GetInt("InfestorSyncPlayerInfoInterval")
local REQUEST_LEAVE_CHAPTER_MSG_CD = CS.XGame.Config:GetInt("InfestorChapterLeaveMsgInterval")
local REQUEST_GET_LEAVE_CHAPTER_MSG_CD = CS.XGame.Config:GetInt("InfestorChapterLeaveMsgInterval")
local MAX_CHAPTER_MESSAGE_COUNT = CS.XGame.Config:GetInt("InfestorChapterLeaveMsgMaxCount")
local SectionType = {
Init = 0, --初始化
RESET = 1, --结算期
StageExplore = 2, --关卡探索
BossFight = 3, --boss战
}
-- -------------------(数据)begin------------------
XFubenInfestorExploreManagerCreator = function()
local SectionStatus = SectionType.Init --当前处于的阶段
local CurChapterId = 0 --当前的章节
local CurNodeId = 0 --当前的节点
local DelayMoveNodeId
local LastFinishNodeId = 0
local CurGroupId = 0
local CurDiff = 0
local LastSyncInfoTime = 0
local LastLeaveChapterMsgTime = 0
local LastGetLeaveChapterMsgTime = 0
local Maps = {} --存储五个地图的配置
local PlayerDataDic = {}
local PlayerRankDataList = {}
local CharacterDataDic = {}
local BuffIds = {}
local CoreDic = {}
local CoreIdList = {}
local CoreUseIdDic = {}
local ChapterIdToShopDic = {}
local SelectRewardInfoDic = {}
local ContractEventIdDic = {}
local FightRewardBuyDic = {}
local ChapterMsgDic = {}
local FightEventId = 0
local ActivityId = 0
local Chapter2ScoreDic = {}
local ActivityNo = 0
local OldActivityNo = 0
local LastDiff = 0
local AfterFightNeedShowReward
local NewChapterNeedShowAnim
local Team = {
[XFubenConfigs.CharacterLimitType.All] = XInfestorExploreTeam.New(XFubenConfigs.CharacterLimitType.All),
[XFubenConfigs.CharacterLimitType.Normal] = XInfestorExploreTeam.New(XFubenConfigs.CharacterLimitType.Normal),
[XFubenConfigs.CharacterLimitType.Isomer] = XInfestorExploreTeam.New(XFubenConfigs.CharacterLimitType.Isomer),
[XFubenConfigs.CharacterLimitType.IsomerDebuff] = XInfestorExploreTeam.New(XFubenConfigs.CharacterLimitType.IsomerDebuff),
[XFubenConfigs.CharacterLimitType.NormalDebuff] = XInfestorExploreTeam.New(XFubenConfigs.CharacterLimitType.NormalDebuff),
}
local TeamChanged = nil
local OldMoneyCount = 0
local NewMoneyCount = 0
local OpenInfestorExploreCoreDelay = 0
local OpenInfestorExploreCoreScheduleId = nil
local OpenInfestorExploreCoreCbTemp = nil
-- -------------------(数据)end------------------
-- -------------------(本地接口)begin------------------
local function GetCookieKey()
return XPlayer.Id .. "NEW_DIFF"
end
local function GetMap(chapterId)
local map = Maps[chapterId]
if not map then
XLog.Error("XFubenInfestorExploreManager GetMap Error: 获取地图失败章节不存在地图配置chapterId: " .. chapterId)
return
end
return map
end
local function GetStageNode(chapterId, nodeId)
local map = GetMap(chapterId)
local stageNode = map and map[nodeId]
if not stageNode then
XLog.Error("XFubenInfestorExploreManager GetStageNode Error: 获取地图节点失败章节不存在地图配置chapterId: " .. chapterId .. ", nodeId: " .. nodeId .. ", map: ", map)
return
end
return stageNode
end
local function GetNodeOutPostStory(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetOutPostStory()
end
local function GetCharacterData(characterId)
local characterData = CharacterDataDic[characterId]
if not characterData then
characterData = XInfestorExploreCharacter.New()
CharacterDataDic[characterId] = characterData
end
return characterData
end
local function GetTeam(teamType)
return Team[teamType]
end
local function GetChapterTeam(chapterId)
local teamType = XFubenInfestorExploreConfigs.GetChapterCharacterLimitType(chapterId)
return GetTeam(teamType)
end
local function GetCore(coreId)
return CoreDic[coreId]
end
local function AddCore(coreData)
local core = XInfestorExploreCore.New()
core:UpdateData(coreData)
local coreId = core:GetId()
CoreDic[coreId] = core
tableInsert(CoreIdList, coreId)
end
local function DeleteCore(coreId)
CoreDic[coreId] = nil
for index, paramCoreId in pairs(CoreIdList) do
if coreId == paramCoreId then
tableRemove(CoreIdList, index)
break
end
end
for pos, paramCoreId in pairs(CoreUseIdDic) do
if coreId == paramCoreId then
CoreUseIdDic[pos] = 0
break
end
end
end
local function IsHaveCore(coreId)
if not coreId then return false end
local core = GetCore(coreId)
return core and true or false
end
local function TakeOffCore(pos)
local coreId = CoreUseIdDic[pos]
if coreId and coreId > 0 then
local core = GetCore(coreId)
if core then
core:TakeOff()
end
CoreUseIdDic[pos] = 0
end
end
local function PutOnCore(coreId, pos)
--在装备一个Buff之前先把对应位置上的buff TakeOff
TakeOffCore(pos)
local core = GetCore(coreId)
core:PutOn(pos)
CoreUseIdDic[pos] = coreId
end
local function AddBuff(buffId)
for _, existBuffId in pairs(BuffIds) do
if existBuffId == buffId then
return
end
end
tableInsert(BuffIds, buffId)
end
local function RemoveBuff(buffId)
if not buffId or buffId == 0 then return end
for index, existBuffId in pairs(BuffIds) do
if existBuffId == buffId then
tableRemove(BuffIds, index)
return
end
end
end
local function CheckBuffExsit(buffId)
if not buffId or buffId == 0 then return false end
for index, existBuffId in pairs(BuffIds) do
if existBuffId == buffId then
return true
end
end
return false
end
local function GetShop()
return ChapterIdToShopDic[CurChapterId]
end
local function GetSelectRewardInfo(chapterId, nodeId)
return SelectRewardInfoDic[chapterId] and SelectRewardInfoDic[chapterId][nodeId]
end
local function GetPlayerData(playerId)
return PlayerDataDic[playerId]
end
local function GetSelectRewardPlayerData(chapterId, nodeId)
local selectRewardInfo = GetSelectRewardInfo(chapterId, nodeId)
if not selectRewardInfo then
return
end
local playerId = selectRewardInfo.PlayerId
if not playerId then
return
end
return GetPlayerData(playerId)
end
local function OnGetMapStartNodeId(chapterId)
local map = GetMap(chapterId)
for _, node in pairs(map) do
if node:IsStart() then
return node:GetNodeId()
end
end
end
local function InitMaps()
local chapterConfigs = XFubenInfestorExploreConfigs.GetChapterConfigs()
for chapterId in pairs(chapterConfigs) do
local tree = {}
local mapConfig = XFubenInfestorExploreConfigs.GetMapConfig(chapterId)
for nodeId, nodeConfig in pairs(mapConfig) do
local node = tree[nodeId]
if not node then
node = XInfestorExploreMapNode.New(nodeId)
tree[nodeId] = node
end
local parentIds = nodeConfig.FrontId
for _, parentId in pairs(parentIds) do
if parentId ~= 0 then
node:SetParentId(parentId)
local parentNode = tree[parentId]
if not parentNode then
parentNode = XInfestorExploreMapNode.New(parentId)
tree[parentId] = parentNode
end
parentNode:SetChildId(nodeId)
end
end
end
Maps[chapterId] = tree
end
end
local function UpdateFinishedNodesStatus(finishedGridDic)
if finishedGridDic then
for chapterId, finishedNodeIds in pairs(finishedGridDic) do
if next(finishedNodeIds) then
for _, nodeId in pairs(finishedNodeIds) do
local node = GetStageNode(chapterId, nodeId)
node:SetStatusPassed()
--已走过的路径驱散子节点迷雾
local childIds = node:GetChildIds()
for childId in pairs(childIds) do
local childNode = GetStageNode(chapterId, childId)
childNode:SetStatusUnReach()
end
end
end
end
end
local chapterId = CurChapterId
local currentNode = GetStageNode(chapterId, CurNodeId)
currentNode:SetStatusCurrent()
--最后一章判最后一关通关
local nextChapterId = XFubenInfestorExploreConfigs.GetNextChapterId(chapterId)
if nextChapterId == 0 then
if currentNode:IsEnd() then
currentNode:SetStatusPassed()
end
end
local childIds = currentNode:GetChildIds()
for childId in pairs(childIds) do
local childNode = GetStageNode(chapterId, childId)
childNode:SetStatusReach()
end
end
local function OnGetMoneyTip(moneyCount, closeCallback)
if not moneyCount or moneyCount <= 0 then return end
local rewardGoodsList = {}
tableInsert(rewardGoodsList, XRewardManager.CreateRewardGoods(XDataCenter.ItemManager.ItemId.InfestorMoney, moneyCount))
XUiManager.OpenUiObtain(rewardGoodsList, nil, closeCallback)
end
local function OnGetNewCore(coreId, coreLevel, finishCb)
local core = GetCore(coreId)
local finishCbTemp = finishCb
if not core then
local coreData = { Id = coreId, Level = coreLevel }
AddCore(coreData)
XDataCenter.FubenInfestorExploreManager.OpenGetNewCoreUi(function()
XLuaUiManager.Open("UiInfestorExploreCoreObtain", coreId, coreLevel, finishCbTemp)
end)
else
if core:IsMaxLevel() then
local title = CSXTextManagerGetText("InfestorExploreCoreAutoDecomposeTitle")
local coreName = core:GetName()
local decomposeMoney = XFubenInfestorExploreConfigs.GetCoreDecomposeMoney(coreId, coreLevel)
local content = CSXTextManagerGetText("InfestorExploreCoreAutoDecomposeContent", coreName, decomposeMoney)
local sureCallBack = function()
OnGetMoneyTip(decomposeMoney, finishCbTemp)
end
local closeCallback = sureCallBack
XDataCenter.FubenInfestorExploreManager.OpenGetNewCoreUi(function()
XUiManager.DialogTip(title, content, XUiManager.DialogType.OnlySure, closeCallback, sureCallBack)
end)
else
local oldLevel = core:GetLevel()
local maxLevel = core:GetMaxLevel()
local newLevel = coreLevel + oldLevel
local coreIdTemp = coreId
newLevel = newLevel > maxLevel and maxLevel or newLevel
core:SetLevel(newLevel)
XDataCenter.FubenInfestorExploreManager.OpenGetNewCoreUi(function()
XLuaUiManager.Open("UiInfestorExploreCoreLevelUp", coreIdTemp, oldLevel, newLevel, finishCbTemp)
end)
end
end
XDataCenter.FubenInfestorExploreManager.AutoWearingOnceCore(coreId)
end
local function OnNewEventTips(eventType, eventArgs)
if eventType == XFubenInfestorExploreConfigs.EventType.AddCore then
if not eventArgs then return end
local coreId = eventArgs[1]
local coreLevel = eventArgs[2]
OnGetNewCore(coreId, coreLevel)
else
if eventType == XFubenInfestorExploreConfigs.EventType.AddBuff then
if not eventArgs then return end
local buffId = eventArgs[1]
AddBuff(buffId)
elseif eventType == XFubenInfestorExploreConfigs.EventType.RemoveBuff then
local buffIds = eventArgs
if buffIds then
for _, buffId in pairs(buffIds) do
RemoveBuff(buffId)
end
end
elseif eventType == XFubenInfestorExploreConfigs.EventType.LostCore then
local coreId = eventArgs and eventArgs[1]
if IsHaveCore(coreId) then
DeleteCore(coreId)
end
elseif eventType == XFubenInfestorExploreConfigs.EventType.LevelUpCore then
local coreId = eventArgs and eventArgs[1]
local core = GetCore(coreId)
if core then
OnGetNewCore(coreId, 1)
end
end
end
end
local function GetEventTipsContent(eventType, eventArgs)
return XFubenInfestorExploreConfigs.GetEventTypeTipContent(eventType, eventArgs)
end
local function OnNotAddCoreEventTips(content)
if content and "" ~= content then
local title = CSXTextManagerGetText("InfestorExploreEventTypeTipTitle")
XUiManager.DialogTip(title, content, XUiManager.DialogType.OnlySure)
end
end
local function MoveToNextChapter()
local curNode = GetStageNode(CurChapterId, CurNodeId)
if not curNode:IsEnd() then return end
curNode:SetStatusPassed()
local nextChapterId = XFubenInfestorExploreConfigs.GetNextChapterId(CurChapterId)
if nextChapterId > 0 then
CurChapterId = nextChapterId
CurNodeId = OnGetMapStartNodeId(CurChapterId)
end
UpdateFinishedNodesStatus()
NewChapterNeedShowAnim = true
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_CHAPTER_FINISH)
end
local function MoveToNextNode(oldNodeId, newNodeId)
local chapterId = CurChapterId
local playerId = XPlayer.Id
local oldNode = GetStageNode(chapterId, CurNodeId)
oldNode:SetStatusPassed()
oldNode:ClearOccupiedPlayerId(playerId)
local childIds = oldNode:GetChildIds()
for childId in pairs(childIds) do
local childNode = GetStageNode(chapterId, childId)
childNode:SetStatusUnReach()
end
local newNode = GetStageNode(chapterId, newNodeId)
newNode:SetStatusCurrent()
newNode:SetOccupiedPlayerId(playerId)
local childIds = newNode:GetChildIds()
for childId in pairs(childIds) do
local childNode = GetStageNode(chapterId, childId)
childNode:SetStatusReach()
end
CurNodeId = newNodeId
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_MOVE_TO_NEXT_NODE)
MoveToNextChapter()
end
local function SetLastFinishNodeId(nodeId)
if not nodeId then return end
LastFinishNodeId = nodeId
end
local function InsertChapterMessage(chapterId, playerMsgInfo)
local msgs = ChapterMsgDic[chapterId] or {}
ChapterMsgDic[chapterId] = msgs
local playerId = playerMsgInfo.Id
local player = GetPlayerData(playerId)
if not player then
player = XInfestorExplorePlayer.New()
PlayerDataDic[playerId] = player
end
player:UpdateData(playerMsgInfo)
tableInsert(msgs, 1, playerMsgInfo)
local msgNum = #msgs
if msgNum > MAX_CHAPTER_MESSAGE_COUNT then
tableRemove(msgs, msgNum)
end
end
-- -------------------(本地接口)end------------------
-- -------------------(对外开放接口)begin------------------
local XFubenInfestorExploreManager = {}
function XFubenInfestorExploreManager.GetCurSectionName()
return XFubenInfestorExploreConfigs.GetSectionName(SectionStatus)
end
function XFubenInfestorExploreManager.Reset()
XLuaUiManager.RunMain()
XUiManager.TipText("InfestorExploreReset")
end
function XFubenInfestorExploreManager.IsOpen()
return SectionStatus ~= SectionType.Init
end
function XFubenInfestorExploreManager.IsInSectionOne()
return SectionStatus == SectionType.StageExplore
end
function XFubenInfestorExploreManager.IsInSectionTwo()
return SectionStatus == SectionType.BossFight
end
function XFubenInfestorExploreManager.IsInSectionEnd()
return SectionStatus == SectionType.RESET
end
function XFubenInfestorExploreManager.GetCurDiff()
return CurDiff
end
function XFubenInfestorExploreManager.CheckNewDiff()
if OldActivityNo and OldActivityNo == ActivityNo then
return
end
--每期段位弹出一次并记录Cookie
XLuaUiManager.Open("UiInfestorExploreActivityResult", LastDiff, CurDiff)
OldActivityNo = ActivityNo
XSaveTool.SaveData(GetCookieKey(), ActivityNo)
end
function XFubenInfestorExploreManager.GetDiffIcon(diff)
diff = diff or CurDiff
return XFubenInfestorExploreConfigs.GetDiffIcon(CurGroupId, diff)
end
function XFubenInfestorExploreManager.GetDiffName(diff)
diff = diff or CurDiff
return XFubenInfestorExploreConfigs.GetDiffName(CurGroupId, diff)
end
function XFubenInfestorExploreManager.GetDiffUpNum()
return XFubenInfestorExploreConfigs.GetDiffUpNum(CurGroupId, CurDiff)
end
function XFubenInfestorExploreManager.GetDiffKeepNum()
return XFubenInfestorExploreConfigs.GetDiffKeepNum(CurGroupId, CurDiff)
end
function XFubenInfestorExploreManager.GetDiffDownNum()
return XFubenInfestorExploreConfigs.GetDiffDownNum(CurGroupId, CurDiff)
end
function XFubenInfestorExploreManager.GetDiffShowScoreGap()
return XFubenInfestorExploreConfigs.GetDiffShowScoreGap(CurGroupId, CurDiff)
end
function XFubenInfestorExploreManager.GetDiffShowScoreLimit()
return XFubenInfestorExploreConfigs.GetDiffShowScoreLimit(CurGroupId, CurDiff)
end
function XFubenInfestorExploreManager.IsChapterPassed(chapterId)
local nextChapterId = XFubenInfestorExploreConfigs.GetNextChapterId(chapterId)
if nextChapterId == 0 then
--最后一章判最后一关通关
local nodeId = CurNodeId
return XFubenInfestorExploreManager.IsNodeEnd(chapterId, nodeId) and XFubenInfestorExploreManager.IsNodePassed(chapterId, nodeId)
end
return CurChapterId > chapterId
end
function XFubenInfestorExploreManager.IsChapterUnlock(chapterId)
local preChapterId = XFubenInfestorExploreConfigs.GetPreChapterId(chapterId)
return not preChapterId or preChapterId == 0 or XFubenInfestorExploreManager.IsChapterPassed(preChapterId)
end
function XFubenInfestorExploreManager.IsChapterRequireIsomer(chapterId)
local characterLimitType = XFubenInfestorExploreConfigs.GetChapterCharacterLimitType(chapterId)
local characterType = XDataCenter.FubenManager.GetDefaultCharacterTypeByCharacterLimitType(characterLimitType)
return characterType == XCharacterConfigs.CharacterType.Isomer
end
function XFubenInfestorExploreManager.GetBuffDes()
local buffId
if XFubenInfestorExploreManager.IsInSectionOne() then
buffId = XFubenInfestorExploreConfigs.GetBuffId(FightEventId)
elseif XFubenInfestorExploreManager.IsInSectionTwo() then
buffId = XFubenInfestorExploreConfigs.GetBuffIdTwo(FightEventId)
end
local fightEventCfg = buffId and buffId ~= 0 and CS.XNpcManager.GetFightEventTemplate(buffId)
return fightEventCfg and fightEventCfg.Description or ""
end
function XFubenInfestorExploreManager.GetActionPoint()
local itemId = XDataCenter.ItemManager.ItemId.InfestorActionPoint
return XDataCenter.ItemManager.GetCount(itemId)
end
function XFubenInfestorExploreManager.CheckActionPointEnough(count)
local haveCount = XFubenInfestorExploreManager.GetActionPoint()
return haveCount >= count
end
function XFubenInfestorExploreManager.IsActionPointEmpty()
local haveCount = XFubenInfestorExploreManager.GetActionPoint()
return haveCount <= 0
end
function XFubenInfestorExploreManager.GetCurGroupLevelBorder()
return XFubenInfestorExploreConfigs.GetGroupLevelBorder(CurGroupId)
end
function XFubenInfestorExploreManager.GetCurGroupDiffConfigs()
return XFubenInfestorExploreConfigs.GetGroupDiffConfigs(CurGroupId)
end
function XFubenInfestorExploreManager.GetCurGroupRankRegionDescText(diff, region)
return XFubenInfestorExploreConfigs.GetRankRegionDescText(CurGroupId, diff, region)
end
function XFubenInfestorExploreManager.GetCurGroupRankRegionRewardList(diff, region)
diff = diff or CurDiff
local mailId = XFubenInfestorExploreConfigs.GetRankRegionMailId(CurGroupId, diff, region)
if not mailId or mailId == 0 then
return {}
end
return XDataCenter.MailManager.GetRewardList(mailId)
end
function XFubenInfestorExploreManager.GetPlayerRankIndexList() --返回序号
local indexList = {}
for index in pairs(PlayerRankDataList) do
indexList[index] = index
end
return indexList
end
function XFubenInfestorExploreManager.GetPlayerRankData(rankIndex) --通过上面返回的序号,拿到对应的来拿取数据
return PlayerRankDataList[rankIndex]
end
function XFubenInfestorExploreManager.GetRankPlayerId(rankIndex)
local rankPlayerData = XFubenInfestorExploreManager.GetPlayerRankData(rankIndex)
return rankPlayerData and rankPlayerData:GetPlayerId()
end
function XFubenInfestorExploreManager.IsChapterTeamEmpty(chapterId)
local team = GetChapterTeam(chapterId)
return team:IsEmpty()
end
function XFubenInfestorExploreManager.IsChapterTeamNoCaptain(chapterId)
local team = GetChapterTeam(chapterId)
return not team:IsCaptainExist()
end
function XFubenInfestorExploreManager.IsChapterTeamExist(chapterId)
-- local team = GetChapterTeam(chapterId)
-- return not team:IsEmpty() and team:IsSyned()
-- 起点类型任意编队
return not XFubenInfestorExploreManager.IsNodeStart(chapterId, CurNodeId)
end
function XFubenInfestorExploreManager.GetChapterTeamCharacterIds(chapterId)
local team = GetChapterTeam(chapterId)
return team:GetCharacterIds()
end
function XFubenInfestorExploreManager.GetChapterTeamCaptainPos(chapterId)
local team = GetChapterTeam(chapterId)
return team:GetCaptainPos()
end
function XFubenInfestorExploreManager.GetChapterTeamFirstFightPos(chapterId)
local team = GetChapterTeam(chapterId)
return team:GetFirstFightPos()
end
function XFubenInfestorExploreManager.SaveChapterTeam(chapterId, characterIds, captainPos, firstFightPos)
local team = GetChapterTeam(chapterId)
local oldCharacterIds = team:GetCharacterIds()
for _, characterId in pairs(oldCharacterIds) do
if characterId > 0 then
local characterData = GetCharacterData(characterId)
characterData:ClearTeamInfo()
end
end
team:SetCharacterIds(characterIds)
team:SetCaptainPos(captainPos)
team:SetFirstFightPos(firstFightPos)
local newCharacterIds = team:GetCharacterIds()
for teamPos, characterId in pairs(newCharacterIds) do
if characterId > 0 then
local characterData = GetCharacterData(characterId)
local isCaptain = captainPos == teamPos
local firstFight = firstFightPos == teamPos
characterData:SetTeamInfo(teamPos, isCaptain, firstFight)
end
end
end
function XFubenInfestorExploreManager:SetTeamChangedFlag()
TeamChanged = true
end
function XFubenInfestorExploreManager:IsTeamChanged()
return TeamChanged
end
function XFubenInfestorExploreManager:ClearTeamChangedFlag()
TeamChanged = nil
end
function XFubenInfestorExploreManager.GetCharacterHpPrecent(characterId)
local characterData = GetCharacterData(characterId)
return characterData:GetHpPercent()
end
function XFubenInfestorExploreManager.RefreshCacheMoneyCount(newMoneyCount, oldMoneyCount)
OldMoneyCount = oldMoneyCount or NewMoneyCount
NewMoneyCount = newMoneyCount
end
function XFubenInfestorExploreManager.GetOldMoneyCount()
return OldMoneyCount
end
function XFubenInfestorExploreManager.GetMoneyIcon()
return XDataCenter.ItemManager.GetItemIcon(XDataCenter.ItemManager.ItemId.InfestorMoney)
end
function XFubenInfestorExploreManager.GetMoneyCount()
return XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.InfestorMoney)
end
function XFubenInfestorExploreManager.GetMoneyName()
return XDataCenter.ItemManager.GetItemName(XDataCenter.ItemManager.ItemId.InfestorMoney)
end
function XFubenInfestorExploreManager.CheckMoneyEnough(count)
local haveCount = XFubenInfestorExploreManager.GetMoneyCount()
return haveCount >= count
end
function XFubenInfestorExploreManager.IsMoneyEmpty()
local haveCount = XFubenInfestorExploreManager.GetMoneyCount()
return haveCount <= 0
end
function XFubenInfestorExploreManager.GetMapNodeIds(chapterId)
return GetMap(chapterId)
end
function XFubenInfestorExploreManager.GetNodePrefabPath(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetPrefabPath()
end
function XFubenInfestorExploreManager.GetNodeStageBg(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetStageBg()
end
function XFubenInfestorExploreManager.GetNodeTypeIcon(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetTypeIcon()
end
function XFubenInfestorExploreManager.GetNodeTypeDetailUiName(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetNodeTypeUiName()
end
function XFubenInfestorExploreManager.GetNodeEventPoolId(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetEventPoolId()
end
function XFubenInfestorExploreManager.GetNodeFightStageId(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetFightStageId()
end
function XFubenInfestorExploreManager.GetNodeShowRewardId(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetShowRewardId()
end
function XFubenInfestorExploreManager.GetSupplyNodeDesList(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:GetSupplyDesList()
end
function XFubenInfestorExploreManager.IsNodeCurrentShop(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsShop() and node:IsCurrent()
end
function XFubenInfestorExploreManager.IsNodeSelectEvent(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsSelectEvent()
end
function XFubenInfestorExploreManager.IsNodeAutoEvent(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsAutoEvent()
end
function XFubenInfestorExploreManager.IsNodeCurrent(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsCurrent()
end
function XFubenInfestorExploreManager.IsNodeFinished(nodeId)
return LastFinishNodeId == nodeId
end
function XFubenInfestorExploreManager.IsNodeCurrentFinished(chapterId, nodeId)
return XFubenInfestorExploreManager.IsNodeCurrent(chapterId, nodeId) and XFubenInfestorExploreManager.IsNodeFinished(nodeId)
end
function XFubenInfestorExploreManager.IsNodeReach(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsReach()
end
function XFubenInfestorExploreManager.IsNodeUnReach(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsUnReach()
end
function XFubenInfestorExploreManager.IsNodePassed(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsPassed()
end
function XFubenInfestorExploreManager.IsNodeFog(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsFog()
end
function XFubenInfestorExploreManager.IsNodeCurrent(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsCurrent()
end
function XFubenInfestorExploreManager.IsNodeStart(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsStart()
end
function XFubenInfestorExploreManager.IsNodeEnd(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
return node:IsEnd()
end
--如果同一个节点有多个玩家,只显示一个(优先显示自己)
function XFubenInfestorExploreManager.GetNodeShowOccupiedPlayerId(chapterId, nodeId)
local showPlayerId = 0
local node = GetStageNode(chapterId, nodeId)
local playerIds = node:GetOccupiedPlayerIds()
for _, playerId in pairs(playerIds) do
showPlayerId = playerId
if playerId == XPlayer.Id then
break
end
end
return showPlayerId
end
function XFubenInfestorExploreManager.CheckActionPoint(chapterId, nodeId)
local node = GetStageNode(chapterId, nodeId)
local useActionPoint = node:GetUseActionPoint()
return XFubenInfestorExploreManager.CheckActionPointEnough(useActionPoint)
end
function XFubenInfestorExploreManager.GetBuffIds()
return BuffIds
end
local Default_Core_Sort = function(aId, bId)
local aQuality = XFubenInfestorExploreConfigs.GetCoreQuality(aId)
local bQuality = XFubenInfestorExploreConfigs.GetCoreQuality(bId)
if aQuality ~= bQuality then
return aQuality > bQuality
end
local aLevel = XFubenInfestorExploreManager.GetCoreLevel(aId)
local bLevel = XFubenInfestorExploreManager.GetCoreLevel(bId)
if aLevel ~= bLevel then
return aLevel > bLevel
end
end
function XFubenInfestorExploreManager.GetCoreIds()
local coreIds = {}
for _, coreId in pairs(CoreIdList) do
if not XFubenInfestorExploreManager.IsCoreWearing(coreId) then
tableInsert(coreIds, coreId)
end
end
tableSort(coreIds, Default_Core_Sort)
return coreIds
end
function XFubenInfestorExploreManager.IsHaveOnceCore()
return next(CoreIdList) and true or false
end
function XFubenInfestorExploreManager.GetWearingCoreIdDic()
return XTool.Clone(CoreUseIdDic)
end
function XFubenInfestorExploreManager.GetWearingCoreId(pos)
return CoreUseIdDic[pos] or 0
end
function XFubenInfestorExploreManager.GetOnceNotWearingPos()
for pos = 1, XFubenInfestorExploreConfigs.MaxWearingCoreNum do
if XFubenInfestorExploreManager.GetWearingCoreId(pos) == 0 then
return pos
end
end
return 0
end
function XFubenInfestorExploreManager.AutoWearingOnceCore(coreId)
if XFubenInfestorExploreManager.IsCoreWearing(coreId) then return end
local pos = XFubenInfestorExploreManager.GetOnceNotWearingPos()
if pos > 0 then
XDataCenter.FubenInfestorExploreManager.RequestInfestorExplorePutOnCore(coreId, pos)
end
end
function XFubenInfestorExploreManager.IsCoreWearing(coreId)
local core = GetCore(coreId)
return core:IsWearing()
end
function XFubenInfestorExploreManager.GetCoreLevel(coreId)
local core = GetCore(coreId)
return core:GetLevel()
end
function XFubenInfestorExploreManager.GetCoreDecomposeMoney(coreIds)
local totalMoney = 0
for _, coreId in pairs(coreIds) do
local core = GetCore(coreId)
totalMoney = totalMoney + core:GetDecomposeMoney()
end
return totalMoney
end
function XFubenInfestorExploreManager.GetRandomSupplyRewardDesList(num)
local desList = {}
num = num or 0
local retNum = 0
local retCheckDic = {}
local totalDesNum = XFubenInfestorExploreConfigs.GetSupplyRewardDesTotalNum()
math.randomseed(os.time())
while true do
if retNum >= num then
break
end
local ret = math.random(totalDesNum)
if not retCheckDic[ret] then
retCheckDic[ret] = ret
retNum = retNum + 1
tableInsert(desList, XFubenInfestorExploreConfigs.GetSupplyRewardDes(ret))
end
end
return desList
end
function XFubenInfestorExploreManager.GetOutPostNodeStartDes(chapterId, nodeId)
local outPostStory = GetNodeOutPostStory(chapterId, nodeId)
return outPostStory:GetStartDes()
end
function XFubenInfestorExploreManager.GetOutPostOption1Txt(chapterId, nodeId)
local outPostStory = GetNodeOutPostStory(chapterId, nodeId)
return outPostStory:GetOption1Txt()
end
function XFubenInfestorExploreManager.GetOutPostOption2Txt(chapterId, nodeId)
local outPostStory = GetNodeOutPostStory(chapterId, nodeId)
return outPostStory:GetOption2Txt()
end
function XFubenInfestorExploreManager.GetOutPostNodeMyTurnDes(chapterId, nodeId, option, characterName)
local outPostStory = GetNodeOutPostStory(chapterId, nodeId)
return outPostStory:GetMyTurnDes(option, characterName)
end
function XFubenInfestorExploreManager.GetOutPostNodeHisTurnDes(chapterId, nodeId, option, isHurt, characterName, hp)
local outPostStory = GetNodeOutPostStory(chapterId, nodeId)
return outPostStory:GetHisTurnDes(option, isHurt, characterName, hp)
end
function XFubenInfestorExploreManager.GetOutPostNodeEndDes(chapterId, nodeId, characterName, hp)
local outPostStory = GetNodeOutPostStory(chapterId, nodeId)
return outPostStory:GetEndDes(characterName, hp)
end
function XFubenInfestorExploreManager.CheckShopExist()
-- local shop = GetShop()
-- return shop and next(shop) and true or false
return false
end
function XFubenInfestorExploreManager.CheckNewChapterNeedShowAnim()
return NewChapterNeedShowAnim
end
function XFubenInfestorExploreManager.ClearNewChapterNeedShowAnim()
NewChapterNeedShowAnim = nil
end
function XFubenInfestorExploreManager.GetGoodsIds()
local goodsIds = {}
local goodsRecordDic = GetShop().GoodsRecordDic
for goodsId in pairs(goodsRecordDic) do
tableInsert(goodsIds, goodsId)
end
return goodsIds
end
function XFubenInfestorExploreManager.GetShopRefreshCost()
local shopId = GetShop().ShopId
return XFubenInfestorExploreConfigs.GetShopRefreshCost(shopId)
end
function XFubenInfestorExploreManager.IsGoodsSellOut(goodsId)
local limitCount = XFubenInfestorExploreConfigs.GetGoodsLimitCount(goodsId)
if limitCount == 0 then
return false
end
local goodsRecordDic = GetShop().GoodsRecordDic
local buyCount = goodsRecordDic[goodsId]
return buyCount and buyCount >= limitCount
end
local DEFAULT_PLAYER_NAME = CSXTextManagerGetText("InfestorExploreRewardNodeDefaultPlayerName")
function XFubenInfestorExploreManager.GetSelectRewardPlayerName(chapterId, nodeId)
local player = GetSelectRewardPlayerData(chapterId, nodeId)
if not player then
return DEFAULT_PLAYER_NAME
end
return player:GetName()
end
local DEFAULT_MESSAGE = CSXTextManagerGetText("InfestorExploreRewardNodeDefaultMessage")
function XFubenInfestorExploreManager.GetSelectRewardMessage(chapterId, nodeId)
local selectRewardInfo = GetSelectRewardInfo(chapterId, nodeId)
if not selectRewardInfo then
return DEFAULT_MESSAGE
end
local player = GetSelectRewardPlayerData(chapterId, nodeId)
local msg = selectRewardInfo.Message
if string.IsNilOrEmpty(msg) then
return player:GetSign()
end
return msg
end
function XFubenInfestorExploreManager.GetSelectRewardPlayerHeadId(chapterId, nodeId)
local player = GetSelectRewardPlayerData(chapterId, nodeId)
if not player then
return
end
return player:GetHeadPortraitId()
end
function XFubenInfestorExploreManager.GetSelectRewardPlayerHeadFrameId(chapterId, nodeId)
local player = GetSelectRewardPlayerData(chapterId, nodeId)
if not player then
return
end
return player:GetHeadFrameId()
end
function XFubenInfestorExploreManager.GetSelectRewardPlayerHeadIcon(chapterId, nodeId)
local player = GetSelectRewardPlayerData(chapterId, nodeId)
if not player then
return
end
return player:GetHeadIcon()
end
function XFubenInfestorExploreManager.GetSelectRewardPlayerHeadEffectPath(chapterId, nodeId)
local player = GetSelectRewardPlayerData(chapterId, nodeId)
if not player then
return
end
return player:GetHeadEffectPath()
end
function XFubenInfestorExploreManager.GetSelectRewardPlayerHeadFrame(chapterId, nodeId)
local player = GetSelectRewardPlayerData(chapterId, nodeId)
if not player then
return
end
return player:GetHeadFrame()
end
function XFubenInfestorExploreManager.GetSelectRewardPlayerHeadFrameEffectPath(chapterId, nodeId)
local player = GetSelectRewardPlayerData(chapterId, nodeId)
if not player then
return
end
return player:GetHeadFrameEffectPath()
end
function XFubenInfestorExploreManager.IsLastPlayerSelectReward(chapterId, nodeId, rewardId)
local selectRewardInfo = GetSelectRewardInfo(chapterId, nodeId)
if not selectRewardInfo then
return false
end
return selectRewardInfo.RewardId == rewardId
end
function XFubenInfestorExploreManager.GetShopEventIds()
local shopEventIds = {}
for eventId in pairs(ContractEventIdDic) do
tableInsert(shopEventIds, eventId)
end
return shopEventIds
end
function XFubenInfestorExploreManager.IsShopEventSellOut()
for _, value in pairs(ContractEventIdDic) do
if value == true then
return true
end
end
return false
end
function XFubenInfestorExploreManager.ClearFightRewards()
FightRewardBuyDic = {}
AfterFightNeedShowReward = nil
--最后一关BOSS打完之后未翻牌重登翻牌之后需要手动检查是否通关章节
MoveToNextChapter()
end
function XFubenInfestorExploreManager.IsFightRewadsExist()
return next(FightRewardBuyDic) and true or false
end
function XFubenInfestorExploreManager.GetFightRewardIds()
local rewardIds = {}
for rewardId, isBuy in pairs(FightRewardBuyDic) do
tableInsert(rewardIds, rewardId)
end
return rewardIds
end
function XFubenInfestorExploreManager.IsFightRewadBuy(rewardId)
return FightRewardBuyDic[rewardId]
end
function XFubenInfestorExploreManager.GetFightRewadBuyTimes()
local times = 0
for rewardId, isBuy in pairs(FightRewardBuyDic) do
if isBuy then
times = times + 1
end
end
return times
end
function XFubenInfestorExploreManager.GetAllChapterMsgs(chapterId)
return ChapterMsgDic[chapterId] or {}
end
function XFubenInfestorExploreManager.GetChapterPlayerMsg(chapterId, msgId)
local msgs = ChapterMsgDic[chapterId]
return msgs and msgs[msgId] or ""
end
function XFubenInfestorExploreManager.GetPlayerScore(playerId)
local player = GetPlayerData(playerId)
if not player then
return 0
end
return player:GetScore()
end
function XFubenInfestorExploreManager.GetPlayerHeadIcon(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetHeadIcon()
end
function XFubenInfestorExploreManager.GetPlayerHeadEffectPath(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetHeadEffectPath()
end
function XFubenInfestorExploreManager.GetPlayerHeadFrame(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetHeadFrame()
end
function XFubenInfestorExploreManager.GetPlayerHeadFrameEffectPath(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetHeadFrameEffectPath()
end
function XFubenInfestorExploreManager.GetPlayerName(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetName()
end
function XFubenInfestorExploreManager.GetPlayerLevel(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetLevel()
end
function XFubenInfestorExploreManager.GetPlayerDiffName(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetDiffName()
end
function XFubenInfestorExploreManager.GetPlayerDiffIcon(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetDiffIcon()
end
function XFubenInfestorExploreManager.GetPlayerHeadId(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetHeadPortraitId()
end
function XFubenInfestorExploreManager.GetPlayerHeadFrameId(playerId)
local player = GetPlayerData(playerId)
if not player then
return
end
return player:GetHeadFrameId()
end
function XFubenInfestorExploreManager.GetChapter2StageScore(stageId)
return Chapter2ScoreDic[stageId] or 0
end
function XFubenInfestorExploreManager.GetChapter2TotalScore()
local totalScore = 0
if Chapter2ScoreDic then
for _, score in pairs(Chapter2ScoreDic) do
totalScore = totalScore + score
end
end
return totalScore
end
function XFubenInfestorExploreManager.GetChapter2StageIds()
return XFubenInfestorExploreConfigs.GetChapter2StageIds(ActivityId)
end
function XFubenInfestorExploreManager.SetOpenInfestorExploreCoreDelay(openInfestorExploreCoreDelay)
OpenInfestorExploreCoreDelay = openInfestorExploreCoreDelay
end
function XFubenInfestorExploreManager.GetOpenInfestorExploreCoreDelay()
return OpenInfestorExploreCoreDelay
end
function XFubenInfestorExploreManager.OpenGetNewCoreUi(cb)
if not cb and not OpenInfestorExploreCoreCbTemp then return end
if OpenInfestorExploreCoreScheduleId then
XScheduleManager.UnSchedule(OpenInfestorExploreCoreScheduleId)
end
if cb then
OpenInfestorExploreCoreCbTemp = cb
end
local openInfestorExploreCoreCb = cb or OpenInfestorExploreCoreCbTemp
local scheduleCallback = function()
openInfestorExploreCoreCb()
XDataCenter.FubenInfestorExploreManager.SetOpenInfestorExploreCoreDelay(0)
OpenInfestorExploreCoreCbTemp = nil
OpenInfestorExploreCoreScheduleId = nil
end
local delayTime = XDataCenter.FubenInfestorExploreManager.GetOpenInfestorExploreCoreDelay()
OpenInfestorExploreCoreScheduleId = XScheduleManager.ScheduleOnce(scheduleCallback, delayTime)
end
local function UpdateSectionData(status, nextResetTime) --更新现在出于什么时间段,更新这个时间段的的剩余时间
SectionStatus = status
local leftTime = nextResetTime - XTime.GetServerNowTimestamp()
XCountDown.CreateTimer(XCountDown.GTimerName.FubenInfestorExplore, leftTime)
end
local function CreateCenterFog(chapterId, centerNodeId, fogDepth)
local centerNode = GetStageNode(chapterId, centerNodeId)
centerNode:SetStatusFog()
if fogDepth == 0 then
return
end
fogDepth = fogDepth - 1
local childIds = centerNode:GetChildIds()
for childId in pairs(childIds) do
CreateCenterFog(chapterId, childId, fogDepth)
end
local parentIds = centerNode:GetParentIds()
for parentId in pairs(parentIds) do
CreateCenterFog(chapterId, parentId, fogDepth)
end
end
local FogCenterNodeIds = {}
local function UpdateStagesInfo(mapList)
if not mapList then return end
InitMaps()
for _, map in pairs(mapList) do
local chapterId = map.ChapterId
local stageDataList = map.GridList
for _, stageData in pairs(stageDataList) do
local nodeId = stageData.Id
local node = GetStageNode(chapterId, nodeId)
if not node then
local mapId = XFubenInfestorExploreConfigs.GetMapId(chapterId)
XLog.Error("XFubenInfestorExploreManager UpdateStagesInfo error:关卡地图中不存在节点, chapterId: " .. chapterId .. ", nodeId: " .. nodeId .. ", mapId: " .. mapId)
end
local stageId = stageData.NodeId
node:SetStageId(stageId)
end
--必须等待所有节点更新完毕后再生成迷雾
for _, stageData in pairs(stageDataList) do
local nodeId = stageData.Id
local stageId = stageData.NodeId
local nodeResType = XFubenInfestorExploreConfigs.GetNodeResType(stageId)
local fogDepth = XFubenInfestorExploreConfigs.GetFogDepth(nodeResType)
if fogDepth ~= 0 then
CreateCenterFog(chapterId, nodeId, fogDepth)
tableInsert(FogCenterNodeIds, nodeId)
end
end
--迷雾全部生成完毕后还原各中心点初始状态
for _, centerNodeId in pairs(FogCenterNodeIds) do
local centerNode = GetStageNode(chapterId, centerNodeId)
centerNode:SetStatusUnReach()
end
FogCenterNodeIds = {}
end
end
local function ResetData()
FightRewardBuyDic = {}
CharacterDataDic = {}
LastSyncInfoTime = 0
LastLeaveChapterMsgTime = 0
LastGetLeaveChapterMsgTime = 0
ChapterMsgDic = {}
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_RESET)
end
local function UpdateChapterData(data)
CurChapterId = data.CurrentChapterId
CurNodeId = data.CurrentGridId
CurGroupId = data.GroupId
FightEventId = data.FightEventId
ActivityId = data.ActivityId
end
local function UpdateDiff(data)
CurDiff = data.Diff
LastDiff = data.LastDiff
ActivityNo = data.ActivityNo
OldActivityNo = XSaveTool.GetData(GetCookieKey())
end
local function UpdateChapter2Data(bossFightScoreInfoList)
if not bossFightScoreInfoList then return end
Chapter2ScoreDic = {}
for _, info in pairs(bossFightScoreInfoList) do
local stageId = info.StageId
local score = info.Score
Chapter2ScoreDic[stageId] = score
end
end
local function UpdateBuffData(buffList)
BuffIds = buffList
end
local function UpdateCharacterData(characterInfoList)
if not characterInfoList then return end
for _, info in pairs(characterInfoList) do
local characterId = info.CharacterId
local characterData = GetCharacterData(characterId)
characterData:UpdateData(info)
CharacterDataDic[characterId] = characterData
end
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_CHARACTER_HP_CHANGE)
end
local function UpdateCoreData(coreInfo)
if not coreInfo then return end
CoreDic = {}
CoreIdList = {}
CoreUseIdDic = {}
local coreDataList = coreInfo.CoreList
for _, coreData in pairs(coreDataList) do
AddCore(coreData)
end
local useDic = coreInfo.UseList
for pos = 1, XFubenInfestorExploreConfigs.MaxWearingCoreNum do
local coreId = useDic[pos]
if coreId and coreId > 0 then
local core = GetCore(coreId)
if not core then
XLog.Error("XFubenInfestorExploreManager UpdateCoreData Error:穿戴中的核心未拥有, coreId: " .. coreId)
else
PutOnCore(coreId, pos)
end
else
TakeOffCore(pos)
end
end
end
local function UpdateShopData(shopData)
if not shopData then return end
local shop = {}
shop.ShopId = shopData.Id
local goodsRecordDic = {}
local shopInfoList = shopData.GoodsList
for _, shopInfo in pairs(shopInfoList) do
local id = shopInfo.Id
local buyCount = shopInfo.BuyCount
goodsRecordDic[id] = buyCount
end
shop.GoodsRecordDic = goodsRecordDic
ChapterIdToShopDic[CurChapterId] = shop
end
local function UpdateTeamData(teamType, teamdata)
if not teamdata then return end
local captainPos = 1
local firstFightPos
local characterIds = { 0, 0, 0 }
for _, characterId in pairs(teamdata) do
local characterData = GetCharacterData(characterId)
local teamPos = characterData:GetTeamPos()
characterIds[teamPos] = characterId
if characterData:IsMeCaptain() then
captainPos = teamPos
end
if characterData:IsMeFirstFight() then
firstFightPos = teamPos
end
end
-- 服务器没有首发位数据就和队长位一致
if firstFightPos == nil then
firstFightPos = captainPos
end
local team = GetTeam(teamType)
team:SetCaptainPos(captainPos)
team:SetFirstFightPos(firstFightPos)
team:SetCharacterIds(characterIds)
if not team:IsEmpty() then
team:Syn()
end
end
local function UpdateTeamInfoList(teamInfoList)
if not teamInfoList then return end
for _, teamInfo in pairs(teamInfoList) do
local teamType = teamInfo.CharacterLimitType
local teamData = teamInfo.CharacterList
UpdateTeamData(teamType, teamData)
end
end
local PLAYER_RANK_SORT = function(aPlayer, bPlayer)
local aScore = aPlayer:GetScore()
local bScore = bPlayer:GetScore()
if aScore ~= bScore then
return aScore > bScore
end
local aChapterId = aPlayer:GetChapterId()
local bChapterId = bPlayer:GetChapterId()
if aChapterId ~= bChapterId then
return aChapterId > bChapterId
end
local aGridId = aPlayer:GetGridId()
local bGridId = bPlayer:GetGridId()
if aGridId ~= bGridId then
return aGridId > bGridId
end
end
local function UpdatePlayerRank(infestorPlayerList)
PlayerRankDataList = {}
for index, playerData in pairs(infestorPlayerList) do
local playerId = playerData.Id
local player = GetPlayerData(playerId)
if player then
--清除小队成员之前所在的格子位置
local chapterId = player:GetChapterId()
local nodeId = player:GetGridId()
if chapterId > 0 and nodeId > 0 then
local node = GetStageNode(chapterId, nodeId)
node:ClearOccupiedPlayerId(playerId)
end
else
player = XInfestorExplorePlayer.New()
end
player:UpdateData(playerData)
PlayerDataDic[playerId] = player
PlayerRankDataList[index] = player
--记录小队成员所在的格子位置
local chapterId = player:GetChapterId()
local nodeId = player:GetGridId()
if chapterId > 0 and nodeId > 0 then
local node = GetStageNode(chapterId, nodeId)
node:SetOccupiedPlayerId(playerId)
end
end
tableSort(PlayerRankDataList, PLAYER_RANK_SORT)
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_REFRESH_PALYER_RANK)
end
local function UpdateSelectRewardInfoList(selectRewardInfoList)
if not selectRewardInfoList then return end
SelectRewardInfoDic = {}
for _, rewardInfo in pairs(selectRewardInfoList) do
local chapterId = rewardInfo.ChapterId
local chapterDic = SelectRewardInfoDic[chapterId] or {}
SelectRewardInfoDic[chapterId] = chapterDic
local nodeId = rewardInfo.GridId
local nodeDic = chapterDic[nodeId] or {}
chapterDic[nodeId] = nodeDic
nodeDic.RewardId = rewardInfo.RewardId
nodeDic.PlayerId = rewardInfo.PlayerId
nodeDic.Message = rewardInfo.Msg
end
end
local function UpdateContractInfo(contractInfo, nextResetTime)
if not contractInfo then return end
ContractEventIdDic = {}
local goodsIdList = contractInfo.GoodsIdList
if goodsIdList then
for _, eventId in pairs(goodsIdList) do
ContractEventIdDic[eventId] = false
end
end
local buyGoodsId = contractInfo.BuyGoodsId
if buyGoodsId and buyGoodsId > 0 then
if ContractEventIdDic[buyGoodsId] == false then
ContractEventIdDic[buyGoodsId] = true
end
end
nextResetTime = nextResetTime or XTime.GetSeverNextRefreshTime()
local nowTime = XTime.GetServerNowTimestamp()
local leftTime = nextResetTime - nowTime
XCountDown.CreateTimer(XCountDown.GTimerName.FubenInfestorExploreDaily, leftTime)
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_CONTRACT_DAILY_RESET)
end
local function UpdateFightRewards(fightRewardInfoList)
if not fightRewardInfoList then return end
FightRewardBuyDic = {}
for _, fightRewardInfo in pairs(fightRewardInfoList) do
local rewardId = fightRewardInfo.RewardId
local isBuy = fightRewardInfo.IsBuy
FightRewardBuyDic[rewardId] = isBuy
end
end
local function UpdateChapterLeaveMsg(chapterId, msgList)
if not chapterId or not msgList then return end
ChapterMsgDic[chapterId] = {}
for _, playerMsgInfo in pairs(msgList) do
InsertChapterMessage(chapterId, playerMsgInfo)
end
end
function XFubenInfestorExploreManager.OpenEntranceUi(openCb)
local now = XTime.GetServerNowTimestamp()
if LastSyncInfoTime + REQUEST_SYNC_INFO_CD >= now then
openCb()
else
XDataCenter.FubenInfestorExploreManager.RequestInfo(function()
openCb()
end)
end
end
function XFubenInfestorExploreManager.RequestInfo(callBack)
local now = XTime.GetServerNowTimestamp()
if LastSyncInfoTime + REQUEST_SYNC_INFO_CD >= now then
return
end
LastSyncInfoTime = now
XNetwork.Call("InfestorExploreGetInfoRequest", nil, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local data = res.InfestorInfo
UpdateCharacterData(data.CharacterList)
UpdateTeamInfoList(data.TeamInfoList)
UpdateChapterData(data)
UpdateDiff(data)
UpdateChapter2Data(data.BossFightScoreInfoList)
UpdateFinishedNodesStatus(data.FinishGridDict)
UpdateBuffData(data.BuffList)
UpdateCoreData(data.CoreInfo)
UpdatePlayerRank(data.InfestorPlayerList)
UpdateSelectRewardInfoList(data.SelectRewardInfoList)
UpdateContractInfo(data.EventShopInfo)
SetLastFinishNodeId(data.LastFinishGridId)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestShopInfo(nodeId, callBack)
if XFubenInfestorExploreManager.CheckShopExist() then
return
end
local req = { GridId = nodeId }
XNetwork.Call("InfestorExploreGetShopRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local shop = res.Shop
UpdateShopData(shop)
MoveToNextNode(CurNodeId, nodeId)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestBuyGoods(goodsId, callBack)
local req = { GoodsId = goodsId }
XNetwork.Call("InfestorExploreBuyGoodsRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local coreData = res.Core
if coreData and coreData.Id then
OnGetNewCore(coreData.Id, coreData.Level)
end
local goodsRecordDic = GetShop().GoodsRecordDic
local buyCount = goodsRecordDic[goodsId]
goodsRecordDic[goodsId] = buyCount + 1
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestRefreshShop(callBack)
XNetwork.Call("InfestorExploreRefreshShopRequest", nil, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local shop = res.Shop
UpdateShopData(shop)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestGetSelectReward(nodeId, rewardCallBack)
local req = { GridId = nodeId }
XNetwork.Call("InfestorExploreGetSelectRewardRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local selectRewardFunc = function()
local selectRewardIdList = res.SelectRewardIdList
if selectRewardIdList and next(selectRewardIdList) then
rewardCallBack(selectRewardIdList)
end
end
local rewardCore = res.RewardCore
if rewardCore and rewardCore.Id then
OnGetNewCore(rewardCore.Id, rewardCore.Level, selectRewardFunc)
else
selectRewardFunc()
end
MoveToNextNode(CurNodeId, nodeId)
end)
end
function XFubenInfestorExploreManager.RequestSetSelectReward(rewardId, msg, callBack)
local req = { RewardId = rewardId, Msg = msg }
XNetwork.Call("InfestorExploreSetSelectRewardRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
SetLastFinishNodeId(CurNodeId)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestSupply(chapterId, nodeId, callBack)
local req = { ChapterId = chapterId, GridId = nodeId }
XNetwork.Call("InfestorExploreSupplyRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local coreList = res.CoreRewardList
local index = 1
local finishCb
finishCb = function()
index = index + 1
local nextCoreData = coreList[index]
if not nextCoreData then return end
OnGetNewCore(nextCoreData.CoreId, nextCoreData.CoreLevel, finishCb)
end
local coreData = coreList[index]
OnGetNewCore(coreData.CoreId, coreData.CoreLevel, finishCb)
MoveToNextNode(CurNodeId, nodeId)
SetLastFinishNodeId(CurNodeId)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestUpdateTeam(chapterId, callBack)
local req = {}
local team = GetChapterTeam(chapterId)
req.Team = team:GetCharacterIds()
req.CaptainPos = team:GetCaptainPos()
req.FirstFightPos = team:GetFirstFightPos()
XNetwork.Call("InfestorExploreUpdateTeamRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
team:Syn()
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestRest(chapterId, nodeId, callBack)
local req = {}
req.ChapterId = chapterId
req.GridId = nodeId
local team = GetChapterTeam(chapterId)
req.Team = team:GetCharacterIds()
req.CaptainPos = team:GetCaptainPos()
req.FirstFightPos = team:GetFirstFightPos()
XNetwork.Call("InfestorExploreRestRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
MoveToNextNode(CurNodeId, nodeId)
SetLastFinishNodeId(CurNodeId)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestBuyEventGoods(goodsId, callBack)
local req = { GoodsId = goodsId }
XNetwork.Call("InfestorBuyEventGoodsRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local eventType = res.EventType
local eventArgs = res.EventArgs
if eventType ~= XFubenInfestorExploreConfigs.EventType.AddCore then
local content = GetEventTipsContent(eventType, eventArgs)
OnNotAddCoreEventTips(content)
end
OnNewEventTips(eventType, eventArgs)
ContractEventIdDic[goodsId] = true
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestInfestorExploreBuyFightReward(rewardId, callBack)
local req = { RewardId = rewardId }
XNetwork.Call("InfestorExploreBuyFlopRewardRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
FightRewardBuyDic[rewardId] = true
local coreId = XFubenInfestorExploreConfigs.GetRewardCoreId(rewardId)
local coreLevel = XFubenInfestorExploreConfigs.GetRewardCoreLevel(rewardId)
OnGetNewCore(coreId, coreLevel)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestFinishAction(callBack)
XNetwork.Call("InfestorExploreFinishActionRequest", nil, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
SetLastFinishNodeId(CurNodeId)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestInfestorExplorePutOnCore(coreId, pos, callBack)
local req = { CoreId = coreId, Index = pos }
XNetwork.Call("InfestorExploreUseCoreRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
PutOnCore(coreId, pos)
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_CORE_PUTON, pos)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestInfestorExploreTakeOffCore(pos, callBack)
local req = { Index = pos }
XNetwork.Call("InfestorExploreTakeOffCoreRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
TakeOffCore(pos)
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_CORE_TAKEOFF)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestInfestorExploreDecomposeCore(coreIds, callBack)
local req = { CoreList = coreIds }
XNetwork.Call("InfestorExploreDecomposeCoreRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local moneyCount = XFubenInfestorExploreManager.GetCoreDecomposeMoney(coreIds)
OnGetMoneyTip(moneyCount)
for _, coreId in pairs(coreIds) do
DeleteCore(coreId)
end
CsXGameEventManager.Instance:Notify(XEventId.EVENT_INFESTOREXPLORE_CORE_DECOMPOESE)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestInfestorExploreSelectEvent(nodeId, eventIds, callBack)
local req = { GridId = nodeId, EventIdList = eventIds }
XNetwork.Call("InfestorExploreSelectEventRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local eventResultList = res.EventResultList
local tipsContent = ""
for _, eventResult in pairs(eventResultList) do
local eventType = eventResult.EventType
local eventArgs = eventResult.Args
if eventType ~= XFubenInfestorExploreConfigs.EventType.AddCore then
local content = GetEventTipsContent(eventType, eventArgs)
tipsContent = tipsContent .. content .. "\n"
end
OnNewEventTips(eventType, eventArgs)
end
OnNotAddCoreEventTips(tipsContent)
MoveToNextNode(CurNodeId, nodeId)
SetLastFinishNodeId(CurNodeId)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestInfestorExploreAutoEvent(nodeId, callBack)
local req = { GridId = nodeId }
XNetwork.Call("InfestorExploreAutoEventRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
local eventResult = res.EventResult
local eventType = eventResult.EventType
local eventArgs = eventResult.Args
if eventType ~= XFubenInfestorExploreConfigs.EventType.AddCore then
local content = GetEventTipsContent(eventType, eventArgs)
OnNotAddCoreEventTips(content)
end
OnNewEventTips(eventType, eventArgs)
MoveToNextNode(CurNodeId, nodeId)
SetLastFinishNodeId(CurNodeId)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.OpenGuestBook(chapterId)
local now = XTime.GetServerNowTimestamp()
if LastGetLeaveChapterMsgTime + REQUEST_GET_LEAVE_CHAPTER_MSG_CD >= now then
XLuaUiManager.Open("UiInfestorExploreGuestbook", chapterId)
return
end
local callBack = function()
XLuaUiManager.Open("UiInfestorExploreGuestbook", chapterId)
end
XFubenInfestorExploreManager.RequestGetChapterLeaveMsg(chapterId, callBack)
end
function XFubenInfestorExploreManager.RequestGetChapterLeaveMsg(chapterId, callBack)
local now = XTime.GetServerNowTimestamp()
if LastGetLeaveChapterMsgTime + REQUEST_GET_LEAVE_CHAPTER_MSG_CD >= now then
return
end
LastGetLeaveChapterMsgTime = now
local req = { ChapterId = chapterId }
XNetwork.Call("InfestorGetChapterLeaveMsgRequest", req, function(res)
local msgList = res.MsgList
if msgList then
UpdateChapterLeaveMsg(chapterId, msgList)
end
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestChapterLeaveMsg(chapterId, msg, callBack)
local now = XTime.GetServerNowTimestamp()
if LastLeaveChapterMsgTime + REQUEST_LEAVE_CHAPTER_MSG_CD >= now then
local tip = CSXTextManagerGetText("InfestorExploreRequestChapterLeaveMsgInCD", REQUEST_LEAVE_CHAPTER_MSG_CD)
XUiManager.TipMsg(tip)
return
end
local req = { ChapterId = chapterId, Msg = msg }
XNetwork.Call("InfestorChapterLeaveMsgRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
LastLeaveChapterMsgTime = now
local playerMsgInfo = {
Msg = msg,
Id = XPlayer.Id,
GroupId = CurGroupId,
Diff = CurDiff,
}
InsertChapterMessage(chapterId, playerMsgInfo)
if callBack then callBack() end
end)
end
function XFubenInfestorExploreManager.RequestOutPostSend(nodeId, characterId, callBack)
local req = { GridId = nodeId, CharacterId = characterId }
XNetwork.Call("InfestorExploreBfrtRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
MoveToNextNode(CurNodeId, nodeId)
local rewardMoney = res.RewardMoney
local subHpList = res.SubHpList
if callBack then callBack(rewardMoney, subHpList) end
end)
end
function XFubenInfestorExploreManager.RequestEnterFight(chapterId, nodeId)
local stageId = XFubenInfestorExploreManager.GetNodeFightStageId(chapterId, nodeId)
local team = XFubenInfestorExploreManager.GetChapterTeamCharacterIds(chapterId)
local captainPos = XDataCenter.FubenInfestorExploreManager.GetChapterTeamCaptainPos(chapterId)
local firstFightPos = XDataCenter.FubenInfestorExploreManager.GetChapterTeamFirstFightPos(chapterId)
XDataCenter.FubenManager.EnterInfestorExploreFight(stageId, team, captainPos, nodeId, firstFightPos)
DelayMoveNodeId = nodeId
end
function XFubenInfestorExploreManager.NotifyInfestorStatus(data)
if data.IsReset then
ResetData()
end
UpdateSectionData(data.Status, data.NextResetTime)
UpdateStagesInfo(data.MapList)
end
function XFubenInfestorExploreManager.NotifyInfestorDailyReset(data)
UpdateContractInfo(data.EventShopInfo, data.NextResetTime)
end
function XFubenInfestorExploreManager.NotifyInfestorCharacterList(data)
UpdateCharacterData(data.CharacterList)
end
function XFubenInfestorExploreManager.NotifyFlopRewardInfoList(data)
UpdateFightRewards(data.FlopRewardInfoList)
if AfterFightNeedShowReward then
AfterFightNeedShowReward = nil
if XFubenInfestorExploreManager.IsFightRewadsExist() then
XLuaUiManager.Open("UiInfestorExploreChoose")
end
end
end
function XFubenInfestorExploreManager.NotifyInfestorPlayerInfoList(data)
local infestorPlayerList = data.PlayerInfoList
if not infestorPlayerList then return end
UpdatePlayerRank(infestorPlayerList)
end
--FubenManager相关
function XFubenInfestorExploreManager.InitStageInfo()
local configs = XFubenInfestorExploreConfigs.GetStageConfigs()
for _, config in pairs(configs) do
local stageId = config.FightStageId
if stageId > 0 then
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
if stageInfo then
stageInfo.Type = XDataCenter.FubenManager.StageType.InfestorExplore
end
end
end
local activityConfigs = XFubenInfestorExploreConfigs.GetActivityConfigs()
for _, config in pairs(activityConfigs) do
for _, stageId in pairs(config.BossStageId) do
if stageId > 0 then
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
if stageInfo then
stageInfo.Type = XDataCenter.FubenManager.StageType.InfestorExplore
end
end
end
end
end
--战斗结算翻牌走副本之外独立协议通知
function XFubenInfestorExploreManager.FinishFight(settle)
local infestorBossFightResult = settle.InfestorBossFightResult
if infestorBossFightResult and next(infestorBossFightResult) then
local stageId = settle.StageId
local newScore = infestorBossFightResult.TotalScore
local oldScore = XFubenInfestorExploreManager.GetChapter2StageScore(stageId)
local isNewScore = newScore > oldScore
if isNewScore then
Chapter2ScoreDic[stageId] = newScore
end
local totalScore = XFubenInfestorExploreManager.GetChapter2TotalScore()
local player = GetPlayerData(XPlayer.Id)
player:SetScore(totalScore)
XLuaUiManager.Open("UiInfestorExploreFightResult", stageId, infestorBossFightResult, isNewScore)
else
XDataCenter.FubenManager.FinishFight(settle)
if settle.IsWin then
if DelayMoveNodeId then
MoveToNextNode(CurNodeId, DelayMoveNodeId)
DelayMoveNodeId = nil
end
AfterFightNeedShowReward = true
end
end
end
XFubenInfestorExploreManager.OnGetMoneyTip = OnGetMoneyTip
XFubenInfestorExploreManager.IsHaveCore = IsHaveCore
XFubenInfestorExploreManager.CheckBuffExsit = CheckBuffExsit
return XFubenInfestorExploreManager
-- -------------------(对外开放接口)end------------------
end
-- -------------------(服务器推送)begin------------------
XRpc.NotifyInfestorStatus = function(data)
XDataCenter.FubenInfestorExploreManager.NotifyInfestorStatus(data)
end
XRpc.NotifyInfestorDailyReset = function(data)
XDataCenter.FubenInfestorExploreManager.NotifyInfestorDailyReset(data)
end
XRpc.NotifyInfestorCharacterList = function(data)
XDataCenter.FubenInfestorExploreManager.NotifyInfestorCharacterList(data)
end
XRpc.NotifyFlopRewardInfoList = function(data)
XDataCenter.FubenInfestorExploreManager.NotifyFlopRewardInfoList(data)
end
XRpc.NotifyInfestorPlayerInfoList = function(data)
XDataCenter.FubenInfestorExploreManager.NotifyInfestorPlayerInfoList(data)
end
-- -------------------(服务器推送)end------------------