c1_lua/lua/app/userdata/dungeon/dungeon_rune_entity.lua
2023-09-08 18:53:46 +08:00

314 lines
8.7 KiB
Lua

local DungeonBaseEntity = require "app/userdata/dungeon/dungeon_base_entity"
local DungeonRuneEntity = class("DungeonRuneEntity", DungeonBaseEntity)
local TASK_TYPE = GConst.DungeonRuneConst.TASK_TYPE
function DungeonRuneEntity:ctor()
self.data.isDirty = false
self.maxPassedId = 0
self.curday = 1
self.runeInfo = {}
self.season = 1
end
function DungeonRuneEntity:clear()
self.data.isDirty = false
DataManager:unregisterCrossDayFunc("DungeonRuneEntity")
end
function DungeonRuneEntity:init(data)
if EDITOR_MODE then
Logger.logHighlight("-----DungeonRuneEntity------")
Logger.printTable(data)
end
self.totalChallengeCount = data.total_challenge_count
self.maxPassedId = data.max_challenge_id or 0
self.curday = data.curday
self.runeInfo = data.rune_info or {}
self.heroes = data.heroes or {}
self.rankInfo = {}
self.selfRankInfo = {}
self.lastRankInfo = {}
self.needGetRankReward = false
DataManager.FormationData:initFormationByType(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE, self.heroes)
DataManager:registerCrossDayFunc("DungeonRuneEntity", function()
self.curday = self.curday + 1
if self.curday > 30 then
self.maxPassedId = 0
self.curday = 1
self.runeInfo = {}
self.rankInfo = {}
self.selfRankInfo = {}
self.lastRankInfo = {}
self.needGetRankReward = false
end
self:setDirty()
end)
end
function DungeonRuneEntity:setDirty()
self.data.isDirty = not self.data.isDirty
end
function DungeonRuneEntity:getModuleKey()
return ModuleManager.MODULE_KEY.RUNES_OPEN
end
function DungeonRuneEntity:getConfig(chapterId)
return ConfigManager:getConfig(self:getConfigName())[chapterId]
end
function DungeonRuneEntity:getConfigName()
return "chapter_dungeon_rune"
end
function DungeonRuneEntity:getTitleString()
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_TITLE)
end
function DungeonRuneEntity:getRuleString()
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_HELP)
end
function DungeonRuneEntity:getOpenWeekString()
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_DESC)
end
function DungeonRuneEntity:getBanner()
return "assets/arts/textures/background/dungeon/dungeon_bg_4.png"
end
function DungeonRuneEntity:getOpenTextColor()
return "#FFFFFF"
end
function DungeonRuneEntity:isNoTotalLimit()
return true
end
function DungeonRuneEntity:isNotShowLimitCount()
return true
end
-- function DungeonRuneEntity:getIsAllTimeOpen()
-- return true
-- end
function DungeonRuneEntity:onClickFight()
ModuleManager.DungeonRuneManager:showMainUI()
end
function DungeonRuneEntity:getTodayRemainLimitCount()
return DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_GLOD_WING)
end
function DungeonRuneEntity:getBuySliverWingCost()
if not self.buySliverWingCost then
self.buySliverWingCost = GFunc.getConstReward("dungeon_rune_cost")
end
return self.buySliverWingCost
end
function DungeonRuneEntity:getPassedMaxId()
return self.maxPassedId
end
function DungeonRuneEntity:updatePassedMaxId(maxId)
if not maxId then
return
end
self.maxPassedId = maxId
end
function DungeonRuneEntity:getRankRp()
return true
end
function DungeonRuneEntity:canSweep(id)
if id > self.maxPassedId then
return false
end
return DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_SLIVER_WING) > 0
end
function DungeonRuneEntity:canFight(id)
if self.maxPassedId + 1 >= id then
return true
end
return false
end
function DungeonRuneEntity:passedChapter(id)
return self.maxPassedId >= id
end
function DungeonRuneEntity:curFight(id)
return id == self.maxPassedId + 1
end
function DungeonRuneEntity:getChapterPassRound(id)
if not self.runeInfo[id] then
return 0
end
return self.runeInfo[id].round or 0
end
function DungeonRuneEntity:getChapterRewards(id)
return self:getConfig(id).first_reward
end
function DungeonRuneEntity:getChapterSweepRewards(id)
return self:getConfig(id).sweep_reward
end
function DungeonRuneEntity:getCloseTime()
return 100
end
function DungeonRuneEntity:isBossChapter(id)
local cfg = self:getConfig(id)
return not cfg.monster[2] -- 只有一个怪物的就是boss关卡
end
function DungeonRuneEntity: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 DungeonRuneEntity: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 DungeonRuneEntity:getConditionDesc(taskInfo)
local taskType = taskInfo[1]
local taskParams1 = taskInfo[2]
local taskParams2 = taskInfo[3]
if taskType == TASK_TYPE.PASS_ROUND then
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_QUEST_1, taskParams1)
elseif taskType == TASK_TYPE.ELIMINATION_ELEMENT then
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
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_QUEST_1, taskParams2)
elseif taskType == TASK_TYPE.KILL_MONSTER then
return I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_QUEST_1, taskParams2)
end
end
function DungeonRuneEntity: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 DungeonRuneEntity: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 DungeonRuneEntity:canGetRankReward()
return true
end
function DungeonBaseEntity:isGotRankReward()
return false
end
function DungeonRuneEntity:getLastRankInfo()
return self.lastRankList
end
function DungeonRuneEntity:getCurRankInfo()
return self.rankList
end
function DungeonRuneEntity:getLastSelfInfo()
return self.lastSelfRank
end
function DungeonRuneEntity:getCurRankSelfInfo()
return self.selfRank
end
function DungeonRuneEntity:getRankConfig()
return ConfigManager:getConfig("dungeon_rune_rank")
end
function DungeonRuneEntity:getRankRewards(rank)
if not rank or rank <= 0 then -- 没参加就没有
return
end
if not self.cacheRankRewardsMap then -- 缓存名次对应的配置表ID
self.cacheRankRewardsMap = {}
end
if not self.cacheSeasonRankConfig then
self.cacheSeasonRankConfig = {}
local cfg = self:getRankConfig()
for id, info in pairs(cfg) do
if not self.cacheSeasonRankConfig[info.season] then
self.cacheSeasonRankConfig[info.season] = {}
end
table.insert(self.cacheSeasonRankConfig[info.season], id)
end
end
local cfg = self.cacheSeasonRankConfig[self.season]
if not cfg then
return
end
if not self.cacheRankRewardsMap[self.season] then
self.cacheRankRewardsMap[self.season] = {}
end
if not self.cacheRankRewardsMap[self.season][rank] then
local cfgCfg = self:getRankConfig()
for index, id in ipairs(cfg) do
local info = cfgCfg[id]
if info.ranking[1] and info.ranking[2] then
if info.ranking[1] <= rank and rank <= info.ranking[2] then
self.cacheRankRewardsMap[self.season][rank] = id
end
elseif info.ranking[1] then
if info.ranking[1] <= rank then
self.cacheRankRewardsMap[self.season][rank] = id
end
end
end
end
local cfg = self:getRankConfig()[self.cacheRankRewardsMap[self.season][rank]]
if cfg then
return cfg.reward
end
end
return DungeonRuneEntity