PetStampData.lua 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. local PetStampData = class("PetStampData", require("DataBase"))
  2. function PetStampData:ctor()
  3. self.data = {}
  4. end
  5. function PetStampData:InitPetStampData(data)
  6. if not self.data.stampMap then
  7. self.data.stampMap = {}
  8. end
  9. if not self.data.typeStamps then
  10. self.data.typeStamps = {}
  11. end
  12. local stampMap = self.data.stampMap
  13. local typeStamps = self.data.typeStamps
  14. if data then
  15. for i = 1, #data do
  16. local petStampData = data[i]
  17. if petStampData then
  18. local stamp = stampMap[petStampData.id]
  19. local type
  20. if not stamp then
  21. stamp, type = self:ProtocalDataToPetStampData(petStampData)
  22. stampMap[stamp.id] = stamp
  23. if typeStamps[type] == nil then
  24. typeStamps[type] = {}
  25. end
  26. typeStamps[type][#typeStamps[type] + 1] = stamp
  27. else
  28. stamp = self:ProtocalDataToPetStampData(petStampData, stamp)
  29. end
  30. end
  31. end
  32. end
  33. end
  34. function PetStampData:GetAllPetStampDataMap()
  35. return self.data.stampMap
  36. end
  37. function PetStampData:GetPetStampDataMapById(id)
  38. return self.data.stampMap[id]
  39. end
  40. function PetStampData:GetAllPetStampDatasByTypeExcludeId(type, id)
  41. if self.data.typeStamps[type] == nil then return {} end
  42. local list = {}
  43. local qualityStamp
  44. for k, v in pairs(self.data.typeStamps[type]) do
  45. if v.petId == 0 then
  46. if id == nil then
  47. list[#list + 1] = v
  48. else
  49. if id ~= v.id then
  50. list[#list + 1] = v
  51. end
  52. end
  53. if not qualityStamp then
  54. qualityStamp = v
  55. else
  56. if v.cfgData.Quality > qualityStamp.cfgData.Quality then
  57. qualityStamp = v
  58. end
  59. end
  60. end
  61. end
  62. return list, qualityStamp
  63. end
  64. function PetStampData:GetPetStampDatasByTypeAndId(type, id)
  65. if self.data.typeStamps[type] == nil then return nil end
  66. for i = 1, #self.data.typeStamps[type] do
  67. if self.data.typeStamps[type][i].cfgId == id then
  68. return self.data.typeStamps[type][i]
  69. end
  70. end
  71. return nil
  72. end
  73. function PetStampData:RefreshPetStampDatas(equip_list)
  74. if equip_list == nil then return nil end
  75. local addStamps = {}
  76. local stampMap = self.data.stampMap
  77. local typeStamps = self.data.typeStamps
  78. for _,item in ipairs(equip_list) do
  79. local isNew = false
  80. local id = item.id
  81. local stamp = stampMap[id]
  82. -- 更新装备
  83. if stamp then
  84. stamp = self:ProtocalDataToPetStampData(item, stamp)
  85. else
  86. local type = 1
  87. stamp, type = self:ProtocalDataToPetStampData(item)
  88. stampMap[id] = stamp
  89. if typeStamps[type] == nil then
  90. typeStamps[type] = {}
  91. end
  92. typeStamps[type][#typeStamps[type] + 1] = stamp
  93. isNew = true
  94. end
  95. if isNew then
  96. addStamps[stamp.cfgId] = stamp.lv
  97. end
  98. end
  99. return addStamps
  100. end
  101. function PetStampData:RegisterNetEvents()
  102. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_EQUIP_DATA_NTF, function(data)
  103. local addStamps = self:RefreshPetStampDatas(data.pet_equip_list)
  104. if next(addStamps) ~= nil then
  105. ManagerContainer.RedPointMgr.PetRPCtr:RefreshPetStampRPState()
  106. if not data.ignore then
  107. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_EQUIP_AND_ITEM_ADD, addStamps)
  108. end
  109. end
  110. end)
  111. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_EQUIP_LEVEL_UP_ACK, function(data)
  112. if data.error == Enum.NetErrorCode.ERROR_OK then
  113. ManagerContainer.RedPointMgr.PetRPCtr:RefreshPetStampRPState()
  114. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_STAMP_LEVEL_UP_REFRESH)
  115. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_STAMP_SLOT_REFRESH)
  116. end
  117. end)
  118. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_EQUIP_UP_ACK, function(data)
  119. if data.error == Enum.NetErrorCode.ERROR_OK then
  120. ManagerContainer.RedPointMgr.PetRPCtr:RefreshPetStampRPState()
  121. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_STAMP_SLOT_REFRESH)
  122. end
  123. end)
  124. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_EQUIP_DOWN_ACK, function(data)
  125. if data.error == Enum.NetErrorCode.ERROR_OK then
  126. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_STAMP_SLOT_REFRESH)
  127. end
  128. end)
  129. end
  130. function PetStampData:Clear()
  131. self.data = {}
  132. end
  133. function PetStampData:Destroy()
  134. if self.Clear then
  135. self:Clear()
  136. end
  137. self:UnRegisterNetEvents()
  138. end
  139. function PetStampData:UnRegisterNetEvents()
  140. end
  141. function PetStampData:ProtocalDataToPetStampData(protocalData, stampData)
  142. if not stampData then
  143. stampData = {}
  144. end
  145. stampData.id = protocalData.id
  146. stampData.cfgId = protocalData.equip_cfg_id
  147. if stampData.lv then
  148. stampData.oldLv = stampData.lv
  149. end
  150. stampData.lv = protocalData.level
  151. stampData.petId = protocalData.equip_pet_id
  152. local cfgData = ManagerContainer.CfgMgr:GetPetEquipCfgDataById(stampData.cfgId)
  153. if not cfgData then
  154. LogError("找不到该宠物印记" .. stampData.cfgId)
  155. return stampData, 1
  156. end
  157. stampData.cfgData = cfgData
  158. stampData.type = cfgData.Type
  159. stampData.quality = cfgData.Quality
  160. return stampData, cfgData.Type
  161. end
  162. return PetStampData