符文副本

This commit is contained in:
puxuan 2025-11-11 10:45:44 +08:00
parent a99eb5bd25
commit 3314a7062d
34 changed files with 31591 additions and 4012 deletions

View File

@ -111,7 +111,7 @@ function ConfigManager:preLoadConfig()
end
handleMonsterGrow("monster_chapter")
handleMonsterGrow("monster_daily_challenge")
-- handleMonsterGrow("monster_dungeon_gold")
handleMonsterGrow("monster_dungeon_rune")
-- handleMonsterGrow("monster_dungeon_shards")
-- handleMonsterGrow("monster_dungeon_equip")
-- handleMonsterGrow("monster_dungeon_armor")

View File

@ -52,6 +52,7 @@ function DataManager:init()
self:initManager("PrivilegeCardData", "app/userdata/privilege_card/privilege_card_data")
-- 日常副本
self:initManager("DungeonDailyData", "app/userdata/dungeon/dungeon_daily_data")
self:initManager("DungeonRuneData", "app/userdata/dungeon/dungeon_rune_data")
end
function DataManager:initManager(name, path)
@ -185,6 +186,7 @@ function DataManager:initWithServerData(data)
-- 副本
self.DungeonData:init()
self.DungeonDailyData:init(data.dungeon)
self.DungeonRuneData:init(data.dungeon)
-- 商店礼包都初始化完了后检查一下每日红点
-- self.ShopData:checkShopDiscountRedPoint()

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: df7b334ee782a4d4898f4b43b5b6336e
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

File diff suppressed because it is too large Load Diff

View File

@ -502,9 +502,30 @@ local const = {
},
["summon_skip_2"]={
["value"]=100
},
["dungeon_rune_lvlimit"]={
["value"]=20
},
["dungeon_rune_revival"]={
["value"]=5
},
["dungeon_rune_cost"]={
["reward"]={
{
["type"]=1,
["type_for_nothing"]="Vw==",
["id"]=2,
["id_for_nothing"]="VA==",
["num"]=200,
["num_for_nothing"]="VAhc"
}
}
},
["dungeon_rune_buylimit"]={
["value"]=5
}
}
local config = {
data=const,count=83
data=const,count=87
}
return config

View File

@ -112,9 +112,13 @@ local func_open = {
["fund_chapter"]={
["stage"]=2,
["pop_ups"]=1
},
["runes_open"]={
["stage"]=20,
["pop_ups"]=1
}
}
local config = {
data=func_open,count=28
data=func_open,count=29
}
return config

View File

@ -1338,6 +1338,16 @@ local item = {
}
}
},
[52]={
["type"]=2,
["qlt"]=4,
["icon"]="6"
},
[53]={
["type"]=2,
["qlt"]=4,
["icon"]="7"
},
[13001]={
["type"]=5,
["inbag"]=1,
@ -1575,6 +1585,6 @@ local item = {
}
}
local config = {
data=item,count=75
data=item,count=77
}
return config

File diff suppressed because it is too large Load Diff

View File

