ActivityFortnightTaskItem.lua 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. local ActivityFortnightTaskItem = class("ActivityFortnightTaskItem",require("Activities/ActivityTypeItem"))
  2. local ActivityTaskItem = require("Activities/ActivityTaskItem")
  3. local ActivityTaskBoxItem = require("Activities/ActivityTaskBoxItem")
  4. function ActivityFortnightTaskItem:ctor()
  5. self.curDay = 0
  6. self.curDayEndTime = 0
  7. self.taskScore = 0
  8. self.totalTaskScore = 0
  9. self.taskScoreReward = 0
  10. self.taskList = nil
  11. self.boxRewards = nil
  12. self.curShowBoxType = 0
  13. self:InitData()
  14. end
  15. function ActivityFortnightTaskItem:GetBg()
  16. local subfix = "_7"
  17. if self.curDay > 7 then
  18. subfix = "_14"
  19. end
  20. return self.bg .. subfix
  21. end
  22. function ActivityFortnightTaskItem:InitData()
  23. self.data = {}
  24. self.taskList = {}
  25. local cfgList = ManagerContainer.CfgMgr:GetFortnightDaysCfg()
  26. if cfgList ~= nil then
  27. for i = 1, 14 do
  28. local cfg = cfgList[i]
  29. if cfg ~= nil then
  30. local taskList1 = {}
  31. local taskList2 = {}
  32. if cfg.TaskIds ~= nil then
  33. for j = 1, #cfg.TaskIds do
  34. local task = ActivityTaskItem:new(cfg.TaskIds[j])
  35. taskList1[#taskList1 + 1] = task
  36. self.taskList[#self.taskList+1] = task
  37. end
  38. end
  39. if cfg.DailyTaskIds ~= nil then
  40. for j = 1, #cfg.DailyTaskIds do
  41. local task = ActivityTaskItem:new(cfg.DailyTaskIds[j])
  42. taskList2[#taskList2 + 1] = task
  43. self.taskList[#self.taskList+1] = task
  44. end
  45. end
  46. self.data[#self.data+1] = {day = i, gTasks = taskList1, dTasks = taskList2}
  47. end
  48. end
  49. end
  50. self:SetRPType(Enum.RPNotifyType.FortnightTaskReward)
  51. end
  52. function ActivityFortnightTaskItem:RefreshBoxReward(pageId)
  53. self:InitBoxReward(pageId)
  54. self:RefreshBoxRewardState()
  55. end
  56. function ActivityFortnightTaskItem:InitBoxReward(boxType)
  57. if self.curShowBoxType == boxType then
  58. return
  59. end
  60. self.totalTaskScore = 0
  61. self.boxRewards = {}
  62. local cfgList = ManagerContainer.CfgMgr:GetActivityRewardCfg()
  63. if cfgList ~= nil then
  64. for k,v in pairs(cfgList) do
  65. if v.Type == boxType then
  66. local box = ActivityTaskBoxItem:new(v)
  67. self.boxRewards[#self.boxRewards+1] = box
  68. if box.score > self.totalTaskScore then
  69. self.totalTaskScore = box.score
  70. end
  71. end
  72. end
  73. end
  74. if #self.boxRewards > 1 then
  75. table.sort(
  76. self.boxRewards,
  77. function(a, b)
  78. return a.score < b.score
  79. end
  80. )
  81. end
  82. end
  83. function ActivityFortnightTaskItem:RefreshBoxRewardState()
  84. if self.boxRewards == nil then
  85. return
  86. end
  87. -- LogError(" taskScoreReward = " .. self.taskScoreReward)
  88. for i = 1, #self.boxRewards do
  89. local box = self.boxRewards[i]
  90. if self.taskScore >= box.score then
  91. box:SetCanGet(true)
  92. else
  93. box:SetCanGet(false)
  94. end
  95. local val = math.pow(2, box.boxId)
  96. if CommonUtil.And(self.taskScoreReward, val) == val then
  97. box:SetGoReward(true)
  98. else
  99. box:SetGoReward(false)
  100. end
  101. end
  102. end
  103. function ActivityFortnightTaskItem:GetBoxRewards(pageId)
  104. self:RefreshBoxReward(pageId)
  105. return self.boxRewards
  106. end
  107. function ActivityFortnightTaskItem:SyncSrvData(serverData)
  108. if self.curDay ~= serverData[1] then
  109. self.curDay = serverData[1]
  110. for i = 1, #self.data do
  111. local dTasks = self.data[i].dTasks
  112. for j = 1, #dTasks do
  113. local task = dTasks[j]
  114. task:SetOutofDate(i < self.curDay)
  115. end
  116. end
  117. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Activity_Day_Change,self.actId)
  118. end
  119. self.curDayEndTime = tonumber(tostring(serverData[2] / 1000))
  120. local fortnightDaysData = serverData[3]
  121. if fortnightDaysData ~= nil then
  122. self.taskScore = fortnightDaysData.task_score
  123. self.taskScoreReward = fortnightDaysData.task_score_reward
  124. local taskList = fortnightDaysData.task_list
  125. for i = 1, #taskList do
  126. local taskData = taskList[i]
  127. local task = self:GetTaskById(taskData.task_id)
  128. if task ~= nil then
  129. task:SyncServerData(taskData)
  130. local isLimitedTask, inDay = self:IsLimitedTask(taskData.task_id)
  131. if isLimitedTask then
  132. task:SetOutofDate(inDay < self.curDay)
  133. end
  134. end
  135. end
  136. end
  137. for i = 1, #self.data do
  138. self:SortTask(self.data[i].gTasks)
  139. self:SortTask(self.data[i].dTasks)
  140. end
  141. if self.curDay <= 7 then
  142. self:InitBoxReward(1)
  143. else
  144. self:InitBoxReward(2)
  145. end
  146. self:RefreshBoxRewardState()
  147. end
  148. function ActivityFortnightTaskItem:IsLimitedTask(taskId)
  149. if self.data == nil then
  150. return false, nil
  151. end
  152. for i = 1, #self.data do
  153. local dTasks = self.data[i].dTasks
  154. for j = 1, #dTasks do
  155. if dTasks[j].taskId == taskId then
  156. return true, i
  157. end
  158. end
  159. end
  160. return false, nil
  161. end
  162. function ActivityFortnightTaskItem:SortTask(taskList)
  163. if taskList == nil or #taskList < 2 then
  164. return
  165. end
  166. table.sort(
  167. taskList,
  168. function(a, b)
  169. if a.showPriority < b.showPriority then
  170. return true
  171. elseif a.showPriority > b.showPriority then
  172. return false
  173. else
  174. return a.taskId < b.taskId
  175. end
  176. end
  177. )
  178. end
  179. function ActivityFortnightTaskItem:GetTaskById(id)
  180. if self.taskList == nil then
  181. return nil
  182. end
  183. for i = 1, #self.taskList do
  184. if self.taskList[i].taskId == id then
  185. return self.taskList[i]
  186. end
  187. end
  188. return nil
  189. end
  190. function ActivityFortnightTaskItem:GetTaskListByDay(day)
  191. if self.data == nil then
  192. return nil
  193. end
  194. for i = 1, #self.data do
  195. if self.data[i].day == day then
  196. return self.data[i]
  197. end
  198. end
  199. return nil
  200. end
  201. function ActivityFortnightTaskItem:HasDayRedPoint(day)
  202. local data = self:GetTaskListByDay(day)
  203. if data == nil then
  204. return false
  205. end
  206. local gHasRedPoint = false
  207. local dHasRedPoint = false
  208. if data.gTasks ~= nil then
  209. for i = 1, #data.gTasks do
  210. if data.gTasks[i]:HasRedPoint() then
  211. gHasRedPoint = true
  212. break
  213. end
  214. end
  215. end
  216. if data.dTasks ~= nil then
  217. for i = 1, #data.dTasks do
  218. if data.dTasks[i]:HasRedPoint() then
  219. dHasRedPoint = true
  220. break
  221. end
  222. end
  223. end
  224. return gHasRedPoint,dHasRedPoint
  225. end
  226. function ActivityFortnightTaskItem:HasRedPoint()
  227. if self.taskList == nil then
  228. return false
  229. end
  230. for i = 1, #self.taskList do
  231. local task = self.taskList[i]
  232. if task:HasRedPoint() then
  233. return true
  234. end
  235. end
  236. if self.boxRewards ~= nil then
  237. for i = 1, #self.boxRewards do
  238. if self.boxRewards[i]:IsCanGet() and not self.boxRewards[i]:IsGotReward() then
  239. return true
  240. end
  241. end
  242. end
  243. return false
  244. end
  245. function ActivityFortnightTaskItem:GetLeftTime()
  246. local leftTime = self.curDayEndTime - ManagerContainer.LuaTimerMgr:GetTimeSecond()
  247. if leftTime < 0 then
  248. leftTime = 0
  249. end
  250. return leftTime
  251. end
  252. return ActivityFortnightTaskItem