BoliShopData.lua 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. local BoliShopData = class("BoliShopData",require("DataBase"))
  2. local ShopData = require('Shop/ShopData')
  3. local SHOP_REQ_CD = 1000
  4. function BoliShopData:ctor()
  5. self.BoliData = nil
  6. self.BoliData ={}
  7. end
  8. function BoliShopData:RefreshBoliData(data)
  9. if data then
  10. if not self.BoliData then
  11. self.BoliData = {}
  12. end
  13. self.BoliData.lv = data.level
  14. self.BoliData.RewardList = self:RefreshRewardList(data.day_reward_list)
  15. self.BoliData.rewardTime = data.reward_time
  16. self.BoliData.showtime = data.show_time_stamp
  17. self:RefreshRedPointState()
  18. end
  19. end
  20. function BoliShopData:RefreshRewardList(list)
  21. local data = {}
  22. if list and #list > 0 then
  23. for i = 1, #list do
  24. data[list[i].key] = list[i].value
  25. end
  26. end
  27. return data
  28. end
  29. function BoliShopData:RefreshRedPointState()
  30. local lv = self:GetCurLv()
  31. for i = 1, lv do
  32. local data = self:GetRewardListById(i)
  33. if not data then
  34. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.BoliShopLvChange, true)
  35. return
  36. end
  37. end
  38. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.BoliShopLvChange, false)
  39. end
  40. function BoliShopData:GetCurLv()
  41. return self.BoliData and self.BoliData.lv or 0
  42. end
  43. function BoliShopData:GetShowTime()
  44. local time = self.BoliData and self.BoliData.showtime or 0
  45. return type(time) == "number" and time or #time
  46. end
  47. function BoliShopData:GetCurExp()
  48. return CommonUtil.GetOwnResCountByItemId(Enum.ItemType.BoliShopExp)
  49. end
  50. function BoliShopData:GetRewardListById(id)
  51. return self.BoliData and self.BoliData.RewardList and self.BoliData.RewardList[id]
  52. end
  53. function BoliShopData:RegisterNetEvents()
  54. --波利商城刷新
  55. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_DATA_CHANGE_NTF, self.OnBoliDataChange,self)
  56. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_SHOP_LEVEL_UP_ACK, self.OnBoliDataLevelUpAck,self)
  57. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_SHOP_REWARD_ACK, self.OnBoliDataRewardListAck,self)
  58. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_SHOP_BUY_ACK, self.OnBoliDataBuyAck,self)
  59. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_SHOP_INFO_ACK, self.OnBoliDataInfoAck,self)
  60. end
  61. function BoliShopData:OnBoliDataInfoAck(data)
  62. if data.error == 0 then
  63. --商城信息返回
  64. local shopDataMsg = data.shop_data
  65. if not shopDataMsg then return end
  66. if not self.shopData then
  67. self.shopData = ShopData:new()
  68. end
  69. self.shopData:SetData(shopDataMsg,true)
  70. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_INFO_REFRESH)
  71. end
  72. end
  73. function BoliShopData:GetBoliShopData()
  74. return self.shopData
  75. end
  76. function BoliShopData:OnBoliDataLevelUpAck(data)
  77. if data.error == 0 then
  78. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("BoliLvUp")
  79. local shopDataMsg = data.shop_data
  80. if not shopDataMsg then return end
  81. if not self.shopData then
  82. self.shopData = ShopData:new()
  83. end
  84. self.shopData:SetData(shopDataMsg,true)
  85. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_INFO_REFRESH)
  86. end
  87. end
  88. function BoliShopData:OnBoliDataBuyAck(data)
  89. if data.error == 0 then
  90. local shopData = self:GetBoliShopData()
  91. if shopData then
  92. shopData:RefreshBuyInfoData(data)
  93. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_INFO_REFRESH)
  94. end
  95. local itemList = data.item_list
  96. if itemList then
  97. local itemLength = #itemList
  98. if itemLength > 0 then
  99. local addItemMap = {}
  100. local cfgId, addNum, item
  101. for i = 1, itemLength do
  102. item = itemList[i]
  103. cfgId = item.key
  104. addNum = item.value
  105. if addItemMap[cfgId] then
  106. addItemMap[cfgId] = addItemMap[cfgId] + addNum
  107. else
  108. addItemMap[cfgId] = addNum
  109. end
  110. end
  111. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_EQUIP_AND_ITEM_ADD, addItemMap)
  112. end
  113. end
  114. end
  115. end
  116. function BoliShopData:OnBoliDataRewardListAck(data)
  117. if data.error == 0 then
  118. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_REWARD_TIPS, data.reward_list)
  119. end
  120. end
  121. function BoliShopData:SendBoliShopLevelUpReq(num)
  122. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BOLI_SHOP_LEVEL_UP_REQ,{num = num})
  123. end
  124. function BoliShopData:SendBoliShopRewardReq(lv,idx)
  125. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BOLI_SHOP_REWARD_REQ, {reward_level = lv,idx = idx})
  126. end
  127. function BoliShopData:SendBoliShopBuyReq(id, num)
  128. if self:IsCanSend() then
  129. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BOLI_SHOP_BUY_REQ,{goods_id = id, goods_num = num})
  130. return true
  131. end
  132. return false
  133. end
  134. function BoliShopData:IsCanSend(cdTime)
  135. local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  136. if not self.lastSendMsgTime then
  137. self.lastSendMsgTime = curTime
  138. return true
  139. end
  140. local lastTime = self.lastSendMsgTime
  141. if lastTime then
  142. local cd = cdTime or SHOP_REQ_CD
  143. if (curTime - lastTime) < cd then
  144. return false
  145. end
  146. end
  147. self.lastSendMsgTime = curTime
  148. return true
  149. end
  150. function BoliShopData:SendBoliShopInfoReq()
  151. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BOLI_SHOP_INFO_REQ)
  152. end
  153. function BoliShopData:OnBoliDataChange(data)
  154. self:RefreshBoliData(data.boli_data)
  155. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_DATA_CHANGE)
  156. end
  157. function BoliShopData:UnRegisterNetEvents()
  158. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_DATA_CHANGE_NTF)
  159. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_SHOP_LEVEL_UP_ACK)
  160. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_SHOP_REWARD_ACK)
  161. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_SHOP_BUY_ACK)
  162. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_SHOP_INFO_ACK)
  163. end
  164. function BoliShopData:Clear()
  165. self.BoliData = nil
  166. end
  167. function BoliShopData:Destroy()
  168. if self.Clear then
  169. self:Clear()
  170. end
  171. self:UnRegisterNetEvents()
  172. end
  173. return BoliShopData