397 lines
No EOL
12 KiB
Lua
397 lines
No EOL
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 |