397 lines
12 KiB
Lua
397 lines
12 KiB
Lua
|
--- 管理ChessPursuitMapDb的服务端数据,只能通过Get方法获取内部数据
|
|||
|
|
|||
|
local XChessPursuitMapDb = XClass(nil, "XChessPursuitMapDb")
|
|||
|
local CSXChessPursuitDirection = CS.XChessPursuitDirection
|
|||
|
|
|||
|
-- 服务端没发mapDb的情况发,可传mapId会创建一个虚拟对象
|
|||
|
function XChessPursuitMapDb:Ctor(mapDbOrMapId)
|
|||
|
local mapDb
|
|||
|
if (type(mapDbOrMapId) == "number") then
|
|||
|
self.Virtual = true
|
|||
|
local chessPursuitMapTemplate = XChessPursuitConfig.GetChessPursuitMapTemplate(mapDbOrMapId)
|
|||
|
local chessPursuitMapBoss = XDataCenter.ChessPursuitManager.GetChessPursuitMapBoss(chessPursuitMapTemplate.BossId)
|
|||
|
mapDb = {
|
|||
|
Id = mapDbOrMapId,
|
|||
|
WinForBattleCount = 0,
|
|||
|
BossBattleCount = 0,
|
|||
|
IsTakeReward = false,
|
|||
|
BossHp = chessPursuitMapBoss and chessPursuitMapBoss:GetInitHp() or 0,
|
|||
|
Coin = 0,
|
|||
|
BuyedCardId = {},
|
|||
|
}
|
|||
|
else
|
|||
|
self.Virtual = false
|
|||
|
mapDb = mapDbOrMapId
|
|||
|
end
|
|||
|
|
|||
|
self.ChessPursuitMapDb = mapDb
|
|||
|
self.ChessPursuitMapTemplate = XChessPursuitConfig.GetChessPursuitMapTemplate(self.ChessPursuitMapDb.Id)
|
|||
|
|
|||
|
self:InitBuyedCardIdDic()
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:InitBuyedCardIdDic()
|
|||
|
self.BuyedCardIdDic = {}
|
|||
|
for _, buyedCardId in ipairs(self.ChessPursuitMapDb.BuyedCardId) do
|
|||
|
self.BuyedCardIdDic[buyedCardId] = true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetMapId()
|
|||
|
return self.ChessPursuitMapDb.Id
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetVirtual()
|
|||
|
return self.Virtual
|
|||
|
end
|
|||
|
|
|||
|
-- BOSS当前的位置
|
|||
|
function XChessPursuitMapDb:GetBossPos()
|
|||
|
return self.ChessPursuitMapDb.BossPos
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetBossMoveDirection()
|
|||
|
if self.ChessPursuitMapDb.BossMoveDirection == 1 then
|
|||
|
return CSXChessPursuitDirection.Forward
|
|||
|
elseif self.ChessPursuitMapDb.BossMoveDirection == -1 then
|
|||
|
return CSXChessPursuitDirection.Back
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetChessPursuitMapTemplate()
|
|||
|
return self.ChessPursuitMapTemplate
|
|||
|
end
|
|||
|
|
|||
|
--需要先布阵
|
|||
|
function XChessPursuitMapDb:NeedBuZhen()
|
|||
|
if XTool.IsTableEmpty(self.ChessPursuitMapDb.GridTeamDb) then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
if #self.ChessPursuitMapDb.GridTeamDb < 1 then
|
|||
|
return true
|
|||
|
else
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--排行榜奖励可领取
|
|||
|
function XChessPursuitMapDb:IsTakeReward()
|
|||
|
return self.ChessPursuitMapDb.IsTakeReward
|
|||
|
end
|
|||
|
|
|||
|
--击杀BOSS历史最少的战斗次数
|
|||
|
function XChessPursuitMapDb:GetWinForBattleCount()
|
|||
|
return self.ChessPursuitMapDb.WinForBattleCount
|
|||
|
end
|
|||
|
|
|||
|
--当前与BOSS战斗的次数
|
|||
|
function XChessPursuitMapDb:GetBossBattleCount()
|
|||
|
return self.ChessPursuitMapDb.BossBattleCount
|
|||
|
end
|
|||
|
|
|||
|
--货币
|
|||
|
function XChessPursuitMapDb:GetCoin()
|
|||
|
return self.ChessPursuitMapDb.Coin
|
|||
|
end
|
|||
|
|
|||
|
--BOSS当前状态是否被击杀
|
|||
|
function XChessPursuitMapDb:IsClear()
|
|||
|
return self.ChessPursuitMapDb.BossHp <= 0
|
|||
|
end
|
|||
|
|
|||
|
--BOSS曾经被击杀过,不管当前状态
|
|||
|
function XChessPursuitMapDb:IsKill()
|
|||
|
return self.ChessPursuitMapDb.WinForBattleCount > 0
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetGridTeamDb()
|
|||
|
return self.ChessPursuitMapDb.GridTeamDb
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:SetGridTeamDb(gridTeamDb)
|
|||
|
self.ChessPursuitMapDb.GridTeamDb = gridTeamDb
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetBossHp()
|
|||
|
return self.ChessPursuitMapDb.BossHp
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:ChangeGridTeamDb(data)
|
|||
|
for i, gridTeamDb in ipairs(self.ChessPursuitMapDb.GridTeamDb) do
|
|||
|
if gridTeamDb.Id == data.GridId then
|
|||
|
gridTeamDb.FirstFightPos = data.FirstFightPos
|
|||
|
gridTeamDb.CaptainPos = data.CaptainPos
|
|||
|
gridTeamDb.CardIds = data.CardIds
|
|||
|
gridTeamDb.RobotIds = data.RobotIds
|
|||
|
return
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetGridTeamDbByGridId(teamGridIndex)
|
|||
|
local gridId = self.ChessPursuitMapTemplate.TeamGrid[teamGridIndex]
|
|||
|
|
|||
|
for i,gridTeamDb in ipairs(self.ChessPursuitMapDb.GridTeamDb) do
|
|||
|
if gridTeamDb.Id == gridId then
|
|||
|
return gridTeamDb
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--对boss造成最高伤害记录
|
|||
|
function XChessPursuitMapDb:GetHurtBossByGridId(teamGridIndex)
|
|||
|
local gridTeamDb = self:GetGridTeamDbByGridId(teamGridIndex)
|
|||
|
|
|||
|
if gridTeamDb then
|
|||
|
return gridTeamDb.HurtBoss or 0
|
|||
|
else
|
|||
|
return 0
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetGridTeamCaptainCharacterIdIdByGridId(teamGridIndex)
|
|||
|
local teamCharacterIds = self:GetTeamCharacterIds(teamGridIndex)
|
|||
|
|
|||
|
if next(teamCharacterIds) then
|
|||
|
local gridTeamDb = self:GetGridTeamDbByGridId(teamGridIndex)
|
|||
|
return teamCharacterIds[gridTeamDb.CaptainPos]
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetTeamCharacterIds(teamGridIndex, isNotConverRobotId)
|
|||
|
local gridTeamDb = self:GetGridTeamDbByGridId(teamGridIndex)
|
|||
|
local tl = {}
|
|||
|
if not gridTeamDb then
|
|||
|
return tl
|
|||
|
end
|
|||
|
|
|||
|
for i, characterId in ipairs(gridTeamDb.CardIds) do
|
|||
|
-- 0即可能没有上阵或在RobotIds
|
|||
|
if characterId ~= 0 then
|
|||
|
tl[i] = characterId
|
|||
|
else
|
|||
|
local robotId = gridTeamDb.RobotIds[i]
|
|||
|
tl[i] = isNotConverRobotId and robotId or XRobotManager.GetCharacterId(robotId)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return tl
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetRewardState()
|
|||
|
local taskId = self.ChessPursuitMapTemplate.TaskId
|
|||
|
local taskData = XDataCenter.TaskManager.GetTaskDataById(taskId)
|
|||
|
if taskData then
|
|||
|
if taskData.State then
|
|||
|
if taskData.State == XDataCenter.TaskManager.TaskState.Achieved then --未领奖励
|
|||
|
return XDataCenter.TaskManager.TaskState.Achieved
|
|||
|
elseif taskData.State == XDataCenter.TaskManager.TaskState.Finish then --已领取奖励
|
|||
|
return XDataCenter.TaskManager.TaskState.Finish
|
|||
|
else
|
|||
|
return XDataCenter.TaskManager.TaskState.InActive --不显示按钮
|
|||
|
end
|
|||
|
else
|
|||
|
return XDataCenter.TaskManager.TaskState.InActive --不显示按钮
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--手上有的卡
|
|||
|
function XChessPursuitMapDb:GetBuyedCards()
|
|||
|
-- int Id;
|
|||
|
-- int CardCfgId;
|
|||
|
-- int KeepCount;
|
|||
|
return self.ChessPursuitMapDb.BuyedCards
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetGridCardDb()
|
|||
|
return self.ChessPursuitMapDb.GridCardDb
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetBossCardDb()
|
|||
|
return self.ChessPursuitMapDb.BossCardDb
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function XChessPursuitMapDb:GetHaveCardsCount()
|
|||
|
local buyedCards = self:GetBuyedCards()
|
|||
|
return buyedCards and #buyedCards or 0
|
|||
|
end
|
|||
|
|
|||
|
--卡牌是否已购买过
|
|||
|
function XChessPursuitMapDb:IsBuyedCard(id)
|
|||
|
if id and self.BuyedCardIdDic[id] then
|
|||
|
return true
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
--是否可以领取奖励
|
|||
|
function XChessPursuitMapDb:IsCanTakeReward()
|
|||
|
local taskState = self:GetRewardState()
|
|||
|
|
|||
|
if self:IsKill() then
|
|||
|
if taskState == XDataCenter.TaskManager.TaskState.Achieved then
|
|||
|
return true
|
|||
|
else
|
|||
|
return false
|
|||
|
end
|
|||
|
else
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--@region !!!以下函数只可以由XChessPursuitManager里的函数调用
|
|||
|
function XChessPursuitMapDb:SetGridTeamDbHurtBoss(teamGridIndex, value)
|
|||
|
local gridTeamDb = self:GetGridTeamDbByGridId(teamGridIndex)
|
|||
|
if gridTeamDb then
|
|||
|
gridTeamDb.HurtBoss = value
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:SetBossPos(value)
|
|||
|
self.ChessPursuitMapDb.BossPos = value
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:SubBossHp(value)
|
|||
|
self:SetBossHp(self.ChessPursuitMapDb.BossHp - value)
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:SetBossHp(value)
|
|||
|
self.ChessPursuitMapDb.BossHp = value
|
|||
|
if self:GetBossHp() <= 0 then
|
|||
|
if self.ChessPursuitMapDb.WinForBattleCount == 0 or self.ChessPursuitMapDb.WinForBattleCount > self.ChessPursuitMapDb.BossBattleCount then
|
|||
|
self.ChessPursuitMapDb.WinForBattleCount = self.ChessPursuitMapDb.BossBattleCount
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:AddBuyedCards(values)
|
|||
|
for i,v in ipairs(values) do
|
|||
|
table.insert(self.ChessPursuitMapDb.BuyedCards, v)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:SetCoin(value)
|
|||
|
self.ChessPursuitMapDb.Coin = value
|
|||
|
end
|
|||
|
|
|||
|
--减掉消耗了的货币
|
|||
|
function XChessPursuitMapDb:SubCoin(subCoin)
|
|||
|
self.ChessPursuitMapDb.Coin = self.ChessPursuitMapDb.Coin - subCoin
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:RemoveCardsByUsedToGrid(usedToGrid)
|
|||
|
for gridId, xChessPursuitCardDbList in pairs(usedToGrid) do
|
|||
|
for _,xChessPursuitCardDb in ipairs(xChessPursuitCardDbList) do
|
|||
|
for i=#self.ChessPursuitMapDb.BuyedCards, 1, -1 do
|
|||
|
if xChessPursuitCardDb.Id == self.ChessPursuitMapDb.BuyedCards[i].Id then
|
|||
|
table.remove(self.ChessPursuitMapDb.BuyedCards, i)
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:RemoveCardsByUesdToBoss(uesdToBoss)
|
|||
|
for gridId, xChessPursuitCardDb in pairs(uesdToBoss) do
|
|||
|
for i=#self.ChessPursuitMapDb.BuyedCards, 1, -1 do
|
|||
|
if xChessPursuitCardDb.Id == self.ChessPursuitMapDb.BuyedCards[i].Id then
|
|||
|
table.remove(self.ChessPursuitMapDb.BuyedCards, i)
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:AddGridCardDb(usedToGrid)
|
|||
|
for gridId, xChessPursuitCardDbList in pairs(usedToGrid) do
|
|||
|
for _,xChessPursuitCardDb in ipairs(xChessPursuitCardDbList) do
|
|||
|
local isInsert = false
|
|||
|
for i,v in ipairs(self.ChessPursuitMapDb.GridCardDb) do
|
|||
|
if v.Id == gridId then
|
|||
|
table.insert(v.Cards, xChessPursuitCardDb)
|
|||
|
isInsert = true
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
if not isInsert then
|
|||
|
table.insert(self.ChessPursuitMapDb.GridCardDb, {
|
|||
|
Id = gridId,
|
|||
|
Cards = {xChessPursuitCardDb}
|
|||
|
})
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:AddBossCardDb(uesdToBoss)
|
|||
|
for i,v in ipairs(uesdToBoss) do
|
|||
|
table.insert(self.ChessPursuitMapDb.BossCardDb, v)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:RefreshKeepCount(cardId, keepCount)
|
|||
|
for i,v in ipairs(self.ChessPursuitMapDb.GridCardDb) do
|
|||
|
for i,xChessPursuitCardDb in ipairs(v.Cards) do
|
|||
|
if xChessPursuitCardDb.Id == cardId then
|
|||
|
if keepCount == 0 then
|
|||
|
local cfg = XChessPursuitConfig.GetChessPursuitCardTemplate(xChessPursuitCardDb.CardCfgId)
|
|||
|
local cfgEffect = XChessPursuitConfig.GetChessPursuitCardEffectTemplate(cfg.EffectId)
|
|||
|
--keepType 0 是永久效果
|
|||
|
if cfgEffect.KeepType ~= 0 then
|
|||
|
table.remove(v.Cards, i)
|
|||
|
end
|
|||
|
else
|
|||
|
xChessPursuitCardDb.KeepCount = keepCount
|
|||
|
end
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for i,xChessPursuitCardDb in ipairs(self.ChessPursuitMapDb.BossCardDb) do
|
|||
|
if xChessPursuitCardDb.Id == cardId then
|
|||
|
if keepCount == 0 then
|
|||
|
local cfg = XChessPursuitConfig.GetChessPursuitCardTemplate(xChessPursuitCardDb.CardCfgId)
|
|||
|
local cfgEffect = XChessPursuitConfig.GetChessPursuitCardEffectTemplate(cfg.EffectId)
|
|||
|
--keepType 0 是永久效果
|
|||
|
if cfgEffect.KeepType ~= 0 then
|
|||
|
table.remove(self.ChessPursuitMapDb.BossCardDb, i)
|
|||
|
end
|
|||
|
else
|
|||
|
xChessPursuitCardDb.KeepCount = keepCount
|
|||
|
end
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:SetBossMoveDirection(value)
|
|||
|
if value and value ~= 0 then
|
|||
|
self.ChessPursuitMapDb.BossMoveDirection = value
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XChessPursuitMapDb:AddBossBattleCount(value)
|
|||
|
self.ChessPursuitMapDb.BossBattleCount = self.ChessPursuitMapDb.BossBattleCount + value
|
|||
|
end
|
|||
|
|
|||
|
--保存已购买的卡牌id
|
|||
|
function XChessPursuitMapDb:AddBuyedCardId(cardIds)
|
|||
|
for _, v in ipairs(cardIds) do
|
|||
|
self.BuyedCardIdDic[v.CardCfgId] = true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--保存已购买的卡牌id
|
|||
|
function XChessPursuitMapDb:AddBuyedCardId(cardIds)
|
|||
|
for _, v in ipairs(cardIds) do
|
|||
|
self.BuyedCardIdDic[v.CardCfgId] = true
|
|||
|
end
|
|||
|
end
|
|||
|
--@endregion
|
|||
|
|
|||
|
return XChessPursuitMapDb
|