326 lines
8.1 KiB
Lua
326 lines
8.1 KiB
Lua
local DungeonRuneData = class("DungeonRuneData", BaseData)
|
|
|
|
local TASK_TYPE = GConst.DungeonRuneConst.TASK_TYPE
|
|
|
|
function DungeonRuneData:ctor()
|
|
self.data.isDirty = false
|
|
self.maxPassedId = 0
|
|
self.runeInfo = {}
|
|
end
|
|
|
|
function DungeonRuneData:clear()
|
|
self.data.isDirty = false
|
|
DataManager:unregisterCrossDayFunc("DungeonRuneData")
|
|
end
|
|
|
|
function DungeonRuneData:init(data)
|
|
data = data or {}
|
|
if EDITOR_MODE then
|
|
Logger.logHighlight("-----DungeonRuneData------")
|
|
Logger.printTable(data)
|
|
end
|
|
|
|
data.total_challenge_count = 0
|
|
data.stat_counts = {}
|
|
data.max_challenge_id = 1
|
|
data.turns = {}
|
|
data.heroes = {}
|
|
data.buy_silver_count = 0
|
|
|
|
self.totalChallengeCount = data.total_challenge_count or 0
|
|
self.fightCountMap = data.stat_counts or {}
|
|
self.maxPassedId = data.max_challenge_id and (data.max_challenge_id - 1) or 0
|
|
self.runeInfo = data.turns or {}
|
|
self.heroes = data.heroes or {}
|
|
self.buySilverCount = data.buy_silver_count or 0
|
|
|
|
DataManager.FormationData:initFormationByType(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE, self.heroes)
|
|
DataManager:registerCrossDayFunc("DungeonRuneData", function()
|
|
self:onCrossDay()
|
|
end)
|
|
end
|
|
|
|
function DungeonRuneData:onCrossDay()
|
|
self.buySilverCount = 0
|
|
self:setDirty()
|
|
end
|
|
|
|
function DungeonRuneData:setDirty()
|
|
self.data.isDirty = not self.data.isDirty
|
|
end
|
|
|
|
function DungeonRuneData:isOpen(showToast)
|
|
if not ModuleManager:getIsOpen(ModuleManager.MODULE_KEY.RUNES_OPEN, not showToast) then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
function DungeonRuneData:getModuleKey()
|
|
return ModuleManager.MODULE_KEY.RUNES_OPEN
|
|
end
|
|
|
|
function DungeonRuneData:getConfig(chapterId)
|
|
return ConfigManager:getConfig(self:getConfigName())[chapterId]
|
|
end
|
|
|
|
function DungeonRuneData:getConfigName()
|
|
return "chapter_dungeon_rune"
|
|
end
|
|
|
|
function DungeonRuneData:getTitleString()
|
|
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_TITLE)
|
|
end
|
|
|
|
function DungeonRuneData:getRuleString()
|
|
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_HELP)
|
|
end
|
|
|
|
function DungeonRuneData:getOpenWeekString()
|
|
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_DESC)
|
|
end
|
|
|
|
function DungeonRuneData:getBanner()
|
|
return "assets/arts/textures/background/dungeon/dungeon_bg_5.png"
|
|
end
|
|
|
|
function DungeonRuneData:getOpenTextColor()
|
|
return "#FFFFFF"
|
|
end
|
|
|
|
function DungeonRuneData:isNoTotalLimit()
|
|
return true
|
|
end
|
|
|
|
function DungeonRuneData:isNotShowLimitCount()
|
|
return true
|
|
end
|
|
|
|
function DungeonRuneData:getIsAllTimeOpen()
|
|
return true
|
|
end
|
|
|
|
function DungeonRuneData:onClickFight()
|
|
ModuleManager.DungeonRuneManager:showMainUI()
|
|
end
|
|
|
|
function DungeonRuneData:getTodayRemainLimitCount()
|
|
return DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GLOD_WING)
|
|
end
|
|
|
|
function DungeonRuneData:getRebirthAddRoundCount()
|
|
if not self.rebirthAddRoundCount then
|
|
self.rebirthAddRoundCount = GFunc.getConstIntValue("dungeon_rune_revival")
|
|
end
|
|
return self.rebirthAddRoundCount
|
|
end
|
|
|
|
function DungeonRuneData:getBattleMaxlv()
|
|
if not self.battleMaxLv then
|
|
self.battleMaxLv = GFunc.getConstIntValue("dungeon_rune_lvlimit")
|
|
end
|
|
return self.battleMaxLv
|
|
end
|
|
|
|
function DungeonRuneData:getBuySliverWingCost()
|
|
if not self.buySliverWingCost then
|
|
self.buySliverWingCost = GFunc.getConstReward("dungeon_rune_cost")
|
|
end
|
|
return self.buySliverWingCost
|
|
end
|
|
|
|
function DungeonRuneData:getPassedMaxId()
|
|
return self.maxPassedId
|
|
end
|
|
|
|
function DungeonRuneData:updatePassedMaxId(maxId)
|
|
if not maxId then
|
|
return
|
|
end
|
|
self.maxPassedId = math.max(maxId - 1, 1)
|
|
end
|
|
|
|
function DungeonRuneData:canSweep(id)
|
|
if id > self.maxPassedId then
|
|
return false
|
|
end
|
|
if not self:isBossChapter(id) then
|
|
return false
|
|
end
|
|
return DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_SLIVER_WING) > 0
|
|
end
|
|
|
|
function DungeonRuneData:canFight(id)
|
|
if self.maxPassedId + 1 >= id then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function DungeonRuneData:passedChapter(id)
|
|
return self.maxPassedId >= id
|
|
end
|
|
|
|
function DungeonRuneData:curFight(id)
|
|
return id == self.maxPassedId + 1
|
|
end
|
|
|
|
function DungeonRuneData:getChapterPassRound(id)
|
|
if not self.runeInfo[id] then
|
|
return 0
|
|
end
|
|
return self.runeInfo[id] or 0
|
|
end
|
|
|
|
function DungeonRuneData:updatePassRound(id, round)
|
|
local cur = self.runeInfo[id]
|
|
if not cur or cur > round then
|
|
self.runeInfo[id] = round
|
|
self:tagRoundNew()
|
|
end
|
|
end
|
|
|
|
function DungeonRuneData:tagRoundNew()
|
|
self.tagNew = true
|
|
end
|
|
|
|
function DungeonRuneData:getTagRoundNew()
|
|
return self.tagNew
|
|
end
|
|
|
|
function DungeonRuneData:getChapterRewards(id)
|
|
return self:getConfig(id).first_reward
|
|
end
|
|
|
|
function DungeonRuneData:getChapterSweepRewards(id)
|
|
return self:getConfig(id).sweep_reward
|
|
end
|
|
|
|
function DungeonRuneData:isBossChapter(id)
|
|
local cfg = self:getConfig(id)
|
|
return not cfg.monster[2] -- 只有一个怪物的就是boss关卡
|
|
end
|
|
|
|
function DungeonRuneData:getChapterCondition(id)
|
|
local cfg = self:getConfig(id)
|
|
if not self.cacheChaperCondition then
|
|
self.cacheChaperCondition = {}
|
|
end
|
|
|
|
if not self.cacheChaperCondition[id] then
|
|
self.cacheChaperCondition[id] = {}
|
|
table.insert(self.cacheChaperCondition[id], {0, cfg.round, 0})
|
|
if cfg.requirement then
|
|
for _, condition in ipairs(cfg.requirement) do
|
|
table.insert(self.cacheChaperCondition[id], GFunc.getTable(condition))
|
|
end
|
|
end
|
|
end
|
|
|
|
return self.cacheChaperCondition[id]
|
|
end
|
|
|
|
function DungeonRuneData:getConditionIcon(taskInfo)
|
|
local iconSprite
|
|
local iconConst = GConst.DungeonRuneConst.TASK_ICON[taskInfo[1]]
|
|
if type(iconConst) == "table" then
|
|
iconSprite = iconConst[taskInfo[2]]
|
|
else
|
|
iconSprite = iconConst
|
|
end
|
|
|
|
return GConst.ATLAS_PATH.UI_DUNGEON_RUNE, iconSprite
|
|
end
|
|
|
|
function DungeonRuneData:getConditionDesc(taskInfo, taskNum)
|
|
local taskType = taskInfo[1]
|
|
local taskParams1 = taskInfo[2]
|
|
local taskParams2 = taskInfo[3]
|
|
if taskType == TASK_TYPE.PASS_ROUND then
|
|
if taskNum and taskNum > 0 then
|
|
taskParams1 = taskNum
|
|
end
|
|
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_QUEST_1, taskParams1)
|
|
elseif taskType == TASK_TYPE.ELIMINATION_ELEMENT then
|
|
if taskNum and taskNum > 0 then
|
|
local num = taskParams2 - taskNum
|
|
if num > 0 then
|
|
taskParams2 = num
|
|
end
|
|
end
|
|
local desc = ModuleManager.HeroManager:getMatchTypeName(taskParams1, true)
|
|
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_QUEST_2, taskParams2, desc)
|
|
elseif taskType == TASK_TYPE.BREAK_GRID_TYPE then
|
|
if taskNum and taskNum > 0 then
|
|
local num = taskParams2 - taskNum
|
|
if num > 0 then
|
|
taskParams2 = num
|
|
end
|
|
end
|
|
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_QUEST_3, taskParams2)
|
|
elseif taskType == TASK_TYPE.KILL_MONSTER then
|
|
if taskNum and taskNum > 0 then
|
|
local num = taskParams2 - taskNum
|
|
if num > 0 then
|
|
taskParams2 = num
|
|
end
|
|
end
|
|
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_QUEST_4, taskParams2)
|
|
end
|
|
end
|
|
|
|
function DungeonRuneData:getChapterMonsterSpine(id)
|
|
local cfg = self:getConfig(id)
|
|
local monsterId = cfg.monster[1]
|
|
local info = ConfigManager:getConfig("monster")[monsterId]
|
|
return info.model_id, info.model_ui
|
|
end
|
|
|
|
function DungeonRuneData:getChapterMonsterI18N(id)
|
|
local cfg = self:getConfig(id)
|
|
local monsterId = cfg.monster[1]
|
|
local info = ConfigManager:getConfig("monster")[monsterId]
|
|
local monsterBase = info.monster_base
|
|
return I18N:getConfig("monster_base")[monsterBase]
|
|
end
|
|
|
|
function DungeonRuneData:getCurFightChapterId()
|
|
return self.curFightChapterId or 1
|
|
end
|
|
|
|
function DungeonRuneData:setCurFightChapterId(chapterId)
|
|
self.curFightChapterId = chapterId
|
|
end
|
|
|
|
function DungeonRuneData:getChapterFightCount(id)
|
|
return self.fightCountMap[id] or 0
|
|
end
|
|
|
|
function DungeonRuneData:getSliverWingBuyCount()
|
|
return self.buySilverCount or 0
|
|
end
|
|
|
|
function DungeonRuneData:addSliverWingBuyCount(count)
|
|
self.buySilverCount = self.buySilverCount + count
|
|
end
|
|
|
|
function DungeonRuneData:getRemainSliverWingCount()
|
|
if not self.todayLimitSliverCount then
|
|
self.todayLimitSliverCount = GFunc.getConstIntValue("dungeon_rune_buylimit")
|
|
end
|
|
local count = self.todayLimitSliverCount - self:getSliverWingBuyCount()
|
|
if count <= 0 then
|
|
count = 0
|
|
end
|
|
return count
|
|
end
|
|
|
|
function DungeonRuneData:getBuySliverCost()
|
|
if not self.todayBuySliverCost then
|
|
self.todayBuySliverCost = GFunc.getConstReward("dungeon_rune_cost")
|
|
end
|
|
|
|
return self.todayBuySliverCost
|
|
end
|
|
|
|
return DungeonRuneData |