| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- local PetStampData = class("PetStampData", require("DataBase"))
- function PetStampData:ctor()
- self.data = {}
- end
- function PetStampData:InitPetStampData(data)
- if not self.data.stampMap then
- self.data.stampMap = {}
- end
- if not self.data.typeStamps then
- self.data.typeStamps = {}
- end
- local stampMap = self.data.stampMap
- local typeStamps = self.data.typeStamps
- if data then
- for i = 1, #data do
- local petStampData = data[i]
- if petStampData then
- local stamp = stampMap[petStampData.id]
- local type
- if not stamp then
- stamp, type = self:ProtocalDataToPetStampData(petStampData)
- stampMap[stamp.id] = stamp
- if typeStamps[type] == nil then
- typeStamps[type] = {}
- end
- typeStamps[type][#typeStamps[type] + 1] = stamp
- else
- stamp = self:ProtocalDataToPetStampData(petStampData, stamp)
- end
- end
- end
- end
- end
- function PetStampData:GetAllPetStampDataMap()
- return self.data.stampMap
- end
- function PetStampData:GetPetStampDataMapById(id)
- return self.data.stampMap[id]
- end
- function PetStampData:GetAllPetStampDatasByTypeExcludeId(type, id)
- if self.data.typeStamps[type] == nil then return {} end
- local list = {}
- local qualityStamp
- for k, v in pairs(self.data.typeStamps[type]) do
- if v.petId == 0 then
- if id == nil then
- list[#list + 1] = v
- else
- if id ~= v.id then
- list[#list + 1] = v
- end
- end
- if not qualityStamp then
- qualityStamp = v
- else
- if v.cfgData.Quality > qualityStamp.cfgData.Quality then
- qualityStamp = v
- end
- end
- end
- end
- return list, qualityStamp
- end
- function PetStampData:GetPetStampDatasByTypeAndId(type, id)
- if self.data.typeStamps[type] == nil then return nil end
- for i = 1, #self.data.typeStamps[type] do
- if self.data.typeStamps[type][i].cfgId == id then
- return self.data.typeStamps[type][i]
- end
- end
- return nil
- end
- function PetStampData:RefreshPetStampDatas(equip_list)
- if equip_list == nil then return nil end
- local addStamps = {}
- local stampMap = self.data.stampMap
- local typeStamps = self.data.typeStamps
- for _,item in ipairs(equip_list) do
- local isNew = false
- local id = item.id
- local stamp = stampMap[id]
- -- 更新装备
- if stamp then
- stamp = self:ProtocalDataToPetStampData(item, stamp)
- else
- local type = 1
- stamp, type = self:ProtocalDataToPetStampData(item)
- stampMap[id] = stamp
- if typeStamps[type] == nil then
- typeStamps[type] = {}
- end
- typeStamps[type][#typeStamps[type] + 1] = stamp
- isNew = true
- end
- if isNew then
- addStamps[stamp.cfgId] = stamp.lv
- end
- end
- return addStamps
- end
- function PetStampData:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_EQUIP_DATA_NTF, function(data)
- local addStamps = self:RefreshPetStampDatas(data.pet_equip_list)
- if next(addStamps) ~= nil then
- ManagerContainer.RedPointMgr.PetRPCtr:RefreshPetStampRPState()
- if not data.ignore then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_EQUIP_AND_ITEM_ADD, addStamps)
- end
- end
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_EQUIP_LEVEL_UP_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- ManagerContainer.RedPointMgr.PetRPCtr:RefreshPetStampRPState()
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_STAMP_LEVEL_UP_REFRESH)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_STAMP_SLOT_REFRESH)
- end
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_EQUIP_UP_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- ManagerContainer.RedPointMgr.PetRPCtr:RefreshPetStampRPState()
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_STAMP_SLOT_REFRESH)
- end
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_EQUIP_DOWN_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_STAMP_SLOT_REFRESH)
- end
- end)
- end
- function PetStampData:Clear()
- self.data = {}
- end
- function PetStampData:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- function PetStampData:UnRegisterNetEvents()
- end
- function PetStampData:ProtocalDataToPetStampData(protocalData, stampData)
- if not stampData then
- stampData = {}
- end
- stampData.id = protocalData.id
- stampData.cfgId = protocalData.equip_cfg_id
- if stampData.lv then
- stampData.oldLv = stampData.lv
- end
- stampData.lv = protocalData.level
- stampData.petId = protocalData.equip_pet_id
- local cfgData = ManagerContainer.CfgMgr:GetPetEquipCfgDataById(stampData.cfgId)
- if not cfgData then
- LogError("找不到该宠物印记" .. stampData.cfgId)
- return stampData, 1
- end
- stampData.cfgData = cfgData
- stampData.type = cfgData.Type
- stampData.quality = cfgData.Quality
- return stampData, cfgData.Type
- end
- return PetStampData
|