219 lines
6.3 KiB
Lua
219 lines
6.3 KiB
Lua
|
local XDoubleTowerPluginDb = require("XEntity/XDoubleTowers/XDoubleTowerPluginDb")
|
||
|
local XDoubleTowerTeamDb = require("XEntity/XDoubleTowers/XDoubleTowerTeamDb")
|
||
|
|
||
|
---@class XDoubleTowersInfo@通行证基础信息
|
||
|
local XDoubleTowersInfo = XClass(nil, "XDoubleTowersInfo")
|
||
|
|
||
|
function XDoubleTowersInfo:Ctor()
|
||
|
self._ActivityId = XDoubleTowersConfigs.GetDefaultActivityId()
|
||
|
|
||
|
self._CacheCoin = 0
|
||
|
|
||
|
self._CacheCoinLastTime = 0
|
||
|
|
||
|
self._SpecialStageWinCount = 0
|
||
|
|
||
|
---@type DoubleTowerStageDb[]
|
||
|
self._StageDbDict = {}
|
||
|
|
||
|
self._PluginDbs = {}
|
||
|
self._TeamDb = XDoubleTowerTeamDb.New()
|
||
|
|
||
|
self._JustPassedStage = false
|
||
|
end
|
||
|
|
||
|
---@param data XDoubleTowerDb
|
||
|
function XDoubleTowersInfo:UpdateData(data)
|
||
|
if XTool.IsNumberValid(data.ActivityId) then
|
||
|
self._ActivityId = data.ActivityId
|
||
|
end
|
||
|
self:SetCacheCoin(data.CacheCoin)
|
||
|
self._CacheCoinLastTime = data.CacheCoinLastTime or 0
|
||
|
-- self._ChapterDbList = data.ChapterDbList--这个好像没什么用
|
||
|
self._SpecialStageWinCount = data.SpecialStageWinCount or 0
|
||
|
|
||
|
-- list -> dictionary
|
||
|
self._StageDbDict = {}
|
||
|
if data.StageDbList then
|
||
|
for i = 1, #data.StageDbList do
|
||
|
local stageDb = data.StageDbList[i]
|
||
|
self._StageDbDict[stageDb.Id] = stageDb
|
||
|
end
|
||
|
end
|
||
|
|
||
|
for _, pluginDb in ipairs(data.PluginDbs) do
|
||
|
self:UpdatePluginDb(pluginDb)
|
||
|
end
|
||
|
|
||
|
self._TeamDb:UpdateData(data.TeamDb)
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:UpdatePluginDb(pluginDb)
|
||
|
local pluginDbTemp = self._PluginDbs[pluginDb.Id]
|
||
|
if not pluginDbTemp then
|
||
|
pluginDbTemp = XDoubleTowerPluginDb.New()
|
||
|
self._PluginDbs[pluginDb.Id] = pluginDbTemp
|
||
|
end
|
||
|
pluginDbTemp:UpdateData(pluginDb)
|
||
|
end
|
||
|
|
||
|
--重置插件
|
||
|
function XDoubleTowersInfo:ResetPlugin(pluginId, level)
|
||
|
local pluginDb = self:GetPluginDb(pluginId)
|
||
|
if XTool.IsTableEmpty(pluginDb) then
|
||
|
return
|
||
|
end
|
||
|
if level == 0 then
|
||
|
self._PluginDbs[pluginId] = nil
|
||
|
else
|
||
|
pluginDb:SetLevel(level)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--获得插件的等级Id
|
||
|
function XDoubleTowersInfo:GetPluginLevelId(pluginId)
|
||
|
local pluginDb = self:GetPluginDb(pluginId)
|
||
|
if XTool.IsTableEmpty(pluginDb) then
|
||
|
return 0
|
||
|
end
|
||
|
local level = pluginDb:GetLevel()
|
||
|
return XDoubleTowersConfigs.GetPluginLevelId(pluginId, level)
|
||
|
end
|
||
|
|
||
|
--==============================
|
||
|
---@desc 未解锁时获取数据用于UI显示
|
||
|
--==============================
|
||
|
function XDoubleTowersInfo:GetPluginLevelDefaultId(pluginId)
|
||
|
local pluginDb = self:GetPluginDb(pluginId)
|
||
|
local level
|
||
|
if XTool.IsTableEmpty(pluginDb) then
|
||
|
level = 1
|
||
|
else
|
||
|
level = pluginDb:GetLevel()
|
||
|
end
|
||
|
return XDoubleTowersConfigs.GetPluginLevelId(pluginId, level)
|
||
|
end
|
||
|
|
||
|
--获得插件下一级的等级Id
|
||
|
function XDoubleTowersInfo:GetPluginNextLevelId(pluginId)
|
||
|
local pluginDb = self:GetPluginDb(pluginId)
|
||
|
if XTool.IsTableEmpty(pluginDb) then
|
||
|
return 0
|
||
|
end
|
||
|
|
||
|
local curLevel = pluginDb:GetLevel()
|
||
|
local levelIdList = XDoubleTowersConfigs.GetPluginLevelIdList(pluginId)
|
||
|
for _, levelId in ipairs(levelIdList) do
|
||
|
local level = XDoubleTowersConfigs.GetPluginLevel(levelId)
|
||
|
if level > curLevel then
|
||
|
return levelId
|
||
|
end
|
||
|
end
|
||
|
return 0
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:GetActivityId()
|
||
|
return self._ActivityId
|
||
|
end
|
||
|
|
||
|
---@return number@上次收菜时间
|
||
|
function XDoubleTowersInfo:GetLastGatherTime()
|
||
|
return self._CacheCoinLastTime
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:SetLastGatherTime(value)
|
||
|
self._CacheCoinLastTime = value
|
||
|
end
|
||
|
|
||
|
---@return boolean@是否通关
|
||
|
function XDoubleTowersInfo:IsStagePassed(stageId)
|
||
|
if not self._StageDbDict then
|
||
|
return false
|
||
|
end
|
||
|
local stageDb = self._StageDbDict[stageId]
|
||
|
if not stageDb then
|
||
|
return false
|
||
|
end
|
||
|
return stageDb.WinCount > 0
|
||
|
end
|
||
|
|
||
|
---@return number@ 特殊关卡的通关次数
|
||
|
function XDoubleTowersInfo:GetSpecialStageWinCount()
|
||
|
return self._SpecialStageWinCount
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:SetCacheCoin(amount)
|
||
|
self._CacheCoin = amount or 0
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:IncreaseWinCount(stageId)
|
||
|
local stageDb = self._StageDbDict[stageId]
|
||
|
if stageDb then
|
||
|
stageDb.WinCount = stageDb.WinCount + 1
|
||
|
else
|
||
|
self._StageDbDict[stageId] = {
|
||
|
Id = stageId,
|
||
|
WinCount = 1
|
||
|
}
|
||
|
end
|
||
|
if XDataCenter.DoubleTowersManager.IsSpecialStage(stageId) then
|
||
|
self._SpecialStageWinCount = self._SpecialStageWinCount + 1
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:GetCacheCoin()
|
||
|
return self._CacheCoin
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:GetTeamDb()
|
||
|
return self._TeamDb
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:GetPluginDb(pluginId)
|
||
|
return self._PluginDbs[pluginId] or {}
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:GetPluginList()
|
||
|
local list = {}
|
||
|
for pluginId, _ in pairs(self._PluginDbs) do
|
||
|
if XTool.IsNumberValid(pluginId) then
|
||
|
table.insert(list, pluginId)
|
||
|
end
|
||
|
end
|
||
|
return list
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:GetPluginListByType(pluginType)
|
||
|
local list = XDoubleTowersConfigs.GetDoubleTowerPluginIdList(pluginType) or {}
|
||
|
local tempList = {}
|
||
|
for id, _ in pairs(self._PluginDbs) do
|
||
|
local valid = XTool.IsNumberValid(id) and table.contains(list, id)
|
||
|
if valid then
|
||
|
table.insert(tempList, id)
|
||
|
end
|
||
|
end
|
||
|
return tempList
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:SetJustPassedStage(stageId)
|
||
|
self._JustPassedStage = stageId
|
||
|
end
|
||
|
|
||
|
function XDoubleTowersInfo:GetJustPassedStage()
|
||
|
local stageId = self._JustPassedStage
|
||
|
self._JustPassedStage = false
|
||
|
return stageId
|
||
|
end
|
||
|
|
||
|
return XDoubleTowersInfo
|
||
|
|
||
|
---@alias XDoubleTowerDb {ActivityId:number,TeamDb:DoubleTowerTeamDb,ChapterDbList:DoubleTowerChapterDb[],CacheCoinLastTime:number,CacheCoin:number,PluginDbs:DoubleTowerPluginDb[],StageDbList:DoubleTowerStageDb[],SepcialStageWinCount:number}
|
||
|
---@alias DoubleTowerStageDb {Id:number,WinCount:number}
|
||
|
---@alias DoubleTowerTeamDb {RoleId:number,RoleBasePluginLevelId:number,RolePluginList:number[],GuardId:number,GuardPluginList:number[],GuardBasePluginLevelId:number}
|
||
|
---@alias DoubleTowerChapterDb {Id:number,WinCount:number}
|
||
|
---@alias DoubleTowerPluginDb {Id:number,Level:number}
|
||
|
---@alias XDoubleTowerRankPlayer {}
|
||
|
---@alias XDoubleTowerRank {}
|
||
|
---@alias SyncDoubleTowerRank {Rank:XDoubleTowerRank}
|
||
|
---@alias NotifyDoubleTowerChange {ActivityDb:XDoubleTowerDb}
|