RankActivitiesMgr.lua 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. local RankActivitiesMgr = class("RankActivitiesMgr",require("DataBase"))
  2. local TowerRankActivityData = require("RankActivities/TowerRankActivityData")
  3. local ArenaRankActivityData = require("RankActivities/ArenaRankActivityData")
  4. local MapProgressActivityData = require("RankActivities/MapProgressActivityData")
  5. local PetRankActivityData = require("RankActivities/PetRankActivityData")
  6. local SkillRankActivityData = require("RankActivities/SkillRankActivityData")
  7. local ProtocalDataNormal = require("ProtocalDataNormal")
  8. function RankActivitiesMgr:ctor()
  9. self.curRnakDatas = {}
  10. self.forceCheck = false
  11. self.curCount = 0
  12. self.countLimit = 3
  13. self.rankDatas = {}
  14. self.rankRewardType = {}
  15. end
  16. function RankActivitiesMgr:Clear()
  17. self.curRnakDatas = {}
  18. self.forceCheck = false
  19. for _,v in pairs(self.rankDatas) do
  20. v:Clear()
  21. end
  22. self.rankDatas = {}
  23. end
  24. function RankActivitiesMgr:RegisterNetEvents()
  25. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ONLINE_RUSH_INFO_ACK,self.OnOnlineRushInfoAck, self)
  26. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_RUSH_ACTIVITY_REWARD_ACK,self.OnActivityRewardAck, self)
  27. for _,v in pairs(self.rankDatas) do
  28. v:RegisterNetEvents()
  29. end
  30. end
  31. function RankActivitiesMgr:QueryRankActivitiesData(init)
  32. self.isInitQuery = init
  33. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ONLINE_RUSH_INFO_REQ, {})
  34. end
  35. function RankActivitiesMgr:OnOnlineRushInfoAck(data)
  36. --data = {}
  37. --data.rush_data = {}
  38. --local data1 = {}
  39. --data1.rush_type = 3
  40. --data1.in_rush = true
  41. --data1.next_rush = 0
  42. --data1.stage = 1
  43. --data1.stage_end = int64.new("1605247823000")
  44. --data1.rush_count = 1
  45. --data.rush_data[1] = data1
  46. -- LogHRWarning(Inspect(data))
  47. for i = 1, #data.rush_data do
  48. local data1 = ProtocalDataNormal.RushActivityData(data.rush_data[i])
  49. self.curRnakDatas[data1.rushType] = data1
  50. if data1.inRush then
  51. self:InitRankData(data1)
  52. end
  53. end
  54. if self.forceCheck then
  55. self:CheckRancActivityOpenTime()
  56. end
  57. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_REWARD_SUCCESS_NTF)
  58. if self.isInitQuery then
  59. self.isInitQuery = false
  60. ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.ClimbingTower)
  61. ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.Dojo)
  62. ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.MapProgress)
  63. ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.Pet)
  64. ManagerContainer.DataMgr.RankActivitiesMgr:QueryCurRankActivityData(Enum.RankActivitiesType.Skill)
  65. end
  66. end
  67. function RankActivitiesMgr:OnActivityRewardAck(data)
  68. if data.error ~= Enum.NetErrorCode.ERROR_OK then return end
  69. if not self.curRnakDatas[data.rush_type] then return end
  70. if self.rankDatas[data.rush_type] then
  71. return self.rankDatas[data.rush_type]:OnActivityRewardAck(data)
  72. end
  73. end
  74. function RankActivitiesMgr:InitRankData(data)
  75. if not self.rankDatas[data.rushType] then
  76. local rankData = nil
  77. if data.rushType == Enum.RankActivitiesType.ClimbingTower then
  78. rankData = TowerRankActivityData:new()
  79. self.rankDatas[data.rushType] = rankData
  80. self.rankRewardType[data.rushType] = Enum.RPNotifyType.TowerRankCanReward
  81. elseif data.rushType == Enum.RankActivitiesType.Dojo then
  82. rankData = ArenaRankActivityData:new()
  83. self.rankDatas[data.rushType] = rankData
  84. self.rankRewardType[data.rushType] = Enum.RPNotifyType.ArenaRankCanReward
  85. elseif data.rushType == Enum.RankActivitiesType.MapProgress then
  86. rankData = MapProgressActivityData:new()
  87. self.rankDatas[data.rushType] = rankData
  88. self.rankRewardType[data.rushType] = Enum.RPNotifyType.MapRankCanReward
  89. elseif data.rushType == Enum.RankActivitiesType.Pet then
  90. rankData = PetRankActivityData:new()
  91. self.rankDatas[data.rushType] = rankData
  92. self.rankRewardType[data.rushType] = Enum.RPNotifyType.PetRankCanReward
  93. elseif data.rushType == Enum.RankActivitiesType.Skill then
  94. rankData = SkillRankActivityData:new()
  95. self.rankDatas[data.rushType] = rankData
  96. self.rankRewardType[data.rushType] = Enum.RPNotifyType.SkillRankCanReward
  97. end
  98. if rankData then
  99. rankData:RegisterNetEvents()
  100. end
  101. end
  102. end
  103. function RankActivitiesMgr:GetCurRankActivityIdx(type)
  104. if not self.curRnakDatas[type] then
  105. return
  106. end
  107. return self.curRnakDatas[type].rushCount
  108. end
  109. function RankActivitiesMgr:GetCurRankActivityStageEndTime(type)
  110. if not self.curRnakDatas[type] then
  111. return
  112. end
  113. return self.curRnakDatas[type].stage, self.curRnakDatas[type].stageEnd, self.curRnakDatas[type].inRush
  114. end
  115. function RankActivitiesMgr:GetCurRankActivityData(type)
  116. if not self.curRnakDatas[type] then return end
  117. if self.rankDatas[type] then
  118. return self.rankDatas[type]:GetCurRankActivityData()
  119. end
  120. return
  121. end
  122. function RankActivitiesMgr:QueryCurRankActivityData(type, forceOpenUI)
  123. if not self.curRnakDatas[type] then return end
  124. if self.rankDatas[type] and self.curRnakDatas[type].inRush then
  125. self.rankDatas[type]:QueryRankActivityData(forceOpenUI)
  126. end
  127. end
  128. function RankActivitiesMgr:SendRewardReq(type, rewardType)
  129. if not self.curRnakDatas[type] then return end
  130. if self.rankDatas[type] then
  131. self.rankDatas[type]:SendRewardReq(rewardType)
  132. end
  133. end
  134. function RankActivitiesMgr:QueryPetRankDatas(page)
  135. if self.rankDatas[Enum.RankActivitiesType.Pet] then
  136. self.rankDatas[Enum.RankActivitiesType.Pet]:QueryPetRankDatas(page)
  137. end
  138. end
  139. function RankActivitiesMgr:QueryRankActivityData(type, page)
  140. if type == Enum.RankActivitiesType.Pet then
  141. self:QueryPetRankDatas(page)
  142. else
  143. if self.rankDatas[type] then
  144. self.rankDatas[type]:QueryRankDatas(page)
  145. end
  146. end
  147. end
  148. function RankActivitiesMgr:CheckRancActivityOpenTime()
  149. if not self.curRnakDatas then return end
  150. self.forceCheck = false
  151. local needQuery = false
  152. if not next(self.curRnakDatas) then
  153. for _,v in pairs(Enum.RankActivitiesType) do
  154. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_DISPLAY_NTF, v, false)
  155. end
  156. return
  157. end
  158. for _,v in pairs(Enum.RankActivitiesType) do
  159. local type = v
  160. local rankData = self.curRnakDatas[type]
  161. if rankData then
  162. local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  163. if rankData.inRush then
  164. local stage, endTime = self:GetCurRankActivityStageEndTime(type)
  165. if (stage == 1 and curTime >= endTime) or (stage == 2 and curTime >= endTime) then
  166. if not needQuery then
  167. needQuery = true
  168. end
  169. else
  170. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_DISPLAY_NTF, rankData.rushType, true)
  171. end
  172. else
  173. if curTime > rankData.nextRush and rankData.nextRush > 0 then
  174. if not needQuery then
  175. needQuery = true
  176. end
  177. else
  178. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_DISPLAY_NTF, rankData.rushType, false)
  179. end
  180. end
  181. else
  182. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RANK_ACTIVITY_DISPLAY_NTF, type, false)
  183. end
  184. end
  185. if needQuery then
  186. self.forceCheck = true
  187. self.curCount = self.curCount + 1
  188. if self.curCount >= self.countLimit then
  189. self.curCount = 0
  190. return
  191. end
  192. for k, v in pairs(self.rankDatas) do
  193. if v.rankData ~= nil and k ~= Enum.RankActivitiesType.MapProgress then
  194. local rankRewardState =v.rankData.selfRank > 0 and not v.rankData.rankReward
  195. ManagerContainer.RedPointSimpleMgr:RPNotify(self.rankRewardType[k], rankRewardState)
  196. end
  197. end
  198. self:QueryRankActivitiesData()
  199. end
  200. end
  201. function RankActivitiesMgr:Destroy()
  202. for _,v in pairs(self.rankDatas) do
  203. v:Destroy()
  204. end
  205. self.rankDatas = nil
  206. self.curRnakData = nil
  207. end
  208. return RankActivitiesMgr