KLRecoverPanel.lua 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. ---@class KLRecoverPanel:UIKmlLuaPanelBase
  2. ---@field view KLRecoverPanelView
  3. ---@field typeList cfg_recovery_column[]
  4. ---@field goodsItem table<KingML.KmlControl,KLRecycleIncomeItemItem>
  5. ---@field getList table<number,{count:number,cfgId:number}>
  6. local KLRecoverPanel = class(UIKmlLuaPanelBase)
  7. local this = KLRecoverPanel
  8. ---创建时调用一次
  9. function this:Init()
  10. self.cfgNameStr = "cfg_recovery"
  11. self.recoverBagPanel = nil
  12. ---回收所得列表
  13. self.getList = {}
  14. ---回收所得道具展示
  15. self.goodsItem = {}
  16. ---回收类型列表
  17. self.typeList = {}
  18. self.selectItemList = {}
  19. ---回收所得列表
  20. GUI:DataListInitData(self.view.loopscrollviewData, function()
  21. return self:ItemCountFunc()
  22. end, function(realIndex)
  23. return self:ItemGetFunc(realIndex)
  24. end, function(realIndex, kmlCtrl)
  25. return self:ItemInitFunc(realIndex, kmlCtrl)
  26. end, function(realIndex, kmlCtrl)
  27. return self:ItemUpdateFunc(realIndex, kmlCtrl)
  28. end)
  29. ---获取类型列表
  30. self:GetTypeList()
  31. self.cfg_recovery_screen = SL:GetConfigTable("cfg_recovery_screen")
  32. ---类型选择列表
  33. -- for k, v in pairs(self.typeList) do
  34. -- ---@type KLRecoverTypeItem
  35. -- local homeTab = GUI:UIPanel_Open("dev/ui/Recover/Item/KLRecoverType/KLRecoverTypeItem", self.view.TypeContent, self, v, true)
  36. -- GUI:Toggle_setIsOn(homeTab.view.KmlRecycleTypeItemTemplate, SL:GetRecoverTypeState(v.id, self.cfgNameStr))
  37. -- GUI:SetToggleOnValueChange(homeTab.view.KmlRecycleTypeItemTemplate, self, self.TypeToggleChange, v.id)
  38. -- end
  39. self.recover_all_item = {}
  40. self.recover_data = nil
  41. for k, v in ipairs(self.typeList) do
  42. local id = v.id
  43. local _typeList = {}
  44. for ii, one in ipairs(self.cfg_recovery_screen) do
  45. if one.groupLevel == v.id then
  46. one.groupName1 = one.screenName
  47. table.insert(_typeList,one)
  48. end
  49. end
  50. v.typeList = _typeList
  51. ---@param homeTab KLRecoverTypeItem
  52. GUI:UIPanel_Open("dev/ui/Recover/Item/KLRecoverType/KLRecoverTypeItem", self.view.TypeContent, self, v, true,function(homeTab)
  53. GUI:SetToggleOnValueChange(homeTab.view.KmlRecycleTypeItemTemplate, self, self.ToggleChange, v.id)
  54. self.recover_all_item[tostring(id)] = homeTab
  55. end)
  56. end
  57. end
  58. ---创建或者刷新界面数据时调用
  59. function this:Refresh()
  60. SL.HideMainPanel()
  61. ---刷新特权展示
  62. self:RefreshPrivilegeInfo()
  63. ---刷新自动拾取勾选显示
  64. local isOpenPick = SL:GetPlayerAutoPickIsOpen()
  65. if isOpenPick then
  66. --isOpenPick = PrivilegeCardManager.isautoPotion()
  67. isOpenPick = InfoManager.monthCardInfo:IsHaveMonthCardRights("pickUp")
  68. end
  69. GUI:Toggle_setIsOn(self.view.AutoPickToggle, isOpenPick)
  70. local isOpenRecover = SL:GetPlayerAutoRecoverIsOpen()
  71. if isOpenRecover then
  72. isOpenRecover = PrivilegeCardManager.isautoRecovery()
  73. --isOpenRecover = InfoManager.monthCardInfo:IsHaveMonthCardRights("recovery")
  74. end
  75. ---刷新自动回收勾选
  76. GUI:Toggle_setIsOn(self.view.AutoRecoverToggle, isOpenRecover)
  77. -- ---刷新回收所得道具
  78. -- self:GetRecoverGetItem()
  79. -- ---显示背包
  80. -- self.recoverBagPanel = GUI:UIPanel_Open("dev/ui/Bag/Panel/KLRecoverBag/KLRecoverBagPanel", nil, nil, { x = -415, bagType = EBagShowType.Recycle, itemClickCallBack = self.ClickItemCallBack, selectList = self.selectItemList, callBackUI = self })
  81. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_RECYCLING_TYPE)
  82. end
  83. ---获取回收所得道具展示
  84. function this:GetRecoverGetItem()
  85. ---选中道具列表
  86. ---@type table<number,boolean>
  87. self.selectItemList = {}
  88. self.selectItemCount = {}
  89. ---选中道具索引列表
  90. self.SelectItemIndexList = {}
  91. ---@type table<number,{count:number,cfgId:number}>
  92. self.getList = {}
  93. ---@type number[]
  94. local typeList = SL:GetAutoRecoverTypeSetData(self.cfgNameStr)
  95. ---@param v CommonProtos.Item
  96. for i, v in pairs(SL:GetCanRecycleItemList(self.cfgNameStr)) do
  97. --(not自身职业的武器or评分不高于自身武器)and 强化等级==0 and 追加等级==0
  98. if (not SL:CheckEquipBaseCareer(v) or not self:CompareInitGrage(v)) and (EquipFunc.GetEquipStrengthLevel(v) == 0) and EquipFunc.GetEquipAppendLevel(v) == 0 then
  99. local configData = SL:GetConfig("cfg_item", v.cfgId)
  100. if table.contains(typeList, configData.recoveryGroup) then
  101. local recycleCfg = SL:GetConfig(self.cfgNameStr, configData.recoveryGroup)
  102. for k = 1, table.count(recycleCfg.material) do
  103. if not self:CheckExsit(recycleCfg.material[k], self.getList, configData.recoveryUp, v.count) then
  104. ---@type {count:number,cfgId:number}
  105. local getType = {}
  106. getType.cfgId = recycleCfg.material[k][1]
  107. getType.count = recycleCfg.material[k][2] * (1 + configData.recoveryUp / 100) * (1 + self.privilegeUp / 100)
  108. getType.count = getType.count * v.count
  109. table.insert(self.getList, getType)
  110. end
  111. end
  112. table.insert(self.SelectItemIndexList, { idxOfBags = SL:MeData_GetIndexBaseOnItemId(v.id), count = v.count })
  113. self.selectItemList[v.id] = true
  114. end
  115. end
  116. end
  117. self:ShowGetItemList()
  118. end
  119. ---获取回收所得道具展示 --多级页签选择的回收
  120. function this:GetRecoverGetItemMultistage()
  121. ---选中道具列表
  122. ---@type table<number,boolean>
  123. self.selectItemList = {}
  124. self.selectItemCount = {}
  125. ---选中道具索引列表
  126. self.SelectItemIndexList = {}
  127. ---@type table<number,{count:number,cfgId:number}>
  128. self.getList = {}
  129. ---@type number[]
  130. local typeList = {}
  131. if self.recover_data and next(self.recover_data) then
  132. for key, v in pairs(self.recover_data) do
  133. table.insert(typeList,tonumber(key))
  134. end
  135. end
  136. local allItem = self:GetCanRecover()
  137. ---@param v CommonProtos.Item
  138. for i, v in ipairs(allItem) do
  139. --(not自身职业的武器or评分不高于自身武器)and 强化等级==0 and 追加等级==0
  140. if (not SL:CheckEquipBaseCareer(v) or not self:CompareInitGrage(v)) and (EquipFunc.GetEquipStrengthLevel(v) == 0) and EquipFunc.GetEquipAppendLevel(v) == 0 then
  141. local configData = SL:GetConfig("cfg_item", v.cfgId)
  142. if table.contains(typeList, configData.recoveryGroup) then
  143. local group_str = tostring(configData.recoveryGroup)
  144. local is_add = false
  145. --如果是白装这种没有子页签的直接添加
  146. if self.recover_data[group_str] and self.recover_data[group_str]["1"] then
  147. for kk, group_id in pairs(self.recover_data[group_str]) do
  148. local one_tab = SL:GetConfig("cfg_recovery_screen",group_id)
  149. --比较阶数是否相等
  150. if one_tab.type == 1 then
  151. if configData.rank == one_tab.rank then
  152. is_add = true
  153. end
  154. --比较词条数是否相等
  155. elseif one_tab.type == 2 then
  156. local entryAttr = SL:GetEquipValue(EMetaVarGetKey.EQUIP_ENTRY_ATTR, "bag", v.cfgId, v.id)
  157. if entryAttr and #entryAttr == one_tab.count then
  158. is_add = true
  159. end
  160. --比较职业等级是否相等
  161. elseif one_tab.type == 3 then
  162. local career = one_tab.career
  163. local equip_job = configData.job
  164. for iii, one_list in ipairs(career) do
  165. for jjj, job_list in ipairs(equip_job) do
  166. if one_list[1] == job_list[1] and one_list[2] == job_list[2] then
  167. is_add = true
  168. break
  169. end
  170. end
  171. if is_add then
  172. break
  173. end
  174. end
  175. end
  176. end
  177. else
  178. is_add = true
  179. end
  180. if is_add then
  181. local recycleCfg = SL:GetConfig(self.cfgNameStr, configData.recoveryGroup)
  182. for k = 1, table.count(recycleCfg.material) do
  183. if not self:CheckExsit(recycleCfg.material[k], self.getList, configData.recoveryUp, v.count) then
  184. ---@type {count:number,cfgId:number}
  185. local getType = {}
  186. getType.cfgId = recycleCfg.material[k][1]
  187. getType.count = recycleCfg.material[k][2] * (1 + configData.recoveryUp / 100) * (1 + self.privilegeUp / 100)
  188. getType.count = getType.count * v.count
  189. table.insert(self.getList, getType)
  190. end
  191. end
  192. table.insert(self.SelectItemIndexList, { idxOfBags = SL:MeData_GetIndexBaseOnItemId(v.id), count = v.count })
  193. self.selectItemList[v.id] = true
  194. end
  195. end
  196. end
  197. end
  198. self:ShowGetItemList()
  199. end
  200. function this:GetCanRecover()
  201. local list = {}
  202. local bagData = SL:GetMetaValue(EMetaVarGetKey.BAG_DATA)
  203. local items = bagData[1]
  204. for i, v in pairs(items) do
  205. if SL:HasConfig("cfg_item", v.cfgId) then
  206. local item = SL:GetConfig("cfg_item",v.cfgId)
  207. if SL:HasConfig(self.cfgNameStr, item.recoveryGroup) then
  208. if self:FilterMedicine(v.cfgId) then
  209. table.insert(list,v)
  210. end
  211. end
  212. end
  213. end
  214. return list
  215. end
  216. local medicineLevel
  217. function this:CalculateMedicineLevelIfNeed()
  218. if medicineLevel then
  219. return
  220. end
  221. medicineLevel = {}
  222. ---@type cfg_npcShop_column[]
  223. local table = SL:GetConfigTable("cfg_npcShop")
  224. for _, v in pairs(table) do
  225. if v.shopId == 1 and not string.isNullOrEmpty(v.conditions) then --药水分类
  226. local itemId = v.itemId[1]
  227. local hightestLevel = tonumber(string.match(v.conditions,"checkLevel<=(%d+)"))
  228. medicineLevel[itemId] = hightestLevel
  229. end
  230. end
  231. end
  232. ---@药水回收规则:根据等级动态划分低级药水
  233. function this:FilterMedicine(itemId)
  234. self:CalculateMedicineLevelIfNeed()
  235. local level = SL:GetMetaValue(EMetaVarGetKey.LEVEL)
  236. if medicineLevel[itemId] then
  237. return medicineLevel[itemId] < level
  238. end
  239. return true
  240. end
  241. ---展示回收所得道具
  242. function this:ShowGetItemList()
  243. GUI:DataListUpdateData(self.view.loopscrollviewData)
  244. end
  245. ---点击背包item回调
  246. ---@param itemControl KLBagItemItemView
  247. ---@param itemData CommonProtos.Item
  248. function this:ClickItemCallBack(itemControl, itemData, itemSelf)
  249. if itemData.count > 1 and not self.selectItemList[itemData.id] then
  250. self.itemControl = itemControl
  251. self.itemSelf = itemSelf
  252. GUI:UIPanel_Open("dev/outui/SelectCount/Panel/KLSelectCount/KLSelectCountPanel", _, _, { itemid = itemData.cfgId, callbackUI = self, max = itemData.count, sure = self.CountSelect, id = itemData.id })
  253. return
  254. end
  255. self.selectItemList[itemData.id] = not self.selectItemList[itemData.id]
  256. self:SetSelectState(itemControl, itemSelf, self.selectItemList[itemData.id])
  257. ---根据背包内勾选刷新回收收益
  258. self:ShowGetItemListBySelect()
  259. end
  260. function this:CountSelect(id, count)
  261. self.selectItemCount[id] = count
  262. self.selectItemList[id] = not self.selectItemList[id]
  263. self:SetSelectState(self.itemControl, self.itemSelf, self.selectItemList[id])
  264. self:ShowGetItemListBySelect()
  265. end
  266. ---设置选中状态
  267. function this:SetSelectState(itemControl, itemSelf, isShow)
  268. itemSelf:SetSelectEffect(isShow, true)
  269. end
  270. ---根据背包内勾选刷新回收收益
  271. function this:ShowGetItemListBySelect()
  272. ---选中道具索引列表
  273. self.SelectItemIndexList = {}
  274. ---@type table<number,{count:number,cfgId:number}>
  275. self.getList = {}
  276. ---@type number[]
  277. -- local typeList=SL:GetAutoRecoverTypeSetData()
  278. ---@param v CommonProtos.Item
  279. for i, v in pairs(SL:GetCanRecycleItemList(self.cfgNameStr)) do
  280. local configData = SL:GetConfig("cfg_item", v.cfgId)
  281. local count = v.count
  282. ---主动勾选列表中为true
  283. if self.selectItemList[v.id] then
  284. local recycleCfg = SL:GetConfig(self.cfgNameStr, configData.recoveryGroup)
  285. for k = 1, table.count(recycleCfg.material) do
  286. count = self.selectItemCount[v.id] and self.selectItemCount[v.id] or v.count
  287. if not self:CheckExsit(recycleCfg.material[k], self.getList, configData.recoveryUp, count) then
  288. ---@type {count:number,cfgId:number}
  289. local getType = {}
  290. getType.cfgId = recycleCfg.material[k][1]
  291. getType.count = recycleCfg.material[k][2] * (1 + configData.recoveryUp / 100) * (1 + self.privilegeUp / 100)
  292. getType.count = getType.count * count
  293. table.insert(self.getList, getType)
  294. end
  295. end
  296. table.insert(self.SelectItemIndexList, { idxOfBags = SL:MeData_GetIndexBaseOnItemId(v.id), count = count })
  297. end
  298. end
  299. self:ShowGetItemList()
  300. end
  301. ---@param list table<number,{count:number,cfgId:number}>
  302. function this:CheckExsit(data, list, addUpNum, itemCount)
  303. for i, v in pairs(list) do
  304. if v.cfgId == data[1] then
  305. v.count = v.count + data[2] * (1 + addUpNum / 100) * (1 + self.privilegeUp / 100) * itemCount
  306. return true
  307. end
  308. end
  309. return false
  310. end
  311. function this:RefreshPrivilegeInfo()
  312. self.privilegeUp = PrivilegeCardManager.GetReclaimUp()
  313. if self.privilegeUp > 0 then
  314. GUI:setVisible(self.view.privilege_tip, true)
  315. GUI:Text_setString(self.view.privilege_tip, "已激活钻石特权:回收收益增加" .. self.privilegeUp .. "%")
  316. else
  317. GUI:setVisible(self.view.privilege_tip, false)
  318. end
  319. end
  320. ---注册UI事件和服务器消息
  321. function this:RegistEvents()
  322. GUI:AddOnClickEvent(self.view.closeBtn, self, self.BtnCloseOnClick)
  323. GUI:AddOnClickEvent(self.view.BtnRecover, self, self.BtnRecover)
  324. GUI:SetToggleOnValueChange(self.view.AutoPickToggle, self, self.AutoPickToggleChaneg)
  325. GUI:SetToggleOnValueChange(self.view.AutoRecoverToggle, self, self.AutoRecoverToggleChaneg)
  326. SL:RegisterLUAEvent(LUA_EVENT_Item_Recover, self.LUA_EVENT_Item_Recover, self)
  327. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GET_RECYCLING_TYPE,self.RES_GET_RECYCLING_TYPE,self)
  328. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_RECOVERY_REWARD,self.RES_RECOVERY_REWARD,self)
  329. end
  330. function this:UnRegistEvents()
  331. SL:UnRegisterLuaNetMsg(LuaMessageIdToClient.RES_GET_RECYCLING_TYPE,self.RES_GET_RECYCLING_TYPE,self)
  332. SL:UnRegisterLuaNetMsg(LuaMessageIdToClient.RES_RECOVERY_REWARD,self.RES_RECOVERY_REWARD,self)
  333. end
  334. function this:Close()
  335. self:UnRegistEvents()
  336. SL.ShowMainPanel()
  337. end
  338. ---关闭页面
  339. function this:BtnCloseOnClick()
  340. GUI:UIPanel_Close("dev/ui/Recover/Panel/KLRecover/KLRecoverPanel")
  341. GUI:UIPanel_Close("dev/ui/Bag/Panel/KLRecoverBag/KLRecoverBagPanel")
  342. GUI:UIPanel_Close("dev/ui/Recover/Panel/KLRecoverDetailedSettings/KLRecoverDetailedSettingsPanel")
  343. end
  344. ---请求回收
  345. function this:BtnRecover()
  346. --SL:SendRecoverItem(self.SelectItemIndexList)
  347. if not self.SelectItemIndexList or not next(self.SelectItemIndexList) then
  348. return
  349. end
  350. --新的回收逻辑
  351. local list = {}
  352. for i, v in ipairs(self.SelectItemIndexList) do
  353. list[tostring(v.idxOfBags)] = v.count
  354. end
  355. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ITEM_RECOVERY,list)
  356. end
  357. ---自动回收勾选修改
  358. function this:AutoRecoverToggleChaneg(_, customData, eventData)
  359. -- local IsNeedMonthCard, IsNeedDailyCard = InfoManager.monthCardInfo:IsNeedMonthAndDailyCard("recovery")
  360. -- if IsNeedMonthCard then
  361. -- if not InfoManager.monthCardInfo.IsGetMonthCard then
  362. -- if IsNeedDailyCard and not InfoManager.monthCardInfo.IsGetDailyCard then
  363. -- GUI:Toggle_setIsOn(self.view.AutoRecoverToggle, false)
  364. -- SL:CommonTipsMessage({ stringTblID = 231, showTips = "充值<color='#FFFF00'>月卡</color>开通自动回收", ui = self, sureBtnText = "确定", cancelBtnText = "取消",
  365. -- callback = self.OpenFirsh })
  366. -- return
  367. -- end
  368. -- if not IsNeedDailyCard then
  369. -- GUI:Toggle_setIsOn(self.view.AutoRecoverToggle, false)
  370. -- SL:CommonTipsMessage({ stringTblID = 231, showTips = "充值<color='#FFFF00'>月卡</color>开通自动回收", ui = self, sureBtnText = "确定", cancelBtnText = "取消",
  371. -- callback = self.OpenFirsh })
  372. -- return
  373. -- end
  374. -- end
  375. -- else
  376. -- if eventData[1] and not PrivilegeCardManager.isautoRecovery() then
  377. -- GUI:Toggle_setIsOn(self.view.AutoRecoverToggle, false)
  378. -- self:TipCardRecover()
  379. -- return
  380. -- end
  381. -- end
  382. if eventData[1] and not PrivilegeCardManager.isautoRecovery() then
  383. GUI:Toggle_setIsOn(self.view.AutoRecoverToggle, false)
  384. self:TipCardRecover()
  385. return
  386. end
  387. if eventData[1] == SL:GetPlayerAutoRecoverIsOpen() then
  388. return
  389. end
  390. ---设置一下数据
  391. -- SL:SetPlayerAutoRecover(eventData[1])
  392. ---发给服务器
  393. SL:SendPlayerAutoRecoverChange(eventData[1])
  394. end
  395. function this:TipCardRecover()
  396. SL:CommonTipsMessage({ stringTblID = 480, showTips = "", ui = self, sureBtnText = "确定", cancelBtnText = "取消",
  397. callback = self.OpenFirsh })
  398. end
  399. ---自动拾取勾选修改
  400. function this:AutoPickToggleChaneg(_, customData, eventData)
  401. -- local IsNeedMonthCard, IsNeedDailyCard = InfoManager.monthCardInfo:IsNeedMonthAndDailyCard("recovery")
  402. -- if IsNeedMonthCard then
  403. -- if not InfoManager.monthCardInfo.IsGetMonthCard then
  404. -- if IsNeedDailyCard and not InfoManager.monthCardInfo.IsGetDailyCard then
  405. -- GUI:Toggle_setIsOn(self.view.AutoPickToggle, false)
  406. -- SL:CommonTipsMessage({ stringTblID = 233, showTips = "充值<color='#FFFF00'>月卡</color>开通自动拾取", ui = self, sureBtnText = "确定", cancelBtnText = "取消",
  407. -- callback = self.OpenFirsh })
  408. -- return
  409. -- end
  410. -- if not IsNeedDailyCard then
  411. -- GUI:Toggle_setIsOn(self.view.AutoPickToggle, false)
  412. -- SL:CommonTipsMessage({ stringTblID = 233, showTips = "充值<color='#FFFF00'>月卡</color>开通自动拾取", ui = self, sureBtnText = "确定", cancelBtnText = "取消",
  413. -- callback = self.OpenFirsh })
  414. -- return
  415. -- end
  416. -- end
  417. -- else
  418. -- if eventData[1] and not PrivilegeCardManager.isautoPick() then
  419. -- GUI:Toggle_setIsOn(self.view.AutoPickToggle, false)
  420. -- self:TipCardPick()
  421. -- return
  422. -- end
  423. -- end
  424. if eventData[1] and not PrivilegeCardManager.isautoPick() then
  425. GUI:Toggle_setIsOn(self.view.AutoPickToggle, false)
  426. self:TipCardPick()
  427. return
  428. end
  429. if eventData[1] == SL:GetPlayerAutoPickIsOpen() then
  430. return
  431. end
  432. ---设置一下数据
  433. SL:SetPlayerAutoPick(eventData[1])
  434. ---发给服务器
  435. SL:SendPlayerAutoPickChange(eventData[1])
  436. end
  437. function this:TipCardPick()
  438. SL:CommonTipsMessage({ stringTblID = 479, showTips = "", ui = self, sureBtnText = "确定", cancelBtnText = "取消",
  439. callback = self.OpenFirsh })
  440. end
  441. function this:SetAutoRecover(val)
  442. GUI:Toggle_setIsOn(self.view.AutoRecoverToggle, val)
  443. end
  444. function this:OpenFirsh()
  445. --SL:TipMessage({ "首充还未开通", 1, NoticeType.NoticeMid })
  446. GUI:UIPanel_Close("dev/ui/Recover/Panel/KLRecover/KLRecoverPanel")
  447. GUI:UIPanel_Close("dev/ui/Bag/Panel/KLRecoverBag/KLRecoverBagPanel")
  448. --GUI:UIPanel_Open("dev/ui/ShopMall/Panel/KLShopMall/KLShopMallPanel")
  449. --GUI:UIPanel_Open("dev/outui/MonthCard/Panel/KLUIMonthCardMain/KLUIMonthCardMainPanel")
  450. GUI:UIPanel_Open("dev/outui/ShopMain/Panel/KLShopMain/KLShopMainPanel",nil,nil,2)
  451. end
  452. ---获取勾选类型列表
  453. function this:GetTypeList()
  454. ---@param v cfg_recovery_column
  455. for i, v in pairs(SL:GetConfigTable(self.cfgNameStr)) do
  456. if v.group == 1 and v.recoverType ~= 0 then
  457. table.insert(self.typeList, v)
  458. end
  459. end
  460. table.sort(self.typeList, function(a, b)
  461. return a.id < b.id
  462. end)
  463. end
  464. ---回收获得列表数量
  465. function this:ItemCountFunc()
  466. return table.count(self.getList)
  467. end
  468. function this:ItemGetFunc()
  469. ---@type KLRecycleIncomeItemItem
  470. local item = GUI:UIPanel_Open("dev/ui/Recover/Item/KLRecycleIncomeItem/KLRecycleIncomeItemItem", self.view.loopscrollviewData, self, nil, true)
  471. self.goodsItem[item.view.root] = item
  472. return item.view.root
  473. end
  474. ---回收获得数据初始化
  475. function this:ItemInitFunc(realIndex, kmlcontrol)
  476. end
  477. ---回收获得数据刷新
  478. function this:ItemUpdateFunc(realIndex, kmlCtrl)
  479. local data = self.getList[realIndex + 1]
  480. ---@type KLRecycleIncomeItemItem
  481. local goodsItem = self.goodsItem[kmlCtrl]
  482. goodsItem:RefreshItem(data)
  483. end
  484. ---勾选类型变更
  485. ---@param customData number @cfg_recovery表id
  486. function this:TypeToggleChange(_, customData, eventData)
  487. ---刷新勾选装备
  488. ---设置玩家当前勾选数据
  489. SL:SetAutoRecoverType(customData, eventData[1], self.cfgNameStr)
  490. ---发给服务器
  491. SL:SendPlayerAutoRecoverTypeChange({ customData }, { eventData[1] }, self.cfgNameStr)
  492. self:RefreshSelect()
  493. end
  494. function this:RefreshSelect_Old()
  495. ---刷新回收所得道具
  496. self:GetRecoverGetItem()
  497. ---刷新勾选
  498. --EventManager.Dispatch(Event.RecoverSelectChange, self.selectItemList)
  499. SL:onLUAEvent(Event.RecoverSelectChange, self.selectItemList)
  500. end
  501. function this:RefreshSelect()
  502. ---刷新回收所得道具
  503. self:GetRecoverGetItemMultistage()
  504. ---刷新勾选
  505. --EventManager.Dispatch(Event.RecoverSelectChange, self.selectItemList)
  506. SL:onLUAEvent(Event.RecoverSelectChange, self.selectItemList)
  507. end
  508. function this:LUA_EVENT_Item_Recover(id, itemList)
  509. SL:OpenRewardTipsByItemList(itemList, 0)
  510. ---刷新回收所得道具
  511. --self:GetRecoverGetItem()
  512. ---@type table<number,boolean>
  513. --self.selectItemList = {}
  514. --
  515. --self.selectItemCount = {}
  516. -----选中道具索引列表
  517. --self.SelectItemIndexList = {}
  518. -----@type table<number,{count:number,cfgId:number}>
  519. --self.getList = {}
  520. --self:ShowGetItemList()
  521. self:RefreshSelect()
  522. end
  523. function this:ShowTips()
  524. SL:CommonStrTipsMessage({ str = "1.道具回收后将返回对应的资源\n2.道具被回收后将从背包中移除\n3.道具被移除后将无法找回" })
  525. end
  526. ---与当前身上穿戴装备比较评分
  527. ---@param equip CommonProtos.Item
  528. function this:CompareInitGrage(equip)
  529. ---@type cfg_item_column
  530. local itemCfg = SL:GetConfig("cfg_item", equip.cfgId)
  531. ---@type cfg_equip_entryLib_column
  532. local entryLib = SL:GetConfig("cfg_equip_entryLib", equip.cfgId)
  533. local wearBars = SL:GetMetaValue(EMetaVarGetKey.GET_OPEN_WEARBARS)
  534. local wearBar = itemCfg.wearBarID[1]
  535. if wearBars and table.count(itemCfg.wearBarID) > 0 then
  536. for _, v in pairs(itemCfg.wearBarID) do
  537. if table.contains(wearBars, v) then
  538. wearBar = v
  539. break
  540. end
  541. end
  542. end
  543. local targetGrade
  544. --如果有多个穿戴位置
  545. --如果有位置没穿装备则算作该评分大于身上装备评分
  546. --如果都穿装备了,则与评分最低的装备做比较
  547. for _, pos in pairs(itemCfg.strPart) do
  548. local target = SL:GetMetaValue("EQUIP_TARGET_DATA", wearBar, pos)
  549. if target then
  550. ---@type cfg_equip_entryLib_column
  551. local targetEntryLib = SL:GetConfig("cfg_equip_entryLib", target.cfgId)
  552. if not targetGrade then
  553. targetGrade = targetEntryLib.replaceRating[2]
  554. else
  555. if targetEntryLib.replaceRating[2] < targetGrade then
  556. targetGrade = targetEntryLib.replaceRating[2]
  557. end
  558. end
  559. else
  560. targetGrade = -1
  561. break
  562. end
  563. end
  564. targetGrade = targetGrade or -1
  565. if entryLib.replaceRating[2] < targetGrade then
  566. return false
  567. elseif entryLib.replaceRating[2] == targetGrade then
  568. return false
  569. end
  570. return true
  571. end
  572. -- 返回回收类型
  573. function this:RES_GET_RECYCLING_TYPE(_id,message)
  574. --SL:LogTable(message,true)
  575. if message then
  576. self.recover_data = message
  577. else
  578. self.recover_data = {}
  579. end
  580. local all_true = {}
  581. for id,one_list in pairs(self.recover_data) do
  582. if self.recover_all_item[id] then
  583. GUI:Toggle_setIsOn(self.recover_all_item[id].view.KmlRecycleTypeItemTemplate, true)
  584. table.insert(all_true,id)
  585. end
  586. end
  587. for k, v in pairs(self.recover_all_item) do
  588. if table.contains(all_true,k) then
  589. else
  590. GUI:Toggle_setIsOn(v.view.KmlRecycleTypeItemTemplate,false)
  591. end
  592. end
  593. self:RefreshSelect()
  594. if not self.recoverBagPanel then
  595. ---显示背包
  596. self.recoverBagPanel = GUI:UIPanel_Open("dev/ui/Bag/Panel/KLRecoverBag/KLRecoverBagPanel", nil, nil, { x = -415, bagType = EBagShowType.Recycle, itemClickCallBack = self.ClickItemCallBack, selectList = self.selectItemList, callBackUI = self })
  597. end
  598. end
  599. ---勾选类型变更 一级页签
  600. ---@param customData number @cfg_recovery表id
  601. function this:ToggleChange(_, customData, eventData)
  602. if not self.recover_data then
  603. return
  604. end
  605. local key_str = tostring(customData)
  606. if not self.recover_data then
  607. self.recover_data = {}
  608. end
  609. if not self.recover_data[key_str] then
  610. if not eventData[1] then
  611. return
  612. end
  613. self.recover_data[key_str] = {}
  614. -- 一级页签直接勾选的时候,二级页签全部选中
  615. local _typeList = {}
  616. local index = 1
  617. for ii, one in ipairs(self.cfg_recovery_screen) do
  618. if one.groupLevel == customData then
  619. _typeList[tostring(index)] = one.id
  620. index = index + 1
  621. end
  622. end
  623. self.recover_data[key_str] = _typeList
  624. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_SETTING_RECYCLING_TYPE,self.recover_data)
  625. else
  626. if eventData[1] then
  627. return
  628. end
  629. self.recover_data[key_str] = nil
  630. -- 一级页签直接取消的时候,二级页签取消
  631. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_SETTING_RECYCLING_TYPE,self.recover_data)
  632. end
  633. end
  634. function this:RES_RECOVERY_REWARD(_id,message)
  635. if message then
  636. self:RefreshSelect()
  637. end
  638. end
  639. return this