c1_lua/lua/app/module/dungeon/dungeon_manager.lua
2025-10-10 19:21:42 +08:00

206 lines
8.5 KiB
Lua

local DungeonManager = class("DungeonManager", BaseModule)
--region UI
function DungeonManager:showDungeonDaylyMainUI(page)
local params = {
page = page or GConst.DungeonConst.DUNGEON_DAILY_TYPE.GOLD
}
UIManager:showUI("app/ui/dungeon/dungeon_daily_main_ui", params)
end
-- function DungeonManager:showRankUI(showPage, rankList, rankSelf)
-- local params = {
-- showPage = showPage,
-- rankList = rankList,
-- rankSelf = rankSelf,
-- }
-- UIManager:showUI("app/ui/rank/rank_ui", params)
-- end
-- function DungeonManager:showRankRewardUI(showModule)
-- local params = {
-- showModule = showModule,
-- }
-- UIManager:showUI("app/ui/rank/rank_reward_ui", params)
-- end
--endregion
-- 外部接口--------------------------------------------------------------------------
-- 扫荡
function DungeonManager:reqSweep(module, id)
self:reqSweepGold(id)
-- if module == ModuleManager.MODULE_KEY.DUNGEON_GOLD then
-- self:reqSweepGold(id)
-- elseif module == ModuleManager.MODULE_KEY.DUNGEON_RES then
-- self:reqSweepShards(id)
-- end
end
-- 内部接口--------------------------------------------------------------------------
function DungeonManager:checkDayChange()
if EDITOR_MODE then
Logger.logHighlight("检查跨天:".. tostring(DataManager.DungeonData:getIfCanReset()))
end
if not DataManager.DungeonData:getIfCanReset() then
return
end
-- 跨天重置数据
DataManager.DungeonData:onDayChange()
end
-- 请求挑战金币副本
function DungeonManager:onDungeonStartReq(id)
local params = {
id = id,
}
local dungeonDailyType = DataManager.DungeonDailyData:getDungeonDailyTypeByChapterId(id)
local ticketCount = 0
if dungeonDailyType == GConst.DungeonConst.DUNGEON_DAILY_TYPE.GOLD then
local remainTimes = DataManager.DungeonDailyData.GoldData:getTodayRemainTimes()
ticketCount = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_DUNGEON_TICKET_1)
if remainTimes <= 0 and ticketCount <= 0 then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_1))
return
end
elseif dungeonDailyType == GConst.DungeonConst.DUNGEON_DAILY_TYPE.MATERIAL then
local remainTimes = DataManager.DungeonDailyData.MaterialData:getTodayRemainTimes()
ticketCount = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.ITEM_ID_DUNGEON_TICKET_2)
if remainTimes <= 0 and ticketCount <= 0 then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_1))
return
end
else
return
end
local itemGetType = dungeonDailyType == GConst.DungeonConst.DUNGEON_DAILY_TYPE.GOLD and BIReport.ITEM_GET_TYPE.ENTER_DUNGEON_DAILY_GOLD_BATTLE or BIReport.ITEM_GET_TYPE.ENTER_DUNGEON_DAILY_MATERIAL_BATTLE
self:sendMessage(ProtoMsgType.FromMsgEnum.DungeonStartReq, params, self.onDungeonStartRsp, itemGetType)
end
-- 响应挑战金币副本
function DungeonManager:onDungeonStartRsp(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
DataManager.DungeonDailyData:setCurrChallengeChapterId(result.reqData.id)
local dungeonDailyType = DataManager.DungeonDailyData:getDungeonDailyTypeByChapterId(result.reqData.id)
ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.DUNGEON_GOLD, nil, function()
UIManager:closeAllUI()
ModuleManager.MaincityManager:showMainCityUI(GConst.MainCityConst.BOTTOM_PAGE.DUNGEON)
ModuleManager.DungeonManager:showDungeonDaylyMainUI(dungeonDailyType)
end)
-- end, nil, {dungeonType = dungeonDailyType})
end
-- 请求结算金币副本
function DungeonManager:reqEndChallengeGold(chapterId, combatReport, taskProgress, totalDamage, remainingHp)
-- local parmas = {
-- win = combatReport.victory,
-- total_damage = totalDamage,
-- remaining_hp = remainingHp,
-- chapter_gold_id = id,
-- task_stat = taskProgress,
-- combatReport = combatReport,
-- }
-- self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterGoldChallengeSettlementReq, parmas, self.respEndChallengeGold, BIReport.ITEM_GET_TYPE.DUNGEON_GOLD_END)
local params = {
id = chapterId,
win = combatReport.victory,
cheat = false,
task_stat = taskProgress,
combatReport = combatReport,
}
local dungeonDailyType = DataManager.DungeonDailyData:getDungeonDailyTypeByChapterId(chapterId)
local itemGetType = dungeonDailyType == GConst.DungeonConst.DUNGEON_DAILY_TYPE.GOLD and BIReport.ITEM_GET_TYPE.FINISH_DUNGEON_DAILY_GOLD_BATTLE or BIReport.ITEM_GET_TYPE.FINISH_DUNGEON_DAILY_MATERIAL_BATTLE
self:sendMessage(ProtoMsgType.FromMsgEnum.DungeonSettlementReq, params, self.respEndChallengeGold, itemGetType)
end
-- 响应结算金币副本
function DungeonManager:respEndChallengeGold(result)
if result.err_code == GConst.ERROR_STR.BATTLE_CHEATER then
ModuleManager.BattleManager:exitBattle()
local params = {
content = I18N:getGlobalText(I18N.GlobalConst.CHEAT_1),
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
}
GFunc.showMessageBox(params)
return
elseif result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
local chapterId = result.reqData.id
local victory = result.reqData.win
DataManager.DungeonDailyData:onFightDungeonDailyFinish(chapterId, victory)
ModuleManager.BattleManager:showBattleResultUI(GConst.BattleConst.BATTLE_TYPE.DUNGEON_GOLD, result.rewards, result.reqData.combatReport)
-- if passId ~= DataManager.DungeonData:getPassedMaxId(ModuleManager.MODULE_KEY.DUNGEON_GOLD) 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
taskStat[GConst.BattleConst.BATTLE_TASK_FIELD.KILL_BOSS] = 0 -- boss不算
taskStat[GConst.BattleConst.BATTLE_TASK_FIELD.KILL_NORMAL_MONSTER] = 0 -- 击杀小怪数量不算
taskStat[GConst.BattleConst.BATTLE_TASK_FIELD.PASS_WAVE] = 0 -- 通关波数不算
ModuleManager.TaskManager:addFightTaskProgress(taskStat)
end
end
end
-- 请求扫荡金币副本
function DungeonManager:sweepDungeonDaily(id)
local params = {
id = id,
}
local dungeonDailyType = DataManager.DungeonDailyData:getDungeonDailyTypeByChapterId(id)
if dungeonDailyType == GConst.DungeonConst.DUNGEON_DAILY_TYPE.GOLD then
local remainTimes = DataManager.DungeonDailyData.GoldData:getTodayRemainTimes()
local ticketCount = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.DUNGEON_TICKET_1)
if remainTimes <= 0 and ticketCount <= 0 then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_1))
return
end
elseif dungeonDailyType == GConst.DungeonConst.DUNGEON_DAILY_TYPE.MATERIAL then
local remainTimes = DataManager.DungeonDailyData.MaterialData:getTodayRemainTimes()
local ticketCount = DataManager.BagData.ItemData:getItemNumById(GConst.ItemConst.DUNGEON_TICKET_2)
if remainTimes <= 0 and ticketCount <= 0 then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_1))
return
end
else
return
end
local itemGetType = dungeonDailyType == GConst.DungeonConst.DUNGEON_DAILY_TYPE.GOLD and BIReport.ITEM_GET_TYPE.SWEEP_DUNGEON_DAILY_GOLD_BATTLE or BIReport.ITEM_GET_TYPE.SWEEP_DUNGEON_DAILY_MATERIAL_BATTLE
self:sendMessage(ProtoMsgType.FromMsgEnum.DungeonSweepReq, params, self.onSweepDungeonDailyFinish, itemGetType)
end
-- 响应扫荡金币副本
function DungeonManager:onSweepDungeonDailyFinish(result)
if result.err_code ~= GConst.ERROR_STR.SUCCESS then
return
end
if result.rewards then
GFunc.showRewardBox(result.rewards)
end
DataManager.DungeonDailyData:onSweepDungeonDailyFinish(result.reqData.id)
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.CHALLENGE_DAILY_NUM_SINGLE, 1)
end
--region 上报
-- 日常副本
BIReport.ITEM_GET_TYPE.ENTER_DUNGEON_DAILY_GOLD_BATTLE = "enter_dungeon_daily_gold_battle" -- 进入金币副本
BIReport.ITEM_GET_TYPE.FINISH_DUNGEON_DAILY_GOLD_BATTLE = "finish_dungeon_daily_gold_battle" -- 结算金币副本
BIReport.ITEM_GET_TYPE.SWEEP_DUNGEON_DAILY_GOLD_BATTLE = "sweep_dungeon_daily_gold_battle" -- 扫荡金币副本
BIReport.ITEM_GET_TYPE.ENTER_DUNGEON_DAILY_MATERIAL_BATTLE = "enter_dungeon_daily_material_battle" -- 进入材料副本
BIReport.ITEM_GET_TYPE.FINISH_DUNGEON_DAILY_MATERIAL_BATTLE = "finish_dungeon_daily_material_battle" -- 结算材料副本
BIReport.ITEM_GET_TYPE.SWEEP_DUNGEON_DAILY_MATERIAL_BATTLE = "sweep_dungeon_daily_material_battle" -- 扫荡材料副本
--endregion
return DungeonManager