@ -200,6 +200,12 @@ local item = {
[51]={
["name"]="能量饮料自选宝箱"
},
[52]={
["name"]="银羽毛"
},
[53]={
["name"]="金羽毛"
},
[13001]={
["name"]="熔芯",
["desc"]="凑齐可解锁或升级。"

View File

@ -108,10 +108,11 @@ BattleConst.FORMATION_TYPE = {
DUNGEON = "3",-- 日常副本
ARENA_ATTACK = "4",-- 竞技场进攻
ARENA_DEFEND = "5",-- 竞技场防守
DUNGEON_RUNE = "6", -- 符文副本
DUNGEON_WEAPON = "41", -- 武器副本
DUNGEON_ARMOR = "51", -- 支线副本
BOSS_RUSH = "61", -- boss rush
DUNGEON_RUNE = "71", -- 符文副本
-- DUNGEON_RUNE = "71", -- 符文副本
}
BattleConst.TYPEOF_LUA_COMP = {

View File

@ -15,14 +15,12 @@ function BattleControllerDungeonRune:getChapterConfig()
end
function BattleControllerDungeonRune:getChapterId()
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
return runeData:getCurFightChapterId()
return DataManager.DungeonRuneData:getCurFightChapterId()
end
function BattleControllerDungeonRune:initOther()
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
self.canRebirthTimes = 1 -- 每次只能复活一次
self.addRoundCount = runeData:getRebirthAddRoundCount()
self.addRoundCount = DataManager.DungeonRuneData:getRebirthAddRoundCount()
self.dungeonRuneRemainRoundCount = self:getChapterConfig()[self.chapterId].round or 1
self.dungeonRuneMaxRoundCount = self.dungeonRuneRemainRoundCount
@ -31,7 +29,7 @@ function BattleControllerDungeonRune:initOther()
self.battleUI:refreshWave(desc, GConst.ATLAS_PATH.BATTLE, "battle_dec_2")
end
self.runeMaxLv = runeData:getBattleMaxlv() or 1
self.runeMaxLv = DataManager.DungeonRuneData:getBattleMaxlv() or 1
self.battleData:setMaxBattleLv(self.runeMaxLv)
end
@ -428,10 +426,9 @@ function BattleControllerDungeonRune:postWaveOver(atkDead, isQuit)
local duration = self.waveDurationTime
local totalTime = self.totalDurationTime
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
local startTimes = runeData:getChapterFightCount(self.chapterId)
local startTimes = DataManager.DungeonRuneData:getChapterFightCount(self.chapterId)
local isFirstWin = false
if runeData:getPassedMaxId() < self.chapterId and self.victory then
if DataManager.DungeonRuneData:getPassedMaxId() < self.chapterId and self.victory then
isFirstWin = true
end
@ -441,9 +438,8 @@ function BattleControllerDungeonRune:postWaveOver(atkDead, isQuit)
end
function BattleControllerDungeonRune:postFightStart()
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
local startTimes = runeData:getChapterFightCount(self.chapterId)
local unlockMaxChapter = runeData:getPassedMaxId() + 1
local startTimes = DataManager.DungeonRuneData:getChapterFightCount(self.chapterId)
local unlockMaxChapter = DataManager.DungeonRuneData:getPassedMaxId() + 1
BIReport:postFightBegin(GConst.BattleConst.BATTLE_TYPE.DUNGEON_RUNE, self:getWaveIndex(), self.chapterId, unlockMaxChapter, startTimes)
end
@ -461,8 +457,7 @@ function BattleControllerDungeonRune:getRuneTaskNumByType(taskInfo)
end
function BattleControllerDungeonRune:getRuneTaskAllOver()
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
local chapterCondition = runeData:getChapterCondition(self.chapterId)
local chapterCondition = DataManager.DungeonRuneData:getChapterCondition(self.chapterId)
local taskProgress = ModuleManager.DungeonRuneManager:getTaskStatus(self, chapterCondition)
local taskOver = true
for index, info in pairs(taskProgress) do

View File

@ -1,30 +1,35 @@
local DungeonConst = {}
DungeonConst.MODULE_KEY_DUNGEON_DAILY = "dungeon_daily"
DungeonConst.MODULE_KEY_DUNGEON_DAILY = "dungeon_gold"
DungeonConst.DUNGEON_DAILY_TYPE = {
GOLD = 1,
MATERIAL = 2
MATERIAL = 2,
RUNE = 3,
}
-- 对应dungeon表id
DungeonConst.IDS = {
[DungeonConst.MODULE_KEY_DUNGEON_DAILY] = 1,
[ModuleManager.MODULE_KEY.RUNES_OPEN] = 2,
}
-- 标题
DungeonConst.STR_TITLE = {
[DungeonConst.MODULE_KEY_DUNGEON_DAILY] = I18N.GlobalConst.DUNGEON_TITLE_1,
[ModuleManager.MODULE_KEY.RUNES_OPEN] = I18N.GlobalConst.DUNGEON_RUNE_TITLE,
}
-- 帮助信息
DungeonConst.STR_HELP = {
[DungeonConst.MODULE_KEY_DUNGEON_DAILY] = I18N.GlobalConst.DUNGEON_HELP_1,
[ModuleManager.MODULE_KEY.RUNES_OPEN] = I18N.GlobalConst.DUNGEON_RUNE_HELP,
}
-- banner名称
DungeonConst.IMG_BANNER = {
[DungeonConst.MODULE_KEY_DUNGEON_DAILY] = "dungeon_banner_3",
[ModuleManager.MODULE_KEY.RUNES_OPEN] = "dungeon_banner_4",
}
-- 副本排行榜类型,客户端自定义

View File

@ -1,224 +1,216 @@
local DungeonRuneManager = class("DungeonRuneManager", BaseModule)
function DungeonRuneManager:showMainUI()
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_main_ui")
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_main_ui")
end
function DungeonRuneManager:showFightUI(id)
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
if not runeData:canFight(id) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.PASS_REQUIRE))
return
end
if not DataManager.DungeonRuneData:canFight(id) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.PASS_REQUIRE))
return
end
local params = {id = id}
local isBoss = runeData:isBossChapter(id)
if isBoss then
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_boss_fight_ui", params)
else
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_fight_ui", params)
end
local params = {id = id}
local isBoss = DataManager.DungeonRuneData:isBossChapter(id)
if isBoss then
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_boss_fight_ui", params)
else
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_fight_ui", params)
end
end
function DungeonRuneManager:showTaskUI(id)
local params = {id = id}
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_task_ui", params)
local params = {id = id}
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_task_ui", params)
end
function DungeonRuneManager:showRebirthUI(adCallback, closeCallback, isHpOver, roundIsOver)
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_rebirth_ui",{adCallback = adCallback, refuseCallback = closeCallback, isHpOver = isHpOver, roundIsOver = roundIsOver})
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_rebirth_ui",{adCallback = adCallback, refuseCallback = closeCallback, isHpOver = isHpOver, roundIsOver = roundIsOver})
end
function DungeonRuneManager:showRoundTipUI(round)
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_round_tip_ui",{round = round, aniType = UIManager.ANI_TYPE.NON})
UIManager:showUI("app/ui/dungeon_rune/dungeon_rune_round_tip_ui",{round = round, aniType = UIManager.ANI_TYPE.NON})
end
function DungeonRuneManager:reqFight(id)
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
if not runeData:canFight(id) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.PASS_REQUIRE))
return
end
if not DataManager.DungeonRuneData:canFight(id) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.PASS_REQUIRE))
return
end
local passed = runeData:passedChapter(id)
if not passed and not GFunc.checkCost(GConst.ItemConst.ITEM_ID_GLOD_WING, 1, true) then
return
end
local passed = DataManager.DungeonRuneData:passedChapter(id)
if not passed and not GFunc.checkCost(GConst.ItemConst.ITEM_ID_GLOD_WING, 1, true) then
return
end
local heroes = {}
local formation = DataManager.FormationData:getDungeonRuneFormation()
for matchType, heroId in pairs(formation) do
if heroId > 0 then
table.insert(heroes, heroId)
end
end
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeStartReq, {id = id, heroes = heroes}, {}, self.rspFight, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_START)
local heroes = {}
local formation = DataManager.FormationData:getDungeonRuneFormation()
for matchType, heroId in pairs(formation) do
if heroId > 0 then
table.insert(heroes, heroId)
end
end
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeStartReq, {id = id, heroes = heroes}, self.rspFight, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_START)
end
function DungeonRuneManager:rspFight(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
if not result.reqData then
return
end
if result.err_code == GConst.ERROR_STR.SUCCESS then
if not result.reqData then
return
end
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
runeData:setCurFightChapterId(result.reqData.id)
local params = {
atkFormation = {}
}
local formation = DataManager.FormationData:getDungeonRuneFormation()
for elementType, heroId in pairs(formation) do
local heroEntity = DataManager.HeroData:getHeroById(heroId)
if heroEntity then
params.atkFormation[elementType] = heroEntity
end
end
ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.DUNGEON_RUNE, params, function()
UIManager:closeAllUI()
ModuleManager.MaincityManager:showMainCityUI()
self:showMainUI()
end)
end
DataManager.DungeonRuneData:setCurFightChapterId(result.reqData.id)
local params = {
atkFormation = {}
}
local formation = DataManager.FormationData:getDungeonRuneFormation()
for elementType, heroId in pairs(formation) do
local heroEntity = DataManager.HeroData:getHeroById(heroId)
if heroEntity then
params.atkFormation[elementType] = heroEntity
end
end
ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.DUNGEON_RUNE, params, function()
UIManager:closeAllUI()
ModuleManager.MaincityManager:showMainCityUI()
self:showMainUI()
end)
end
end
function DungeonRuneManager:reqFightSettlement(chapterId, combatReport, taskProgress, remainRound)
taskProgress[GConst.BattleConst.BATTLE_TASK_FIELD.PASS_WAVE] = 0-- 符文副本不需要波次数据
local parmas = {
id = chapterId,
win = combatReport.victory,
task_stat = taskProgress,
combatReport = combatReport,
remainRound = remainRound,
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeSettlementReq, parmas, {}, self.rspFightSettlement, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_SETTLEMENT)
taskProgress[GConst.BattleConst.BATTLE_TASK_FIELD.PASS_WAVE] = 0-- 符文副本不需要波次数据
local parmas = {
id = chapterId,
win = combatReport.victory,
task_stat = taskProgress,
combatReport = combatReport,
remainRound = remainRound,
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeSettlementReq, parmas, self.rspFightSettlement, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_SETTLEMENT)
end
function DungeonRuneManager:rspFightSettlement(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
local passId = runeData:getPassedMaxId()
if result.reqData then
if result.reqData.win then
runeData:updatePassedMaxId(result.max_id)
runeData:updatePassRound(result.reqData.id, result.reqData.task_stat[GConst.BattleConst.BATTLE_TASK_FIELD.TOTAL_TURN] or 0)
end
ModuleManager.BattleManager:showBattleRuneResultUI(GConst.BattleConst.BATTLE_TYPE.DUNGEON_RUNE, result.rewards, result.reqData.combatReport, result.reqData.remainRound)
end
if passId ~= runeData:getPassedMaxId() then
local data = {}
data.dungeon_progress = DataManager.DungeonData:getDungeonBIStr()
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(data)
end
if result.err_code == GConst.ERROR_STR.SUCCESS then
local passId = DataManager.DungeonRuneData:getPassedMaxId()
if result.reqData then
if result.reqData.win then
DataManager.DungeonRuneData:updatePassedMaxId(result.max_id)
DataManager.DungeonRuneData:updatePassRound(result.reqData.id, result.reqData.task_stat[GConst.BattleConst.BATTLE_TASK_FIELD.TOTAL_TURN] or 0)
end
ModuleManager.BattleManager:showBattleRuneResultUI(GConst.BattleConst.BATTLE_TYPE.DUNGEON_RUNE, result.rewards, result.reqData.combatReport, result.reqData.remainRound)
end
if passId ~= DataManager.DungeonRuneData:getPassedMaxId() then
local data = {}
data.dungeon_progress = DataManager.DungeonData:getDungeonBIStr()
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(data)
end
if result.reqData then
local taskStat = result.reqData.task_stat
if taskStat then
ModuleManager.TaskManager:addFightTaskProgress(taskStat)
end
end
runeData:setDirty()
end
if result.reqData then
local taskStat = result.reqData.task_stat
if taskStat then
ModuleManager.TaskManager:addFightTaskProgress(taskStat)
end
end
DataManager.DungeonRuneData:setDirty()
end
end
function DungeonRuneManager:reqSweep(id)
if not GFunc.checkCost(GConst.ItemConst.ITEM_ID_SLIVER_WING, 1, true) then
return
end
if not GFunc.checkCost(GConst.ItemConst.ITEM_ID_SLIVER_WING, 1, true) then
return
end
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
if not runeData:canSweep(id) then
return
end
if not DataManager.DungeonRuneData:canSweep(id) then
return
end
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneFarmReq, {id = id}, {}, self.rspSweep, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_SWEEP)
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneFarmReq, {id = id}, self.rspSweep, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_SWEEP)
end
function DungeonRuneManager:rspSweep(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
GFunc.showRewardBox(result.rewards)
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
runeData:setDirty()
end
if result.err_code == GConst.ERROR_STR.SUCCESS then
GFunc.showRewardBox(result.rewards)
DataManager.DungeonRuneData:setDirty()
end
end
function DungeonRuneManager:reqRebirth(isHpOver)
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneAdReq, {}, {}, self.rspRebirth)
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneAdReq, {}, self.rspRebirth)
end
function DungeonRuneManager:rspRebirth(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BATTLE_REBIRTH)
end
if result.err_code == GConst.ERROR_STR.SUCCESS then
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.BATTLE_REBIRTH)
end
end
function DungeonRuneManager:reqFormation(formation)
if not DataManager.FormationData:formationIsFull(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_8))
return
end
if not DataManager.FormationData:formationIsFull(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_8))
return
end
local heroes = {}
for matchType, heroId in pairs(formation) do
if heroId and heroId > 0 then
table.insert(heroes, heroId)
end
end
local params = {
heroes = heroes
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeHeroesReq, params, {}, self.rspFormation)
local heroes = {}
for matchType, heroId in pairs(formation) do
if heroId and heroId > 0 then
table.insert(heroes, heroId)
end
end
local params = {
heroes = heroes
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneChallengeHeroesReq, params, self.rspFormation)
end
function DungeonRuneManager:rspFormation(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.FORMATION_CHANGE, {type = GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE})
end
if result.err_code == GConst.ERROR_STR.SUCCESS then
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.FORMATION_CHANGE, {type = GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE})
end
end
function DungeonRuneManager:getTaskStatus(battleControllerRune, taskInfo)
local taskProgress = {}
for index, condition in ipairs(taskInfo) do
local progress = battleControllerRune:getRuneTaskNumByType(condition)
if condition[1] == GConst.DungeonRuneConst.TASK_TYPE.PASS_ROUND then
taskProgress[index] = {
progress = battleControllerRune.dungeonRuneMaxRoundCount - battleControllerRune.dungeonRuneRemainRoundCount,
totalProgress = battleControllerRune.dungeonRuneMaxRoundCount,
over = false
}
else
if progress then
taskProgress[index] = {
progress = progress,
totalProgress = condition[3],
over = progress >= condition[3]
}
end
end
end
local taskProgress = {}
for index, condition in ipairs(taskInfo) do
local progress = battleControllerRune:getRuneTaskNumByType(condition)
if condition[1] == GConst.DungeonRuneConst.TASK_TYPE.PASS_ROUND then
taskProgress[index] = {
progress = battleControllerRune.dungeonRuneMaxRoundCount - battleControllerRune.dungeonRuneRemainRoundCount,
totalProgress = battleControllerRune.dungeonRuneMaxRoundCount,
over = false
}
else
if progress then
taskProgress[index] = {
progress = progress,
totalProgress = condition[3],
over = progress >= condition[3]
}
end
end
end
return taskProgress
return taskProgress
end
function DungeonRuneManager:reqBuySliverWing(count)
if not count then
return
end
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
local cost = runeData:getBuySliverCost()
if not GFunc.checkCost(cost.id, cost.num * count, true) then
return
end
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneBuySliverReq, {buy_count = count}, {}, self.rspBuySliverWing, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_BUY_WING)
if not count then
return
end
local cost = DataManager.DungeonRuneData:getBuySliverCost()
if not GFunc.checkCost(cost.id, cost.num * count, true) then
return
end
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterRuneBuySliverReq, {buy_count = count}, self.rspBuySliverWing, BIReport.ITEM_GET_TYPE.DUNGEON_RUNE_BUY_WING)
end
function DungeonRuneManager:rspBuySliverWing(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
GFunc.showRewardBox(result.rewards)
if result.reqData then
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
runeData:addSliverWingBuyCount(result.reqData.buy_count)
end
end
if result.err_code == GConst.ERROR_STR.SUCCESS then
GFunc.showRewardBox(result.rewards)
if result.reqData then
DataManager.DungeonRuneData:addSliverWingBuyCount(result.reqData.buy_count)
end
end
end
return DungeonRuneManager

View File

@ -22,8 +22,8 @@ ItemConst.ITEM_ID_SEVEN_DAY_SCORE = 45 -- 七天乐积分
ItemConst.ITEM_ID_SEVEN_DAY_SCORE_2 = 45 -- 七天乐积分
ItemConst.ITEM_ID_FOURTEEN_DAY_EXCHANGE = 51
ItemConst.ITEM_ID_BOSS_RUSH = 52
ItemConst.ITEM_ID_GLOD_WING = 49
ItemConst.ITEM_ID_SLIVER_WING = 50
ItemConst.ITEM_ID_GLOD_WING = 52
ItemConst.ITEM_ID_SLIVER_WING = 53
ItemConst.ITEM_ID_RUNES = 55
ItemConst.ITEM_ID_FULL_MOON = 56
ItemConst.ITEM_ID_DUNGEON_TICKET_1 = 47

View File

@ -29,7 +29,6 @@ function BattleRuneResultUI:ctor(params)
end
end
self.runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
self.chapterId = ModuleManager.BattleManager.battleController.chapterId
end
@ -131,7 +130,7 @@ function BattleRuneResultUI:onRefresh()
end
self:refreshUnitInfo()
if self.runeData:isBossChapter(self.chapterId) then
if DataManager.DungeonRuneData:isBossChapter(self.chapterId) then
self.showRewardInfo = true
self:refreshRewards()
else
@ -199,7 +198,7 @@ function BattleRuneResultUI:refreshTaskNode()
return
end
local chapterCondition = self.runeData:getChapterCondition(id)
local chapterCondition = DataManager.DungeonRuneData:getChapterCondition(id)
if not chapterCondition then
return
end
@ -212,7 +211,7 @@ function BattleRuneResultUI:refreshTaskNode()
if condition then
objs.cell:getBaseObject():setActive(true)
local taskNum = taskProgress[newIndex] and taskProgress[newIndex].progress
local desc = self.runeData:getConditionDesc(condition)
local desc = DataManager.DungeonRuneData:getConditionDesc(condition)
local over = false
if taskProgress[newIndex] then
local info = taskProgress[newIndex]
@ -224,7 +223,7 @@ function BattleRuneResultUI:refreshTaskNode()
desc = desc .. string.format("<color=%s>(%s/%s)</color>", color, info.progress, info.totalProgress)
end
objs.cell:refresh(condition)
objs.desc:setText(self.runeData:getConditionDesc(condition))
objs.desc:setText(DataManager.DungeonRuneData:getConditionDesc(condition))
if over then
objs.descUnDone:setText(GConst.EMPTY_STRING)
objs.check:setVisible(true)
@ -283,9 +282,9 @@ function BattleRuneResultUI:refreshRewards()
self.rewardScrollRectComp:refillCells(rewardCount)
-- local id = self.chapterId
-- self.descRoundMin:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_MIN, self.runeData:getChapterPassRound(id)))
-- self.descRoundMin:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_MIN, DataManager.DungeonRuneData:getChapterPassRound(id)))
-- GFunc.centerImgAndTx(self.imgRoundmIn, self.descRoundMin, 10)
-- self.imgRoundNew:setVisible(self.runeData:getTagRoundNew() == true)
-- self.imgRoundNew:setVisible(DataManager.DungeonRuneData:getTagRoundNew() == true)
end
function BattleRuneResultUI:refreshUnitInfo()

