c1_lua/lua/app/module/chapter/chapter_manager.lua
2023-06-30 18:45:56 +08:00

140 lines
5.5 KiB
Lua

local ChapterManager = class("ChapterManager", BaseModule)
function ChapterManager:openBox(chapterId, index)
if DataManager.ChapterData:getChapterBoxRewardGot(chapterId, index) then
return
end
local parmas = {
chapter_id = chapterId,
wave = index,
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterBoxRewardReq, parmas, {}, self.openBoxFinish, BIReport.ITEM_GET_TYPE.CHAPTER_BOX)
end
function ChapterManager:openBoxFinish(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
local reqData = result.reqData
GFunc.showRewardBox(result.rewards)
DataManager.ChapterData:openBox(reqData.chapter_id, reqData.wave)
BIReport:postChapterOpenBox(reqData.chapter_id, DataManager.ChapterData:getChapterBoxNum(reqData.chapter_id, reqData.wave), result.rewards)
end
end
function ChapterManager:startFight()
if not DataManager.FormationData:formationIsFull(GConst.BattleConst.BATTLE_TYPE.STAGE) then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_8))
return
end
local cost = DataManager.ChapterData:getFightCost()
local vitCostNum = 0
if cost then
vitCostNum = GFunc.getRewardNum(cost)
end
if vitCostNum > DataManager.BagData.ItemData:getVit() then -- 体力不足
GFunc.showItemNotEnough(GConst.ItemConst.ITEM_ID_VIT)
ModuleManager.CommerceManager:showBuyVitUI()
return
end
local parmas = {
chapter_id = DataManager.ChapterData:getChapterId()
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterStartReq, parmas, {}, self.startFightFinish, BIReport.ITEM_GET_TYPE.CHAPTER_FIGHT_START)
end
function ChapterManager:startFightFinish(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.STAGE)
end
end
function ChapterManager:endFight(id, combatReport, gotMysteryBoxIndexs, taskProgress)
local cfg = ConfigManager:getConfig("chapter")[id]
local mystery_box_idx = {}
if gotMysteryBoxIndexs and cfg.mystery_box then
local indexMap = {}
for index, wave in ipairs(cfg.mystery_box) do
indexMap[wave] = index
end
for boardIndex, _ in pairs(gotMysteryBoxIndexs) do
if indexMap[boardIndex] then
table.insert(mystery_box_idx, indexMap[boardIndex])
end
end
end
local parmas = {
win = combatReport.victory,
chapter_id = id,
mystery_box_idx = mystery_box_idx,
task_stat = taskProgress,
combatReport = combatReport,
}
self:sendMessage(ProtoMsgType.FromMsgEnum.ChapterSettlementReq, parmas, {}, self.endFightFinish, BIReport.ITEM_GET_TYPE.CHAPTER_FIGHT_END)
end
function ChapterManager:endFightFinish(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then
local reqData = result.reqData
local maxChapter = DataManager.ChapterData:getNewChapterId()
local rewards = {}
local newRewards = {}
local mysteryBoxIdx = result.mystery
for i, reward in ipairs(result.rewards) do
if i <= mysteryBoxIdx then
table.insert(newRewards, reward)
else
table.insert(rewards, reward)
end
end
if rewards then
local mergeRewards = {}
GFunc.mergeRewards2(rewards, mergeRewards, true)
for _, unit in ipairs(mergeRewards) do
table.insert(newRewards, unit)
end
end
ModuleManager.BattleManager:showBattleResultUI(GConst.BattleConst.BATTLE_TYPE.STAGE, newRewards, reqData.combatReport, mysteryBoxIdx)
DataManager.ChapterData:fightChapter(reqData.chapter_id, result.max_chapter_id, result.max_wave, reqData.mystery_box_idx)
-- 处理金猪,要在章节更新之后
DataManager.GoldPigData:addGoldPigCount()
local newMaxChapter = DataManager.ChapterData:getNewChapterId()
if maxChapter ~= newMaxChapter then
local data = {}
data.max_chapter = newMaxChapter
CS.ThinkingAnalytics.ThinkingAnalyticsAPI.UserSet(data)
-- 标记可弹出新手礼包
if maxChapter == 1 then
DataManager.ShopData:markPopUpGiftForBeginnerGift()
end
-- 新章节通关,尝试解锁新功能
DataManager:tryOpenModules()
-- 更新每日挑战数据
ModuleManager.DailyChallengeManager:onResetState()
-- 更新竞技场数据
ModuleManager.ArenaManager:reqArenaInfo()
-- 更新副本活动
DataManager.DungeonData:setDirty()
-- 章节通关 标记可弹出章节礼包
DataManager.ShopData:markPopUpGiftForActChapterStore(maxChapter)
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_PASS_CHAPTER)
-- 章节通关 检查是否要弹出英雄解锁界面
DataManager.HeroData:checkIfCanShowHeroUnlock(maxChapter)
-- 章节通关 检查是否要弹出功能解锁界面
DataManager.PlayerData:checkIfCanShowModuleUnlock(maxChapter)
end
-- 第二章战斗结算,触发成长礼包
if result.reqData.chapter_id == GConst.ShopConst.INTRODUCTORY_GIFT_TRIGGER_CHAPTER_ID then
DataManager.ShopData:onTriggerIntroductGift()
end
ModuleManager.TaskManager:addFightTaskProgress(reqData.task_stat)
end
end
return ChapterManager