StallProxy.lua 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. local RemoteProxy = requireProxy("remote/RemoteProxy")
  2. local StallProxy = class("StallProxy", RemoteProxy)
  3. StallProxy.NAME = global.ProxyTable.StallProxy
  4. function StallProxy:ctor()
  5. StallProxy.super.ctor(self)
  6. self.isTrading = false
  7. self.MySellData = {}
  8. self.onSellData = {}
  9. self.showStoreName = nil
  10. self.seletedItem = nil
  11. self.nowOpenStoreId = nil
  12. self._currencies = {} -- 可摆摊货币
  13. end
  14. function StallProxy:onRegister()
  15. StallProxy.super.onRegister(self)
  16. end
  17. function StallProxy:CheckListViewFull()
  18. return #self.MySellData >= global.MMO.STALL_MAX_PAGE
  19. end
  20. function StallProxy:AddItemIntoList(data)
  21. local BagProxy = global.Facade:retrieveProxy(global.ProxyTable.Bag)
  22. local item = BagProxy:GetItemDataByMakeIndex(data.MakeIndex)
  23. if item then
  24. local BagProxy = global.Facade:retrieveProxy(global.ProxyTable.Bag)
  25. local bagPos = BagProxy:GetBagPosByMakeIndex(item.MakeIndex)
  26. BagProxy:DelItemData(item, true, nil, nil, true)
  27. item.goldtype = data.goldtype
  28. item.price = data.price
  29. item.bagPos = bagPos
  30. table.insert(self.MySellData, item)
  31. local ItemManagerProxy = global.Facade:retrieveProxy(global.ProxyTable.ItemManagerProxy)
  32. ItemManagerProxy:SetItemBelong(item.MakeIndex, global.MMO.ITEM_FROM_BELONG_STALL)
  33. global.Facade:sendNotification(global.NoticeTable.Layer_StallLayer_SelfItemChange)
  34. end
  35. end
  36. function StallProxy:GetMySellData()
  37. return self.MySellData
  38. end
  39. function StallProxy:GetMySellDataByMakeIndex(MakeIndex)
  40. local data = self:GetMySellData()
  41. if not data or next(data) == nil then
  42. return nil
  43. end
  44. local item = nil
  45. for k, v in pairs(data) do
  46. if v.MakeIndex == MakeIndex then
  47. item = v
  48. break
  49. end
  50. end
  51. return item
  52. end
  53. function StallProxy:AddOnSellItems(data)
  54. table.insert(self.onSellData, data)
  55. end
  56. function StallProxy:GetOnSellData()
  57. return self.onSellData
  58. end
  59. function StallProxy:GetOnSellDataByMakeIndex(MakeIndex)
  60. local data = self:GetOnSellData()
  61. if not data or next(data) == nil then
  62. return nil
  63. end
  64. local item = nil
  65. for k, v in pairs(data) do
  66. if v.MakeIndex == MakeIndex then
  67. item = v
  68. break
  69. end
  70. end
  71. return item
  72. end
  73. function StallProxy:GetSelectItem()
  74. return self.seletedItem
  75. end
  76. function StallProxy:SetSelectItem(itemIndex)
  77. self.seletedItem = itemIndex
  78. end
  79. function StallProxy:GetShowStoreName()
  80. return self.showStoreName
  81. end
  82. function StallProxy:SetShowStoreName(name)
  83. self.showStoreName = name
  84. end
  85. function StallProxy:GetNowOpenStoreId()
  86. return self.nowOpenStoreId
  87. end
  88. function StallProxy:SetNowOpenStoreId(userId)
  89. self.nowOpenStoreId = userId
  90. end
  91. function StallProxy:GetMyTradingStatus()
  92. return self.isTrading
  93. end
  94. function StallProxy:SetMyTradingStatus(status)
  95. self.isTrading = status
  96. end
  97. function StallProxy:OnStallStateDataChange(data)
  98. if not data or next(data) == nil then
  99. return
  100. end
  101. if not self:GetNowOpenStoreId() then
  102. return nil
  103. end
  104. local userId = data.userid
  105. local openStatus = data.status
  106. local nowOpen = self:GetNowOpenStoreId()
  107. if openStatus and userId then
  108. if openStatus == 0 then
  109. if nowOpen == userId then
  110. global.Facade:sendNotification(global.NoticeTable.Layer_StallLayer_Close)
  111. end
  112. end
  113. end
  114. end
  115. function StallProxy:CleanMySellData()
  116. local BagProxy = global.Facade:retrieveProxy(global.ProxyTable.Bag)
  117. if self.MySellData and next(self.MySellData) then
  118. for i, v in ipairs(self.MySellData) do
  119. v.goldtype = nil
  120. v.price = nil
  121. local ItemManagerProxy = global.Facade:retrieveProxy(global.ProxyTable.ItemManagerProxy)
  122. ItemManagerProxy:SetItemBelong(v.MakeIndex, global.MMO.ITEM_FROM_BELONG_STALL)
  123. BagProxy:AddItemDataAndNotice(v)
  124. end
  125. self.MySellData = {}
  126. end
  127. end
  128. function StallProxy:RequestPutInItem(MakeIndex)
  129. global.Facade:sendNotification(global.NoticeTable.Layer_Stall_Put_Open, MakeIndex)
  130. end
  131. function StallProxy:PutItemIntoAutoSellBag(MakeIndex, goldType, price)
  132. if not MakeIndex or not goldType or not price then
  133. return
  134. end
  135. local data = {}
  136. data.MakeIndex = MakeIndex
  137. data.goldtype = goldType
  138. data.price = price
  139. self:AddItemIntoList(data)
  140. end
  141. function StallProxy:PutOutItem(MakeIndex, onlyRemove)
  142. if not MakeIndex then
  143. return
  144. end
  145. if not onlyRemove and not CheckCanDoSomething() then
  146. return
  147. end
  148. local deleteIndex = nil
  149. local item = nil
  150. for i, v in ipairs(self.MySellData) do
  151. if v.MakeIndex == MakeIndex then
  152. deleteIndex = i
  153. item = v
  154. break
  155. end
  156. end
  157. if deleteIndex and item then
  158. table.remove(self.MySellData, deleteIndex)
  159. local ItemManagerProxy = global.Facade:retrieveProxy(global.ProxyTable.ItemManagerProxy)
  160. ItemManagerProxy:SetItemBelong(deleteIndex, global.MMO.ITEM_FROM_BELONG_STALL)
  161. if not onlyRemove then
  162. item.goldtype = nil
  163. item.price = 0
  164. local BagProxy = global.Facade:retrieveProxy(global.ProxyTable.Bag)
  165. BagProxy:AddItemDataAndNotice(item)
  166. end
  167. global.Facade:sendNotification(global.NoticeTable.Layer_StallLayer_SelfItemChange, item)
  168. end
  169. end
  170. function StallProxy:RequestAutoStall(name, cancel)
  171. if not cancel and (not name or name == "") then
  172. ShowSystemTips(GET_STRING(90170003))
  173. return
  174. end
  175. local data = {}
  176. data.name = name or ""
  177. if cancel then
  178. -- data.items = nil --发送的数据不要有key:items
  179. else
  180. for i, v in ipairs(self.MySellData) do
  181. if not data.items then
  182. data.items = {}
  183. end
  184. local sellData = {}
  185. sellData.makeindex = v.MakeIndex
  186. sellData.goldtype = v.goldtype
  187. sellData.price = v.price
  188. table.insert(data.items, sellData)
  189. end
  190. end
  191. if not cancel and not CheckCanDoSomething(true) then
  192. ShowSystemTips(GET_STRING(90170002))
  193. return
  194. end
  195. SendTableToServer(global.MsgType.MSG_CS_REQUEST_AUTO_STALL, data)
  196. end
  197. function StallProxy:RequestBuyItem(MakeIndex)
  198. local PayProxy = global.Facade:retrieveProxy(global.ProxyTable.PayProxy)
  199. local itemData = self:GetOnSellDataByMakeIndex(MakeIndex)
  200. if not itemData then
  201. return
  202. end
  203. local payInfo = {
  204. itemID = itemData.goldtype,
  205. itemNum = itemData.Price,
  206. bOneID = true,
  207. }
  208. if not PayProxy:CheckItemCountEX(payInfo) then
  209. return
  210. end
  211. local userid = self:GetNowOpenStoreId()
  212. if not userid then
  213. return
  214. end
  215. local data = {}
  216. data.userid = userid
  217. data.items = {
  218. makeindex = MakeIndex
  219. }
  220. SendTableToServer(global.MsgType.MSG_CS_REQUEST_STALL_BUY_ITEM, data)
  221. end
  222. function StallProxy:RequestItemList(userId)
  223. if not userId then
  224. return
  225. end
  226. local data = {}
  227. data.userid = userId
  228. SendTableToServer(global.MsgType.MSG_CS_REQUEST_STALL_INFO, data)
  229. end
  230. function StallProxy:ResponItemList(msg)
  231. local header = msg:GetHeader()
  232. local data = ParseRawMsgToJson(msg)
  233. if not data then
  234. return
  235. end
  236. self:CleanNowData()
  237. if data.items and next(data.items) then
  238. for i, v in ipairs(data.items) do
  239. local itemData = ChangeItemServersSendDatas(v)
  240. itemData.goldtype = v.goldtype
  241. self:AddOnSellItems(itemData)
  242. end
  243. end
  244. self:SetShowStoreName(data.name)
  245. self:SetNowOpenStoreId(data.userid)
  246. global.Facade:sendNotification(global.NoticeTable.Layer_StallLayer_ItemChange)
  247. SL:OpenStallLayerUI({ buy = true })
  248. end
  249. function StallProxy:CleanNowData()
  250. self.onSellData = {}
  251. self.showStoreName = nil
  252. self:SetNowOpenStoreId(nil)
  253. end
  254. function StallProxy:getCurrencies()
  255. return self._currencies
  256. end
  257. function StallProxy:addCurrency(item)
  258. table.insert(self._currencies, { id = item.Index, name = item.Name, item = item })
  259. end
  260. function StallProxy:clearCurrencies()
  261. self._currencies = {}
  262. end
  263. function StallProxy:RegisterMsgHandler()
  264. local msgType = global.MsgType
  265. -- 摆摊列表
  266. LuaRegisterMsgHandler(msgType.MSG_SC_RESPONE_STALL_INFO, handler(self, self.ResponItemList))
  267. end
  268. return StallProxy