MapProgressActivityData.lua 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. local MapProgressActivityData = class("MapProgressActivityData")
  2. local ProtocalDataNormal = require("ProtocalDataNormal")
  3. function MapProgressActivityData:ctor()
  4. self.rankData = nil
  5. self.type = Enum.RankActivitiesType.MapProgress
  6. end
  7. function MapProgressActivityData:Clear()
  8. self.rankData = nil
  9. end
  10. function MapProgressActivityData:RegisterNetEvents()
  11. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_MAP_ACTIVITY_ACK,self.OnMapActivityAck, self)
  12. end
  13. function MapProgressActivityData:QueryRankActivityData(forceOpenUI)
  14. self.forceOpenUI = forceOpenUI
  15. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_MAP_ACTIVITY_REQ, {})
  16. end
  17. function MapProgressActivityData:OnMapActivityAck(data)
  18. --data = {}
  19. --data.error = 0
  20. --data.map_score = 100
  21. --data.self_rank = 10
  22. --data.self_level = 100
  23. --data.end_time = 0
  24. --data.challeng_reward = false
  25. --data.rank_reward = false
  26. if data.error ~= Enum.NetErrorCode.ERROR_OK then return end
  27. local oldData = clone(self.rankData)
  28. self.rankData = ProtocalDataNormal.ParseTowerActivityData(data)
  29. self.rankData.mapScore = data.map_score
  30. self.rankData.bagScore = data.bag_score
  31. self.rankData.rankIdx = self:GetRankIdx(self.rankData.selfRank)
  32. if oldData then
  33. local needRp = false
  34. local type = Enum.RankActivitiesType.MapProgress
  35. local idx = ManagerContainer.DataMgr.RankActivitiesMgr:GetCurRankActivityIdx(type)
  36. local taskCfgDatas = ManagerContainer.CfgMgr:GetRushListTargetCfgByTypeAndIdx(type, idx)
  37. for i = #taskCfgDatas, 1, -1 do
  38. local cfgData = taskCfgDatas[i]
  39. if oldData.rushLevel < cfgData.Rank[1][1] and self.rankData.rushLevel >= cfgData.Rank[1][1] then
  40. if cfgData.Rank[1][2] == 0 or self.rankData.rushLevel <= cfgData.Rank[1][2] then
  41. needRp = true
  42. break
  43. end
  44. end
  45. end
  46. if not ManagerContainer.RedPointSimpleMgr:CheckRPStateByType(Enum.RPNotifyType.MapRankChanged) then
  47. ManagerContainer.RedPointSimpleMgr:RPNotify(Enum.RPNotifyType.MapRankChanged, needRp or (self.rankData.rankIdx ~= oldData.rankIdx))
  48. end
  49. end
  50. self:RefreshRewardRPStatae()
  51. if self.forceOpenUI then
  52. --TODO 打开 冲榜界面
  53. if self.rankData.endTime > 0 then
  54. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIActivityTower, Enum.RankActivitiesType.MapProgress)
  55. self.forceOpenUI = false
  56. else
  57. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_DISPLAY_NTF, Enum.RankActivitiesType.MapProgress, false)
  58. end
  59. end
  60. end
  61. function MapProgressActivityData:GetRankIdx(rank)
  62. local type = Enum.RankActivitiesType.MapProgress
  63. local idx = ManagerContainer.DataMgr.RankActivitiesMgr:GetCurRankActivityIdx(type)
  64. local taskCfgDatas = ManagerContainer.CfgMgr:GetRushListTargetCfgByTypeAndIdx(type, idx)
  65. local cfgDatas = ManagerContainer.CfgMgr:GetRushListCfgByTypeAndIdx(type, idx)
  66. if not taskCfgDatas and not cfgDatas then
  67. return 0
  68. end
  69. local rankIdx = 0
  70. if rank > 0 then
  71. for i = #cfgDatas, 1, -1 do
  72. local cfgData = cfgDatas[i]
  73. if cfgData.Rank[1][2] == 0 then
  74. rankIdx = cfgData.RankGrade
  75. elseif rank <= cfgData.Rank[1][2] then
  76. rankIdx = cfgData.RankGrade
  77. end
  78. end
  79. end
  80. return rankIdx
  81. end
  82. function MapProgressActivityData:RefreshRewardRPStatae()
  83. local type = Enum.RankActivitiesType.MapProgress
  84. local idx = ManagerContainer.DataMgr.RankActivitiesMgr:GetCurRankActivityIdx(type)
  85. local taskCfgDatas = ManagerContainer.CfgMgr:GetRushListTargetCfgByTypeAndIdx(type, idx)
  86. local cfgDatas = ManagerContainer.CfgMgr:GetRushListCfgByTypeAndIdx(type, idx)
  87. if not taskCfgDatas and not cfgDatas then
  88. ManagerContainer.RedPointSimpleMgr:RPNotify(Enum.RPNotifyType.MapRankCanReward, false)
  89. return
  90. end
  91. local stage, endTime = ManagerContainer.DataMgr.RankActivitiesMgr:GetCurRankActivityStageEndTime(Enum.RankActivitiesType.MapProgress)
  92. local rankIdx = 0
  93. if self.rankData.selfRank > 0 then
  94. for i = #cfgDatas, 1, -1 do
  95. local cfgData = cfgDatas[i]
  96. if cfgData.Rank[1][2] == 0 then
  97. rankIdx = cfgData.RankGrade
  98. elseif self.rankData.selfRank <= cfgData.Rank[1][2] then
  99. rankIdx = cfgData.RankGrade
  100. end
  101. end
  102. end
  103. local rankRewardState = rankIdx > 0 and stage == 2 and self.rankData.selfRank > 0 and not self.rankData.rankReward
  104. local rankIdx = 0
  105. for i = #taskCfgDatas, 1, -1 do
  106. local cfgData = taskCfgDatas[i]
  107. if self.rankData.rushLevel >= cfgData.Rank[1][1] then
  108. if cfgData.Rank[1][2] == 0 or self.rankData.rushLevel <= cfgData.Rank[1][2] then
  109. rankIdx = cfgData.TargetGrade
  110. end
  111. end
  112. end
  113. local challengeRewardState = rankIdx > 0 and stage == 2 and not self.rankData.challengReward
  114. ManagerContainer.RedPointSimpleMgr:RPNotify(Enum.RPNotifyType.MapRankCanReward, rankRewardState or challengeRewardState)
  115. end
  116. function MapProgressActivityData:OnActivityRewardAck(data)
  117. if data.error ~= Enum.NetErrorCode.ERROR_OK then return end
  118. if data.reward_type == 1 then
  119. self.rankData.challengReward = true
  120. elseif data.reward_type == 2 then
  121. self.rankData.rankReward = true
  122. end
  123. self:RefreshRewardRPStatae()
  124. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_REWARD_SUCCESS_NTF, data.reward_type)
  125. CommonUtil.ACKShowRewardList(data.item_list)
  126. end
  127. function MapProgressActivityData:GetCurRankActivityData()
  128. return self.rankData
  129. end
  130. function MapProgressActivityData:SendRewardReq(type)
  131. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_RUSH_ACTIVITY_REWARD_REQ, {reward_type = type, rush_type = self.type})
  132. end
  133. function MapProgressActivityData:Destroy()
  134. self:Clear()
  135. end
  136. return MapProgressActivityData