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