| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817 |
- local ArenaData = class("ArenaData",require("DataBase"))
- local PlayerRankData = require("Rank/PlayerRankData")
- local CreateActorSystem = require("CreateActorSystem")
- function ArenaData:ctor()
- self.winRate = 0
- self.winCount = 0 --胜的次数
- self.totalCount = 0 --总战斗次数
- self.winStreakCount = 0 --连胜次数
- self.failStreakCount = 0 --连败次数
- self.lastDanScore = 0 --上次段位积分
- self.danScore = 0 --当前段位积分
- self.zoneId = 1
- self.dan = 0 --当前段位
- self.danIcon = "" --当前段位ICON
- self.danName = "" --当前段位名字
- self.danReward = nil --当前段位奖励
- self.winReward = nil --胜利奖励
- self.failReward = nil --失败奖励
- self.nextDanScore = 0 --下个段位需要的积分
- self.nextDanName = "" --下一段位名字
- self.nextDanIcon = "" --下一段位icon
- self.nextDanReward = nil --下一段位奖励
- self.curSeasonId = 0 --当前赛季id 0是表示赛季为开始,1表示处于赛季中
- self.inSeason = false --是否处于赛季中
- self.leftSeasonSeconds = 0 --本赛季剩余时长/距离下赛季开始时长 [s]
- self.curSeasonEndTime = 0 --当前赛季结束时间
- self.nextSeasonBeginTime = nil --下赛季开始时间
- self.leftTimes = 0 --今日剩余次数
- self.leftRewardTimes = 0 --今日剩下领取奖励次数
- self.leftBuyTimes = 0 --今日剩余可买次数
- self.battleActorIds = nil --上阵角色
- self.actorTotalFightPower = 0 --上阵玩家总战斗力
- self.serverBattleActorIds = nil --服务器保存的上阵角色ID
- self.curDanRankReward = nil --当前段位的排名奖励
- self.curSeasonRank = 0 --当前赛季排名
- self.lastSeasonRank = 0 --上次赛季排名
- self.curSeasonRankReqIdx = 1 --当前赛季排名请求索引
- self.lastSeasonRankReqIdx = 1 --上次赛季排名请求索引
- self.curSeasonRankList = nil --当前赛季排名列表
- self.lastSeasonRankList = nil --上次赛季排名列表
- self.minTopScore = 0
- self.curShowRewardItemId = 0
- self.battleSceneName = "scenes_test_pvp"
- self.battleEndCondList = nil
- end
- function ArenaData:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_NTF,self.OnArenaNtf,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_CHANGE_NTF,self.OnArenaChangeNtf,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_BUY_COUNT_ACK,self.OnArenaBuyCountAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_RANK_LIST_ACK,self.OnArenaRankListAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_MATCH_ACK,self.OnArenaMatchAck,self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_RESULT_ACK,self.OnArenaResultAck,self)
- end
- function ArenaData:Clear()
- self.danReward = nil
- self.winReward = nil
- self.failReward = nil
- self.battleActorIds = nil
- self.serverBattleActorIds = nil
- self.curDanRankReward = nil
- self.curSeasonRankList = nil
- self.lastSeasonRankList = nil
- self.battleEndCondList = nil
- end
- function ArenaData:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- function ArenaData:UnRegisterNetEvents()
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_NTF)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_CHANGE_NTF)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_BUY_COUNT_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_RANK_LIST_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_MATCH_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_RESULT_ACK)
- end
- function ArenaData:InitArenaData(data)
- if data == nil then
- LogError("服务器发送数据为空")
- return
- end
- self.winCount = data.win_count
- self.totalCount = data.total_count
- self.danScore = data.score
- self.leftTimes = data.challenge_count
- self.leftRewardTimes = data.reward_count
- self.leftBuyTimes = data.buy_count
- self.curSeasonId = data.season_id
- self.curSeasonEndTime = data.season_end_time + 1
- self.nextSeasonBeginTime = data.next_season_start_time + 1
- self.minTopScore = data.minTopScore
- self.lastDanScore = self.danScore
- self.actorTotalFightPower = 0
- if data.self_hero_list~= nil and #data.self_hero_list > 0 then
- self.serverBattleActorIds = data.self_hero_list
- self:SetBattleActorIds(data.self_hero_list)
- else
- self:ApplyNormalTeam()
- end
- self:UpdateWinRate()
- self:UpdateDan()
- self:UpdateSeasonInfo()
- end
- function ArenaData:ChangeArenaData(data)
- if data == nil then
- return
- end
- -- LogError(Inspect(data))
- if data.challenge_count ~= nil then
- self.leftTimes = data.challenge_count
- if self.leftTimes <= 0 then
- self.leftTimes = 0
- end
- end
- if data.reward_count ~= nil then
- self.leftRewardTimes = data.reward_count
- end
- if data.buy_count ~= nil then
- self.leftBuyTimes = data.buy_count
- end
- if data.win_count ~= nil then
- self.winCount = data.win_count
- end
- if data.total_count ~= nil then
- self.totalCount = data.total_count
- end
- if data.score ~= nil then
- self.lastDanScore = self.danScore
- self.danScore = data.score
- end
- if data.rank_idx ~= nil then
- self.curSeasonRank = data.rank_idx
- end
- if data.win_streak_count ~= nil then
- self.winStreakCount = data.win_streak_count --连胜次数
- end
- if data.fail_streak_count ~= nil then
- self.failStreakCount = data.fail_streak_count --连败次数
- end
- if data.season_id ~= nil then
- self.curSeasonId = data.season_id
- self:UpdateSeasonInfo()
- end
- if data.minTopScore ~= nil then
- self.minTopScore = data.minTopScore
- end
- self:UpdateWinRate()
- self:UpdateDan()
- end
- function ArenaData:UpdateWinRate()
- if self.totalCount == 0 then
- self.winRate = 0
- else
- self.winRate = self.winCount / self.totalCount
- end
- end
- function ArenaData:UpdateDan()
- local levelCfg, nextKey = CommonUtil.GetCurDunData(self.danScore)
- self.dan = levelCfg.ArenaLevelId
- self.danIcon = levelCfg.LevelIcon
- self.danName = levelCfg.ArenaLevelName
- self.danReward = levelCfg.ArenaLevelReward
- self.winReward = levelCfg.WinReward
- self.failReward = levelCfg.FailReward
- self.nextDanScore = levelCfg.ArenaLevelScore
- if nextKey > 0 then
- local cfg = ManagerContainer.CfgMgr:GetArenaLevelById(nextKey)
- if cfg ~= nil then
- --self.nextDanScore = cfg.ArenaLevelScore
- self.nextDanReward = cfg.ArenaLevelReward
- self.nextDanName = cfg.ArenaLevelName
- self.nextDanIcon = cfg.LevelIcon --下一段位icon
- else
- --self.nextDanScore = levelCfg.ArenaLevelScore
- self.nextDanReward = levelCfg.ArenaLevelReward
- self.nextDanName = levelCfg.ArenaLevelName
- self.nextDanIcon = levelCfg.LevelIcon
- end
- end
- --LogError(" dan = " .. self.dan .. " danScore = " .. self.danScore .. " danName = " .. self.danName .. " nextDanScore = ".. self.nextDanScore)
- end
- function ArenaData:GetCurDanInfo()
- if nil ~= self.self_rank_score then
- local levelCfg, nextKey = CommonUtil.GetCurDunData(self.self_rank_score)
- return levelCfg.LevelIcon,levelCfg.ArenaLevelName
- else
- return self.danIcon, self.danName
- end
- end
- function ArenaData:GetLastCurDanInfo()
- if nil ~= self.self_lastrank_score then
- local levelCfg, nextKey = CommonUtil.GetCurDunData(self.self_lastrank_score)
- return levelCfg.LevelIcon,levelCfg.ArenaLevelName
- else
- return self.danIcon, self.danName
- end
- end
- function ArenaData:GetCurDanInfoByRank(rankType)
- if rankType == 0 and self:InSeason() then --在赛季
- return self:GetCurDanInfo()
- elseif rankType == 0 then--不在赛季
- return self.danIcon, self.danName
- elseif rankType == 1 then--上个赛季
- return self:GetLastCurDanInfo()
- end
- end
- --function ArenaData:GetCurDanInfo()
- -- return self.danIcon, self.danName
- --end
- function ArenaData:GetCurDanScore()
- return self.danScore
- end
- function ArenaData:GetCurShowRewardItemId()
- return self.curShowRewardItemId
- end
- function ArenaData:UpdateSeasonInfo()
- if self.curSeasonId == nil then
- return
- end
-
- local rewardDatas = ManagerContainer.CfgMgr:GetArenaRewardDatas()
- -- LogError("-----UpdateSeasonInfo " .. #rewardDatas)
- self.curDanRankReward = {}
- for i= 1, #rewardDatas do
- local rewardCfg = rewardDatas[i]
- if rewardCfg~= nil and rewardCfg.Zone == self.zoneId then
- local item = {}
- item.rankId = rewardCfg.RankId
- if rewardCfg.ArenaRank~= nil then
- if #rewardCfg.ArenaRank == 1 then
- item.minLevel = rewardCfg.ArenaRank[1]
- item.maxLevel = item.minLevel
- elseif #rewardCfg.ArenaRank == 2 then
- item.minLevel = rewardCfg.ArenaRank[1]
- item.maxLevel = rewardCfg.ArenaRank[2]
- end
- end
- local itemList = {}
- if rewardCfg.ArenaReward ~= nil then
- for i =1, #rewardCfg.ArenaReward do
- local rewardTbl = rewardCfg.ArenaReward[i]
- itemList[#itemList+1] = rewardTbl
- end
- end
- item.itemList = itemList
- self.curDanRankReward[#self.curDanRankReward+1] = item
- if rewardCfg.ShowReward > 0 then
- self.curShowRewardItemId = rewardCfg.ShowReward
- end
- end
- end
- -- self.inSeason = LuaBattleBridge.InSeason(self.seasonBeginTime,self.seasonEndTime)
- self.inSeason = self.curSeasonId > 0
- if self.inSeason then
- self.leftSeasonSeconds =LuaBattleBridge.CaclLeftTimeWitTimeStamp(tostring(self.curSeasonEndTime))
- else
- if self.nextSeasonBeginTime ~= nil then
- self.leftSeasonSeconds = LuaBattleBridge.CaclLeftTimeWitTimeStamp(tostring(self.nextSeasonBeginTime))
- else
- self.leftSeasonSeconds = 2592001
- end
- end
- self:CleanSeasonTimer()
- if self.leftSeasonSeconds > 0 then
- self.leftTimeTimer = ManagerContainer.LuaTimerMgr:AddTimer(1000, self.leftSeasonSeconds, self, self.OnRefreshSeasonTime, nil)
- end
- -- LogError("self.seasonBeginTime = " .. self.seasonBeginTime .. " self.seasonEndTime = " .. self.seasonEndTime .. " self.inSeason = " .. tostring(self.inSeason) .. " self.leftSeasonSeconds = " ..self.leftSeasonSeconds)
- end
- function ArenaData:InSeason()
- return self.inSeason
- end
- function ArenaData:GetLeftTime()
- return self.leftSeasonSeconds
- end
- function ArenaData:TimeOver()
- --self.curSeasonId = nil
- if self.inSeason then--赛季结束
- self.inSeason = false
- else--赛季开始
- self.inSeason = true
- end
- --刷新下赛季时间
- --LogError("Send Arena Req.........")
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_REQ, {})
- --刷新赛季结果
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Season_End)
- end
- function ArenaData:OnRefreshSeasonTime()
- self.leftSeasonSeconds = self.leftSeasonSeconds -1
- if tonumber(self.leftSeasonSeconds) == 0 then
- self:TimeOver()
- self:CleanSeasonTimer()
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Season_LeftTime,self.leftSeasonSeconds)
- end
- function ArenaData:CleanSeasonTimer()
- if self.leftTimeTimer ~= nil then
- ManagerContainer.LuaTimerMgr:RemoveTimer(self.leftTimeTimer)
- self.leftTimeTimer = nil
- end
- end
- function ArenaData:GetDanRankReward()
- return self.curDanRankReward
- end
- function ArenaData:ApplyNormalTeam()
- self.battleActorIds = {};
- local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
- for i=1,#teamData do
- self:OnBattle(teamData[i].uid)
- end
- end
- function ArenaData:SetBattleActorIds(actorIds)
- if actorIds == nil then
- return
- end
- self.battleActorIds = {}
- for i = 1, #actorIds do
- self.battleActorIds[#self.battleActorIds+1] = actorIds[i]
- local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(actorIds[i])
- self.actorTotalFightPower = self.actorTotalFightPower + fightPower
- end
- end
- function ArenaData:GetWinRate()
- return self.winRate
- end
- function ArenaData:GetLeftTimes()
- return self.leftTimes
- end
- function ArenaData:GetLeftRewardTimes()
- return self.leftRewardTimes
- end
- function ArenaData:GetLeftBuyTimes()
- return self.leftBuyTimes
- end
- function ArenaData:GetTeamActorIds()
- return self.battleActorIds
- end
- function ArenaData:GetTeamFighterPower()
- return self.actorTotalFightPower
- end
- function ArenaData:OnBattle(actorId)
- if self.battleActorIds == nil then
- self.battleActorIds = {}
- end
- if self:CurMemberCnt() >= 4 then
- return
- end
- if self:IsInBattleTeam(actorId) then
- return
- end
- self.battleActorIds[#self.battleActorIds + 1] = actorId
- local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(actorId)
- self.actorTotalFightPower = self.actorTotalFightPower + fightPower
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Team_FightPower)
- end
- function ArenaData:OffBattle(actorId)
- if self.battleActorIds == nil then
- return
- end
- local removed = false
- for i=1, #self.battleActorIds do
- if self.battleActorIds[i] == actorId then
- local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(actorId)
- self.actorTotalFightPower = self.actorTotalFightPower - fightPower
- table.remove(self.battleActorIds, i)
- removed = true;
- return
- end
- end
- if removed then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Team_FightPower)
- end
- end
- function ArenaData:ReplaceBattleActorId(orgUid,newUid)
- if self.battleActorIds == nil then
- return
- end
- local changed = false
- for i=1, #self.battleActorIds do
- if self.battleActorIds[i] == orgUid then
- local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(orgUid)
- self.actorTotalFightPower = self.actorTotalFightPower - fightPower
- self.battleActorIds[i] = newUid
- fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(newUid)
- self.actorTotalFightPower = self.actorTotalFightPower + fightPower
- changed = true
- break;
- end
- end
- if changed then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Team_FightPower)
- end
- end
- function ArenaData:IsInBattleTeam(actorId)
- if self.battleActorIds == nil then
- return false
- end
- for i = 1, #self.battleActorIds do
- local memberId = self.battleActorIds[i]
- if tostring(memberId) == tostring(actorId) then
- return true
- end
- end
- return false
- end
- function ArenaData:CurMemberCnt()
- if self.battleActorIds == nil then
- return 0
- end
- return #self.battleActorIds
- end
- function ArenaData:GetSeasonRanList(rankType)
- if rankType == 0 and self.inSeason then
- return self.curSeasonRankList
- elseif rankType == 1 then
- return self.lastSeasonRankList
- end
- return nil
- end
- function ArenaData:GetSelfSeasonScore(rankType)
- if rankType == 0 and self.inSeason then
- return self.danScore
- elseif rankType == 1 then
- return self.self_lastrank_score or 0
- end
- return 0
- end
- function ArenaData:GetRank(rankType)
- if rankType == 0 then
- -- LogError("self.minTopScore = " .. self.minTopScore .. " self.curSeasonRank = " .. self.curSeasonRank)
- if self.danScore < self.minTopScore and self:InSeason() == false then
- return 0
- else
- return self.curSeasonRank
- end
- else
- return self.lastSeasonRank
- end
- end
- function ArenaData:SendArenaDataReq(fromUIId, backUIId)
- self.fromUIId = fromUIId
- self.backUIId = backUIId
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_REQ, {})
- end
- function ArenaData:OnArenaNtf(data)
- --LogError("--------------------OnArenaNtf----------------" .. Inspect(data))
- self:InitArenaData(data)
- if self.fromUIId == Enum.UIPageName.UISeason or self.fromUIId == Enum.UIPageName.UIRoleMessage then
- --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.SEASON_SELECTION_NTF)
- elseif self.fromUIId == Enum.UIPageName.UIDojo2D then
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojo2D,nil, self.backUIId or Enum.UIPageName.UIMainCity1)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UI_CLOSE_TASK_PAGE)
- end
- self.fromUIId = nil
- self.backUIId = nil
- end
- function ArenaData:OnArenaChangeNtf(data)
- --LogError("--------------------OnArenaChangeNtf----------------"..Inspect(data))
- self:ChangeArenaData(data)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Data_Change)
- end
- function ArenaData:SendBuyTimesReq(cnt)
- if cnt == 0 then
- return
- end
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_BUY_COUNT_REQ, {buy_count=cnt})
- end
- function ArenaData:OnArenaBuyCountAck(data)
- -- if data.error ~= nil and data.error > 0 then
- -- LogError("OnArenaBuyCountAck " .. data.error)
- -- end
- end
- function ArenaData:SendArenaRankReq(rankType,startIdx)
- if self.isRequestingRank == true then
- return
- end
- -- 上赛季
- if rankType == 1 then
- if self.lastSeasonRankReqIdx >= 10 then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Season_Rank_List,rankType)
- return
- end
- end
- self.isRequestingRank = true
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_RANK_LIST_REQ, {rank_type = rankType, start_idx = startIdx})
- self.cancelTimerId = ManagerContainer.LuaTimerMgr:AddTimer(2000, 1, self, self.CancelRequestingRankStatus, nil)
- end
- function ArenaData:OnArenaRankListAck(data)
- --LogError("------OnArenaRankListAck--" .. Inspect(data))
- self.isRequestingRank = false
- if self.cancelTimerId ~= nil then
- ManagerContainer.LuaTimerMgr:RemoveTimer(self.cancelTimerId);
- self.cancelTimerId = nil
- end
- if data.error ~= nil and data.error > 0 then
- return
- end
- if data.rank_type == 0 then
- self:SaveCurSeasonRankData(data.rank_list,data.self_rank,data.start_idx,data.self_rank_score)
- elseif data.rank_type == 1 then
- self:SaveLastSeasonRankData(data.rank_list,data.self_rank,data.start_idx,data.self_rank_score)
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Season_Rank_List,data.rank_type)
- end
- function ArenaData:SaveCurSeasonRankData(rank_list,self_rank,start_idx,self_rank_score)
- self.curSeasonRankReqIdx = start_idx
-
- if self_rank ~= nil then
- self.curSeasonRank = self_rank
- end
- if self_rank_score ~= nil then
- self.self_rank_score = self_rank_score
- end
- if rank_list ~= nil then
- if self.curSeasonRankList == nil then
- self.curSeasonRankList = {}
- end
- for i=1, #rank_list do
- local rankData = rank_list[i]
- local playerRank = PlayerRankData:new(rankData.rank,rankData.brief_info,rankData.score);
- local idx = (self.curSeasonRankReqIdx-1)*10+i
- self.curSeasonRankList[idx] = playerRank
- end
- end
- end
- function ArenaData:SaveLastSeasonRankData(rank_list,self_rank,start_idx,self_rank_score)
- self.lastSeasonRankReqIdx = start_idx
- if self_rank ~= nil then
- self.lastSeasonRank = self_rank
- end
- if self_rank_score ~= nil then
- self.self_lastrank_score = self_rank_score
- end
- if rank_list ~= nil then
- if self.lastSeasonRankList == nil then
- self.lastSeasonRankList = {}
- end
- for i=1, #rank_list do
- local rankData = rank_list[i]
- local playerRank = PlayerRankData:new(rankData.rank,rankData.brief_info,rankData.score);
- local idx = (self.lastSeasonRankReqIdx-1)*10+i
- self.lastSeasonRankList[idx] = playerRank
- end
- end
- end
- function ArenaData:CancelRequestingRankStatus()
- self.isRequestingRank = false
- self.cancelTimerId = nil
- end
- function ArenaData:SetReward(zeny,cruise)
- self.zeny = zeny
- self.cruise = cruise
- end
- function ArenaData:GetEnemyMembers()
- return self.enemyActors
- end
- function ArenaData:GetOurMembers()
- return self.ourMembers
- end
- function ArenaData:GetBattleSceneName()
- return self.battleSceneName
- end
- function ArenaData:GetBattleEndConds()
- return self.battleEndCondList
- end
- function ArenaData:GetMatchFighterName()
- return self.matchFighterName
- end
- -- 发送匹配请求
- function ArenaData:SendMatchReq(battleActorIds)
- if ManagerContainer.DataMgr.ArenaData:CurMemberCnt() <= 0 then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("至少需要一名角色参战!")
- return
- end
- if ManagerContainer.DataMgr.ArenaData:GetLeftTimes() <= 0 then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("今日剩余次数为0,请明天再来!")
- return
- end
-
- self.matchFailed = false
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_MATCH_REQ, {hero_list=battleActorIds})
- end
- function ArenaData:OnArenaMatchAck(data)
- if data.error ~= 0 then
- self.enemyActors = {}
- self.matchFailed = true
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("竞技场匹配失败!")
- return
- end
- LogHRWarning(Inspect(data))
- -- repress_skill_pvp_val
- ManagerContainer.LuaGameMgr:RefreshTeamData()
- local actorSystem = CreateActorSystem:new()
- actorSystem:ParseFightRoleInfo(data.fight_info)
- LogHRWarning(Inspect(actorSystem.userData))
- if not actorSystem.userData.inited then
- self.enemyActors = {}
- self.matchFailed = true
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("竞技场匹配失败!")
- return
- end
- self.matchFighterName = actorSystem:GetUserNickname()
- self.enemyActors = {}
- if actorSystem:GetPlayerActorParam()~= nil then
- self.enemyActors[#self.enemyActors+1] = actorSystem:GetPlayerActorParam()
- end
- local fellowActors = actorSystem:GetFellowActorParam()
- if fellowActors~= nil then
- for k,actor in pairs(fellowActors) do
- self.enemyActors[#self.enemyActors +1] = actor
- end
- end
- local selfMaskDatas = nil
- local enemyPvPVal = actorSystem:GetSkillPvPVal()
- local OurPvPVal = ManagerContainer.DataMgr.UserData:GetCurrRoleSkillPress()
- local IsPresspoint,BuffId = ManagerContainer.CfgMgr:GetPresspointPvPCfg(OurPvPVal,enemyPvPVal)
- if BuffId > -1 then
- --设置压制ID
- --LogError("添加压制markid"..tostring(BuffId))
- selfMaskDatas = {}
- selfMaskDatas[1] = GvGMark.New(BuffId, 1)
- end
- if self.battleActorIds~= nil then
- self.ourMembers = {}
- for i = 1, #self.battleActorIds do
- local actor = ManagerContainer.LuaActorDataMgr:GetActorsById(self.battleActorIds[i])
- if actor ~= nil then
- self.ourMembers[#self.ourMembers+1] = actor
- end
- end
- end
- self:InitEndBattleCondition()
- ManagerContainer.LuaGameMgr:EnterDojo(self:GetBattleSceneName(), self:GetOurMembers(), self:GetEnemyMembers(), selfMaskDatas,IsPresspoint,OurPvPVal+enemyPvPVal,self:GetBattleEndConds())
- end
- function ArenaData:InitEndBattleCondition()
- if self.battleEndCondList ~= nil then
- return
- end
- self.battleEndCondList = System.Array.CreateInstance(Enum.TypeInfo.BattleEndCondition, 1)
- self.battleEndCondList[0] = BattleEndCondition.New(Constants.EndBattle_By_UndeadCount,Constants.ResultType_Normal)
- end
- -- //挑战结果(失败/成功)//0失败,1成功
- function ArenaData:SendBattleResultReq(result)
- self.result = result
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_RESULT_REQ, {fight_result=result})
- end
- function ArenaData:OnArenaResultAck(data)
- -- LogError("----OnArenaResultAck---" .. Inspect(data))
- local zeny = 0
- local cruise = 0
- if data.reward_list ~= nil then
- for i =1, #data.reward_list do
- local item = data.reward_list[i];
- if item.key == Enum.ItemType.Coin then
- zeny = item.value
- elseif item.key == Enum.ItemType.HeroSpirit then
- cruise = item.value
- end
- end
- end
- self:SetReward(zeny,cruise)
-
- if self.result == 1 then
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoBattleWin,{data.old_score,data.cur_score})
- else
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoBattleFail,{data.old_score,data.cur_score})
- end
- ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.Dojo)
- end
- function ArenaData:BattleEnd(result)
- self:SendBattleResultReq(result)
- self.enemyActors = nil
- self.ourMembers = nil
- end
- return ArenaData
|