c1_lua/lua/app/module/arena/arena_manager.lua
2023-07-06 18:30:17 +08:00

235 lines
7.7 KiB
Lua

local ArenaManager = class("ArenaManager", BaseModule)
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
-- 匹配
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)
--bi上报
LocalData:recordTodayArenaBattle()
BIReport:postArenaConsume(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.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)
self:checkSeasonChange()
ModuleManager.TaskManager:addFightTaskProgress(reqData.task_stat)
--bi上报
local winRate = result.total_win_count / (result.total_win_count + result.total_lose_count)
BIReport:postArenaSettlement(DataManager.ArenaData:getGradingId(), reqData.battleReport.round, winRate)
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.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: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
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})
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_AD_BOX_SUCCESS)
end
end
function ArenaManager:showGiftPopUI()
UIManager:showUI("app/ui/arena/arena_pop_gift_ui")
end
return ArenaManager