| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- local TreasureData = class("TreasureData", require("DataBase"))
- local ProtocalDataNormal = require("ProtocalDataNormal")
- local maxMessageCount = 10
- function TreasureData:ctor()
- self.data = {}
- end
- function TreasureData:InitTreasureData(data)
- self.data.boxList = {}
- for k,v in pairs(data.battle_box.box_list) do
- local boxData = ProtocalDataNormal.ParseBattleBoxData(v)
- local dif = ManagerContainer.LuaTimerMgr:GetRemainSecondsWithUInt64(boxData.coolTime)
- if dif <= 0 and #boxData.heroCoolList > 0 then
- boxData.boxId = 0
- end
- self.data.boxList[v.id] = boxData
- if boxData.boxId > 0 then
- ManagerContainer.DataMgr.UserData:RefreshHeroesTreasureState(boxData.heroCoolList, false)
- end
- end
- self.data.messageList = data.box_message_list
- end
- function TreasureData:GetBoxList()
- return self.data.boxList
- end
- function TreasureData:GetBoxListByIdx(idx)
- return self.data.boxList[idx]
- end
- function TreasureData:GetMessageList()
- return self.data.messageList
- end
- function TreasureData:RefreshTreasureData(data)
- for _,v in pairs(data.box_list) do
- local oldData = self.data.boxList[v.id]
- self.data.boxList[v.id] = ProtocalDataNormal.ParseBattleBoxData(v)
- local state = self:IsCurSlotBoxOver(v.id)
- if oldData ~= nil then
- local heroList = #oldData.heroCoolList > 0 and oldData.heroCoolList or self.data.boxList[v.id].heroCoolList
- ManagerContainer.DataMgr.UserData:RefreshHeroesTreasureState(heroList, state ~= Enum.SlotBoxState.Opened)
- end
- end
- end
- function TreasureData:NewSlotResultData(data)
- self.data.curSlotData = ProtocalDataNormal.ParseBattleBoxData(data.slot_data)
- end
- function TreasureData:GetSlotBoxCount()
- local count = 0
- for _,v in pairs(self.data.boxList) do
- local state = self:IsCurSlotBoxOver(v.id)
- if state ~= Enum.SlotBoxState.None then
- count = count + 1
- end
- end
- return count
- end
- function TreasureData:GetMinBoxSlotIdx()
- for _,v in pairs(self.data.boxList) do
- local state = self:IsCurSlotBoxOver(v.id)
- if state == Enum.SlotBoxState.None then
- return v.id
- end
- end
- return 1
- end
- function TreasureData:ResetBoxInfo(idx)
- local data = self.data.boxList[idx]
- data.boxId = 0
- ManagerContainer.DataMgr.UserData:RefreshHeroesTreasureState(data.heroCoolList, true)
- end
- function TreasureData:CheckAllBoxInfo()
- for _,v in pairs(self.data.boxList) do
- local state = self:IsCurSlotBoxOver(v.id)
- if state == Enum.SlotBoxState.None and v.state then
- self:ResetBoxInfo(v.id)
- end
- end
- end
- function TreasureData:IsCurSlotBoxOver(index)
- local slotBoxData = ManagerContainer.DataMgr.TreasureData:GetBoxListByIdx(index)
- if slotBoxData == nil then
- return Enum.SlotBoxState.None
- end
- if slotBoxData.boxId == 0 then
- return Enum.SlotBoxState.None
- end
- if not slotBoxData.state then
- return Enum.SlotBoxState.NoOpen
- end
- local dif = ManagerContainer.LuaTimerMgr:GetRemainSecondsWithUInt64(slotBoxData.coolTime)
- if dif > 0 then
- return Enum.SlotBoxState.Opened
- end
- return Enum.SlotBoxState.None
- end
- function TreasureData:GetCurSlotData()
- return self.data.curSlotData
- end
- function TreasureData:InsertNewMessages(message_list)
- local count = #message_list
- local newCount = #self.data.messageList + count
- if newCount >= maxMessageCount then
- local delta = newCount - maxMessageCount
- for i = 1,delta do
- table.remove(self.data.messageList, 1)
- end
- end
- for _,v in pairs(message_list) do
- table.insert(self.data.messageList, v)
- end
- end
- function TreasureData:RegisterNetEvents()
- -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_REWARD_ACK, function(data)
- -- if data.error == Enum.NetErrorCode.ERROR_OK then
- -- self:NewSlotResultData(data)
- -- end
- -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.START_TREASURE_SLOT, data.error)
- -- end)
- -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_MESSAGE_NTF, function(data)
- -- self:InsertNewMessages(data.message_list)
- -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.NEW_TREASURE_MESSAGE, data.message_list)
- -- end)
- -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_CHANGE_NTF, function(data)
- -- self:RefreshTreasureData(data)
- -- end)
- -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_REWARD_OPEN_ACK, function(data)
- -- if data.error == Enum.NetErrorCode.ERROR_OK then
- -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BOX_TREASURE_OPEN_SUCCESS)
- -- end
- -- end)
- -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_REWARD_RECOVER_ACK, function(data)
- -- if data.error == Enum.NetErrorCode.ERROR_OK then
- -- local addItemMap = CommonUtil.ParseKeyValue2Map(data.item_list)
- -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_EQUIP_AND_ITEM_ADD, addItemMap)
- -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BOX_TREASURE_OPEN_SUCCESS)
- -- end
- -- end)
- -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BATTLE_BOX_RESET_ACK, function(data)
- -- if data.error == Enum.NetErrorCode.ERROR_OK then
- -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.BOX_TREASURE_OPEN_SUCCESS)
- -- end
- -- end)
- end
- function TreasureData:Clear()
- self.data = {}
- end
- function TreasureData:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- function TreasureData:UnRegisterNetEvents()
- end
- return TreasureData
|