281 lines
9.4 KiB
Lua
281 lines
9.4 KiB
Lua
local ArenaManager = class("ArenaManager", BaseModule)
|
|
|
|
function ArenaManager:showArenaUI()
|
|
UIManager:showUI("app/ui/arena/arena_ui")
|
|
end
|
|
|
|
function ArenaManager:checkSeasonChange()
|
|
if not DataManager.ArenaData:isInSeasonTime() then
|
|
-- 不在赛季时间段,赛季改变
|
|
self:onSeasonChanged()
|
|
elseif not DataManager.ArenaData:isInSeasonSettlementTime() then
|
|
-- 不在赛季结算时间段,赛季锁定
|
|
self:onSeasonSettlement()
|
|
else
|
|
-- 赛季未发生改变,不处理
|
|
end
|
|
end
|
|
|
|
-- 赛季结算
|
|
function ArenaManager:onSeasonSettlement()
|
|
if EDITOR_MODE then
|
|
Logger.logHighlight("赛季结算")
|
|
end
|
|
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_SETTLEMENT)
|
|
end
|
|
|
|
-- 赛季改变
|
|
function ArenaManager:onSeasonChanged()
|
|
if EDITOR_MODE then
|
|
Logger.logHighlight("赛季改变")
|
|
end
|
|
if self.isResetting then
|
|
return
|
|
end
|
|
|
|
DataManager.ArenaData:onSeasonChanged()
|
|
self:reqArenaInfo()
|
|
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_END)
|
|
end
|
|
|
|
-- 标记ad宝箱
|
|
function ArenaManager:markAdBox(isWin)
|
|
self.willShowAdBoxState = isWin
|
|
end
|
|
|
|
-- 获取ad宝箱弹出状态
|
|
function ArenaManager:getAdBoxState()
|
|
return self.willShowAdBoxState
|
|
end
|
|
|
|
-- 匹配
|
|
function ArenaManager:reqMatch()
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.MatchReq, {}, self.rspMatch, nil)
|
|
end
|
|
|
|
function ArenaManager:rspMatch(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
DataManager.ArenaData:onMatchInfoReceived(result.match_info)
|
|
end
|
|
end
|
|
|
|
-- 挑战
|
|
function ArenaManager:reqChallenge()
|
|
if DataManager.ArenaData:getMatchInfo() == nil then
|
|
ModuleManager.ArenaManager:reqMatch()
|
|
return
|
|
end
|
|
|
|
-- 判断体力
|
|
if not DataManager.ArenaData:isEnoughTicket() then
|
|
GFunc.showItemNotEnough(GConst.ItemConst.ITEM_ID_ARENA_TICKET)
|
|
ModuleManager.CommerceManager:showBuyArenaTicketUI()
|
|
return
|
|
end
|
|
|
|
-- 判断阵容
|
|
if not DataManager.FormationData:formationIsFull(GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK) then
|
|
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_8))
|
|
return
|
|
end
|
|
|
|
local reqData = {
|
|
defInfo = DataManager.ArenaData:getMatchInfo()
|
|
}
|
|
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPChallengeStartReq, reqData, self.rspChallenge, BIReport.ITEM_GET_TYPE.ARENA_CHALLENGE)
|
|
end
|
|
|
|
function ArenaManager:rspChallenge(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
local atkFormation = {}
|
|
local defFormation
|
|
if result.reqData and result.reqData.defInfo then
|
|
defFormation = GFunc.formatPlayerFormationInfo(result.reqData.defInfo)
|
|
else
|
|
return
|
|
end
|
|
|
|
for idx, id in pairs(DataManager.FormationData:getArenaAttackFormation()) do
|
|
local hero = DataManager.HeroData:getHeroById(id)
|
|
if hero then
|
|
atkFormation[idx] = hero
|
|
end
|
|
end
|
|
|
|
local params = {
|
|
defInfo = result.reqData.defInfo,
|
|
atkFormation = atkFormation,
|
|
defFormation = defFormation
|
|
}
|
|
ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.ARENA, params, function ()
|
|
UIManager:closeAllUI()
|
|
ModuleManager.MaincityManager:showMainCityUI()
|
|
self:showArenaUI()
|
|
end)
|
|
|
|
--bi上报
|
|
LocalData:recordTodayArenaBattle()
|
|
BIReport:postArenaConsume(DataManager.ArenaData:getGradingId(), LocalData:getTodayArenaBattleCount())
|
|
end
|
|
end
|
|
|
|
-- 结算
|
|
function ArenaManager:reqSettlement(win, battleReport, taskProgress)
|
|
local parmas = {
|
|
win = win,
|
|
season = DataManager.ArenaData:getSeason(),
|
|
task_stat = taskProgress,
|
|
battleReport = battleReport,
|
|
}
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPChallengeSettlementReq, parmas, self.rspSettlement, BIReport.ITEM_GET_TYPE.ARENA_SETTLEMENT)
|
|
end
|
|
|
|
function ArenaManager:rspSettlement(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
local reqData = result.reqData
|
|
|
|
DataManager.ArenaData:onBattleResultReceived(result.score, result.settlement, result)
|
|
DataManager.ArenaData:initGiftInfo(result.act_arena_gift)
|
|
local checkCount = 0
|
|
if result.settlement.win then
|
|
checkCount = result.total_win_count
|
|
else
|
|
checkCount = result.total_lose_count
|
|
end
|
|
-- 展示结算界面
|
|
ModuleManager.BattleManager:showArenaBattleResultUI(result.settlement, result.rewards, checkCount)
|
|
self:checkSeasonChange()
|
|
|
|
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
|
|
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_ARENA_CHALLENGE)
|
|
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_BATTLE_SETTLEMENT, result.settlement.win)
|
|
|
|
--bi上报
|
|
local winRate = result.total_win_count / (result.total_win_count + result.total_lose_count)
|
|
BIReport:postArenaSettlement(DataManager.ArenaData:getGradingId(), reqData.battleReport.round, winRate, result.settlement.win)
|
|
end
|
|
end
|
|
|
|
-- 战报
|
|
function ArenaManager:reqRecord()
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPRecordHistoryReq, {}, self.rspRecord, nil)
|
|
end
|
|
|
|
function ArenaManager:rspRecord(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
DataManager.ArenaData:onRecentBattleReceived(result.history)
|
|
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_RECORD_SUCCESS)
|
|
end
|
|
end
|
|
|
|
-- 排行榜
|
|
function ArenaManager:reqRank()
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPRankReq, {}, self.rspRank, nil)
|
|
end
|
|
|
|
function ArenaManager:rspRank(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
DataManager.ArenaData:onRankDataReceived(result.rank, result.top100.info)
|
|
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_RANK_SUCCESS)
|
|
end
|
|
end
|
|
|
|
-- 排行榜玩家编队信息
|
|
function ArenaManager:reqRankHeroes(id)
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPRankHeroesReq, {rid = id}, self.rspRankHeroes, nil)
|
|
end
|
|
|
|
function ArenaManager:rspRankHeroes(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
DataManager.ArenaData:onRankFormationReceived(result.reqData.rid, result)
|
|
end
|
|
end
|
|
|
|
-- 领取上赛季奖励
|
|
function ArenaManager:reqLastSeasonReward()
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPSeasonRewardReq, {}, self.rspLastSeasonReward, BIReport.ITEM_GET_TYPE.ARENA_REWARD)
|
|
end
|
|
|
|
function ArenaManager:rspLastSeasonReward(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
DataManager.ArenaData:onLastSeasonRewardReceived()
|
|
GFunc.showRewardBox(result.rewards)
|
|
end
|
|
end
|
|
|
|
-- 更新赛季信息
|
|
function ArenaManager:reqArenaInfo(showUI)
|
|
if not DataManager.ArenaData:isOpen() then
|
|
return
|
|
end
|
|
self.isResetting = true
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPInfoReq, {showUI = showUI}, self.rspArenaInfo, nil)
|
|
end
|
|
|
|
function ArenaManager:rspArenaInfo(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
self.isResetting = false
|
|
DataManager.ArenaData:init(result.arena_info)
|
|
if result.reqData.showUI then
|
|
self:showArenaUI()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 结束匹配cd
|
|
function ArenaManager:reqOverCD(isAd)
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPOverCDReq, {ad = isAd}, self.rspOverCD, BIReport.ITEM_GET_TYPE.ARENA_REMATCH_CD)
|
|
end
|
|
|
|
function ArenaManager:rspOverCD(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
DataManager.ArenaData:onOverFreeRematchCD(result.reqData.ad)
|
|
self:reqMatch()
|
|
end
|
|
end
|
|
|
|
-- 领取广告宝箱
|
|
function ArenaManager:reqAdBoxReward(isWin)
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPSettlementADRewardReq, {win = isWin}, self.rspAdBoxReward, BIReport.ITEM_GET_TYPE.ARENA_AD_BOX_REWARD)
|
|
end
|
|
|
|
function ArenaManager:rspAdBoxReward(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
self.willShowAdBoxState = nil
|
|
local idx = result.reqData.win and 2 or 1
|
|
-- ModuleManager.ShopManager:showBoxOpenUI({type = GConst.ShopConst.BOX_REWARD_TYPE.ARENA_AD_BOX, params = idx, rewards = result.rewards})
|
|
if result.rewards then
|
|
GFunc.showRewardBox(result.rewards)
|
|
end
|
|
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_AD_BOX_SUCCESS)
|
|
end
|
|
end
|
|
|
|
function ArenaManager:showGiftPopUI(showType)
|
|
UIManager:showUI("app/ui/arena/arena_pop_gift_ui", {showType = showType})
|
|
end
|
|
|
|
-- 领取段位奖励
|
|
function ArenaManager:reqGradingReward(id)
|
|
local getIds = {}
|
|
table.insert(getIds, id)
|
|
self:sendMessage(ProtoMsgType.FromMsgEnum.PVPStageRewardReq, {ids = getIds}, self.rspGradingReward, BIReport.ITEM_GET_TYPE.ARENA_GRADING_REWARD)
|
|
end
|
|
|
|
function ArenaManager:rspGradingReward(result)
|
|
if result.err_code == GConst.ERROR_STR.SUCCESS then
|
|
DataManager.ArenaData:onGradingRewardReceived(result.reqData.ids)
|
|
GFunc.showRewardBox(result.rewards)
|
|
end
|
|
end
|
|
|
|
return ArenaManager |