ArenaData.lua 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817
  1. local ArenaData = class("ArenaData",require("DataBase"))
  2. local PlayerRankData = require("Rank/PlayerRankData")
  3. local CreateActorSystem = require("CreateActorSystem")
  4. function ArenaData:ctor()
  5. self.winRate = 0
  6. self.winCount = 0 --胜的次数
  7. self.totalCount = 0 --总战斗次数
  8. self.winStreakCount = 0 --连胜次数
  9. self.failStreakCount = 0 --连败次数
  10. self.lastDanScore = 0 --上次段位积分
  11. self.danScore = 0 --当前段位积分
  12. self.zoneId = 1
  13. self.dan = 0 --当前段位
  14. self.danIcon = "" --当前段位ICON
  15. self.danName = "" --当前段位名字
  16. self.danReward = nil --当前段位奖励
  17. self.winReward = nil --胜利奖励
  18. self.failReward = nil --失败奖励
  19. self.nextDanScore = 0 --下个段位需要的积分
  20. self.nextDanName = "" --下一段位名字
  21. self.nextDanIcon = "" --下一段位icon
  22. self.nextDanReward = nil --下一段位奖励
  23. self.curSeasonId = 0 --当前赛季id 0是表示赛季为开始,1表示处于赛季中
  24. self.inSeason = false --是否处于赛季中
  25. self.leftSeasonSeconds = 0 --本赛季剩余时长/距离下赛季开始时长 [s]
  26. self.curSeasonEndTime = 0 --当前赛季结束时间
  27. self.nextSeasonBeginTime = nil --下赛季开始时间
  28. self.leftTimes = 0 --今日剩余次数
  29. self.leftRewardTimes = 0 --今日剩下领取奖励次数
  30. self.leftBuyTimes = 0 --今日剩余可买次数
  31. self.battleActorIds = nil --上阵角色
  32. self.actorTotalFightPower = 0 --上阵玩家总战斗力
  33. self.serverBattleActorIds = nil --服务器保存的上阵角色ID
  34. self.curDanRankReward = nil --当前段位的排名奖励
  35. self.curSeasonRank = 0 --当前赛季排名
  36. self.lastSeasonRank = 0 --上次赛季排名
  37. self.curSeasonRankReqIdx = 1 --当前赛季排名请求索引
  38. self.lastSeasonRankReqIdx = 1 --上次赛季排名请求索引
  39. self.curSeasonRankList = nil --当前赛季排名列表
  40. self.lastSeasonRankList = nil --上次赛季排名列表
  41. self.minTopScore = 0
  42. self.curShowRewardItemId = 0
  43. self.battleSceneName = "scenes_test_pvp"
  44. self.battleEndCondList = nil
  45. end
  46. function ArenaData:RegisterNetEvents()
  47. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_NTF,self.OnArenaNtf,self)
  48. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_CHANGE_NTF,self.OnArenaChangeNtf,self)
  49. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_BUY_COUNT_ACK,self.OnArenaBuyCountAck,self)
  50. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_RANK_LIST_ACK,self.OnArenaRankListAck,self)
  51. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_MATCH_ACK,self.OnArenaMatchAck,self)
  52. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ARENA_RESULT_ACK,self.OnArenaResultAck,self)
  53. end
  54. function ArenaData:Clear()
  55. self.danReward = nil
  56. self.winReward = nil
  57. self.failReward = nil
  58. self.battleActorIds = nil
  59. self.serverBattleActorIds = nil
  60. self.curDanRankReward = nil
  61. self.curSeasonRankList = nil
  62. self.lastSeasonRankList = nil
  63. self.battleEndCondList = nil
  64. end
  65. function ArenaData:Destroy()
  66. if self.Clear then
  67. self:Clear()
  68. end
  69. self:UnRegisterNetEvents()
  70. end
  71. function ArenaData:UnRegisterNetEvents()
  72. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_NTF)
  73. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_CHANGE_NTF)
  74. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_BUY_COUNT_ACK)
  75. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_RANK_LIST_ACK)
  76. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_MATCH_ACK)
  77. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ARENA_RESULT_ACK)
  78. end
  79. function ArenaData:InitArenaData(data)
  80. if data == nil then
  81. LogError("服务器发送数据为空")
  82. return
  83. end
  84. self.winCount = data.win_count
  85. self.totalCount = data.total_count
  86. self.danScore = data.score
  87. self.leftTimes = data.challenge_count
  88. self.leftRewardTimes = data.reward_count
  89. self.leftBuyTimes = data.buy_count
  90. self.curSeasonId = data.season_id
  91. self.curSeasonEndTime = data.season_end_time + 1
  92. self.nextSeasonBeginTime = data.next_season_start_time + 1
  93. self.minTopScore = data.minTopScore
  94. self.lastDanScore = self.danScore
  95. self.actorTotalFightPower = 0
  96. if data.self_hero_list~= nil and #data.self_hero_list > 0 then
  97. self.serverBattleActorIds = data.self_hero_list
  98. self:SetBattleActorIds(data.self_hero_list)
  99. else
  100. self:ApplyNormalTeam()
  101. end
  102. self:UpdateWinRate()
  103. self:UpdateDan()
  104. self:UpdateSeasonInfo()
  105. end
  106. function ArenaData:ChangeArenaData(data)
  107. if data == nil then
  108. return
  109. end
  110. -- LogError(Inspect(data))
  111. if data.challenge_count ~= nil then
  112. self.leftTimes = data.challenge_count
  113. if self.leftTimes <= 0 then
  114. self.leftTimes = 0
  115. end
  116. end
  117. if data.reward_count ~= nil then
  118. self.leftRewardTimes = data.reward_count
  119. end
  120. if data.buy_count ~= nil then
  121. self.leftBuyTimes = data.buy_count
  122. end
  123. if data.win_count ~= nil then
  124. self.winCount = data.win_count
  125. end
  126. if data.total_count ~= nil then
  127. self.totalCount = data.total_count
  128. end
  129. if data.score ~= nil then
  130. self.lastDanScore = self.danScore
  131. self.danScore = data.score
  132. end
  133. if data.rank_idx ~= nil then
  134. self.curSeasonRank = data.rank_idx
  135. end
  136. if data.win_streak_count ~= nil then
  137. self.winStreakCount = data.win_streak_count --连胜次数
  138. end
  139. if data.fail_streak_count ~= nil then
  140. self.failStreakCount = data.fail_streak_count --连败次数
  141. end
  142. if data.season_id ~= nil then
  143. self.curSeasonId = data.season_id
  144. self:UpdateSeasonInfo()
  145. end
  146. if data.minTopScore ~= nil then
  147. self.minTopScore = data.minTopScore
  148. end
  149. self:UpdateWinRate()
  150. self:UpdateDan()
  151. end
  152. function ArenaData:UpdateWinRate()
  153. if self.totalCount == 0 then
  154. self.winRate = 0
  155. else
  156. self.winRate = self.winCount / self.totalCount
  157. end
  158. end
  159. function ArenaData:UpdateDan()
  160. local levelCfg, nextKey = CommonUtil.GetCurDunData(self.danScore)
  161. self.dan = levelCfg.ArenaLevelId
  162. self.danIcon = levelCfg.LevelIcon
  163. self.danName = levelCfg.ArenaLevelName
  164. self.danReward = levelCfg.ArenaLevelReward
  165. self.winReward = levelCfg.WinReward
  166. self.failReward = levelCfg.FailReward
  167. self.nextDanScore = levelCfg.ArenaLevelScore
  168. if nextKey > 0 then
  169. local cfg = ManagerContainer.CfgMgr:GetArenaLevelById(nextKey)
  170. if cfg ~= nil then
  171. --self.nextDanScore = cfg.ArenaLevelScore
  172. self.nextDanReward = cfg.ArenaLevelReward
  173. self.nextDanName = cfg.ArenaLevelName
  174. self.nextDanIcon = cfg.LevelIcon --下一段位icon
  175. else
  176. --self.nextDanScore = levelCfg.ArenaLevelScore
  177. self.nextDanReward = levelCfg.ArenaLevelReward
  178. self.nextDanName = levelCfg.ArenaLevelName
  179. self.nextDanIcon = levelCfg.LevelIcon
  180. end
  181. end
  182. --LogError(" dan = " .. self.dan .. " danScore = " .. self.danScore .. " danName = " .. self.danName .. " nextDanScore = ".. self.nextDanScore)
  183. end
  184. function ArenaData:GetCurDanInfo()
  185. if nil ~= self.self_rank_score then
  186. local levelCfg, nextKey = CommonUtil.GetCurDunData(self.self_rank_score)
  187. return levelCfg.LevelIcon,levelCfg.ArenaLevelName
  188. else
  189. return self.danIcon, self.danName
  190. end
  191. end
  192. function ArenaData:GetLastCurDanInfo()
  193. if nil ~= self.self_lastrank_score then
  194. local levelCfg, nextKey = CommonUtil.GetCurDunData(self.self_lastrank_score)
  195. return levelCfg.LevelIcon,levelCfg.ArenaLevelName
  196. else
  197. return self.danIcon, self.danName
  198. end
  199. end
  200. function ArenaData:GetCurDanInfoByRank(rankType)
  201. if rankType == 0 and self:InSeason() then --在赛季
  202. return self:GetCurDanInfo()
  203. elseif rankType == 0 then--不在赛季
  204. return self.danIcon, self.danName
  205. elseif rankType == 1 then--上个赛季
  206. return self:GetLastCurDanInfo()
  207. end
  208. end
  209. --function ArenaData:GetCurDanInfo()
  210. -- return self.danIcon, self.danName
  211. --end
  212. function ArenaData:GetCurDanScore()
  213. return self.danScore
  214. end
  215. function ArenaData:GetCurShowRewardItemId()
  216. return self.curShowRewardItemId
  217. end
  218. function ArenaData:UpdateSeasonInfo()
  219. if self.curSeasonId == nil then
  220. return
  221. end
  222. local rewardDatas = ManagerContainer.CfgMgr:GetArenaRewardDatas()
  223. -- LogError("-----UpdateSeasonInfo " .. #rewardDatas)
  224. self.curDanRankReward = {}
  225. for i= 1, #rewardDatas do
  226. local rewardCfg = rewardDatas[i]
  227. if rewardCfg~= nil and rewardCfg.Zone == self.zoneId then
  228. local item = {}
  229. item.rankId = rewardCfg.RankId
  230. if rewardCfg.ArenaRank~= nil then
  231. if #rewardCfg.ArenaRank == 1 then
  232. item.minLevel = rewardCfg.ArenaRank[1]
  233. item.maxLevel = item.minLevel
  234. elseif #rewardCfg.ArenaRank == 2 then
  235. item.minLevel = rewardCfg.ArenaRank[1]
  236. item.maxLevel = rewardCfg.ArenaRank[2]
  237. end
  238. end
  239. local itemList = {}
  240. if rewardCfg.ArenaReward ~= nil then
  241. for i =1, #rewardCfg.ArenaReward do
  242. local rewardTbl = rewardCfg.ArenaReward[i]
  243. itemList[#itemList+1] = rewardTbl
  244. end
  245. end
  246. item.itemList = itemList
  247. self.curDanRankReward[#self.curDanRankReward+1] = item
  248. if rewardCfg.ShowReward > 0 then
  249. self.curShowRewardItemId = rewardCfg.ShowReward
  250. end
  251. end
  252. end
  253. -- self.inSeason = LuaBattleBridge.InSeason(self.seasonBeginTime,self.seasonEndTime)
  254. self.inSeason = self.curSeasonId > 0
  255. if self.inSeason then
  256. self.leftSeasonSeconds =LuaBattleBridge.CaclLeftTimeWitTimeStamp(tostring(self.curSeasonEndTime))
  257. else
  258. if self.nextSeasonBeginTime ~= nil then
  259. self.leftSeasonSeconds = LuaBattleBridge.CaclLeftTimeWitTimeStamp(tostring(self.nextSeasonBeginTime))
  260. else
  261. self.leftSeasonSeconds = 2592001
  262. end
  263. end
  264. self:CleanSeasonTimer()
  265. if self.leftSeasonSeconds > 0 then
  266. self.leftTimeTimer = ManagerContainer.LuaTimerMgr:AddTimer(1000, self.leftSeasonSeconds, self, self.OnRefreshSeasonTime, nil)
  267. end
  268. -- LogError("self.seasonBeginTime = " .. self.seasonBeginTime .. " self.seasonEndTime = " .. self.seasonEndTime .. " self.inSeason = " .. tostring(self.inSeason) .. " self.leftSeasonSeconds = " ..self.leftSeasonSeconds)
  269. end
  270. function ArenaData:InSeason()
  271. return self.inSeason
  272. end
  273. function ArenaData:GetLeftTime()
  274. return self.leftSeasonSeconds
  275. end
  276. function ArenaData:TimeOver()
  277. --self.curSeasonId = nil
  278. if self.inSeason then--赛季结束
  279. self.inSeason = false
  280. else--赛季开始
  281. self.inSeason = true
  282. end
  283. --刷新下赛季时间
  284. --LogError("Send Arena Req.........")
  285. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_REQ, {})
  286. --刷新赛季结果
  287. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Season_End)
  288. end
  289. function ArenaData:OnRefreshSeasonTime()
  290. self.leftSeasonSeconds = self.leftSeasonSeconds -1
  291. if tonumber(self.leftSeasonSeconds) == 0 then
  292. self:TimeOver()
  293. self:CleanSeasonTimer()
  294. end
  295. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Season_LeftTime,self.leftSeasonSeconds)
  296. end
  297. function ArenaData:CleanSeasonTimer()
  298. if self.leftTimeTimer ~= nil then
  299. ManagerContainer.LuaTimerMgr:RemoveTimer(self.leftTimeTimer)
  300. self.leftTimeTimer = nil
  301. end
  302. end
  303. function ArenaData:GetDanRankReward()
  304. return self.curDanRankReward
  305. end
  306. function ArenaData:ApplyNormalTeam()
  307. self.battleActorIds = {};
  308. local teamData = ManagerContainer.DataMgr.UserData:GetTeamData(true)
  309. for i=1,#teamData do
  310. self:OnBattle(teamData[i].uid)
  311. end
  312. end
  313. function ArenaData:SetBattleActorIds(actorIds)
  314. if actorIds == nil then
  315. return
  316. end
  317. self.battleActorIds = {}
  318. for i = 1, #actorIds do
  319. self.battleActorIds[#self.battleActorIds+1] = actorIds[i]
  320. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(actorIds[i])
  321. self.actorTotalFightPower = self.actorTotalFightPower + fightPower
  322. end
  323. end
  324. function ArenaData:GetWinRate()
  325. return self.winRate
  326. end
  327. function ArenaData:GetLeftTimes()
  328. return self.leftTimes
  329. end
  330. function ArenaData:GetLeftRewardTimes()
  331. return self.leftRewardTimes
  332. end
  333. function ArenaData:GetLeftBuyTimes()
  334. return self.leftBuyTimes
  335. end
  336. function ArenaData:GetTeamActorIds()
  337. return self.battleActorIds
  338. end
  339. function ArenaData:GetTeamFighterPower()
  340. return self.actorTotalFightPower
  341. end
  342. function ArenaData:OnBattle(actorId)
  343. if self.battleActorIds == nil then
  344. self.battleActorIds = {}
  345. end
  346. if self:CurMemberCnt() >= 4 then
  347. return
  348. end
  349. if self:IsInBattleTeam(actorId) then
  350. return
  351. end
  352. self.battleActorIds[#self.battleActorIds + 1] = actorId
  353. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(actorId)
  354. self.actorTotalFightPower = self.actorTotalFightPower + fightPower
  355. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Team_FightPower)
  356. end
  357. function ArenaData:OffBattle(actorId)
  358. if self.battleActorIds == nil then
  359. return
  360. end
  361. local removed = false
  362. for i=1, #self.battleActorIds do
  363. if self.battleActorIds[i] == actorId then
  364. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(actorId)
  365. self.actorTotalFightPower = self.actorTotalFightPower - fightPower
  366. table.remove(self.battleActorIds, i)
  367. removed = true;
  368. return
  369. end
  370. end
  371. if removed then
  372. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Team_FightPower)
  373. end
  374. end
  375. function ArenaData:ReplaceBattleActorId(orgUid,newUid)
  376. if self.battleActorIds == nil then
  377. return
  378. end
  379. local changed = false
  380. for i=1, #self.battleActorIds do
  381. if self.battleActorIds[i] == orgUid then
  382. local fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(orgUid)
  383. self.actorTotalFightPower = self.actorTotalFightPower - fightPower
  384. self.battleActorIds[i] = newUid
  385. fightPower = ManagerContainer.DataMgr.UserData:GetSlotFightPower(newUid)
  386. self.actorTotalFightPower = self.actorTotalFightPower + fightPower
  387. changed = true
  388. break;
  389. end
  390. end
  391. if changed then
  392. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Team_FightPower)
  393. end
  394. end
  395. function ArenaData:IsInBattleTeam(actorId)
  396. if self.battleActorIds == nil then
  397. return false
  398. end
  399. for i = 1, #self.battleActorIds do
  400. local memberId = self.battleActorIds[i]
  401. if tostring(memberId) == tostring(actorId) then
  402. return true
  403. end
  404. end
  405. return false
  406. end
  407. function ArenaData:CurMemberCnt()
  408. if self.battleActorIds == nil then
  409. return 0
  410. end
  411. return #self.battleActorIds
  412. end
  413. function ArenaData:GetSeasonRanList(rankType)
  414. if rankType == 0 and self.inSeason then
  415. return self.curSeasonRankList
  416. elseif rankType == 1 then
  417. return self.lastSeasonRankList
  418. end
  419. return nil
  420. end
  421. function ArenaData:GetSelfSeasonScore(rankType)
  422. if rankType == 0 and self.inSeason then
  423. return self.danScore
  424. elseif rankType == 1 then
  425. return self.self_lastrank_score or 0
  426. end
  427. return 0
  428. end
  429. function ArenaData:GetRank(rankType)
  430. if rankType == 0 then
  431. -- LogError("self.minTopScore = " .. self.minTopScore .. " self.curSeasonRank = " .. self.curSeasonRank)
  432. if self.danScore < self.minTopScore and self:InSeason() == false then
  433. return 0
  434. else
  435. return self.curSeasonRank
  436. end
  437. else
  438. return self.lastSeasonRank
  439. end
  440. end
  441. function ArenaData:SendArenaDataReq(fromUIId, backUIId)
  442. self.fromUIId = fromUIId
  443. self.backUIId = backUIId
  444. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_REQ, {})
  445. end
  446. function ArenaData:OnArenaNtf(data)
  447. --LogError("--------------------OnArenaNtf----------------" .. Inspect(data))
  448. self:InitArenaData(data)
  449. if self.fromUIId == Enum.UIPageName.UISeason or self.fromUIId == Enum.UIPageName.UIRoleMessage then
  450. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.SEASON_SELECTION_NTF)
  451. elseif self.fromUIId == Enum.UIPageName.UIDojo2D then
  452. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojo2D,nil, self.backUIId or Enum.UIPageName.UIMainCity1)
  453. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UI_CLOSE_TASK_PAGE)
  454. end
  455. self.fromUIId = nil
  456. self.backUIId = nil
  457. end
  458. function ArenaData:OnArenaChangeNtf(data)
  459. --LogError("--------------------OnArenaChangeNtf----------------"..Inspect(data))
  460. self:ChangeArenaData(data)
  461. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Data_Change)
  462. end
  463. function ArenaData:SendBuyTimesReq(cnt)
  464. if cnt == 0 then
  465. return
  466. end
  467. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_BUY_COUNT_REQ, {buy_count=cnt})
  468. end
  469. function ArenaData:OnArenaBuyCountAck(data)
  470. -- if data.error ~= nil and data.error > 0 then
  471. -- LogError("OnArenaBuyCountAck " .. data.error)
  472. -- end
  473. end
  474. function ArenaData:SendArenaRankReq(rankType,startIdx)
  475. if self.isRequestingRank == true then
  476. return
  477. end
  478. -- 上赛季
  479. if rankType == 1 then
  480. if self.lastSeasonRankReqIdx >= 10 then
  481. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Season_Rank_List,rankType)
  482. return
  483. end
  484. end
  485. self.isRequestingRank = true
  486. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_RANK_LIST_REQ, {rank_type = rankType, start_idx = startIdx})
  487. self.cancelTimerId = ManagerContainer.LuaTimerMgr:AddTimer(2000, 1, self, self.CancelRequestingRankStatus, nil)
  488. end
  489. function ArenaData:OnArenaRankListAck(data)
  490. --LogError("------OnArenaRankListAck--" .. Inspect(data))
  491. self.isRequestingRank = false
  492. if self.cancelTimerId ~= nil then
  493. ManagerContainer.LuaTimerMgr:RemoveTimer(self.cancelTimerId);
  494. self.cancelTimerId = nil
  495. end
  496. if data.error ~= nil and data.error > 0 then
  497. return
  498. end
  499. if data.rank_type == 0 then
  500. self:SaveCurSeasonRankData(data.rank_list,data.self_rank,data.start_idx,data.self_rank_score)
  501. elseif data.rank_type == 1 then
  502. self:SaveLastSeasonRankData(data.rank_list,data.self_rank,data.start_idx,data.self_rank_score)
  503. end
  504. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Arena_Season_Rank_List,data.rank_type)
  505. end
  506. function ArenaData:SaveCurSeasonRankData(rank_list,self_rank,start_idx,self_rank_score)
  507. self.curSeasonRankReqIdx = start_idx
  508. if self_rank ~= nil then
  509. self.curSeasonRank = self_rank
  510. end
  511. if self_rank_score ~= nil then
  512. self.self_rank_score = self_rank_score
  513. end
  514. if rank_list ~= nil then
  515. if self.curSeasonRankList == nil then
  516. self.curSeasonRankList = {}
  517. end
  518. for i=1, #rank_list do
  519. local rankData = rank_list[i]
  520. local playerRank = PlayerRankData:new(rankData.rank,rankData.brief_info,rankData.score);
  521. local idx = (self.curSeasonRankReqIdx-1)*10+i
  522. self.curSeasonRankList[idx] = playerRank
  523. end
  524. end
  525. end
  526. function ArenaData:SaveLastSeasonRankData(rank_list,self_rank,start_idx,self_rank_score)
  527. self.lastSeasonRankReqIdx = start_idx
  528. if self_rank ~= nil then
  529. self.lastSeasonRank = self_rank
  530. end
  531. if self_rank_score ~= nil then
  532. self.self_lastrank_score = self_rank_score
  533. end
  534. if rank_list ~= nil then
  535. if self.lastSeasonRankList == nil then
  536. self.lastSeasonRankList = {}
  537. end
  538. for i=1, #rank_list do
  539. local rankData = rank_list[i]
  540. local playerRank = PlayerRankData:new(rankData.rank,rankData.brief_info,rankData.score);
  541. local idx = (self.lastSeasonRankReqIdx-1)*10+i
  542. self.lastSeasonRankList[idx] = playerRank
  543. end
  544. end
  545. end
  546. function ArenaData:CancelRequestingRankStatus()
  547. self.isRequestingRank = false
  548. self.cancelTimerId = nil
  549. end
  550. function ArenaData:SetReward(zeny,cruise)
  551. self.zeny = zeny
  552. self.cruise = cruise
  553. end
  554. function ArenaData:GetEnemyMembers()
  555. return self.enemyActors
  556. end
  557. function ArenaData:GetOurMembers()
  558. return self.ourMembers
  559. end
  560. function ArenaData:GetBattleSceneName()
  561. return self.battleSceneName
  562. end
  563. function ArenaData:GetBattleEndConds()
  564. return self.battleEndCondList
  565. end
  566. function ArenaData:GetMatchFighterName()
  567. return self.matchFighterName
  568. end
  569. -- 发送匹配请求
  570. function ArenaData:SendMatchReq(battleActorIds)
  571. if ManagerContainer.DataMgr.ArenaData:CurMemberCnt() <= 0 then
  572. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("至少需要一名角色参战!")
  573. return
  574. end
  575. if ManagerContainer.DataMgr.ArenaData:GetLeftTimes() <= 0 then
  576. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("今日剩余次数为0,请明天再来!")
  577. return
  578. end
  579. self.matchFailed = false
  580. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_MATCH_REQ, {hero_list=battleActorIds})
  581. end
  582. function ArenaData:OnArenaMatchAck(data)
  583. if data.error ~= 0 then
  584. self.enemyActors = {}
  585. self.matchFailed = true
  586. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("竞技场匹配失败!")
  587. return
  588. end
  589. LogHRWarning(Inspect(data))
  590. -- repress_skill_pvp_val
  591. ManagerContainer.LuaGameMgr:RefreshTeamData()
  592. local actorSystem = CreateActorSystem:new()
  593. actorSystem:ParseFightRoleInfo(data.fight_info)
  594. LogHRWarning(Inspect(actorSystem.userData))
  595. if not actorSystem.userData.inited then
  596. self.enemyActors = {}
  597. self.matchFailed = true
  598. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("竞技场匹配失败!")
  599. return
  600. end
  601. self.matchFighterName = actorSystem:GetUserNickname()
  602. self.enemyActors = {}
  603. if actorSystem:GetPlayerActorParam()~= nil then
  604. self.enemyActors[#self.enemyActors+1] = actorSystem:GetPlayerActorParam()
  605. end
  606. local fellowActors = actorSystem:GetFellowActorParam()
  607. if fellowActors~= nil then
  608. for k,actor in pairs(fellowActors) do
  609. self.enemyActors[#self.enemyActors +1] = actor
  610. end
  611. end
  612. local selfMaskDatas = nil
  613. local enemyPvPVal = actorSystem:GetSkillPvPVal()
  614. local OurPvPVal = ManagerContainer.DataMgr.UserData:GetCurrRoleSkillPress()
  615. local IsPresspoint,BuffId = ManagerContainer.CfgMgr:GetPresspointPvPCfg(OurPvPVal,enemyPvPVal)
  616. if BuffId > -1 then
  617. --设置压制ID
  618. --LogError("添加压制markid"..tostring(BuffId))
  619. selfMaskDatas = {}
  620. selfMaskDatas[1] = GvGMark.New(BuffId, 1)
  621. end
  622. if self.battleActorIds~= nil then
  623. self.ourMembers = {}
  624. for i = 1, #self.battleActorIds do
  625. local actor = ManagerContainer.LuaActorDataMgr:GetActorsById(self.battleActorIds[i])
  626. if actor ~= nil then
  627. self.ourMembers[#self.ourMembers+1] = actor
  628. end
  629. end
  630. end
  631. self:InitEndBattleCondition()
  632. ManagerContainer.LuaGameMgr:EnterDojo(self:GetBattleSceneName(), self:GetOurMembers(), self:GetEnemyMembers(), selfMaskDatas,IsPresspoint,OurPvPVal+enemyPvPVal,self:GetBattleEndConds())
  633. end
  634. function ArenaData:InitEndBattleCondition()
  635. if self.battleEndCondList ~= nil then
  636. return
  637. end
  638. self.battleEndCondList = System.Array.CreateInstance(Enum.TypeInfo.BattleEndCondition, 1)
  639. self.battleEndCondList[0] = BattleEndCondition.New(Constants.EndBattle_By_UndeadCount,Constants.ResultType_Normal)
  640. end
  641. -- //挑战结果(失败/成功)//0失败,1成功
  642. function ArenaData:SendBattleResultReq(result)
  643. self.result = result
  644. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ARENA_RESULT_REQ, {fight_result=result})
  645. end
  646. function ArenaData:OnArenaResultAck(data)
  647. -- LogError("----OnArenaResultAck---" .. Inspect(data))
  648. local zeny = 0
  649. local cruise = 0
  650. if data.reward_list ~= nil then
  651. for i =1, #data.reward_list do
  652. local item = data.reward_list[i];
  653. if item.key == Enum.ItemType.Coin then
  654. zeny = item.value
  655. elseif item.key == Enum.ItemType.HeroSpirit then
  656. cruise = item.value
  657. end
  658. end
  659. end
  660. self:SetReward(zeny,cruise)
  661. if self.result == 1 then
  662. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoBattleWin,{data.old_score,data.cur_score})
  663. else
  664. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoBattleFail,{data.old_score,data.cur_score})
  665. end
  666. ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.Dojo)
  667. end
  668. function ArenaData:BattleEnd(result)
  669. self:SendBattleResultReq(result)
  670. self.enemyActors = nil
  671. self.ourMembers = nil
  672. end
  673. return ArenaData