local BoliShopData = class("BoliShopData",require("DataBase")) local ShopData = require('Shop/ShopData') local SHOP_REQ_CD = 1000 function BoliShopData:ctor() self.BoliData = nil self.BoliData ={} end function BoliShopData:RefreshBoliData(data) if data then if not self.BoliData then self.BoliData = {} end self.BoliData.lv = data.level self.BoliData.RewardList = self:RefreshRewardList(data.day_reward_list) self.BoliData.rewardTime = data.reward_time self.BoliData.showtime = data.show_time_stamp self:RefreshRedPointState() end end function BoliShopData:RefreshRewardList(list) local data = {} if list and #list > 0 then for i = 1, #list do data[list[i].key] = list[i].value end end return data end function BoliShopData:RefreshRedPointState() local lv = self:GetCurLv() for i = 1, lv do local data = self:GetRewardListById(i) if not data then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.BoliShopLvChange, true) return end end ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.BoliShopLvChange, false) end function BoliShopData:GetCurLv() return self.BoliData and self.BoliData.lv or 0 end function BoliShopData:GetShowTime() local time = self.BoliData and self.BoliData.showtime or 0 return type(time) == "number" and time or #time end function BoliShopData:GetCurExp() return CommonUtil.GetOwnResCountByItemId(Enum.ItemType.BoliShopExp) end function BoliShopData:GetRewardListById(id) return self.BoliData and self.BoliData.RewardList and self.BoliData.RewardList[id] end function BoliShopData:RegisterNetEvents() --波利商城刷新 ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_DATA_CHANGE_NTF, self.OnBoliDataChange,self) ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_SHOP_LEVEL_UP_ACK, self.OnBoliDataLevelUpAck,self) ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_SHOP_REWARD_ACK, self.OnBoliDataRewardListAck,self) ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_SHOP_BUY_ACK, self.OnBoliDataBuyAck,self) ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BOLI_SHOP_INFO_ACK, self.OnBoliDataInfoAck,self) end function BoliShopData:OnBoliDataInfoAck(data) if data.error == 0 then --商城信息返回 local shopDataMsg = data.shop_data if not shopDataMsg then return end if not self.shopData then self.shopData = ShopData:new() end self.shopData:SetData(shopDataMsg,true) ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_INFO_REFRESH) end end function BoliShopData:GetBoliShopData() return self.shopData end function BoliShopData:OnBoliDataLevelUpAck(data) if data.error == 0 then ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("BoliLvUp") local shopDataMsg = data.shop_data if not shopDataMsg then return end if not self.shopData then self.shopData = ShopData:new() end self.shopData:SetData(shopDataMsg,true) ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_INFO_REFRESH) end end function BoliShopData:OnBoliDataBuyAck(data) if data.error == 0 then local shopData = self:GetBoliShopData() if shopData then shopData:RefreshBuyInfoData(data) ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_INFO_REFRESH) end local itemList = data.item_list if itemList then local itemLength = #itemList if itemLength > 0 then local addItemMap = {} local cfgId, addNum, item for i = 1, itemLength do item = itemList[i] cfgId = item.key addNum = item.value if addItemMap[cfgId] then addItemMap[cfgId] = addItemMap[cfgId] + addNum else addItemMap[cfgId] = addNum end end ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_EQUIP_AND_ITEM_ADD, addItemMap) end end end end function BoliShopData:OnBoliDataRewardListAck(data) if data.error == 0 then ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_REWARD_TIPS, data.reward_list) end end function BoliShopData:SendBoliShopLevelUpReq(num) ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BOLI_SHOP_LEVEL_UP_REQ,{num = num}) end function BoliShopData:SendBoliShopRewardReq(lv,idx) ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BOLI_SHOP_REWARD_REQ, {reward_level = lv,idx = idx}) end function BoliShopData:SendBoliShopBuyReq(id, num) if self:IsCanSend() then ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BOLI_SHOP_BUY_REQ,{goods_id = id, goods_num = num}) return true end return false end function BoliShopData:IsCanSend(cdTime) local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime() if not self.lastSendMsgTime then self.lastSendMsgTime = curTime return true end local lastTime = self.lastSendMsgTime if lastTime then local cd = cdTime or SHOP_REQ_CD if (curTime - lastTime) < cd then return false end end self.lastSendMsgTime = curTime return true end function BoliShopData:SendBoliShopInfoReq() ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_BOLI_SHOP_INFO_REQ) end function BoliShopData:OnBoliDataChange(data) self:RefreshBoliData(data.boli_data) ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ON_BOLISHOP_DATA_CHANGE) end function BoliShopData:UnRegisterNetEvents() ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_DATA_CHANGE_NTF) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_SHOP_LEVEL_UP_ACK) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_SHOP_REWARD_ACK) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_SHOP_BUY_ACK) ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_BOLI_SHOP_INFO_ACK) end function BoliShopData:Clear() self.BoliData = nil end function BoliShopData:Destroy() if self.Clear then self:Clear() end self:UnRegisterNetEvents() end return BoliShopData