View File

@ -525,8 +525,7 @@ end
function BattleUI:refreshTaskNode()
if self.battleController.battleType == GConst.BattleConst.BATTLE_TYPE.DUNGEON_RUNE then
self.taskNode:setLocalScale(0.6, 0.6, 0.6)
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
local chapterCondition = runeData:getChapterCondition(self.battleController.chapterId)
local chapterCondition = DataManager.DungeonRuneData:getChapterCondition(self.battleController.chapterId)
local taskProgress = ModuleManager.DungeonRuneManager:getTaskStatus(self.battleController, chapterCondition)
for index, cell in ipairs(self.taskCells) do
local newIndex = index + 1
@ -534,7 +533,7 @@ function BattleUI:refreshTaskNode()
if condition then
cell:getBaseObject():setActive(true)
local atlast, iconName = runeData:getConditionIcon(condition)
local atlast, iconName = DataManager.DungeonRuneData:getConditionIcon(condition)
local taskNum = condition[3] or 0
local over = false
if taskProgress[newIndex] then

View File

@ -23,16 +23,16 @@ function HeroFormationComp:refresh()
if formation[i] then
local heroEntity = DataManager.HeroData:getHeroById(formation[i])
if heroEntity then
heroCell:setVisible(true, 0.6)
heroCell:setActive(true)
heroCell:refresh(heroEntity)
heroCell:addClickListener(function()
ModuleManager.HeroManager:showHeroDetailUI(heroEntity:getCfgId())
end)
else
heroCell:setVisible(false)
heroCell:setActive(false)
end
else
heroCell:setVisible(false)
heroCell:setActive(false)
end
end
end
@ -42,16 +42,16 @@ function HeroFormationComp:refreshByFormation(formation)
if formation[i] then
local heroEntity = DataManager.HeroData:getHeroById(formation[i])
if heroEntity then
heroCell:setVisible(true, 0.6)
heroCell:setActive(true)
heroCell:refresh(heroEntity)
heroCell:addClickListener(function()
ModuleManager.HeroManager:showHeroDetailUI(heroEntity:getCfgId())
end)
else
heroCell:setVisible(false)
heroCell:setActive(false)
end
else
heroCell:setVisible(false)
heroCell:setActive(false)
end
end
end
@ -60,13 +60,13 @@ function HeroFormationComp:refreshByEntitys(formation)
for i, heroCell in ipairs(self.heroCells) do
local heroEntity = formation[i]
if heroEntity then
heroCell:setVisible(true, 0.6)
heroCell:setActive(true)
heroCell:refreshBriefInfo(heroEntity)
heroCell:addClickListener(function()
ModuleManager.HeroManager:showHeroDetailUI(heroEntity:getCfgId(), true, heroEntity)
end)
else
heroCell:setVisible(false)
heroCell:setActive(false)
end
end
end

