c1_lua/lua/app/module/dungeon/dungeon_manager.lua
2023-08-15 12:15:21 +08:00

260 lines
9.9 KiB
Lua

local DungeonManager = class("DungeonManager", BaseModule)
-- 外部接口--------------------------------------------------------------------------
-- 挑战
function DungeonManager:reqChallenge(module, id)
if module == ModuleManager.MODULE_KEY.DUNGEON_GOLD then
self:reqChallengeGold(id)
elseif module == ModuleManager.MODULE_KEY.DUNGEON_SHARDS then
self:reqChallengeShards(id)
end
end
-- 结算
function DungeonManager:reqEndChallenge(module, id)
if module == ModuleManager.MODULE_KEY.DUNGEON_GOLD then
self:reqEndChallengeGold(id)
elseif module == ModuleManager.MODULE_KEY.DUNGEON_SHARDS then
self:reqEndChallengeShards(id)
end
end
-- 扫荡
function DungeonManager:reqSweep(module, id)
if module == ModuleManager.MODULE_KEY.DUNGEON_GOLD then
self:reqSweepGold(id)
elseif module == ModuleManager.MODULE_KEY.DUNGEON_SHARDS 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:reqChallengeGold(id)
local moduleKey = ModuleManager.MODULE_KEY.DUNGEON_GOLD
-- 判断次数
if DataManager.DungeonData:getRemainTimes(moduleKey) <= 0 then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_1))
return
end
-- 判断体力
if not DataManager.DungeonData:isEnoughHp(moduleKey) then
GFunc.showItemNotEnough(GConst.ItemConst.ITEM_ID_VIT)
ModuleManager.CommerceManager:showBuyVitUI()
return
end
if not DataManager.DungeonData:isCanChallenge(moduleKey) then
return
end
local parmas = {chapter_gold_id = id}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterGoldChallengeStartReq, parmas, {}, self.respChallengeGold, BIReport.ITEM_GET_TYPE.DUNGEON_GOLD_CHALLENGE)
end
-- 响应挑战金币副本
function DungeonManager:respChallengeGold(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.DungeonData:onFightCountReduce(ModuleManager.MODULE_KEY.DUNGEON_GOLD)
DataManager.DungeonData:setCurFightChapterId(result.reqData.chapter_gold_id)
ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.DUNGEON_GOLD)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.DUNGEON_CHALLENGE)
end
end
-- 请求结算金币副本
function DungeonManager:reqEndChallengeGold(id, 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)
end
-- 响应结算金币副本
function DungeonManager:respEndChallengeGold(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
local passId = DataManager.DungeonData:getPassedMaxId(ModuleManager.MODULE_KEY.DUNGEON_GOLD)
DataManager.DungeonData:initDungeonGold(result.gold_challenge)
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
end
-- 请求扫荡金币副本
function DungeonManager:reqSweepGold(id)
local moduleKey = ModuleManager.MODULE_KEY.DUNGEON_GOLD
-- 判断次数
if DataManager.DungeonData:getRemainTimes(moduleKey) <= 0 then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_1))
return
end
-- 判断体力
if not DataManager.DungeonData:isEnoughHp(moduleKey) then
GFunc.showItemNotEnough(GConst.ItemConst.ITEM_ID_VIT)
ModuleManager.CommerceManager:showBuyVitUI()
return
end
if not DataManager.DungeonData:isCanChallenge(moduleKey) then
return
end
local parmas = {
chapter_gold_id = id,
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterGoldChallengeFarmReq, parmas, {}, self.respSweepGold, BIReport.ITEM_GET_TYPE.DUNGEON_GOLD_SWEEP)
end
-- 响应扫荡金币副本
function DungeonManager:respSweepGold(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.DungeonData:onFightCountReduce(ModuleManager.MODULE_KEY.DUNGEON_GOLD)
GFunc.showRewardBox(result.rewards)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.DUNGEON_SWEEP)
end
end
-- 请求挑战碎片副本
function DungeonManager:reqChallengeShards(id)
local moduleKey = ModuleManager.MODULE_KEY.DUNGEON_SHARDS
-- 判断次数
if DataManager.DungeonData:getRemainTimes(moduleKey) <= 0 then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_1))
return
end
-- 判断体力
if not DataManager.DungeonData:isEnoughHp(moduleKey) then
GFunc.showItemNotEnough(GConst.ItemConst.ITEM_ID_VIT)
ModuleManager.CommerceManager:showBuyVitUI()
return
end
if not DataManager.DungeonData:isCanChallenge(moduleKey) then
return
end
local parmas = {chapter_shards_id = id}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterShardsChallengeStartReq, parmas, {}, self.respChallengeShards, BIReport.ITEM_GET_TYPE.DUNGEON_SHARDS_CHALLENGE)
end
-- 响应挑战碎片副本
function DungeonManager:respChallengeShards(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.DungeonData:onFightCountReduce(ModuleManager.MODULE_KEY.DUNGEON_SHARDS)
DataManager.DungeonData:setCurFightChapterId(result.reqData.chapter_shards_id)
ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.DUNGEON_SHARDS)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.DUNGEON_CHALLENGE)
end
end
-- 请求结算碎片副本
function DungeonManager:reqEndChallengeShards(id, combatReport, taskProgress, totalDamage)
local parmas = {
win = combatReport.victory,
total_damage = totalDamage,
chapter_shards_id = id,
task_stat = taskProgress,
combatReport = combatReport,
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterShardsChallengeSettlementReq, parmas, {}, self.respEndChallengeShards, BIReport.ITEM_GET_TYPE.DUNGEON_SHARDS_END)
end
-- 响应结算碎片副本
function DungeonManager:respEndChallengeShards(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
local passId = DataManager.DungeonData:getPassedMaxId(ModuleManager.MODULE_KEY.DUNGEON_SHARDS)
DataManager.DungeonData:initDungeonShards(result.shards_challenge)
local newRewards = {}
GFunc.mergeRewards2(result.rewards, newRewards, true)
ModuleManager.BattleManager:showBattleResultUI(GConst.BattleConst.BATTLE_TYPE.DUNGEON_SHARDS, newRewards, result.reqData and result.reqData.combatReport or {}, nil, nil, true)
if passId ~= DataManager.DungeonData:getPassedMaxId(ModuleManager.MODULE_KEY.DUNGEON_SHARDS) 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 -- 击杀小怪数量不算
ModuleManager.TaskManager:addFightTaskProgress(taskStat)
end
end
end
end
-- 请求扫荡碎片副本
function DungeonManager:reqSweepShards(id)
local moduleKey = ModuleManager.MODULE_KEY.DUNGEON_SHARDS
-- 判断次数
if DataManager.DungeonData:getRemainTimes(moduleKey) <= 0 then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.DAILY_CHALLENGE_DESC_1))
return
end
-- 判断体力
if not DataManager.DungeonData:isEnoughHp(moduleKey) then
GFunc.showItemNotEnough(GConst.ItemConst.ITEM_ID_VIT)
ModuleManager.CommerceManager:showBuyVitUI()
return
end
if not DataManager.DungeonData:isCanChallenge(moduleKey) then
return
end
local parmas = {
chapter_shards_id = id,
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterShardsChallengeFarmReq, parmas, {}, self.respSweepShards, BIReport.ITEM_GET_TYPE.DUNGEON_SHARDS_SWEEP)
end
-- 响应扫荡碎片副本
function DungeonManager:respSweepShards(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.DungeonData:onFightCountReduce(ModuleManager.MODULE_KEY.DUNGEON_SHARDS)
GFunc.showRewardBox(result.rewards)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.DUNGEON_SWEEP)
end
end
return DungeonManager