1045 lines
41 KiB
Lua
1045 lines
41 KiB
Lua
|
local XChessPursuitMapDb = require("XUi/XUiChessPursuit/XData/XChessPursuitMapDb")
|
|||
|
local XChessPursuitMapBoss = require("XUi/XUiChessPursuit/XData/XChessPursuitMapBoss")
|
|||
|
local XChessPursuitSyncActionQueue = require("XUi/XUiChessPursuit/XData/XChessPursuitSyncActionQueue")
|
|||
|
local XChessPursuitRank = require("XUi/XUiChessPursuit/XData/XChessPursuitRank")
|
|||
|
local XChessPursuitRankPlayer = require("XUi/XUiChessPursuit/XData/XChessPursuitRankPlayer")
|
|||
|
local XChessPursuitRankGrid = require("XUi/XUiChessPursuit/XData/XChessPursuitRankGrid")
|
|||
|
local XChessPursuitSyncAction = require("XUi/XUiChessPursuit/XData/XChessPursuitSyncAction")
|
|||
|
local CSXTextManagerGetText = CS.XTextManager.GetText
|
|||
|
local tableSort = table.sort
|
|||
|
|
|||
|
XChessPursuitManagerCreator = function()
|
|||
|
local XChessPursuitManager = {}
|
|||
|
|
|||
|
local ChessPursuitRequest = {
|
|||
|
ChessPursuitEnterMapRequest = "ChessPursuitEnterMapRequest", -- 进入图请求
|
|||
|
ChessPursuitSetGridTeamRequest = "ChessPursuitSetGridTeamRequest", -- 布阵请求
|
|||
|
ChessPursuitBuyCardRequest = "ChessPursuitBuyCardRequest", -- 购买卡牌请求
|
|||
|
ChessPursuitEndRoundRequest = "ChessPursuitEndRoundRequest", -- 结束回合请求
|
|||
|
ChessPursuitAutoFightRequest = "ChessPursuitAutoFightRequest", -- 自动战斗请求
|
|||
|
ChessPursuitResetMapRequest = "ChessPursuitResetMapRequest", -- 重置地图
|
|||
|
ChessPursuitAutoClearRequest = "ChessPursuitAutoClearRequest", -- 扫荡
|
|||
|
ChessPursuitEndBattleRequest = "ChessPursuitEndBattleRequest", -- 确认战斗结果
|
|||
|
ChessPursuitGetRankRequest = "ChessPursuitGetRankRequest", -- 请求排行榜数据
|
|||
|
ChessPursuitGetRankPlayerDetailRequest = "ChessPursuitGetRankPlayerDetailRequest", --请求排行榜上单个玩家的详细数据
|
|||
|
ChessPursuitChangeTeamRequest = "ChessPursuitChangeTeamRequest", --战斗前改变队伍
|
|||
|
}
|
|||
|
|
|||
|
--面板上显示的位置 = 队伍中实际中的位置
|
|||
|
local TEAM_POS_DIC = {
|
|||
|
[1] = 2,
|
|||
|
[2] = 1,
|
|||
|
[3] = 3,
|
|||
|
}
|
|||
|
|
|||
|
local ChessPursuitMapBossList = {}
|
|||
|
local ChessPursuitMapDbList = {}
|
|||
|
local ChessPursuitSyncActionQueue = XChessPursuitSyncActionQueue.New()
|
|||
|
local ChessPursuitTempTeamDic = {} --缓存地图所有布阵格的队伍数据
|
|||
|
local CurrentMapId
|
|||
|
local CurrentEndTime
|
|||
|
local ChessPursuitRankDataList = {}
|
|||
|
local ChessPursuitMyRank = -1 -- 服务端下发的主角排名,表示有多少人排名在我的前面
|
|||
|
local ChessPursuitAllRank = -1 -- 所有玩家的排名数量
|
|||
|
local ChessPursuitMyScore = 0
|
|||
|
local ChessPursuitRankGridList = {} --排行榜单个玩家详情的布阵格列表
|
|||
|
local ChessPursuitStartStoryId = CS.XGame.ClientConfig:GetString("ChessPursuitStartStoryId")
|
|||
|
local ChessPursuitCoinItemData = {}
|
|||
|
local PlayerTeamTempData --当前编队中的所有队伍缓存(只在编队界面中确定保存了,才会影响到ChessPursuitTempTeamDic)
|
|||
|
local IsRegisterEditBattleProxy = false
|
|||
|
local ChessPursuitRankDetailBossId = 0
|
|||
|
|
|||
|
local mathMax = math.max
|
|||
|
local stringFormat = string.format
|
|||
|
|
|||
|
XChessPursuitManager.ChessPursuitSyncActionType = {
|
|||
|
None = 0,
|
|||
|
--触发了卡牌效果
|
|||
|
CardEffect = 1,
|
|||
|
--更新卡牌有效性计数
|
|||
|
KeepCount = 2,
|
|||
|
--开始战斗
|
|||
|
BeginBattle = 3,
|
|||
|
--结束战斗
|
|||
|
EndBattle = 4,
|
|||
|
--确认结束,战斗对Boss造成伤害
|
|||
|
EndBattleHurt = 5,
|
|||
|
--结束回合
|
|||
|
EndRound = 6,
|
|||
|
--处于停顿移动
|
|||
|
StopMove = 7,
|
|||
|
--移动到新位置
|
|||
|
Move = 8,
|
|||
|
}
|
|||
|
|
|||
|
local DefaultTeam = {
|
|||
|
CaptainPos = 1,
|
|||
|
FirstFightPos = 1,
|
|||
|
TeamData = { 0, 0, 0 },
|
|||
|
}
|
|||
|
|
|||
|
-------本地接口 begin--------
|
|||
|
local function InitPlayerTeamTempData(teamGridIndex)
|
|||
|
if nil == PlayerTeamTempData then
|
|||
|
local mapId = CurrentMapId or -1
|
|||
|
PlayerTeamTempData = XTool.Clone(ChessPursuitTempTeamDic[mapId] or {})
|
|||
|
end
|
|||
|
|
|||
|
if (teamGridIndex) and (not PlayerTeamTempData[teamGridIndex]) then
|
|||
|
PlayerTeamTempData[teamGridIndex] = XTool.Clone(DefaultTeam)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local function GetPlayerTeamTempDataCharacterId(teamGridId, teamDataIndex)
|
|||
|
InitPlayerTeamTempData()
|
|||
|
local characterId = PlayerTeamTempData[teamGridId] and PlayerTeamTempData[teamGridId].TeamData and PlayerTeamTempData[teamGridId].TeamData[teamDataIndex]
|
|||
|
return characterId or 0
|
|||
|
end
|
|||
|
|
|||
|
local function GetPlayerTeamTempDataByTeamGridId(teamGridId)
|
|||
|
InitPlayerTeamTempData()
|
|||
|
return PlayerTeamTempData[teamGridId] and PlayerTeamTempData[teamGridId].TeamData
|
|||
|
end
|
|||
|
|
|||
|
local function GetPlayerTeamFirstFightPosByTeamGridId(teamGridId)
|
|||
|
InitPlayerTeamTempData()
|
|||
|
return PlayerTeamTempData[teamGridId] and PlayerTeamTempData[teamGridId].FirstFightPos
|
|||
|
end
|
|||
|
|
|||
|
local function GetPlayerTeamCaptainPosByTeamGridId(teamGridId)
|
|||
|
InitPlayerTeamTempData()
|
|||
|
return PlayerTeamTempData[teamGridId] and PlayerTeamTempData[teamGridId].CaptainPos
|
|||
|
end
|
|||
|
|
|||
|
--进入地图ChessPursuitTempTeamDic[mapId]为空 和 重置前缓存服务端的队伍数据
|
|||
|
local function BeforeResetSaveTeamTemp(mapId)
|
|||
|
local chessPursuitMapDb = ChessPursuitMapDbList[mapId]
|
|||
|
if not chessPursuitMapDb then
|
|||
|
XLog.Error("重置前缓存服务端的队伍数据失败", mapId, ChessPursuitMapDbList)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local gridTeamDb = chessPursuitMapDb:GetGridTeamDb()
|
|||
|
if not ChessPursuitTempTeamDic[mapId] then
|
|||
|
ChessPursuitTempTeamDic[mapId] = {}
|
|||
|
end
|
|||
|
|
|||
|
local teamDataClone
|
|||
|
for teamGridIndex, teamData in ipairs(gridTeamDb) do
|
|||
|
teamDataClone = XTool.Clone(DefaultTeam)
|
|||
|
teamDataClone.TeamData = chessPursuitMapDb:GetTeamCharacterIds(teamGridIndex, true)
|
|||
|
teamDataClone.CaptainPos = teamData.CaptainPos
|
|||
|
teamDataClone.FirstFightPos = teamData.FirstFightPos
|
|||
|
ChessPursuitTempTeamDic[mapId][teamGridIndex] = teamDataClone
|
|||
|
end
|
|||
|
end
|
|||
|
-------本地接口 end--------
|
|||
|
|
|||
|
-- 退出追击玩法界面时要清理的数据
|
|||
|
function XChessPursuitManager.Clear()
|
|||
|
ChessPursuitSyncActionQueue = XChessPursuitSyncActionQueue.New()
|
|||
|
CurrentMapId = nil
|
|||
|
CurrentEndTime = nil
|
|||
|
XChessPursuitManager.ClearTempTeam()
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.InitMapData(res, isReset)
|
|||
|
XChessPursuitManager.Clear(isReset)
|
|||
|
|
|||
|
CurrentMapId = res.MapDb.Id
|
|||
|
CurrentEndTime = XChessPursuitConfig.GetActivityEndTime()
|
|||
|
|
|||
|
local chessPursuitMapBoss = XChessPursuitMapBoss.New(res.MapBoss)
|
|||
|
local chessPursuitMapDb = XChessPursuitMapDb.New(res.MapDb)
|
|||
|
|
|||
|
ChessPursuitMapDbList[chessPursuitMapDb:GetMapId()] = chessPursuitMapDb
|
|||
|
ChessPursuitMapBossList[chessPursuitMapBoss:GetId()] = chessPursuitMapBoss
|
|||
|
|
|||
|
ChessPursuitSyncActionQueue = XChessPursuitSyncActionQueue.New()
|
|||
|
ChessPursuitSyncActionQueue:Push(res.Actions)
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_CHESSPURSUIT_MAP_UPDATE)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RegisterEditBattleProxy()
|
|||
|
if IsRegisterEditBattleProxy then return end
|
|||
|
IsRegisterEditBattleProxy = true
|
|||
|
XUiNewRoomSingleProxy.RegisterProxy(XDataCenter.FubenManager.StageType.ChessPursuit,
|
|||
|
require("XUi/XUiChessPursuit/XUi/XUiChessPursuitNewRoomSingle"))
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetChessPursuitMapBoss(bossId)
|
|||
|
return bossId and ChessPursuitMapBossList[bossId]
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetChessPursuitSyncActionQueue()
|
|||
|
return ChessPursuitSyncActionQueue
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetChessPursuitMapDb(mapId)
|
|||
|
if not mapId then
|
|||
|
return
|
|||
|
end
|
|||
|
if not ChessPursuitMapDbList[mapId] then
|
|||
|
ChessPursuitMapDbList[mapId] = XChessPursuitMapDb.New(mapId)
|
|||
|
end
|
|||
|
return ChessPursuitMapDbList[mapId]
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitEnterMapData(mapId, cb)
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitEnterMapRequest, {
|
|||
|
MapId = mapId,
|
|||
|
}, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
XLog.Error("进入追击地图失败,mapId:,", mapId)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
XChessPursuitManager.InitMapData(res)
|
|||
|
|
|||
|
if XTool.IsTableEmpty(ChessPursuitTempTeamDic[mapId]) then
|
|||
|
BeforeResetSaveTeamTemp(mapId)
|
|||
|
end
|
|||
|
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitSetGridTeamData(mapId, cb)
|
|||
|
local teamSet = {}
|
|||
|
if ChessPursuitTempTeamDic[mapId] then
|
|||
|
local config = XChessPursuitConfig.GetChessPursuitMapTemplate(mapId)
|
|||
|
for teamGridId, cubeIndex in ipairs(config.TeamGrid) do
|
|||
|
local curTeam = ChessPursuitTempTeamDic[mapId][teamGridId]
|
|||
|
if not curTeam then
|
|||
|
return false, CSXTextManagerGetText("ChessPursuitBuZhenEnterFailed")
|
|||
|
elseif not XChessPursuitManager.IsCaptainCharacterIdInTempTeamData(mapId, teamGridId) then
|
|||
|
return false, CSXTextManagerGetText("ChessPursuitNoCaptain", teamGridId)
|
|||
|
elseif not XChessPursuitManager.IsFirstFightCharacterIdInTempTeamData(mapId, teamGridId) then
|
|||
|
return false, CSXTextManagerGetText("ChessPursuitNoFirst", teamGridId)
|
|||
|
else
|
|||
|
local preFight = {}
|
|||
|
preFight.CardIds = {}
|
|||
|
preFight.CaptainPos = curTeam.CaptainPos
|
|||
|
preFight.FirstFightPos = curTeam.FirstFightPos
|
|||
|
preFight.RobotIds = {}
|
|||
|
preFight.Id = config.TeamGrid[teamGridId]
|
|||
|
preFight.HurtBoss = 0
|
|||
|
for _, v in pairs(curTeam.TeamData or {}) do
|
|||
|
if not XRobotManager.CheckIsRobotId(v) then
|
|||
|
table.insert(preFight.CardIds, v)
|
|||
|
table.insert(preFight.RobotIds, 0)
|
|||
|
else
|
|||
|
table.insert(preFight.CardIds, 0)
|
|||
|
table.insert(preFight.RobotIds, v)
|
|||
|
end
|
|||
|
end
|
|||
|
table.insert(teamSet, preFight)
|
|||
|
end
|
|||
|
end
|
|||
|
else
|
|||
|
return false, CSXTextManagerGetText("ChessPursuitBuZhenEnterFailed")
|
|||
|
end
|
|||
|
|
|||
|
XMessagePack.MarkAsTable(teamSet)
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitSetGridTeamRequest, {
|
|||
|
TeamSet = teamSet
|
|||
|
}, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local chessPursuitMapDb = XDataCenter.ChessPursuitManager.GetChessPursuitMapDb(mapId)
|
|||
|
if chessPursuitMapDb then
|
|||
|
chessPursuitMapDb:SetGridTeamDb(res.TeamSet)
|
|||
|
end
|
|||
|
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
end)
|
|||
|
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitEndBattleRequest(cb)
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitEndBattleRequest, nil, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
ChessPursuitSyncActionQueue:Push(res.Actions)
|
|||
|
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitBuyCardData(cardCfgIds, cb)
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitBuyCardRequest, {CardCfgIds = cardCfgIds}, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
XUiManager.TipText("ChessPursuitShopBuyCompleteTips")
|
|||
|
|
|||
|
local chessPursuitMapDb = XChessPursuitManager.GetChessPursuitMapDb(CurrentMapId)
|
|||
|
chessPursuitMapDb:AddBuyedCards(res.CardIds)
|
|||
|
chessPursuitMapDb:AddBuyedCardId(res.CardIds)
|
|||
|
chessPursuitMapDb:SubCoin(res.SubCoin)
|
|||
|
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_CHESSPURSUIT_BUY_CARD)
|
|||
|
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitEndRoundData(usedToGrid, usedToBoss, cb)
|
|||
|
local params = {
|
|||
|
UsedToGrid = usedToGrid or {},
|
|||
|
UsedToBoss = usedToBoss or {},
|
|||
|
}
|
|||
|
XMessagePack.MarkAsTable(params.UsedToGrid)
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitEndRoundRequest, params, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local chessPursuitMapDb = ChessPursuitMapDbList[CurrentMapId]
|
|||
|
chessPursuitMapDb:RemoveCardsByUsedToGrid(res.UsedToGrid)
|
|||
|
chessPursuitMapDb:RemoveCardsByUesdToBoss(res.UesdToBoss)
|
|||
|
|
|||
|
chessPursuitMapDb:AddGridCardDb(res.UsedToGrid)
|
|||
|
chessPursuitMapDb:AddBossCardDb(res.UesdToBoss)
|
|||
|
ChessPursuitSyncActionQueue:Push(res.Actions)
|
|||
|
|
|||
|
if cb then
|
|||
|
cb(res.BossRandomStep)
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitAutoFightData(cb)
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitAutoFightRequest, nil, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
ChessPursuitSyncActionQueue:Push(res.Actions)
|
|||
|
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitResetMapData(cb, mapId)
|
|||
|
BeforeResetSaveTeamTemp(mapId)
|
|||
|
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitResetMapRequest, nil, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
XChessPursuitManager.InitMapData(res, true)
|
|||
|
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitAutoClearData(cb)
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitAutoClearRequest, nil, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
local chessPursuitMapDb = ChessPursuitMapDbList[CurrentMapId]
|
|||
|
chessPursuitMapDb:AddBossBattleCount(res.AddBattleCount)
|
|||
|
chessPursuitMapDb:SubBossHp(res.SubHp)
|
|||
|
ChessPursuitSyncActionQueue:Push(res.Actions)
|
|||
|
|
|||
|
if cb then
|
|||
|
cb()
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RequestChessPursuitChangeTeam(gridIndex)
|
|||
|
local teamTeamData = GetPlayerTeamTempDataByTeamGridId(gridIndex)
|
|||
|
local firstFightPos = GetPlayerTeamFirstFightPosByTeamGridId(gridIndex)
|
|||
|
local captainPos = GetPlayerTeamCaptainPosByTeamGridId(gridIndex)
|
|||
|
local cardIds, robotIds = XChessPursuitManager.ClientTeamDataChangeServer(teamTeamData)
|
|||
|
local params = {
|
|||
|
FirstFightPos = firstFightPos,
|
|||
|
CaptainPos = captainPos,
|
|||
|
CardIds = cardIds,
|
|||
|
RobotIds = robotIds
|
|||
|
}
|
|||
|
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitChangeTeamRequest, params, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local chessPursuitMapDb = ChessPursuitMapDbList[CurrentMapId]
|
|||
|
chessPursuitMapDb:ChangeGridTeamDb(res)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_CHESSPURSUIT_SAVETEAM)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.ClientTeamDataChangeServer(teamData)
|
|||
|
local cardIds = {}
|
|||
|
local robotIds = {}
|
|||
|
for _, v in pairs(teamData or {}) do
|
|||
|
if not XRobotManager.CheckIsRobotId(v) then
|
|||
|
table.insert(cardIds, v)
|
|||
|
table.insert(robotIds, 0)
|
|||
|
else
|
|||
|
table.insert(cardIds, 0)
|
|||
|
table.insert(robotIds, v)
|
|||
|
end
|
|||
|
end
|
|||
|
return cardIds, robotIds
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.ServerTeamDataChangeClient(cardIds, robotIds, isNotConverRobotId)
|
|||
|
local teamData = {}
|
|||
|
|
|||
|
for i, characterId in ipairs(cardIds or {}) do
|
|||
|
-- 0即可能没有上阵或在RobotIds
|
|||
|
if characterId ~= 0 then
|
|||
|
teamData[i] = characterId
|
|||
|
else
|
|||
|
local robotId = robotIds and robotIds[i] or 0
|
|||
|
teamData[i] = isNotConverRobotId and robotId or XRobotManager.GetCharacterId(robotId)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return teamData
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.NotifyChessPursuitBossAction(data)
|
|||
|
ChessPursuitSyncActionQueue:Push(data.Actions)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RefreshDataByAction(action)
|
|||
|
local chessPursuitMapDb = ChessPursuitMapDbList[CurrentMapId]
|
|||
|
if not chessPursuitMapDb then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if action:GetType() == XChessPursuitManager.ChessPursuitSyncActionType.CardEffect then
|
|||
|
chessPursuitMapDb:SetBossMoveDirection(action:GetBossMoveDirection())
|
|||
|
chessPursuitMapDb:SetBossPos(action:GetBoosPos())
|
|||
|
chessPursuitMapDb:SetBossHp(action:GetBossHp())
|
|||
|
chessPursuitMapDb:AddBossCardDb(action:GetAddBossCard())
|
|||
|
elseif action:GetType() == XChessPursuitManager.ChessPursuitSyncActionType.KeepCount then
|
|||
|
chessPursuitMapDb:RefreshKeepCount(action:GetCardId(), action:GetKeepCount())
|
|||
|
chessPursuitMapDb:SetBossMoveDirection(action:GetBossMoveDirection())
|
|||
|
elseif action:GetType() == XChessPursuitManager.ChessPursuitSyncActionType.EndBattle then
|
|||
|
|
|||
|
elseif action:GetType() == XChessPursuitManager.ChessPursuitSyncActionType.EndBattleHurt then
|
|||
|
local teamGridIndex = XChessPursuitConfig.GetTeamGridIndexByPos(CurrentMapId, action:GetBoosPos())
|
|||
|
chessPursuitMapDb:SetGridTeamDbHurtBoss(teamGridIndex, action:GetHurtBoss())
|
|||
|
chessPursuitMapDb:AddBossBattleCount(1)
|
|||
|
chessPursuitMapDb:SetBossHp(action:GetBossHp())
|
|||
|
elseif action:GetType() == XChessPursuitManager.ChessPursuitSyncActionType.Move then
|
|||
|
chessPursuitMapDb:SetBossPos(action:GetBoosPos())
|
|||
|
chessPursuitMapDb:SetBossMoveDirection(action:GetBossMoveDirection())
|
|||
|
elseif action:GetType() == XChessPursuitManager.ChessPursuitSyncActionType.EndRound then
|
|||
|
chessPursuitMapDb:SetCoin(action:GetCoin())
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.NotifyChessPursuitGroupInfo(data)
|
|||
|
for i,mapDb in ipairs(data.MapDBList) do
|
|||
|
local chessPursuitMapDb = XChessPursuitMapDb.New(mapDb)
|
|||
|
ChessPursuitMapDbList[chessPursuitMapDb:GetMapId()] = chessPursuitMapDb
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
for i,mapBoss in ipairs(data.MapBossList) do
|
|||
|
local chessPursuitMapBoss = XChessPursuitMapBoss.New(mapBoss)
|
|||
|
ChessPursuitMapBossList[chessPursuitMapBoss:GetId()] = chessPursuitMapBoss
|
|||
|
end
|
|||
|
|
|||
|
XChessPursuitManager.RegisterEditBattleProxy()
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_CHESSPURSUIT_MAP_UPDATE)
|
|||
|
end
|
|||
|
|
|||
|
-- 从编队界面保存临时的队伍数据
|
|||
|
function XChessPursuitManager.SaveTempTeamData(mapId)
|
|||
|
InitPlayerTeamTempData()
|
|||
|
if not ChessPursuitTempTeamDic[mapId] then
|
|||
|
ChessPursuitTempTeamDic[mapId] = {}
|
|||
|
end
|
|||
|
|
|||
|
local newTeamTemp = {}
|
|||
|
for teamGridIndex, team in pairs(PlayerTeamTempData) do
|
|||
|
newTeamTemp[teamGridIndex] = team
|
|||
|
end
|
|||
|
|
|||
|
ChessPursuitTempTeamDic[mapId] = newTeamTemp
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_CHESSPURSUIT_SAVETEAM)
|
|||
|
XChessPursuitManager.ClearTempTeam()
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetSaveTempTeamData(mapId, teamGridIndex)
|
|||
|
if ChessPursuitTempTeamDic[mapId] then
|
|||
|
return XTool.Clone(ChessPursuitTempTeamDic[mapId][teamGridIndex])
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetCaptainPosInTempTeamData(mapId, teamGridIndex)
|
|||
|
local tempTeamData = XChessPursuitManager.GetSaveTempTeamData(mapId, teamGridIndex)
|
|||
|
return tempTeamData and tempTeamData.CaptainPos or 1
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetFirstFightPosInTempTeamData(mapId, teamGridIndex)
|
|||
|
local tempTeamData = XChessPursuitManager.GetSaveTempTeamData(mapId, teamGridIndex)
|
|||
|
return tempTeamData and tempTeamData.FirstFightPos or 1
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetCharacterIdInTempTeamData(mapId, teamGridIndex, pos)
|
|||
|
local tempTeamData = XChessPursuitManager.GetSaveTempTeamData(mapId, teamGridIndex)
|
|||
|
return tempTeamData and tempTeamData.TeamData[pos]
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.IsCaptainCharacterIdInTempTeamData(mapId, teamGridIndex)
|
|||
|
local tempTeamData = XChessPursuitManager.GetSaveTempTeamData(mapId, teamGridIndex)
|
|||
|
return tempTeamData and tempTeamData.TeamData and tempTeamData.TeamData[tempTeamData.CaptainPos] and 0 ~= tempTeamData.TeamData[tempTeamData.CaptainPos]
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.IsFirstFightCharacterIdInTempTeamData(mapId, teamGridIndex)
|
|||
|
local tempTeamData = XChessPursuitManager.GetSaveTempTeamData(mapId, teamGridIndex)
|
|||
|
return tempTeamData and tempTeamData.TeamData and tempTeamData.TeamData[tempTeamData.FirstFightPos] and 0 ~= tempTeamData.TeamData[tempTeamData.FirstFightPos]
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.TeamPosConvert(index)
|
|||
|
return TEAM_POS_DIC[index]
|
|||
|
end
|
|||
|
|
|||
|
--缓存正在编队中的临时队伍
|
|||
|
function XChessPursuitManager.SetPlayerTeamData(curTeam, mapId, teamGridId, isUsePrefab)
|
|||
|
InitPlayerTeamTempData()
|
|||
|
--检查其他位置有没一样的角色;使用队伍预设空掉其他位置一样的角色,否则交换角色位置
|
|||
|
for i, characterId in ipairs(curTeam.TeamData) do
|
|||
|
local isInOtherTeam, teamGridIndex, teamDataIndex = XChessPursuitManager.CheckIsInChessPursuit(mapId, characterId, teamGridId)
|
|||
|
if isInOtherTeam and PlayerTeamTempData[teamGridIndex] and PlayerTeamTempData[teamGridIndex].TeamData then
|
|||
|
local oldCharacterId = isUsePrefab and 0 or GetPlayerTeamTempDataCharacterId(teamGridId, i)
|
|||
|
PlayerTeamTempData[teamGridIndex].TeamData[teamDataIndex] = oldCharacterId
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
PlayerTeamTempData[teamGridId] = XTool.Clone(curTeam)
|
|||
|
end
|
|||
|
|
|||
|
--快速编队界面,缓存的正在编队中的临时队伍
|
|||
|
function XChessPursuitManager.QuickDeploySetPlayerTeamData(teamDataList)
|
|||
|
PlayerTeamTempData = XTool.Clone(teamDataList)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.SetPlayerTeamDataFirstFightPos(firstFightPos, teamGridIndex)
|
|||
|
InitPlayerTeamTempData(teamGridIndex)
|
|||
|
if PlayerTeamTempData[teamGridIndex] then
|
|||
|
PlayerTeamTempData[teamGridIndex].FirstFightPos = firstFightPos
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.SetPlayerTeamDataCaptainPos(captainPos, teamGridIndex)
|
|||
|
InitPlayerTeamTempData(teamGridIndex)
|
|||
|
if PlayerTeamTempData[teamGridIndex] then
|
|||
|
PlayerTeamTempData[teamGridIndex].CaptainPos = captainPos
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--关闭编队界面时清理
|
|||
|
function XChessPursuitManager.ClearTempTeam()
|
|||
|
PlayerTeamTempData = nil
|
|||
|
end
|
|||
|
|
|||
|
--检查角色是否在其他队伍中
|
|||
|
function XChessPursuitManager.CheckIsInChessPursuit(mapId, characterId, currTeamGridId)
|
|||
|
if 0 == characterId then
|
|||
|
return false
|
|||
|
end
|
|||
|
InitPlayerTeamTempData(mapId)
|
|||
|
|
|||
|
if XTool.IsTableEmpty(PlayerTeamTempData) then
|
|||
|
return false
|
|||
|
end
|
|||
|
for teamGridIndex, v in pairs(PlayerTeamTempData) do
|
|||
|
if teamGridIndex ~= currTeamGridId then
|
|||
|
for i, cId in ipairs(v.TeamData) do
|
|||
|
if cId == characterId then
|
|||
|
return true, teamGridIndex, i
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--检查能否互相交换队伍中的角色
|
|||
|
function XChessPursuitManager.CheckIsSwapTeamPos(teamGridIdA, teamDataIndexA, teamGridIdB, teamDataIndexB)
|
|||
|
if teamGridIdA == teamGridIdB then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
local teamDataA = GetPlayerTeamTempDataByTeamGridId(teamGridIdA)
|
|||
|
if not teamDataA then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
local teamDataB = GetPlayerTeamTempDataByTeamGridId(teamGridIdB)
|
|||
|
if not teamDataB then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
local characterIdA = GetPlayerTeamTempDataCharacterId(teamGridIdA, teamDataIndexA)
|
|||
|
characterIdA = XRobotManager.CheckIdToCharacterId(characterIdA)
|
|||
|
if 0 ~= characterIdA then
|
|||
|
for i, characterId in ipairs(teamDataB) do
|
|||
|
if i ~= teamDataIndexB then
|
|||
|
characterId = XRobotManager.CheckIdToCharacterId(characterId)
|
|||
|
if characterIdA == characterId then
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local characterIdB = GetPlayerTeamTempDataCharacterId(teamGridIdB, teamDataIndexB)
|
|||
|
characterIdB = XRobotManager.CheckIdToCharacterId(characterIdB)
|
|||
|
if 0 ~= characterIdB then
|
|||
|
for i, characterId in ipairs(teamDataA) do
|
|||
|
if i ~= teamDataIndexA then
|
|||
|
characterId = XRobotManager.CheckIdToCharacterId(characterId)
|
|||
|
if characterIdB == characterId then
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetActivityChapters()
|
|||
|
local chapters = {}
|
|||
|
local config = XChessPursuitConfig.GetChessPursuitInTimeMapGroup()
|
|||
|
|
|||
|
if config then
|
|||
|
local tempChapter = {
|
|||
|
Type = XDataCenter.FubenManager.ChapterType.ChessPursuit,
|
|||
|
Id = config.Id,
|
|||
|
}
|
|||
|
|
|||
|
chapters = {tempChapter}
|
|||
|
end
|
|||
|
return chapters
|
|||
|
end
|
|||
|
|
|||
|
--@region FubenManager的引用函数(战斗)
|
|||
|
|
|||
|
function XChessPursuitManager.InitStageInfo()
|
|||
|
for i,v in ipairs(XChessPursuitConfig.GetAllChessPursuitBossTemplate()) do
|
|||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(v.StageId)
|
|||
|
stageInfo.Type = XDataCenter.FubenManager.StageType.ChessPursuit
|
|||
|
stageInfo.ChapterName = v.Name
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.PushAction()
|
|||
|
local res = XDataCenter.FubenManager.FubenSettleResult
|
|||
|
if not res or not res.Settle then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if res.Settle.ChessPursuitResult then
|
|||
|
ChessPursuitSyncActionQueue:Push(res.Settle.ChessPursuitResult)
|
|||
|
end
|
|||
|
end
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_SETTLE_REWARD, XChessPursuitManager.PushAction, XChessPursuitManager)
|
|||
|
|
|||
|
function XChessPursuitManager.FinishFight(settle)
|
|||
|
--当期活动已经结束
|
|||
|
local nowTime = XTime.GetServerNowTimestamp()
|
|||
|
if (nowTime and CurrentEndTime and nowTime >= CurrentEndTime) or not settle.ChessPursuitResult[1] then
|
|||
|
XDataCenter.FubenManager.ChallengeLose()
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local chessPursuitSyncAction = XChessPursuitSyncAction.New(settle.ChessPursuitResult[1])
|
|||
|
if chessPursuitSyncAction:GetIsForceExit() then
|
|||
|
XDataCenter.FubenManager.ChallengeLose()
|
|||
|
else
|
|||
|
local chessPursuitMapTemplate = XChessPursuitConfig.GetChessPursuitMapTemplate(CurrentMapId)
|
|||
|
local chessPursuitMapDb = XDataCenter.ChessPursuitManager.GetChessPursuitMapDb(CurrentMapId)
|
|||
|
local bossPos = chessPursuitMapDb:GetBossPos()
|
|||
|
local teamGridIndex = XChessPursuitConfig.GetTeamGridIndexByPos(CurrentMapId, bossPos)
|
|||
|
|
|||
|
XLuaUiManager.Open("UiChessPursuitFightResult", {
|
|||
|
MapId = CurrentMapId,
|
|||
|
ChessPursuitSyncAction = chessPursuitSyncAction,
|
|||
|
BossId = chessPursuitMapTemplate.BossId,
|
|||
|
TeamGridIndex = teamGridIndex,
|
|||
|
})
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--@endregion
|
|||
|
|
|||
|
function XChessPursuitManager.GetCoinCount(chessPursuitMapId)
|
|||
|
local mapId = chessPursuitMapId or CurrentMapId
|
|||
|
if not mapId then
|
|||
|
return 0
|
|||
|
end
|
|||
|
local chessPursuitMapDb = XChessPursuitManager.GetChessPursuitMapDb(mapId)
|
|||
|
return chessPursuitMapDb:GetCoin()
|
|||
|
end
|
|||
|
|
|||
|
--@region 排行榜
|
|||
|
local function UpdatePlayerRankList(playerRankList)
|
|||
|
ChessPursuitRankDataList = {}
|
|||
|
for i, v in ipairs(playerRankList) do
|
|||
|
if not ChessPursuitRankDataList[i] then
|
|||
|
ChessPursuitRankDataList[i] = XChessPursuitRankPlayer.New()
|
|||
|
end
|
|||
|
ChessPursuitRankDataList[i]:UpdateData(v)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.ChessPursuitGetRankRequest(cb)
|
|||
|
local groupId = XChessPursuitConfig.GetCurrentGroupId()
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitGetRankRequest, {GroupId = groupId}, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
UpdatePlayerRankList(res.PlayerRank)
|
|||
|
ChessPursuitMyRank = res.My --表示有多少人排名在我的前面,不等于我当前排第几名
|
|||
|
ChessPursuitAllRank = res.All
|
|||
|
ChessPursuitMyScore = res.MyScore
|
|||
|
if cb then
|
|||
|
cb(groupId)
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetRankDataList()
|
|||
|
return ChessPursuitRankDataList
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.IsHasMyRank()
|
|||
|
if ChessPursuitMyRank <= -1 then
|
|||
|
return false
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetChessPursuitMyRank()
|
|||
|
local playerId = XPlayer.Id
|
|||
|
local myRank = XChessPursuitManager.GetPursuitRankIndex(playerId)
|
|||
|
return myRank
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetChessPursuitMyRankPercent()
|
|||
|
if 0 == ChessPursuitAllRank or not XChessPursuitManager.IsHasMyRank() then
|
|||
|
return 0
|
|||
|
end
|
|||
|
--无人排在自己的前面返回1%
|
|||
|
if 0 == ChessPursuitMyRank then
|
|||
|
return 1
|
|||
|
end
|
|||
|
return math.floor(ChessPursuitMyRank / ChessPursuitAllRank * 100)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetChessPursuitAllRank()
|
|||
|
return ChessPursuitAllRank
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetChessPursuitMyScore()
|
|||
|
return mathMax(ChessPursuitMyScore, 0)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetPursuitRankData(playerId)
|
|||
|
for _, chessPursuitRankPlayer in ipairs(ChessPursuitRankDataList) do
|
|||
|
if chessPursuitRankPlayer:IsCurPlayer(playerId) then
|
|||
|
return chessPursuitRankPlayer
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetPursuitRankIndex(playerId)
|
|||
|
for index, chessPursuitRankPlayer in ipairs(ChessPursuitRankDataList) do
|
|||
|
if chessPursuitRankPlayer:IsCurPlayer(playerId) then
|
|||
|
return index
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local function UpdateChessPursuitRankGridList(chessPursuitRankGridList)
|
|||
|
ChessPursuitRankGridList = {}
|
|||
|
for i, chessPursuitRankGridData in ipairs(chessPursuitRankGridList) do
|
|||
|
if not ChessPursuitRankGridList[i] then
|
|||
|
ChessPursuitRankGridList[i] = XChessPursuitRankGrid.New(chessPursuitRankGridData)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local function UpdateChessPursuitRankDetailBossId(bossId)
|
|||
|
if not bossId then return end
|
|||
|
ChessPursuitRankDetailBossId = bossId
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.ChessPursuitGetRankPlayerDetailRequest(playerId, groupId)
|
|||
|
XNetwork.Call(ChessPursuitRequest.ChessPursuitGetRankPlayerDetailRequest, {PlayerId = playerId, GroupId = groupId}, function(res)
|
|||
|
if res.Code ~= XCode.Success then
|
|||
|
XUiManager.TipCode(res.Code)
|
|||
|
return
|
|||
|
end
|
|||
|
UpdateChessPursuitRankGridList(res.Grids)
|
|||
|
UpdateChessPursuitRankDetailBossId(res.BossId)
|
|||
|
XLuaUiManager.Open("UiChessPursuitRankLineup", playerId, ChessPursuitRankGridList)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetChessPursuitRankDetailBossHp()
|
|||
|
local chessPursuitMapBoss = XChessPursuitManager.GetChessPursuitMapBoss(ChessPursuitRankDetailBossId)
|
|||
|
return chessPursuitMapBoss and chessPursuitMapBoss:GetInitHp() or 0
|
|||
|
end
|
|||
|
|
|||
|
-- gridTeamIndex:第几号布阵格
|
|||
|
function XChessPursuitManager.IsRankCaptain(gridTeamIndex, characterId, playerId)
|
|||
|
local chessPursuitRankPlayer = XChessPursuitManager.GetPursuitRankData(playerId)
|
|||
|
if not chessPursuitRankPlayer then
|
|||
|
return false
|
|||
|
end
|
|||
|
if chessPursuitRankPlayer:IsCaptain(gridTeamIndex, characterId) then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetRankDetailCharacterLiberateLv(index, characterId)
|
|||
|
local chessPursuitRankGrid = ChessPursuitRankGridList[index]
|
|||
|
if chessPursuitRankGrid then
|
|||
|
return chessPursuitRankGrid:GetCharacterLiberateLv(characterId)
|
|||
|
end
|
|||
|
return 0
|
|||
|
end
|
|||
|
--@endregion
|
|||
|
|
|||
|
--@region 商店
|
|||
|
function XChessPursuitManager.GetShopCardIdList(chessPursuitMapId)
|
|||
|
local shopId = XChessPursuitConfig.GetChessPursuitMapShopCardId(chessPursuitMapId)
|
|||
|
local shopCardIdList = XChessPursuitConfig.GetShopCardIdList(shopId)
|
|||
|
local chessPursuitMapDb = XChessPursuitManager.GetChessPursuitMapDb(chessPursuitMapId)
|
|||
|
tableSort(shopCardIdList, function(cardIdA, cardIdB)
|
|||
|
local isBuyedCardA = chessPursuitMapDb:IsBuyedCard(cardIdA)
|
|||
|
local isBuyedCardB = chessPursuitMapDb:IsBuyedCard(cardIdB)
|
|||
|
if isBuyedCardA ~= isBuyedCardB then
|
|||
|
return isBuyedCardB
|
|||
|
end
|
|||
|
|
|||
|
local cardQualityA = XChessPursuitConfig.GetCardQuality(cardIdA)
|
|||
|
local cardQualityB = XChessPursuitConfig.GetCardQuality(cardIdB)
|
|||
|
if cardQualityA ~= cardQualityB then
|
|||
|
return cardQualityA > cardQualityB
|
|||
|
end
|
|||
|
|
|||
|
return cardIdA < cardIdB
|
|||
|
end)
|
|||
|
return shopCardIdList
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.IsBuyedCard(chessPursuitMapId, cardId)
|
|||
|
local chessPursuitMapDb = XChessPursuitManager.GetChessPursuitMapDb(chessPursuitMapId)
|
|||
|
return chessPursuitMapDb:IsBuyedCard(cardId)
|
|||
|
end
|
|||
|
--@endregion
|
|||
|
|
|||
|
function XChessPursuitManager.GetSumCoinCount()
|
|||
|
local groupId = XChessPursuitConfig.GetCurrentGroupId()
|
|||
|
if not groupId then
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
local sum = 0
|
|||
|
local addCoinFunc = function(mapId)
|
|||
|
local mapDb = XChessPursuitManager.GetChessPursuitMapDb(mapId)
|
|||
|
if mapDb:IsKill() then
|
|||
|
return XChessPursuitConfig.GetChessPursuitMapFinishAddCoin(mapId)
|
|||
|
end
|
|||
|
return 0
|
|||
|
end
|
|||
|
|
|||
|
local mapIdList = XChessPursuitConfig.GetMapIdListByGroupId(groupId)
|
|||
|
if XChessPursuitConfig.GetStageTypeByGroupId(groupId) == XChessPursuitCtrl.MAIN_UI_TYPE.STABLE then
|
|||
|
for _, mapId in ipairs(mapIdList) do
|
|||
|
sum = sum + addCoinFunc(mapId)
|
|||
|
end
|
|||
|
else
|
|||
|
if mapIdList[1] then
|
|||
|
local initFunc = XChessPursuitConfig.GetChessPursuitMapInitFuncList(mapIdList[1])
|
|||
|
local mapId
|
|||
|
for _, funcId in ipairs(initFunc) do
|
|||
|
if funcId > 0 and XChessPursuitConfig.IsMapInitFuncAddCoinType(funcId) then
|
|||
|
mapId = XChessPursuitConfig.GetMapInitFuncMapId(funcId)
|
|||
|
sum = sum + addCoinFunc(mapId)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return sum
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.IsCanTakeReward()
|
|||
|
local groupId = XChessPursuitConfig.GetCurrentGroupId()
|
|||
|
local mapsCfg = XChessPursuitConfig.GetChessPursuitMapsByGroupId(groupId)
|
|||
|
|
|||
|
for _,cfg in ipairs(mapsCfg) do
|
|||
|
if ChessPursuitMapDbList[cfg.Id] then
|
|||
|
if ChessPursuitMapDbList[cfg.Id]:IsCanTakeReward() then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.CheckIsAutoPlayStory()
|
|||
|
if not XSaveTool.GetData(stringFormat("%d%s%s", XPlayer.Id, "ChessPursuitIsAutoPlayStory", ChessPursuitStartStoryId)) then
|
|||
|
XSaveTool.SaveData(stringFormat("%d%s%s", XPlayer.Id, "ChessPursuitIsAutoPlayStory", ChessPursuitStartStoryId), true)
|
|||
|
XDataCenter.MovieManager.PlayMovie(ChessPursuitStartStoryId, XChessPursuitManager.CheckIsAutoShowHelp)
|
|||
|
else
|
|||
|
XChessPursuitManager.CheckIsAutoShowHelp()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.CheckIsAutoShowHelp()
|
|||
|
local config = XHelpCourseConfig.GetHelpCourseTemplateByFunction("ChessPursuit")
|
|||
|
if not config then return end
|
|||
|
|
|||
|
local id = config.Id
|
|||
|
if not XSaveTool.GetData(stringFormat("%d%s%s", XPlayer.Id, "ChessPursuitIsAutoShowHelp", id)) then
|
|||
|
XSaveTool.SaveData(stringFormat("%d%s%s", XPlayer.Id, "ChessPursuitIsAutoShowHelp", id), true)
|
|||
|
XChessPursuitManager.OpenHelpTip()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.OpenHelpTip()
|
|||
|
local csXChessPursuitCtrlCom = XChessPursuitCtrl.GetCSXChessPursuitCtrlCom()
|
|||
|
if not csXChessPursuitCtrlCom then
|
|||
|
return
|
|||
|
end
|
|||
|
local chessPursuitDrawCamera = csXChessPursuitCtrlCom:GetChessPursuitDrawCamera()
|
|||
|
local currCameraState = chessPursuitDrawCamera:GetChessPursuitCameraState()
|
|||
|
chessPursuitDrawCamera:SwitchChessPursuitCameraState(CS.XChessPursuitCameraState.None)
|
|||
|
XUiManager.ShowHelpTip("ChessPursuit", function()
|
|||
|
chessPursuitDrawCamera:SwitchChessPursuitCameraState(currCameraState)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
--活动简介界面的可挑战提醒
|
|||
|
function XChessPursuitManager.CheckIsCanFightTips()
|
|||
|
local groupId = XChessPursuitConfig.GetCurrentGroupId()
|
|||
|
local mapsCfg = XChessPursuitConfig.GetChessPursuitMapsByGroupId(groupId)
|
|||
|
|
|||
|
for _,cfg in ipairs(mapsCfg) do
|
|||
|
if XChessPursuitConfig.CheckChessPursuitMapIsOpen(cfg.Id) then
|
|||
|
local chessPursuitMapDb = XDataCenter.ChessPursuitManager.GetChessPursuitMapDb(cfg.Id)
|
|||
|
if not chessPursuitMapDb:IsKill() then
|
|||
|
return true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.GetBossHurMax(mapId, teamGridIndex)
|
|||
|
local chessPursuitMapDb = XDataCenter.ChessPursuitManager.GetChessPursuitMapDb(mapId)
|
|||
|
local hurtBoss = chessPursuitMapDb:GetHurtBossByGridId(teamGridIndex)
|
|||
|
if hurtBoss and hurtBoss > 0 then
|
|||
|
local chessPursuitMapTemplate = XChessPursuitConfig.GetChessPursuitMapTemplate(mapId)
|
|||
|
local chessPursuitMapBoss = XDataCenter.ChessPursuitManager.GetChessPursuitMapBoss(chessPursuitMapTemplate.BossId)
|
|||
|
local ration = hurtBoss / chessPursuitMapBoss:GetInitHp()
|
|||
|
|
|||
|
return ration
|
|||
|
else
|
|||
|
return 0
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.OpenCoinTip()
|
|||
|
XLuaUiManager.Open("UiTip", ChessPursuitCoinItemData)
|
|||
|
end
|
|||
|
|
|||
|
-- 是否开放斗争期炼狱模式
|
|||
|
function XChessPursuitManager.IsOpenFightHeard()
|
|||
|
local cfg = XChessPursuitConfig.GetChessPursuitMapByUiType(XChessPursuitCtrl.MAIN_UI_TYPE.FIGHT_HARD)
|
|||
|
return XChessPursuitConfig.CheckChessPursuitMapIsOpen(cfg.Id)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.SaveSaoDangIsAlreadyAutoOpen(mapId)
|
|||
|
local key = string.format("ChessPursuitSaoDangIsAlreadyAutoOpen_%s_%s", mapId, XPlayer.Id)
|
|||
|
XSaveTool.SaveData(key, true)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.IsSaoDangAlreadyAutoOpen(mapId)
|
|||
|
local key = string.format("ChessPursuitSaoDangIsAlreadyAutoOpen_%s_%s", mapId, XPlayer.Id)
|
|||
|
if XSaveTool.GetData(key) then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitManager.RemoveSaoDangIsAlreadyAutoOpen(mapId)
|
|||
|
local key = string.format("ChessPursuitSaoDangIsAlreadyAutoOpen_%s_%s", mapId, XPlayer.Id)
|
|||
|
if XSaveTool.GetData(key) then
|
|||
|
XSaveTool.RemoveData(key)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local function InitChessPursuitCoinItemData()
|
|||
|
local itemId = XChessPursuitConfig.SHOP_COIN_ITEM_ID
|
|||
|
ChessPursuitCoinItemData = {
|
|||
|
TemplateId = itemId,
|
|||
|
IsTempItemData = true,
|
|||
|
Name = XDataCenter.ItemManager.GetItemName(itemId),
|
|||
|
Icon = XDataCenter.ItemManager.GetItemIcon(itemId),
|
|||
|
Description = XDataCenter.ItemManager.GetItemDescription(itemId),
|
|||
|
WorldDesc = XDataCenter.ItemManager.GetItemWorldDesc(itemId)
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
local function Init()
|
|||
|
InitChessPursuitCoinItemData()
|
|||
|
end
|
|||
|
Init()
|
|||
|
|
|||
|
return XChessPursuitManager
|
|||
|
end
|
|||
|
|
|||
|
XRpc.NotifyChessPursuitBossAction = function(data)
|
|||
|
XDataCenter.ChessPursuitManager.NotifyChessPursuitBossAction(data)
|
|||
|
end
|
|||
|
|
|||
|
XRpc.NotifyChessPursuitGroupInfo = function(data)
|
|||
|
XDataCenter.ChessPursuitManager.NotifyChessPursuitGroupInfo(data)
|
|||
|
end
|