View File

@ -54,13 +54,12 @@ function ResourceCell:show(itemId, hideAddImg)
self.addImg:setVisible(true)
elseif itemId == GConst.ItemConst.ITEM_ID_SLIVER_WING then
self.baseObject:addClickListener(function()
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
local reward = {
type = GConst.REWARD_TYPE.ITEM,
id = GConst.ItemConst.ITEM_ID_SLIVER_WING,
num = 1
}
ModuleManager.CommonManager:showExchangeUI(1, runeData:getRemainSliverWingCount(), reward, runeData:getBuySliverCost(), function(count)
ModuleManager.CommonManager:showExchangeUI(1, DataManager.DungeonRuneData:getRemainSliverWingCount(), reward, DataManager.DungeonRuneData:getBuySliverCost(), function(count)
ModuleManager.DungeonRuneManager:reqBuySliverWing(count)
end)
end)

View File

@ -49,7 +49,8 @@ function DungeonCell:refresh(moduleKey)
cell:setActive(false)
end
end
self.banner:setSprite(GConst.ATLAS_PATH.UI_DUNGEON, GConst.DungeonConst.IMG_BANNER[self.moduleKey])
-- self.banner:setSprite(GConst.ATLAS_PATH.UI_DUNGEON, GConst.DungeonConst.IMG_BANNER[self.moduleKey])
self.banner:setTexture("assets/arts/textures/background/dungeon/" .. GConst.DungeonConst.IMG_BANNER[self.moduleKey] .. ".png")
if DataManager.DungeonData:isOpen(self.moduleKey) then
self.infoNode:setVisible(true)
self.lockNode:setVisible(false)
@ -81,11 +82,14 @@ function DungeonCell:onClickGo()
end
if self.moduleKey == GConst.DungeonConst.MODULE_KEY_DUNGEON_DAILY then
ModuleManager.DungeonManager:showDungeonDaylyMainUI()
elseif self.moduleKey == ModuleManager.MODULE_KEY.RUNES_OPEN then
ModuleManager.DungeonRuneManager:showMainUI()
end
end
function DungeonCell:updateTime()
if self.moduleKey == GConst.DungeonConst.MODULE_KEY_DUNGEON_DAILY then
if self.moduleKey == GConst.DungeonConst.MODULE_KEY_DUNGEON_DAILY or
self.moduleKey == ModuleManager.MODULE_KEY.RUNES_OPEN then
local remainTime = Time:getTodaySurplusTime()
if self.remainTime ~= remainTime then
self.remainTime = remainTime

View File

@ -12,6 +12,9 @@ function DungeonComp:init()
self:bind(DataManager.DungeonDailyData.MaterialData, "isDirty", function()
self:refresh()
end)
self:bind(DataManager.DungeonRuneData, "isDirty", function()
self:refresh()
end)
end
function DungeonComp:refresh(moduleKey)

View File

@ -4,8 +4,7 @@ function RuneBattleTaskCell:refresh(desc, taskInfo, over)
local uiMap = self:getUIMap()
uiMap["task_cell.desc"]:setText(desc)
uiMap["task_cell.check"]:setVisible(over)
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
uiMap["task_cell.task_icon"]:setSprite(runeData:getConditionIcon(taskInfo))
uiMap["task_cell.task_icon"]:setSprite(DataManager.DungeonRuneData:getConditionIcon(taskInfo))
end
return RuneBattleTaskCell

View File

@ -26,8 +26,7 @@ function RuneChapterCell:refresh(id, index, isFinal, chapterListCount)
bg:setVisible(chapterListCount ~= index)
end
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
local maxPassedId = runeData:getPassedMaxId()
local maxPassedId = DataManager.DungeonRuneData:getPassedMaxId()
local fightBg = uiMap["chapter_cell.touch_node.bg"]
local curBg = uiMap["chapter_cell.touch_node.bg_cur"]
local lightImg = uiMap["chapter_cell.touch_node.img_light"]
@ -37,7 +36,7 @@ function RuneChapterCell:refresh(id, index, isFinal, chapterListCount)
lightImg:setVisible(false)
sweep:setVisible(false)
local passed = false
local isBossChapter = runeData:isBossChapter(id)
local isBossChapter = DataManager.DungeonRuneData:isBossChapter(id)
curBg:setVisible(isBossChapter)
fightBg:setVisible(not isBossChapter)
local curLayerDecs
@ -56,7 +55,7 @@ function RuneChapterCell:refresh(id, index, isFinal, chapterListCount)
curLayerDecs:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_WEAPON_DESC_6, id))
if maxPassedId >= id then -- 已通关的
passed = true
local canSweep = runeData:canSweep(id)
local canSweep = DataManager.DungeonRuneData:canSweep(id)
sweep:setVisible(canSweep)
if canSweep then
uiMap["chapter_cell.touch_node.sweep_bg.tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.SMASH))
@ -65,10 +64,10 @@ function RuneChapterCell:refresh(id, index, isFinal, chapterListCount)
curMask:setVisible(false)
curLayerDecs:setAnchoredPositionX(0)
-- lightImg:setVisible(true)
-- descMinRound:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_MIN, runeData:getChapterPassRound(id)))
-- descMinRound:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_MIN, DataManager.DungeonRuneData:getChapterPassRound(id)))
-- descMinRound:setVisible(true)
else
if runeData:canFight(id) then
if DataManager.DungeonRuneData:canFight(id) then
curLock:setVisible(false)
curMask:setVisible(false)
curLayerDecs:setAnchoredPositionX(0)
@ -86,7 +85,7 @@ function RuneChapterCell:refresh(id, index, isFinal, chapterListCount)
end
end
local rewards = runeData:getChapterRewards(id)
local rewards = DataManager.DungeonRuneData:getChapterRewards(id)
local rewardCount = 0
for i, cell in ipairs(self.rewardCells) do
if rewards[i] then

