KLRecoverBagPanel.lua 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. ---@class KLRecoverBagPanel:UIKmlLuaPanelBase
  2. ---@field view KLRecoverBagPanelView
  3. local KLRecoverBagPanel = class(UIKmlLuaPanelBase)
  4. local this = KLRecoverBagPanel
  5. ---创建时调用一次
  6. function this:Init()
  7. self:InitData(self.args)
  8. local bag_info = string.split(SL:GetConfig("cfg_global", 6).value, '#')
  9. self.maxHor = tonumber(bag_info[1])
  10. self.maxVet = tonumber(bag_info[2])
  11. self.cfgNameStr = "cfg_recovery"
  12. EquipFunc:ReplaceEquipBagButton({self.view.person_shop_btn,self.view.storage_btn,self.view.recycle_btn,self.view.tidy_btn})
  13. if self.args and self.args.cfgNameStr then
  14. self.cfgNameStr = self.args.cfgNameStr
  15. end
  16. local x = self.x
  17. local y = self.y
  18. GUI:setPosition(self.view.root, x, y)
  19. if not self.args or not self.args.itemList then
  20. self.args.itemList = SL:GetCanRecycleItemList(self.cfgNameStr)
  21. end
  22. self.itemList = {}
  23. table.copyFrom(self.itemList, self.args.itemList)
  24. --local itemList = BagCellUtil.SortItemList(self.itemList)
  25. local itemList = SL.Bag:SortItemList(self.itemList)
  26. GUI:UIPanel_Open("dev/ui/Common/Item/KLUIBagTileScrollView/KLUIBagTileScrollViewItem", self.view.root, self,
  27. {--itemList= self:SortItemList(SL:GetCanRecycleItemList(self.cfgNameStr)) ,
  28. isShowEffect = true,
  29. --forbidCount = SL:GetMetaValue("BAG_FORBID_COUNT"),
  30. id = EBagTileScrollViewId.Recover,
  31. hor = tonumber(bag_info[1]),
  32. vet = tonumber(bag_info[2]),
  33. canDrag = false,
  34. itemClick = (self.args and self.args.itemClickCallBack),
  35. selectList = self.args and self.args.selectList,
  36. callBackUI = self.args and self.args.callBackUI },true,
  37. function(bagTileScrollView)
  38. ---@type KLUIBagTileScrollViewItem
  39. self.bagTileScrollView = bagTileScrollView
  40. bagTileScrollView:ClearBagItem()
  41. bagTileScrollView:RefreshItemByItem(itemList)
  42. end)
  43. end
  44. ---初始化数据
  45. function this:InitData(data)
  46. self.x = (data and data.x) or 0
  47. self.y = (data and data.y) or 0
  48. self.bagType = (data and data.bagType) or EBagShowType.Recycle
  49. end
  50. ---创建或者刷新界面数据时调用
  51. function this:Refresh()
  52. self.bagType = (self.args and self.args.bagType) or EBagShowType.Recycle
  53. end
  54. ---注册UI事件和服务器消息
  55. function this:RegistEvents()
  56. GUI:AddOnClickEvent(self.view.closeBtn, self, self.closeBtn)
  57. GUI:AddOnClickEvent(self.view.person_shop_btn, self, self.personBtn)
  58. GUI:AddOnClickEvent(self.view.storage_btn, self, self.personBtn)
  59. GUI:AddOnClickEvent(self.view.recycle_btn, self, self.personBtn)
  60. GUI:AddOnClickEvent(self.view.tidy_btn, self, self.personBtn)
  61. SL:RegisterLUAEvent(LUA_EVENT_BAG_CHANGE_AFTER, self.BagInfo_Change, self)
  62. SL:RegisterLUAEvent(LUA_EVENT_BAG_UNLOCK, self.LUA_EVENT_BAG_UNLOCK, self)
  63. SL:RegisterLUAEvent(Event.RecoverSelectChange, self.RecoverSelectChange, self)
  64. SL:RegisterLUAEvent(LUA_EVENT_BAG_SORT, self.LUA_EVENT_BAG_SORT, self)
  65. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ITEM_DECOMPOSITION, self.Decompose_Change, self)
  66. end
  67. function this:personBtn()
  68. SL:MessageTip({id=502})
  69. end
  70. function this:LUA_EVENT_BAG_UNLOCK(_, count)
  71. self.bagTileScrollView:RefreshForbidGrid(count)
  72. end
  73. ---@param data table<number,boolean>
  74. function this:RecoverSelectChange(id, data)
  75. self.bagTileScrollView:RefreshSelect(data)
  76. end
  77. function this:closeBtn()
  78. GUI:UIPanel_Close("dev/ui/Bag/Panel/KLRecoverBag/KLRecoverBagPanel")
  79. GUI:UIPanel_Close("dev/ui/Recover/Panel/KLRecover/KLRecoverPanel")
  80. GUI:UIPanel_Close("dev/ui/Equip/Panel/KLEquipDecomposeUI/KLEquipDecomposeUIPanel")
  81. GUI:UIPanel_Close("dev/ui/UIForgeGroup/Panel/KLUIForgeGroup/KLUIForgeGroupPanel")
  82. end
  83. function this:Close()
  84. end
  85. function this:UnlockGrid()
  86. end
  87. function this:dragEnd(eventData)
  88. end
  89. ---@param eventData {index:number,item:CommonProtos.Item}[]
  90. function this:BagInfo_Change(eventId, eventData)
  91. --self.isChangeBag = true
  92. --self.isChange = false
  93. -----做个筛选,不符合回收的筛选掉
  94. --for i, v in pairs(eventData) do
  95. -- if v.item ~= nil then
  96. -- if SL:HasConfig("cfg_item", v.item.cfgId) then
  97. -- if self.bagType == EBagShowType.Recycle then
  98. -- if SL:HasConfig(self.cfgNameStr, SL:GetConfig("cfg_item", v.item.cfgId).recoveryGroup) then
  99. -- self.itemList[SL:MeData_GetIndexBaseOnItemId(v.item.id) - 10000] = v.item
  100. -- self.isChange = true
  101. -- elseif self.bagType == EBagShowType.Decompose then
  102. -- if SL:HasConfig(self.cfgNameStr, SL:GetConfig("cfg_item", v.item.cfgId).decomposeGroup) then
  103. -- self.itemList[SL:MeData_GetIndexBaseOnItemId(v.item.id) - 10000] = v.item
  104. -- self.isChange = true
  105. -- end
  106. -- end
  107. -- end
  108. -- end
  109. -- end
  110. -- self:DelItem(v)
  111. --end
  112. local refreshItemCallback = nil
  113. local refreshItemCallbackUI = nil
  114. if self.bagType == EBagShowType.Recycle then
  115. refreshItemCallback = self.args.callBackUI.RefreshSelect
  116. refreshItemCallbackUI = self.args.callBackUI
  117. --self.args.callBackUI:RefreshSelect()
  118. elseif self.bagType == EBagShowType.Decompose then
  119. refreshItemCallback = self.args.callBackUI.ShowGetItemListBySelect
  120. refreshItemCallbackUI = self.args.callBackUI
  121. end
  122. local itemList = SL.Bag:SortItemList(self.itemList)
  123. self.bagTileScrollView:ClearBagItem()
  124. self.bagTileScrollView:RefreshItemByItem(itemList,refreshItemCallback,refreshItemCallbackUI)
  125. end
  126. ---@param eventData {index:number,item:CommonProtos.Item}[]
  127. function this:BagInfo_Change(eventId, eventData)
  128. self.isChangeBag = true
  129. self.isChange = false
  130. ---做个筛选,不符合回收的筛选掉
  131. for i, v in pairs(eventData) do
  132. if v.item ~= nil then
  133. if SL:HasConfig("cfg_item", v.item.cfgId) then
  134. if self.bagType == EBagShowType.Recycle then
  135. if SL:HasConfig(self.cfgNameStr, SL:GetConfig("cfg_item", v.item.cfgId).recoveryGroup) then
  136. self.itemList[SL:MeData_GetIndexBaseOnItemId(v.item.id) - 10000] = v.item
  137. self.isChange = true
  138. elseif self.bagType == EBagShowType.Decompose then
  139. --if SL:HasConfig(self.cfgNameStr, SL:GetConfig("cfg_item", v.item.cfgId).decomposeGroup) then
  140. -- self.itemList[SL:MeData_GetIndexBaseOnItemId(v.item.id) - 10000] = v.item
  141. -- self.isChange = true
  142. --end
  143. end
  144. end
  145. end
  146. end
  147. self:DelItem(v)
  148. end
  149. local refreshItemCallback = nil
  150. local refreshItemCallbackUI = nil
  151. if self.bagType == EBagShowType.Recycle then
  152. refreshItemCallback = self.args.callBackUI.RefreshSelect
  153. refreshItemCallbackUI = self.args.callBackUI
  154. --self.args.callBackUI:RefreshSelect()
  155. elseif self.bagType == EBagShowType.Decompose then
  156. refreshItemCallback = self.args.callBackUI.ShowGetItemListBySelect
  157. refreshItemCallbackUI = self.args.callBackUI
  158. --self.args.callBackUI:ShowGetItemListBySelect()
  159. end
  160. if self.isChange then
  161. --local itemList = BagCellUtil.SortItemList(self.itemList)
  162. local itemList = SL.Bag:SortItemList(self.itemList)
  163. self.bagTileScrollView:ClearBagItem()
  164. self.bagTileScrollView:RefreshItemByItem(itemList,refreshItemCallback,refreshItemCallbackUI)
  165. end
  166. self.isChangeBag = false
  167. end
  168. function this:Decompose_Change()
  169. local refreshItemCallback = self.args.callBackUI.ShowGetItemListBySelect
  170. local refreshItemCallbackUI = self.args.callBackUI
  171. self.itemList = SL:GetPlayerDecomposeItemList()
  172. local itemList = SL.Bag:SortItemList(self.itemList)
  173. self.bagTileScrollView:ClearBagItem()
  174. self.bagTileScrollView:RefreshItemByItem(itemList,refreshItemCallback,refreshItemCallbackUI)
  175. end
  176. ---删除物品
  177. ---@param data {index:number,item:CommonProtos.Item}
  178. function this:DelItem(data)
  179. local delItem = nil
  180. for z, a in pairs(self.itemList) do
  181. if data.index == z + 10000 then
  182. if data.item then
  183. if data.item.id ~= a.id then
  184. delItem = a
  185. break
  186. end
  187. else
  188. delItem = a
  189. break
  190. end
  191. end
  192. end
  193. if delItem then
  194. table.removeByKeyValue(self.itemList, delItem)
  195. self.isChange = true
  196. end
  197. end
  198. ---@param item KLBagItemItem
  199. function this:GetItemCanDrop(item)
  200. local article = SL:GetConfig('cfg_item', item.item.cfgId).article
  201. local cantDrop = table.contains(article, 2)
  202. if cantDrop then
  203. return false
  204. end
  205. return not item.item.bind
  206. end
  207. function this:LUA_EVENT_BAG_SORT(_, eventData)
  208. if self.isChangeBag then
  209. return
  210. end
  211. if self.bagType == EBagShowType.Recycle then
  212. self.itemList = SL:GetCanRecycleItemList(self.cfgNameStr)
  213. elseif self.bagType == EBagShowType.Decompose then
  214. self.itemList = SL:GetPlayerDecomposeItemList()
  215. end
  216. --local itemList = BagCellUtil.SortItemList(self.itemList)
  217. local itemList = SL.Bag:SortItemList(self.itemList)
  218. self.bagTileScrollView:ClearBagItem()
  219. self.bagTileScrollView:RefreshItemByItem(itemList)
  220. end
  221. return this