ActivityLimitRechargeItem.lua 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. local ActivityLimitRechargeItem = class('ActivityLimitRechargeItem', require('Activities/ActivityTypeItem'))
  2. function ActivityLimitRechargeItem:ctor()
  3. self.activeitesMap = {}
  4. self.activeitesList = {}
  5. self.needOpen = false
  6. end
  7. function ActivityLimitRechargeItem:SyncSrvData(datas, init)
  8. if not datas then
  9. return
  10. end
  11. --datas = {
  12. -- {
  13. -- activities_id = 1,
  14. -- start_time = int64.new('1603185150303'),
  15. -- end_time = int64.new('1603267780000'),
  16. -- },
  17. -- {
  18. -- activities_id = 2,
  19. -- start_time = int64.new('1603185150303'),
  20. -- end_time = int64.new('1603267780000'),
  21. -- }
  22. --}
  23. local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  24. local cloneMap = clone(self.activeitesMap)
  25. self.activeitesMap = {}
  26. self.activeitesList = {}
  27. local needDisplayState = false
  28. for _,v in pairs(datas) do
  29. if curTime <= v.end_time then
  30. if not self.activeitesMap[v.activities_id] then
  31. local data = {}
  32. data.activitiesId = v.activities_id
  33. data.startTime = v.start_time
  34. data.endTime = v.end_time
  35. --data.rpState = false
  36. if data.endTime > 0 then
  37. data.remainTime = ManagerContainer.LuaTimerMgr:GetRemainSecondsWithUInt64(data.endTime)
  38. end
  39. local cfgData = ManagerContainer.CfgMgr:GetActivitiesDiscountsCfgById(data.activitiesId)
  40. if cfgData then
  41. self.activeitesMap[data.activitiesId] = data
  42. self.activeitesList[#self.activeitesList + 1] = data
  43. if not cloneMap[v.activities_id] then
  44. if not init then
  45. if cfgData.PopupWindow == 1 then
  46. self.needOpen = true
  47. end
  48. data.rpState = true
  49. self:SaveLocalRPState(data.activitiesId, data.rpState)
  50. else
  51. local state = self:GetLocalRPState(data.activitiesId)
  52. data.rpState = state
  53. end
  54. if cfgData.TriggeringCondition then
  55. if cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.BaseLevel
  56. or cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.PayAmount
  57. or cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.HeroStrength
  58. or cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.HeroLevel
  59. or cfgData.TriggeringCondition[1][1] == Enum.UnlockChargeType.SkillLevelUp
  60. then
  61. needDisplayState = true
  62. end
  63. end
  64. else
  65. data.rpState = cloneMap[v.activities_id].rpState
  66. end
  67. end
  68. else
  69. local data = self.activeitesMap[v.activities_id]
  70. data.activitiesId = v.activities_id
  71. data.startTime = v.start_time
  72. data.endTime = v.end_time
  73. data.rpState = false
  74. self:SaveLocalRPState(data.activitiesId, data.rpState)
  75. if data.endTime > 0 then
  76. data.remainTime = ManagerContainer.LuaTimerMgr:GetRemainSecondsWithUInt64(data.endTime)
  77. end
  78. end
  79. end
  80. end
  81. CommonUtil.ArraySortSelections(self.activeitesList, Enum.TableSortRule.Up, "startTime")
  82. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.LIMIT_RECHARGE_OPEN_NTF)
  83. if needDisplayState then
  84. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.LIMIT_RECHARGE_OPEN_UI_NTF)
  85. end
  86. self:RefreshLimitRechargeRPState()
  87. self:StopTimer()
  88. if #self.activeitesList > 0 then
  89. self.updateTimer = Timer.New(function()
  90. self:UpdateActivitiesTime()
  91. end, 1, -1)
  92. self.updateTimer:Start()
  93. end
  94. end
  95. function ActivityLimitRechargeItem:SaveLocalRPState(id, state)
  96. local uid = ManagerContainer.DataMgr.UserData:GetUserId()
  97. UnityEngine.PlayerPrefs.SetInt(tostring(uid).."_ActivityLimitRecharge_"..tostring(id), state and 1 or 0)
  98. end
  99. function ActivityLimitRechargeItem:GetLocalRPState(id)
  100. local uid = ManagerContainer.DataMgr.UserData:GetUserId()
  101. local state = UnityEngine.PlayerPrefs.GetInt(tostring(uid).."_ActivityLimitRecharge_"..tostring(id))
  102. return state == 1
  103. end
  104. function ActivityLimitRechargeItem:UpdateActivitiesTime()
  105. local removed = false
  106. for i = #self.activeitesList, 1, -1 do
  107. local data = self.activeitesList[i]
  108. data.remainTime = data.remainTime - 1
  109. if data.remainTime <= 0 then
  110. self.activeitesMap[data.activitiesId] = nil
  111. table.remove(self.activeitesList, i)
  112. removed = true
  113. end
  114. end
  115. if removed then
  116. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.LIMIT_RECHARGE_OPEN_NTF)
  117. end
  118. if #self.activeitesList == 0 then
  119. self:StopTimer()
  120. end
  121. end
  122. function ActivityLimitRechargeItem:StopTimer()
  123. if self.updateTimer then
  124. self.updateTimer:Stop()
  125. self.updateTimer = nil
  126. end
  127. end
  128. function ActivityLimitRechargeItem:GetRemainTime(id)
  129. if not self.activeitesMap[id] then return 0 end
  130. return FormatTime2(self.activeitesMap[id].remainTime)
  131. end
  132. function ActivityLimitRechargeItem:RemoveEndTimeActivity(id)
  133. for i = 1, #self.activeitesList do
  134. if self.activeitesList[i].activitiesId == id then
  135. self.activeitesMap[self.activeitesList[i].activitiesId] = nil
  136. table.remove(self.activeitesList, i)
  137. return
  138. end
  139. end
  140. end
  141. function ActivityLimitRechargeItem:RefreshRemainTime(id)
  142. if not self.activeitesMap[id] then return 0 end
  143. if self.activeitesMap[id].remainTime <= 0 then return end
  144. self.activeitesMap[id].remainTime = self.activeitesMap[id].remainTime - 1
  145. return FormatTime2(self.activeitesMap[id].remainTime)
  146. end
  147. function ActivityLimitRechargeItem:HasOpened(id)
  148. self.needOpen = false
  149. if self.activeitesMap[id] then
  150. self.activeitesMap[id].rpState = false
  151. self:SaveLocalRPState(id, false)
  152. end
  153. self:RefreshLimitRechargeRPState()
  154. end
  155. function ActivityLimitRechargeItem:GetCount()
  156. return #self.activeitesList
  157. end
  158. function ActivityLimitRechargeItem:RefreshLimitRechargeRPState()
  159. for _,v in pairs(self.activeitesMap) do
  160. if v.rpState then
  161. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.LimitRecharge, true)
  162. return
  163. end
  164. end
  165. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.LimitRecharge, false)
  166. end
  167. function ActivityLimitRechargeItem:AutoGetOpenActivityId()
  168. if #self.activeitesList == 0 then return end
  169. for i = #self.activeitesList, 1, -1 do
  170. local data = self.activeitesList[i]
  171. if data.rpState then
  172. return data.activitiesId, i
  173. end
  174. end
  175. return self.activeitesList[1].activitiesId, 1
  176. end
  177. function ActivityLimitRechargeItem:GetIdxById(id)
  178. for i = #self.activeitesList, 1, -1 do
  179. local data = self.activeitesList[i]
  180. if data.activitiesId == id then
  181. return i
  182. end
  183. end
  184. return
  185. end
  186. function ActivityLimitRechargeItem:GetIdByIdx(idx)
  187. for i = #self.activeitesList, 1, -1 do
  188. local data = self.activeitesList[i]
  189. if i == idx then
  190. return data.activitiesId
  191. end
  192. end
  193. return
  194. end
  195. function ActivityLimitRechargeItem:GetLimitDataByIdx(idx)
  196. return self.activeitesList[idx]
  197. end
  198. function ActivityLimitRechargeItem:IsLimitRechargeExist()
  199. if #self.activeitesList == 0 then return false end
  200. local result = false
  201. local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  202. for _,v in pairs(self.activeitesMap) do
  203. if v.endTime > 0 and curTime < v.endTime then
  204. result = true
  205. break
  206. end
  207. end
  208. return result
  209. end
  210. return ActivityLimitRechargeItem