PGRData/Script/matrix/xmanager/XFubenInfestorExploreManager.lua

2270 lines
No EOL
77 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

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

-- -------------------(引用外部模块)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------------------