View File

@ -19,8 +19,7 @@ function RuneTaskCell:refresh(taskInfo)
taskNum = taskParams2 or 0
end
local runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
icon:setSprite(runeData:getConditionIcon(taskInfo))
icon:setSprite(DataManager.DungeonRuneData:getConditionIcon(taskInfo))
desc:setText(taskNum)

View File

@ -15,8 +15,6 @@ function DungeonRuneBossFightUI:getPrefabPath()
end
function DungeonRuneBossFightUI:ctor(params)
self.runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
self.id = params.id
end
@ -28,9 +26,9 @@ end
function DungeonRuneBossFightUI:_display()
local uiMap = self.root:genAllChildren()
uiMap["dungeon_rune_boss_fight_ui.bg.title.tx_title"]:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_WEAPON_DESC_6, self.id))
uiMap["dungeon_rune_boss_fight_ui.bg.tx_title"]:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_WEAPON_DESC_6, self.id))
uiMap["dungeon_rune_boss_fight_ui.bg.btn_again.desc"]:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_DESC_2))
local spineName, spineScale = self.runeData:getChapterMonsterSpine(self.id)
local spineName, spineScale = DataManager.DungeonRuneData:getChapterMonsterSpine(self.id)
local spineObject = uiMap["dungeon_rune_boss_fight_ui.bg.banner.ui_spine_obj"]
spineObject:setVisible(false)
spineObject:loadAssetAsync(spineName, function()
@ -39,7 +37,7 @@ function DungeonRuneBossFightUI:_display()
spineObject:setVisible(true)
end, true)
local i18Config = self.runeData:getChapterMonsterI18N(self.id)
local i18Config = DataManager.DungeonRuneData:getChapterMonsterI18N(self.id)
uiMap["dungeon_rune_boss_fight_ui.bg.desc_1"]:setText(i18Config.name)
uiMap["dungeon_rune_boss_fight_ui.bg.desc_2"]:setText(i18Config.desc)
@ -55,7 +53,7 @@ function DungeonRuneBossFightUI:_addListeners()
end)
uiMap["dungeon_rune_boss_fight_ui.bg.btn"]:addClickListener(function()
local passed = self.runeData:passedChapter(self.id)
local passed = DataManager.DungeonRuneData:passedChapter(self.id)
if passed then
ModuleManager.DungeonRuneManager:reqSweep(self.id)
else
@ -69,7 +67,7 @@ function DungeonRuneBossFightUI:_addListeners()
end
function DungeonRuneBossFightUI:_bind()
self:bind(self.runeData, "isDirty", function()
self:bind(DataManager.DungeonRuneData, "isDirty", function()
self:refreshFightBtn()
end)
end
@ -80,18 +78,18 @@ function DungeonRuneBossFightUI:refreshTargetInfo()
self.taskRuneCell = CellManager:addCellComp(uiMap["dungeon_rune_boss_fight_ui.bg.banner.rune_task_cell"], RUNE_TASK_CELL)
end
local chapterCondition = self.runeData:getChapterCondition(self.id)
local chapterCondition = DataManager.DungeonRuneData:getChapterCondition(self.id)
if chapterCondition[1] then
self.taskRuneCell:refresh(chapterCondition[1])
self.taskRuneCell:addClickListener(function()
ModuleManager.TipsManager:showDescTips(self.runeData:getConditionDesc(chapterCondition[1]), self.taskRuneCell:getBaseObject())
ModuleManager.TipsManager:showDescTips(DataManager.DungeonRuneData:getConditionDesc(chapterCondition[1]), self.taskRuneCell:getBaseObject())
end)
end
end
function DungeonRuneBossFightUI:refreshRewardInfo()
local uiMap = self.root:genAllChildren()
local passed = self.runeData:passedChapter(self.id)
local passed = DataManager.DungeonRuneData:passedChapter(self.id)
local title = uiMap["dungeon_rune_boss_fight_ui.bg.desc_3"]
local descPassRound = uiMap["dungeon_rune_boss_fight_ui.bg.desc_4"]
@ -105,17 +103,17 @@ function DungeonRuneBossFightUI:refreshRewardInfo()
end
end
local rewards = self.runeData:getChapterRewards(self.id)
local rewards = DataManager.DungeonRuneData:getChapterRewards(self.id)
if passed then
title:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_DESC_4))
-- local round = self.runeData:getChapterPassRound(self.id)
-- local round = DataManager.DungeonRuneData:getChapterPassRound(self.id)
imgPassIcon:setActive(false)
descPassRound:setText(GConst.EMPTY_STRING)
descPassRound:setAnchoredPositionX(0)
-- descPassRound:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_MIN, round))
-- imgPassIcon:setActive(true)
GFunc.centerImgAndTx(imgPassIcon, descPassRound, 5)
rewards = self.runeData:getChapterSweepRewards(self.id)
rewards = DataManager.DungeonRuneData:getChapterSweepRewards(self.id)
else
imgPassIcon:setActive(false)
descPassRound:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_DESC_5))
@ -145,7 +143,7 @@ function DungeonRuneBossFightUI:refreshFightBtn()
local num = uiMap["dungeon_rune_boss_fight_ui.bg.btn.num"]
local desc = uiMap["dungeon_rune_boss_fight_ui.bg.btn.desc"]
local passed = self.runeData:passedChapter(self.id)
local passed = DataManager.DungeonRuneData:passedChapter(self.id)
if passed then
desc:setText(I18N:getGlobalText(I18N.GlobalConst.SMASH))
num:setText(1)

