TreasureData.lua 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. local TreasureData = class("TreasureData", require("DataBase"))
  2. local ProtocalDataNormal = require("ProtocalDataNormal")
  3. local maxMessageCount = 10
  4. function TreasureData:ctor()
  5. self.data = {}
  6. end
  7. function TreasureData:InitTreasureData(data)
  8. self.data.boxList = {}
  9. for k,v in pairs(data.battle_box.box_list) do
  10. local boxData = ProtocalDataNormal.ParseBattleBoxData(v)
  11. local dif = ManagerContainer.LuaTimerMgr:GetRemainSecondsWithUInt64(boxData.coolTime)
  12. if dif <= 0 and #boxData.heroCoolList > 0 then
  13. boxData.boxId = 0
  14. end
  15. self.data.boxList[v.id] = boxData
  16. if boxData.boxId > 0 then
  17. ManagerContainer.DataMgr.UserData:RefreshHeroesTreasureState(boxData.heroCoolList, false)
  18. end
  19. end
  20. self.data.messageList = data.box_message_list
  21. end
  22. function TreasureData:GetBoxList()
  23. return self.data.boxList
  24. end
  25. function TreasureData:GetBoxListByIdx(idx)
  26. return self.data.boxList[idx]
  27. end
  28. function TreasureData:GetMessageList()
  29. return self.data.messageList
  30. end
  31. function TreasureData:RefreshTreasureData(data)
  32. for _,v in pairs(data.box_list) do
  33. local oldData = self.data.boxList[v.id]
  34. self.data.boxList[v.id] = ProtocalDataNormal.ParseBattleBoxData(v)
  35. local state = self:IsCurSlotBoxOver(v.id)
  36. if oldData ~= nil then
  37. local heroList = #oldData.heroCoolList > 0 and oldData.heroCoolList or self.data.boxList[v.id].heroCoolList
  38. ManagerContainer.DataMgr.UserData:RefreshHeroesTreasureState(heroList, state ~= Enum.SlotBoxState.Opened)
  39. end
  40. end
  41. end
  42. function TreasureData:NewSlotResultData(data)
  43. self.data.curSlotData = ProtocalDataNormal.ParseBattleBoxData(data.slot_data)
  44. end
  45. function TreasureData:GetSlotBoxCount()
  46. local count = 0
  47. for _,v in pairs(self.data.boxList) do
  48. local state = self:IsCurSlotBoxOver(v.id)
  49. if state ~= Enum.SlotBoxState.None then
  50. count = count + 1
  51. end
  52. end
  53. return count
  54. end
  55. function TreasureData:GetMinBoxSlotIdx()
  56. for _,v in pairs(self.data.boxList) do
  57. local state = self:IsCurSlotBoxOver(v.id)
  58. if state == Enum.SlotBoxState.None then
  59. return v.id
  60. end
  61. end
  62. return 1
  63. end
  64. function TreasureData:ResetBoxInfo(idx)
  65. local data = self.data.boxList[idx]
  66. data.boxId = 0
  67. ManagerContainer.DataMgr.UserData:RefreshHeroesTreasureState(data.heroCoolList, true)
  68. end
  69. function TreasureData:CheckAllBoxInfo()
  70. for _,v in pairs(self.data.boxList) do
  71. local state = self:IsCurSlotBoxOver(v.id)
  72. if state == Enum.SlotBoxState.None and v.state then
  73. self:ResetBoxInfo(v.id)
  74. end
  75. end
  76. end
  77. function TreasureData:IsCurSlotBoxOver(index)
  78. local slotBoxData = ManagerContainer.DataMgr.TreasureData:GetBoxListByIdx(index)
  79. if slotBoxData == nil then
  80. return Enum.SlotBoxState.None
  81. end
  82. if slotBoxData.boxId == 0 then
  83. return Enum.SlotBoxState.None
  84. end
  85. if not slotBoxData.state then
  86. return Enum.SlotBoxState.NoOpen
  87. end
  88. local dif = ManagerContainer.LuaTimerMgr:GetRemainSecondsWithUInt64(slotBoxData.coolTime)
  89. if dif > 0 then
  90. return Enum.SlotBoxState.Opened
  91. end
  92. return Enum.SlotBoxState.None
  93. end
  94. function TreasureData:GetCurSlotData()
  95. return self.data.curSlotData
  96. end
  97. function TreasureData:InsertNewMessages(message_list)
  98. local count = #message_list
  99. local newCount = #self.data.messageList + count
  100. if newCount >= maxMessageCount then
  101. local delta = newCount - maxMessageCount
  102. for i = 1,delta do
  103. table.remove(self.data.messageList, 1)
  104. end
  105. end
  106. for _,v in pairs(message_list) do
  107. table.insert(self.data.messageList, v)
  108. end
  109. end
  110. function TreasureData:RegisterNetEvents()
  111. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_REWARD_ACK, function(data)
  112. -- if data.error == Enum.NetErrorCode.ERROR_OK then
  113. -- self:NewSlotResultData(data)
  114. -- end
  115. -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.START_TREASURE_SLOT, data.error)
  116. -- end)
  117. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_MESSAGE_NTF, function(data)
  118. -- self:InsertNewMessages(data.message_list)
  119. -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.NEW_TREASURE_MESSAGE, data.message_list)
  120. -- end)
  121. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_CHANGE_NTF, function(data)
  122. -- self:RefreshTreasureData(data)
  123. -- end)
  124. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_REWARD_OPEN_ACK, function(data)
  125. -- if data.error == Enum.NetErrorCode.ERROR_OK then
  126. -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BOX_TREASURE_OPEN_SUCCESS)
  127. -- end
  128. -- end)
  129. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_REWARD_RECOVER_ACK, function(data)
  130. -- if data.error == Enum.NetErrorCode.ERROR_OK then
  131. -- local addItemMap = CommonUtil.ParseKeyValue2Map(data.item_list)
  132. -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_EQUIP_AND_ITEM_ADD, addItemMap)
  133. -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BOX_TREASURE_OPEN_SUCCESS)
  134. -- end
  135. -- end)
  136. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_RESET_ACK, function(data)
  137. -- if data.error == Enum.NetErrorCode.ERROR_OK then
  138. -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BOX_TREASURE_OPEN_SUCCESS)
  139. -- end
  140. -- end)
  141. end
  142. function TreasureData:Clear()
  143. self.data = {}
  144. end
  145. function TreasureData:Destroy()
  146. if self.Clear then
  147. self:Clear()
  148. end
  149. self:UnRegisterNetEvents()
  150. end
  151. function TreasureData:UnRegisterNetEvents()
  152. end
  153. return TreasureData