local ArenaManager = class("ArenaManager", BaseModule) -- 赛季结算 function ArenaManager:onSeasonSettlement() EventManager.dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_SETTLEMENT) end -- 赛季改变 function ArenaManager:onSeasonChanged() EventManager.dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_END) if not self.isResetting then return end DataManager.ArenaData:onSeasonChanged() self:reqArenaInfo() 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 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 = result.array_heroes local defFormation if result.reqData and result.reqData.defInfo then defFormation = result.reqData.defInfo.array_heroes else return end local params = { defInfo = result.reqData.defInfo, atkFormation = {}, defFormation = {} } for _, heroInfo in ipairs(atkFormation) do if heroInfo.id > 0 then local heroEntity = DataManager.HeroData:getEntity(heroInfo) if heroEntity then params.atkFormation[heroEntity:getMatchType()] = heroEntity end end end for _, heroInfo in ipairs(defFormation) do if heroInfo.id > 0 then local heroEntity = DataManager.HeroData:getEntity(heroInfo) if heroEntity then params.defFormation[heroEntity:getMatchType()] = heroEntity end end end ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.ARENA, params) end end -- 结算 function ArenaManager:reqSettlement(win) local parmas = { win = win, season = DataManager.ArenaData:getSeason() } 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 DataManager.ArenaData:onBattleResultReceived(result.settlement) 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) 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) 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) 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.array_heroes) 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() if not DataManager.ArenaData:isOpen() then return end self.isResetting = true self:sendMessage(ProtoMsgType.FromMsgEnum.PVPInfoReq, {}, {}, 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) 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:showGiftPopUI() UIManager:showUI("app/ui/arena/arena_pop_gift_ui") end return ArenaManager