PetCollectBookData.lua 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. local PetCollectBookData = class("PetCollectBookData")
  2. local BitUtil = require("BitUtil")
  3. function PetCollectBookData:ctor()
  4. self.data = {}
  5. self.totalCount = 0
  6. self.normalCount = 0
  7. self.miniCount = 0
  8. self.mvpCount = 0
  9. self.data.petManualMap = {}
  10. end
  11. function PetCollectBookData:InitData(pet_manual_list)
  12. if not pet_manual_list then return end
  13. for k,v in pairs(pet_manual_list) do
  14. local data = {}
  15. data.cfgId = v.pet_cfg_id
  16. data.advLevel = v.adv_level
  17. data.rewardState = v.reward_state
  18. if not self.data.petManualMap[data.cfgId] then
  19. self.totalCount = self.totalCount + 1
  20. local cfgId = 800 + data.cfgId
  21. local petCfgData = ManagerContainer.CfgMgr:GetPetDataById(cfgId)
  22. if petCfgData then
  23. if petCfgData.Quality == 1 then
  24. self.normalCount = self.normalCount + 1
  25. elseif petCfgData.Quality == 2 then
  26. self.miniCount = self.miniCount + 1
  27. elseif petCfgData.Quality == 3 then
  28. self.mvpCount = self.mvpCount + 1
  29. end
  30. end
  31. end
  32. self.data.petManualMap[data.cfgId] = data
  33. end
  34. self:RefreshRedPoint()
  35. end
  36. function PetCollectBookData:RefreshRedPoint()
  37. for k, v in pairs(self.data.petManualMap) do
  38. local cfgId = v.cfgId + 800
  39. local state = v.rewardState
  40. local curAdvLv = v.advLevel
  41. local cfgData = ManagerContainer.CfgMgr:GetPetDataById(cfgId)
  42. if cfgData and cfgData.PetReward then
  43. for i = 1, #cfgData.PetReward do
  44. local adv = cfgData.PetReward[i][1]
  45. if curAdvLv >= adv then
  46. local rewarded = BitUtil.RshiftNumBandOne(state, adv) == 1
  47. if not rewarded then
  48. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.PetCollection, true)
  49. return
  50. end
  51. end
  52. end
  53. end
  54. end
  55. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.PetCollection, false)
  56. end
  57. function PetCollectBookData:GetActivedPetCount(type)
  58. if type == Enum.CollectQualityType.ALL then
  59. return self.totalCount
  60. elseif type == Enum.CollectQualityType.NORMAL then
  61. return self.normalCount
  62. elseif type == Enum.CollectQualityType.MINIBOSS then
  63. return self.miniCount
  64. elseif type == Enum.CollectQualityType.MVP then
  65. return self.mvpCount
  66. end
  67. return 0
  68. end
  69. function PetCollectBookData:GetPetCollectBoolState(cfgId)
  70. local idx = cfgId - 800
  71. return self.data.petManualMap[idx] ~= nil
  72. end
  73. function PetCollectBookData:GetPetCollectRewardState(cfgId)
  74. local idx = cfgId - 800
  75. local state = self.data.petManualMap[idx] and self.data.petManualMap[idx].rewardState or 0
  76. local curAdvLv = self.data.petManualMap[idx] and self.data.petManualMap[idx].advLevel or 0
  77. return state, curAdvLv, self.data.petManualMap[idx] ~= nil
  78. end
  79. function PetCollectBookData:SendPetReward(cfgId, advLv, petId)
  80. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_PET_MANUAL_REWARD_REQ, {pet_cfg_id = cfgId, pet_adv_level = advLv, pet_id = petId})
  81. end
  82. function PetCollectBookData:QueryFirstRank(cfgId)
  83. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_PET_ADV_ACHIEVEMENT_REQ, {pet_cfg_id = cfgId})
  84. end
  85. function PetCollectBookData:RegisterNetEvents()
  86. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_MANUAL_REWARD_ACK, function(data)
  87. if data.error == Enum.NetErrorCode.ERROR_OK then
  88. CommonUtil.ACKShowRewardList(data.reward_list)
  89. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PET_HANDBOOK_REWARD_REFRESH, data.pet_cfg_id)
  90. end
  91. end)
  92. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_PET_ADV_ACHIEVEMENT_ACK, function(data)
  93. if data.error == Enum.NetErrorCode.ERROR_OK then
  94. if data.brief then
  95. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.CARD_HANDBOOK_RANK_REFRESH, data.brief, data.achievement_time)
  96. end
  97. end
  98. end)
  99. end
  100. function PetCollectBookData:Clear()
  101. self.data = {}
  102. self.totalCount = 0
  103. self.normalCount = 0
  104. self.miniCount = 0
  105. self.mvpCount = 0
  106. self.data.petManualMap = {}
  107. end
  108. function PetCollectBookData:Destroy()
  109. self.data = {}
  110. self:UnRegisterNetEvents()
  111. end
  112. function PetCollectBookData:UnRegisterNetEvents()
  113. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_PET_MANUAL_REWARD_ACK)
  114. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_PET_ADV_ACHIEVEMENT_ACK)
  115. end
  116. return PetCollectBookData