View File

@ -15,8 +15,6 @@ function DungeonRuneFightUI:getPrefabPath()
end
function DungeonRuneFightUI:ctor(params)
self.runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
self.id = params.id
end
@ -27,7 +25,7 @@ end
function DungeonRuneFightUI:_display()
local uiMap = self.root:genAllChildren()
uiMap["dungeon_rune_fight_ui.bg.title.tx_title"]:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_WEAPON_DESC_6, self.id))
uiMap["dungeon_rune_fight_ui.bg.tx_title"]:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_WEAPON_DESC_6, self.id))
uiMap["dungeon_rune_fight_ui.bg.desc_1"]:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_DESC_1))
self:refreshTargetInfo()
self:refreshRewardInfo()
@ -54,14 +52,14 @@ function DungeonRuneFightUI:refreshTargetInfo()
end
end
local chapterCondition = self.runeData:getChapterCondition(self.id)
local chapterCondition = DataManager.DungeonRuneData:getChapterCondition(self.id)
for index, cell in ipairs(self.taskRuneCells) do
local info = chapterCondition[index]
if info then
cell:refresh(info)
cell:getBaseObject():setActive(true)
cell:addClickListener(function()
ModuleManager.TipsManager:showDescTips(self.runeData:getConditionDesc(info), cell:getBaseObject())
ModuleManager.TipsManager:showDescTips(DataManager.DungeonRuneData:getConditionDesc(info), cell:getBaseObject())
end)
else
cell:getBaseObject():setActive(false)
@ -72,7 +70,7 @@ end
function DungeonRuneFightUI:refreshRewardInfo()
local uiMap = self.root:genAllChildren()
local passed = self.runeData:passedChapter(self.id)
local passed = DataManager.DungeonRuneData:passedChapter(self.id)
local descPassRound = uiMap["dungeon_rune_fight_ui.bg.desc_3"]
local imgPassIcon = uiMap["dungeon_rune_fight_ui.bg.icon"]
local rewardNode = uiMap["dungeon_rune_fight_ui.bg.reward_node"]
@ -84,7 +82,7 @@ function DungeonRuneFightUI:refreshRewardInfo()
if passed then
descPassRound:setVisible(false)
imgPassIcon:setVisible(false)
-- local round = self.runeData:getChapterPassRound(self.id)
-- local round = DataManager.DungeonRuneData:getChapterPassRound(self.id)
-- descPassRound:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_MIN, round))
-- GFunc.centerImgAndTx(imgPassIcon, descPassRound, 5)
lineR:setVisible(false)
@ -99,7 +97,7 @@ function DungeonRuneFightUI:refreshRewardInfo()
end
end
local rewards = self.runeData:getChapterRewards(self.id)
local rewards = DataManager.DungeonRuneData:getChapterRewards(self.id)
for index, cell in ipairs(self.rewardCells) do
local reward = rewards[index]
if reward then
@ -124,7 +122,7 @@ function DungeonRuneFightUI:refreshFightBtn()
local desc = uiMap["dungeon_rune_fight_ui.bg.btn.desc"]
local descAgain = uiMap["dungeon_rune_fight_ui.bg.btn.desc_again"]
local passed = self.runeData:passedChapter(self.id)
local passed = DataManager.DungeonRuneData:passedChapter(self.id)
local notPass = not passed
iconBg:setVisible(notPass)
icon:setVisible(notPass)

View File

@ -3,132 +3,127 @@ local DungeonRuneMainUI = class("DungeonRuneMainUI", BaseUI)
local RUNE_CHAPTER_CELL = "app/ui/dungeon_rune/cell/rune_chapter_cell"
function DungeonRuneMainUI:onPressBackspace()
self:closeUI()
self:closeUI()
end
function DungeonRuneMainUI:getCurrencyParams()
if self.currencyParams == nil then
self.currencyParams = {
itemIds = {
GConst.ItemConst.ITEM_ID_SLIVER_WING,
GConst.ItemConst.ITEM_ID_GLOD_WING,
},
showType = GConst.CURRENCY_TYPE.HORIZONTAL
}
end
if self.currencyParams == nil then
self.currencyParams = {
itemIds = {
GConst.ItemConst.ITEM_ID_SLIVER_WING,
GConst.ItemConst.ITEM_ID_GLOD_WING,
},
showType = GConst.CURRENCY_TYPE.HORIZONTAL
}
end
return self.currencyParams
end
function DungeonRuneMainUI:onPressBackspace()
self:closeUI()
end
function DungeonRuneMainUI:getPrefabPath()
return "assets/prefabs/ui/dungeon_rune/dungeon_rune_main_ui.prefab"
return "assets/prefabs/ui/dungeon_rune/dungeon_rune_main_ui.prefab"
end
function DungeonRuneMainUI:ctor()
self.runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
self.chapterList = {}
self.chapterListCount = 0
for id, info in ipairs(ConfigManager:getConfig(self.runeData:getConfigName())) do
table.insert(self.chapterList, id)
self.chapterListCount = self.chapterListCount + 1
end
self.chapterListCount = self.chapterListCount - 1
self.lastChapterId = table.remove(self.chapterList)
self.targetId = self.runeData:getPassedMaxId()
if self.targetId <= 0 then
self.targetId = 1
end
self.chapterList = {}
self.chapterListCount = 0
for id, info in ipairs(ConfigManager:getConfig(DataManager.DungeonRuneData:getConfigName())) do
table.insert(self.chapterList, id)
self.chapterListCount = self.chapterListCount + 1
end
self.chapterListCount = self.chapterListCount - 1
self.lastChapterId = table.remove(self.chapterList)
self.targetId = DataManager.DungeonRuneData:getPassedMaxId()
if self.targetId <= 0 then
self.targetId = 1
end
end
function DungeonRuneMainUI:onLoadRootComplete()
self:_display()
self:_addListeners()
self:_bind()
self:_display()
self:_addListeners()
self:_bind()
end
function DungeonRuneMainUI:_display()
local uiMap = self.root:genAllChildren()
uiMap["dungeon_rune_main_ui.banner.btn_formation.tx_ok"]:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_WEAPON_DESC_4))
self:refreshScrollrect()
self:refreshFormation()
local uiMap = self.root:genAllChildren()
uiMap["dungeon_rune_main_ui.banner.btn_formation.tx_ok"]:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_WEAPON_DESC_4))
self:refreshScrollrect()
self:refreshFormation()
end
function DungeonRuneMainUI:_addListeners()
local uiMap = self.root:genAllChildren()
uiMap["dungeon_rune_main_ui.banner.btn_formation"]:addClickListener(function()
ModuleManager.CommonManager:showFormationUI(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE)
end)
local uiMap = self.root:genAllChildren()
uiMap["dungeon_rune_main_ui.banner.btn_formation"]:addClickListener(function()
ModuleManager.CommonManager:showFormationUI(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE)
end)
uiMap["dungeon_rune_main_ui.banner.btn_back"]:addClickListener(function()
self:closeUI()
end)
uiMap["dungeon_rune_main_ui.banner.btn_back"]:addClickListener(function()
self:closeUI()
end)
end
function DungeonRuneMainUI:_bind()
self:bind(self.runeData, "isDirty", function()
self:refreshFormation()
self:refreshAllCells()
end)
self:bind(DataManager.DungeonRuneData, "isDirty", function()
self:refreshFormation()
self:refreshAllCells()
end)
self:bind(DataManager.FormationData, "dirty", function()
self:refreshFormation()
end)
self:bind(DataManager.FormationData, "dirty", function()
self:refreshFormation()
end)
self:bind(DataManager.HeroData, "isDirty", function()
self:refreshFormation()
end)
self:bind(DataManager.HeroData, "isDirty", function()
self:refreshFormation()
end)
end
function DungeonRuneMainUI:refreshFormation()
if not self.formationComp then
local uiMap = self.root:genAllChildren()
self.formationComp = uiMap["dungeon_rune_main_ui.hero_formation_comp"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.HERO_FORMATION_COMP)
end
self.formationComp:refreshByFormation(DataManager.FormationData:getDungeonRuneFormation())
if not self.formationComp then
local uiMap = self.root:genAllChildren()
self.formationComp = uiMap["dungeon_rune_main_ui.hero_formation_comp"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.HERO_FORMATION_COMP)
end
self.formationComp:refreshByFormation(DataManager.FormationData:getDungeonRuneFormation())
end
function DungeonRuneMainUI:refreshScrollrect()
local uiMap = self.root:genAllChildren()
if not self.scrollRect then
self.scrollRect = uiMap["dungeon_rune_main_ui.scrollrect"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.scrollRect:addInitCallback(function()
return RUNE_CHAPTER_CELL
end)
self.scrollRect:addRefreshCallback(function(index, cell)
cell:refresh(self.chapterList[index], index, false, self.chapterListCount)
end)
self.scrollRect:addInitFinishCallback(function(cell)
cell:addClickListener(function()
self:onClickCell(self.chapterList[cell:getIndex()])
end)
end)
end
self.scrollRect:refillCells(self.chapterListCount, nil, self.targetId)
local uiMap = self.root:genAllChildren()
if not self.scrollRect then
self.scrollRect = uiMap["dungeon_rune_main_ui.scrollrect"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.scrollRect:addInitCallback(function()
return RUNE_CHAPTER_CELL
end)
self.scrollRect:addRefreshCallback(function(index, cell)
cell:refresh(self.chapterList[index], index, false, self.chapterListCount)
end)
self.scrollRect:addInitFinishCallback(function(cell)
cell:addClickListener(function()
self:onClickCell(self.chapterList[cell:getIndex()])
end)
end)
end
self.scrollRect:refillCells(self.chapterListCount, nil, self.targetId)
local content = uiMap["dungeon_rune_main_ui.scrollrect.viewport.content"]
content:setSizeDeltaY(279 * (self.chapterListCount - 1) + 966)
if not self.lastChapterCell then
self.lastChapterCell = CellManager:addCellComp(uiMap["dungeon_rune_main_ui.scrollrect.viewport.content.last_cell"], RUNE_CHAPTER_CELL)
end
self.lastChapterCell:refresh(self.lastChapterId, nil, true)
self.lastChapterCell:addClickListener(function()
self:onClickCell(self.lastChapterId)
end)
local content = uiMap["dungeon_rune_main_ui.scrollrect.viewport.content"]
content:setSizeDeltaY(279 * (self.chapterListCount - 1) + 966)
if not self.lastChapterCell then
self.lastChapterCell = CellManager:addCellComp(uiMap["dungeon_rune_main_ui.scrollrect.viewport.content.last_cell"], RUNE_CHAPTER_CELL)
end
self.lastChapterCell:refresh(self.lastChapterId, nil, true)
self.lastChapterCell:addClickListener(function()
self:onClickCell(self.lastChapterId)
end)
end
function DungeonRuneMainUI:refreshAllCells()
if not self.scrollRect then
return
end
if not self.scrollRect then
return
end
self.scrollRect:refreshAll()
self.scrollRect:refreshAll()
end
function DungeonRuneMainUI:onClickCell(id)
ModuleManager.DungeonRuneManager:showFightUI(id)
ModuleManager.DungeonRuneManager:showFightUI(id)
end
return DungeonRuneMainUI

View File

@ -33,7 +33,6 @@ function DungeonRuneRankUI:getPrefabPath()
end
function DungeonRuneRankUI:ctor()
self.runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
end
function DungeonRuneRankUI:onLoadRootComplete()
@ -67,7 +66,7 @@ function DungeonRuneRankUI:_addListeners()
end
function DungeonRuneRankUI:_bind()
self:bind(self.runeData, "isDirty", function()
self:bind(DataManager.DungeonRuneData, "isDirty", function()
self:refreshRankNode()
self:refreshMyRankInfo()
self:refreshPages()
@ -94,9 +93,9 @@ end
function DungeonRuneRankUI:refreshRankNode()
if self.curPage == PAGE_TYPE.LAST_DAY then
self.rankList = self.runeData:getLastRankInfo()
self.rankList = DataManager.DungeonRuneData:getLastRankInfo()
elseif self.curPage == PAGE_TYPE.TODAY then
self.rankList = self.runeData:getCurRankInfo()
self.rankList = DataManager.DungeonRuneData:getCurRankInfo()
else
self.rankList = {}
end
@ -132,7 +131,7 @@ function DungeonRuneRankUI:refreshPages()
end
end
if self.runeData:canGetRankReward() then
if DataManager.DungeonRuneData:canGetRankReward() then
self.pageObjs[3].page:addRedPoint(77, -6.5, 1)
else
self.pageObjs[3].page:removeRedPoint()
@ -151,12 +150,12 @@ end
function DungeonRuneRankUI:refreshMyRankInfo()
local info
local canGot = self.runeData:canGetRankReward()
local canGot = DataManager.DungeonRuneData:canGetRankReward()
if self.curPage == PAGE_TYPE.TODAY then
info = self.runeData:getCurRankSelfInfo()
info = DataManager.DungeonRuneData:getCurRankSelfInfo()
else
info = self.runeData:getLastSelfInfo()
info = DataManager.DungeonRuneData:getLastSelfInfo()
end
local rank = info and info.rank or 0
@ -206,13 +205,13 @@ function DungeonRuneRankUI:refreshMyRankInfo()
roundObj:setText(I18N:getGlobalText(I18N.GlobalConst.DUNGEON_RUNE_DESC_11, round))
end
local got = self.runeData:isGotRankReward()
local got = DataManager.DungeonRuneData:isGotRankReward()
local rewards
if canGot then
rewards = self.runeData:getRankRewards(rank)
rewards = DataManager.DungeonRuneData:getRankRewards(rank)
else
info = self.runeData:getCurRankSelfInfo()
rewards = self.runeData:getRankRewards(info.rank or 0)
info = DataManager.DungeonRuneData:getCurRankSelfInfo()
rewards = DataManager.DungeonRuneData:getRankRewards(info.rank or 0)
got = false
end
@ -237,7 +236,7 @@ end
function DungeonRuneRankUI:refreshTime()
local uiMap = self.root:genAllChildren()
local remainTime = self.runeData:getCloseTime()
local remainTime = DataManager.DungeonRuneData:getCloseTime()
local str
str = Time:formatNumTimeStr(remainTime)
uiMap["dungeon_rune_rank_ui.bg.time_node.tx_time"]:setText(str)

View File

@ -9,7 +9,6 @@ function DungeonRuneRebirthUI:getPrefabPath()
end
function DungeonRuneRebirthUI:ctor(params)
self.runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
self.adCallback = params.adCallback
self.refuseCallback = params.refuseCallback
self.isHpOver = params.isHpOver

View File

@ -15,8 +15,6 @@ function DungeonRuneTaskUI:getPrefabPath()
end
function DungeonRuneTaskUI:ctor(params)
self.runeData = DataManager.DungeonData:getDungeonDataByType(ModuleManager.MODULE_KEY.RUNES_OPEN)
self.id = params.id
end
@ -34,7 +32,7 @@ function DungeonRuneTaskUI:_display()
end
end
local chapterCondition = self.runeData:getChapterCondition(self.id)
local chapterCondition = DataManager.DungeonRuneData:getChapterCondition(self.id)
local count = 0
local taskProgress = ModuleManager.DungeonRuneManager:getTaskStatus(ModuleManager.BattleManager.battleController, chapterCondition)
for index, cell in ipairs(self.taskCells) do
@ -43,7 +41,7 @@ function DungeonRuneTaskUI:_display()
if condition then
cell:getBaseObject():setActive(true)
local taskNum = taskProgress[newIndex] and taskProgress[newIndex].progress
local desc = self.runeData:getConditionDesc(condition, taskNum)
local desc = DataManager.DungeonRuneData:getConditionDesc(condition, taskNum)
local over = false
if taskProgress[newIndex] then
local info = taskProgress[newIndex]

View File

@ -57,6 +57,8 @@ end
function DungeonData:isOpen(moduleKey, showToast)
if moduleKey == GConst.DungeonConst.MODULE_KEY_DUNGEON_DAILY and DataManager.DungeonDailyData:isOpen(showToast) then
return true
elseif moduleKey == ModuleManager.MODULE_KEY.RUNES_OPEN and DataManager.DungeonRuneData:isOpen(showToast) then
return true
end
return false
end
@ -129,6 +131,8 @@ end
function DungeonData:getShowRewards(moduleKey)
if moduleKey == GConst.DungeonConst.MODULE_KEY_DUNGEON_DAILY then
return GFunc.getConstCost("dungeon_show_reward", true)
elseif moduleKey == ModuleManager.MODULE_KEY.RUNES_OPEN then
return GFunc.getConstCost("dungeon_show_reward", true)
-- elseif moduleKey == ModuleManager.MODULE_KEY.TOWER then
-- return GFunc.getConstCost("tower_show_reward", true)
-- elseif moduleKey == ModuleManager.MODULE_KEY.WORLD_BOSS then

View File

@ -0,0 +1,326 @@
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

View File

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 8dd81378176ec4fc0a2edc5a0e81cdd2
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3}

View File

@ -109,6 +109,10 @@ function FormationData:getArenaDefendFormation()
return self:getFormation(GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND)
end
function FormationData:getDungeonRuneFormation()
return self:getFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE)
end
-- function FormationData:getDungeonWeaponFormation()
-- local formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_WEAPON)
-- if table.nums(formation) <= 0 then