KLEquipOverlayPanel.lua 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690
  1. ---@class KLEquipOverlayPanel:UIKmlLuaPanelBase
  2. ---@field view KLEquipOverlayPanelView
  3. ---@field mainItem @主装备
  4. ---@field assistantItem @副装备
  5. ---@field mainEntry @主装备词条信息
  6. ---@field assistantEntry @副装备词条信息
  7. ---@field showEntryList @已经展示的词条信息列表,用于展示后设置
  8. ---@field lockNum @已锁定词条数量
  9. ---@field bagItems
  10. ---@field equipItems
  11. ---@field specialCost @消耗的特殊道具
  12. ---@field Cost @普通消耗
  13. ---@field showItemList @显示在背包中的道具
  14. ---@field excludeItemid number @需要排除的id
  15. local KLEquipOverlayPanel = class(UIKmlLuaPanelBase)
  16. local this = KLEquipOverlayPanel
  17. ---创建时调用一次
  18. function this:Init()
  19. self.bagItems = {}
  20. self.equipItems = {}
  21. self.specialCost = {}
  22. self.Cost = {}
  23. self.excludeItemid = 0
  24. GUI:UIPanel_Open("dev/outui/Bag/Panel/KLOverlayBag/KLOverlayBagPanel", nil, nil, { itemList = self:GetOverlayItem(), x = -482, y = 0, selectList={}, itemClick = self.ItemClick, callBackUI = self },false,function(bagUI)
  25. self.bagUI = bagUI
  26. end)
  27. end
  28. ---创建或者刷新界面数据时调用
  29. function this:Refresh()
  30. self.mainItem = {}
  31. self.assistantItem = {}
  32. self.showEntryList = {}
  33. GUI:setVisible(self.view.Add_CostItem_panel, false)
  34. self.lockNum = 0
  35. GUI:DataListInitData(self.view.entry_list, function()
  36. return table.count(self.mainEntry) + table.count(self.assistantEntry)
  37. end, function(realIndex)
  38. end, function(realIndex, kmlcontrol)
  39. end, function(realIndex, kmlcontrol)
  40. return self:DataListEntryUpdateFunc(realIndex, kmlcontrol)
  41. end)
  42. end
  43. ---注册UI事件和服务器消息
  44. function this:RegistEvents()
  45. GUI:AddOnClickEvent(self.view.closePanel, self, self.ClosePanel)
  46. GUI:AddOnClickEvent(self.view.zhu_click, self, self.ClickMainItem)
  47. GUI:AddOnClickEvent(self.view.fu_click, self, self.ClickAssistantItem)
  48. GUI:AddOnClickEvent(self.view.LuckyClick, self, self.OpenCostItemPanel)
  49. GUI:AddOnClickEvent(self.view.rate_sure_btn, self, self.RateSure)
  50. GUI:AddOnClickEvent(self.view.CostItem_mask, self, self.RateSure)
  51. GUI:Slider_addOnEvent(self.view.rate_item_slider, self, self.SliderChange)
  52. GUI:AddOnClickEvent(self.view.rate_item_add, self, function()
  53. self:SliderBtn(1)
  54. end)
  55. GUI:AddOnClickEvent(self.view.rate_item_sub, self, function()
  56. self:SliderBtn(-1)
  57. end)
  58. GUI:AddOnClickEvent(self.view.cost_btn, self, self.COSTBTN)
  59. GUI:AddOnClickEvent(self.view.helptip, self, self.HelpTip)
  60. GUI:AddOnClickEvent(self.view.Overlay_btn, self, self.Overlay)
  61. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_EQUIP_OVERLAY, self.RES_EQUIP_OVERLAY, self)
  62. --SL:RegisterLUAEvent(LUA_EVENT_BAG_CHANGE_AFTER, self.LUA_EVENT_BAG_CHANGE_AFTER, self)
  63. --SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, self.SetCostItem, self)
  64. SL:RegisterLUAEvent(LUA_EVENT_FORGE_GROUP_PANEL_CLOSE, self.ClosePanel, self)
  65. end
  66. function this:LUA_EVENT_BAG_CHANGE_AFTER(_, message)
  67. if table.count(self.mainItem) > 0 then
  68. self:GetAssistantOverlayItem(self:GetOverlayItem())
  69. else
  70. self.bagUI:RefreshItem(self:GetOverlayItem())
  71. end
  72. self:SetCostItem()
  73. end
  74. function this:GetOverlayItem()
  75. local data = {}
  76. self.bagItems = {}
  77. self.equipItems = {}
  78. local bagItemTabl = SL:GetMetaValue("BAG_DATA")[1]
  79. if bagItemTabl then
  80. for _, v in pairs(bagItemTabl) do
  81. if SL:HasConfig("cfg_equip_overlay", v.cfgId, "id") then
  82. --data[SL:GetBagIndex(v.id) - 10000] = v
  83. table.insert(data, v)
  84. table.insert(self.bagItems, v.id)
  85. end
  86. end
  87. end
  88. bagItemTabl = SL:GetTotalWearEquips()[1]
  89. if bagItemTabl then
  90. for _, v in pairs(bagItemTabl) do
  91. if SL:HasConfig("cfg_equip_overlay", v.cfgId, "id") then
  92. table.insert(data, v)
  93. table.insert(self.equipItems, v.id)
  94. end
  95. end
  96. end
  97. data = self:SortItemList(data)
  98. self.showItemList = data
  99. return data
  100. end
  101. function this:GetAssistantOverlayItem(itemlist)
  102. local showdata = {}
  103. --更改背包中的物品
  104. for i, v in pairs(itemlist) do
  105. if v.cfgId == self.mainItem.cfgid and v.id ~= self.mainItem.id and self.excludeItemid ~= v.id then
  106. for _, k in pairs(v.itemExtInfo.equipExtInfo.entryAttr) do
  107. local isAdd = true
  108. for _, l in pairs(self.mainEntry) do
  109. if l.entryId == k.entryId then
  110. isAdd = false
  111. break
  112. end
  113. end
  114. if isAdd then
  115. table.insert(showdata, v)
  116. break
  117. end
  118. end
  119. end
  120. end
  121. self.showItemList = self:SortItemList(showdata)
  122. self.bagUI:RefreshItem(self.showItemList)
  123. end
  124. ---@param itemList CommonProtos.Item[]
  125. ---@return CommonProtos.Item[]
  126. function this:SortItemList(itemList)
  127. local bag_str = SL:GetConfig("cfg_global", 6).value
  128. local bag_tbl = string.split(bag_str, '#')
  129. local bag_hor = tonumber(bag_tbl[1])
  130. local bag_vet = tonumber(bag_tbl[2])
  131. local use_cell_dict = {}
  132. local sortItemList = {}
  133. local cfg_id, now_hor, now_vet, is_put, hold_vet, hole_hor, item, now_hold_hor, now_judge_hor, now_hold_vet, now_judge_vet, now_cell_index
  134. local max_hor = bag_hor + 20
  135. for _, v in pairs(itemList) do
  136. cfg_id = v.cfgId
  137. now_hor = 1
  138. while now_hor <= max_hor do
  139. now_vet = 1
  140. while now_vet <= bag_vet do
  141. is_put = true
  142. ---@type cfg_item_column
  143. item = SL:GetConfig("cfg_item", cfg_id)
  144. hold_vet = item.holdGrid[1]
  145. hole_hor = item.holdGrid[2]
  146. now_hold_hor = 0
  147. while now_hold_hor < hole_hor do
  148. now_judge_hor = now_hor + now_hold_hor
  149. now_hold_vet = 0
  150. while now_hold_vet < hold_vet do
  151. now_judge_vet = now_vet + now_hold_vet
  152. now_cell_index = now_judge_hor * 100 + now_judge_vet
  153. if use_cell_dict[now_cell_index] or now_judge_vet > bag_vet then
  154. is_put = false
  155. break
  156. end
  157. now_hold_vet = now_hold_vet + 1
  158. end
  159. if not is_put then
  160. break
  161. end
  162. now_hold_hor = now_hold_hor + 1
  163. end
  164. if is_put then
  165. break
  166. end
  167. now_vet = now_vet + 1
  168. end
  169. if is_put then
  170. break
  171. end
  172. now_hor = now_hor + 1
  173. end
  174. local now_index = now_hor * 100 + now_vet
  175. sortItemList[now_index] = v
  176. now_hold_hor = 0
  177. while now_hold_hor < hole_hor do
  178. now_hold_vet = 0
  179. local now_hold_judge_hor = now_hor + now_hold_hor
  180. while now_hold_vet < hold_vet do
  181. local now_hold_judge_vet = now_vet + now_hold_vet
  182. now_cell_index = now_hold_judge_hor * 100 + now_hold_judge_vet
  183. use_cell_dict[now_cell_index] = true
  184. now_hold_vet = now_hold_vet + 1
  185. end
  186. now_hold_hor = now_hold_hor + 1
  187. end
  188. end
  189. return sortItemList
  190. end
  191. function this:ItemClick(itemControl, itemData)
  192. local pos = self:GetPos(itemData.id)
  193. SL:OpenTips(pos, itemData.cfgId, itemData.id)
  194. end
  195. function this:GetPos(itemId)
  196. for _, v in pairs(self.bagItems) do
  197. if v == itemId then
  198. return "bag"
  199. end
  200. end
  201. return "equip"
  202. end
  203. function this:ClosePanel()
  204. GUI:UIPanel_Close("dev/outui/Equip/Panel/KLEquipOverlay/KLEquipOverlayPanel")
  205. GUI:UIPanel_Close("dev/ui/UIForgeGroup/Panel/KLUIForgeGroup/KLUIForgeGroupPanel")
  206. end
  207. function this:Close()
  208. if self.timeID then
  209. SL:UnSchedule(self.timeID)
  210. end
  211. if GUI:GetUI("dev/outui/Bag/Panel/KLOverlayBag/KLOverlayBagPanel") then
  212. GUI:UIPanel_Close("dev/outui/Bag/Panel/KLOverlayBag/KLOverlayBagPanel")
  213. end
  214. --GUI:UIPanel_Close("dev/ui/UIForgeGroup/Panel/KLUIForgeGroup/KLUIForgeGroupPanel")
  215. end
  216. function this:SelectItem(equip_pos, cfgid, id)
  217. -- 选择主装备
  218. if not self.mainItem or table.count(self.mainItem) == 0 then
  219. local tbl = SL:GetConfig("cfg_equip_overlay", cfgid, "id")
  220. self.mainItem = { equip_pos = equip_pos, cfgid = cfgid, id = id, lockEntry = {}, tbl = tbl }
  221. GUI:Item_setItemId(self.view.zhu_item, cfgid)
  222. local liuGuangId = EquipFunc.GetEquipLiuGuangId(SL:GetPosItemInfo(equip_pos, cfgid, id))
  223. if liuGuangId then
  224. GUI:SetStreamAttr(self.view.zhu_item, liuGuangId)
  225. else
  226. GUI:ResetStreamAttr(self.view.zhu_item)
  227. end
  228. GUI:setVisible(self.view.zhu_item, true)
  229. GUI:setVisible(self.view.zhu_add, false)
  230. GUI:setVisible(self.view.zhu_bg_overlay_select, false)
  231. GUI:setVisible(self.view.fu_bg_overlay_select, true)
  232. self:LoadItemInfo()
  233. else
  234. -- 选择副装备
  235. if id ~= self.mainItem.id then
  236. self.assistantItem = { equip_pos = equip_pos, cfgid = cfgid, id = id }
  237. GUI:Item_setItemId(self.view.fu_item, cfgid)
  238. local liuGuangId = EquipFunc.GetEquipLiuGuangId(SL:GetPosItemInfo(equip_pos, cfgid, id))
  239. if liuGuangId then
  240. GUI:SetStreamAttr(self.view.fu_item, liuGuangId)
  241. else
  242. GUI:ResetStreamAttr(self.view.fu_item)
  243. end
  244. GUI:setVisible(self.view.fu_item, true)
  245. GUI:setVisible(self.view.fu_add, false)
  246. GUI:setVisible(self.view.fu_bg_overlay_select, false)
  247. self:LoadOverlayInfo()
  248. end
  249. end
  250. if GUI:GetUI("dev/ui/Tips/Panel/KLUIEquipTips/KLUIEquipTipsPanel") then
  251. GUI:UIPanel_Close("dev/ui/Tips/Panel/KLUIEquipTips/KLUIEquipTipsPanel")
  252. end
  253. end
  254. --加载主装备
  255. function this:LoadItemInfo(Entry)
  256. if Entry then
  257. self.mainEntry = Entry
  258. else
  259. self.mainEntry = SL:GetPosItemInfo(self.mainItem.equip_pos, self.mainItem.cfgid, self.mainItem.id).itemExtInfo.equipExtInfo.entryAttr
  260. end
  261. --local liuGuangId = EquipFunc.GetEquipLiuGuangId(equipInfo)
  262. --if liuGuangId then
  263. -- GUI:SetStreamAttr(self.view.item_model, liuGuangId)
  264. --else
  265. -- GUI:ResetStreamAttr(self.view.item_model)
  266. --end
  267. self:RateSure()
  268. GUI:setVisible(self.view.item_attr_panel, true)
  269. local costItem = self.mainItem.tbl.costItem[1]
  270. self.mainItem["rate"] = 0
  271. self.specialCost = {}
  272. if costItem then
  273. GUI:setVisible(self.view.Luckystone, true)
  274. --GUI:setVisible(self.view.LuckystoneName, true)
  275. GUI:setVisible(self.view.success_rate2, true)
  276. GUI:Item_setItemId(self.view.Luckystone, costItem[1])
  277. self.specialCost = { itemId = costItem[1], count = 0, rate = costItem[2] }
  278. --GUI:Text_setString(self.view.LuckystoneName, SL:GetConfig("cfg_item", costItem[1], "id").name)
  279. GUI:Text_setString(self.view.success_rate1, tostring(math.floor(self.mainItem.tbl.minRate / 100)) .. "%")
  280. GUI:Text_setString(self.view.success_rate2, "+" .. tostring(math.floor(self.mainItem.rate)) .. "%")
  281. else
  282. GUI:setVisible(self.view.Luckystone, false)
  283. --GUI:setVisible(self.view.LuckystoneName, false)
  284. GUI:setVisible(self.view.success_rate2, false)
  285. GUI:Text_setString(self.view.success_rate1, tostring(math.floor(self.mainItem.tbl.minRate / 100)) .. "%")
  286. end
  287. self.isHaveAssistant = false
  288. GUI:DataListUpdateData(self.view.entry_list)
  289. self:SetCostItem()
  290. self:GetAssistantOverlayItem(self:GetOverlayItem())
  291. end
  292. --副装备放入,加载信息框
  293. function this:LoadOverlayInfo()
  294. self.assistantEntry = {}
  295. local data = SL:GetPosItemInfo(self.assistantItem.equip_pos, self.assistantItem.cfgid, self.assistantItem.id).itemExtInfo.equipExtInfo.entryAttr
  296. for _, v in pairs(data) do
  297. local isAdd = true
  298. for _, k in pairs(self.mainEntry) do
  299. if v.entryId == k.entryId then
  300. isAdd = false
  301. break
  302. end
  303. end
  304. if isAdd then
  305. table.insert(self.assistantEntry, v)
  306. end
  307. end
  308. self.isHaveAssistant = true
  309. GUI:DataListUpdateData(self.view.entry_list)
  310. local itemData = {}
  311. for i, v in pairs(self.showItemList) do
  312. if self.assistantItem.id ~= v.id then
  313. table.insert(itemData, v)
  314. end
  315. end
  316. self.bagUI:RefreshItem(self:SortItemList(itemData))
  317. end
  318. function this:DataListEntryUpdateFunc(realIndex, kmlcontrol)
  319. local isMain = realIndex < table.count(self.mainEntry)
  320. local data
  321. if isMain then
  322. data = self.mainEntry[realIndex + 1]
  323. if not data then
  324. data = self.mainEntry[tostring(realIndex + 1)]
  325. end
  326. else
  327. data = self.assistantEntry[realIndex - table.count(self.mainEntry) + 1]
  328. end
  329. local tbl = SL:GetConfig("cfg_att_info", data.type, "id")
  330. local infoStr = tbl.name
  331. if tbl.attShow ~= 0 then
  332. infoStr = infoStr .. "+"
  333. if tbl.remarks == 1 then
  334. infoStr = infoStr .. data.num
  335. else
  336. infoStr = infoStr .. tostring(data.num / 100) .. "%"
  337. end
  338. end
  339. --local name = self.view.entry_list:GetChildControl(realIndex, "name")
  340. local name = GUI:GetChildControl(self.view.entry_list, realIndex, "name")
  341. GUI:Text_setString(name, infoStr)
  342. --local lock = self.view.entry_list:GetChildControl(realIndex, "lock")
  343. local lock = GUI:GetChildControl(self.view.entry_list, realIndex, "lock")
  344. --local replace = self.view.entry_list:GetChildControl(realIndex, "replace")
  345. local replace = GUI:GetChildControl(self.view.entry_list, realIndex, "replace")
  346. --local get = self.view.entry_list:GetChildControl(realIndex, "get")
  347. local get = GUI:GetChildControl(self.view.entry_list, realIndex, "get")
  348. --local reserve_btn = self.view.entry_list:GetChildControl(realIndex, "reserve_btn")
  349. local reserve_btn = GUI:GetChildControl(self.view.entry_list, realIndex, "reserve_btn")
  350. --local RE_reserve_btn = self.view.entry_list:GetChildControl(realIndex, "RE_reserve_btn")
  351. local RE_reserve_btn = GUI:GetChildControl(self.view.entry_list, realIndex, "RE_reserve_btn")
  352. GUI:setVisible(lock, false)
  353. if self.isHaveAssistant and isMain then
  354. GUI:setVisible(replace, true)
  355. GUI:setVisible(get, false)
  356. GUI:setVisible(reserve_btn, true)
  357. local ControlData = { lock = lock, replace = replace, RE_reserve_btn = RE_reserve_btn, reserve_btn = reserve_btn }
  358. GUI:AddOnClickEvent(reserve_btn, self, function()
  359. self:Lock(ControlData, data.entryId)
  360. end)
  361. elseif self.isHaveAssistant and not isMain then
  362. GUI:setVisible(get, true)
  363. GUI:setVisible(replace, false)
  364. GUI:setVisible(reserve_btn, false)
  365. GUI:setVisible(RE_reserve_btn, false)
  366. else
  367. GUI:setVisible(replace, false)
  368. GUI:setVisible(get, false)
  369. GUI:setVisible(reserve_btn, false)
  370. GUI:setVisible(RE_reserve_btn, false)
  371. end
  372. end
  373. --单击主装备取消选择装备
  374. function this:ClickMainItem()
  375. if self.mainItem and table.count(self.mainItem) > 0 then
  376. self.specialCost = {}
  377. self.showItemList = {}
  378. self.Cost = {}
  379. self.mainItem = {}
  380. self.mainEntry = {}
  381. GUI:setVisible(self.view.item_attr_panel, false)
  382. GUI:setVisible(self.view.zhu_item, false)
  383. GUI:setVisible(self.view.zhu_add, true)
  384. GUI:setVisible(self.view.zhu_bg_overlay_select, true)
  385. GUI:setVisible(self.view.fu_bg_overlay_select, false)
  386. GUI:setVisible(self.view.cost_item, false)
  387. GUI:Text_setString(self.view.cost_count, "")
  388. self.lockNum = 0
  389. self.assistantItem = {}
  390. self.assistantEntry = {}
  391. GUI:setVisible(self.view.fu_add, true)
  392. GUI:setVisible(self.view.fu_item, false)
  393. self:GetOverlayItem()
  394. self.bagUI:RefreshItem(self.showItemList)
  395. end
  396. end
  397. --单击副装备取消选择副装备
  398. function this:ClickAssistantItem()
  399. if table.count(self.assistantItem) == 0 then
  400. return
  401. end
  402. self.assistantItem = {}
  403. self.assistantEntry = {}
  404. self.lockNum = 0
  405. GUI:setVisible(self.view.fu_add, true)
  406. GUI:setVisible(self.view.fu_item, false)
  407. GUI:setVisible(self.view.fu_bg_overlay_select, true)
  408. self.isHaveAssistant = false
  409. GUI:DataListUpdateData(self.view.entry_list)
  410. self:GetAssistantOverlayItem(self:GetOverlayItem())
  411. end
  412. --词条锁定
  413. function this:Lock(ControlData, entryId)
  414. GUI:setVisible(ControlData.replace, false)
  415. GUI:setVisible(ControlData.lock, true)
  416. GUI:setVisible(ControlData.reserve_btn, false)
  417. GUI:setVisible(ControlData.RE_reserve_btn, true)
  418. GUI:AddOnClickEvent(ControlData.RE_reserve_btn, self, function()
  419. self:ReLock(ControlData, entryId)
  420. end)
  421. table.insert(self.mainItem.lockEntry, entryId)
  422. self.lockNum = self.lockNum + 1
  423. local mainEntryNum = table.count(self.mainEntry)
  424. if self.lockNum == mainEntryNum - 1 then
  425. for i = 0, mainEntryNum - 1 do
  426. --local reserve_btn = self.view.entry_list:GetChildControl(i, "reserve_btn")
  427. local reserve_btn = GUI:GetChildControl(self.view.entry_list, i, "reserve_btn")
  428. GUI:setVisible(reserve_btn, false)
  429. end
  430. end
  431. self:SetCostItem()
  432. end
  433. --词条解锁
  434. function this:ReLock(ControlData, entryId)
  435. GUI:setVisible(ControlData.replace, true)
  436. GUI:setVisible(ControlData.lock, false)
  437. GUI:setVisible(ControlData.reserve_btn, true)
  438. GUI:setVisible(ControlData.RE_reserve_btn, false)
  439. GUI:AddOnClickEvent(ControlData.RE_reserve_btn, self, function()
  440. self:Lock(ControlData, entryId)
  441. end)
  442. for i, v in pairs(self.mainItem.lockEntry) do
  443. if v == entryId then
  444. table.remove(self.mainItem.lockEntry, i)
  445. break
  446. end
  447. end
  448. local mainEntryNum = table.count(self.mainEntry)
  449. if self.lockNum == mainEntryNum - 1 then
  450. self.lockNum = self.lockNum - 1
  451. for i = 0, mainEntryNum - 1 do
  452. --local RE_reserve_btn = self.view.entry_list:GetChildControl(i, "RE_reserve_btn")
  453. local RE_reserve_btn = GUI:GetChildControl(self.view.entry_list, i, "RE_reserve_btn")
  454. if not GUI:getVisible(RE_reserve_btn) then
  455. --local reserve_btn = self.view.entry_list:GetChildControl(i, "reserve_btn")
  456. local reserve_btn = GUI:GetChildControl(self.view.entry_list, i, "reserve_btn")
  457. GUI:setVisible(reserve_btn, true)
  458. end
  459. end
  460. else
  461. self.lockNum = self.lockNum - 1
  462. end
  463. self:SetCostItem()
  464. end
  465. function this:CalculateCost()
  466. local data = {}
  467. if self.mainItem.tbl.costItem[1] and self.specialCost.count > 0 then
  468. table.insert(data, { itemCfgId = self.specialCost.itemId, count = self.specialCost.count })
  469. end
  470. return data
  471. end
  472. function this:SetCostItem()
  473. if table.count(self.mainItem) == 0 then
  474. return
  475. end
  476. local str = ""
  477. local myCount
  478. local Count
  479. GUI:setVisible(self.view.cost_item, true)
  480. if self.lockNum > 0 then
  481. GUI:Item_setItemId(self.view.cost_item, self.mainItem.tbl.lockCost[1])
  482. myCount = SL:GetBagItemCount(self.mainItem.tbl.lockCost[1])
  483. Count = self.mainItem.tbl.lockCost[2] * self.lockNum
  484. GUI:Text_setString(self.view.cost_count, tostring(self.mainItem.tbl.lockCost[2] * self.lockNum))
  485. else
  486. GUI:Item_setItemId(self.view.cost_item, self.mainItem.tbl.cost[1][1])
  487. myCount = SL:GetBagItemCount(self.mainItem.tbl.cost[1][1])
  488. Count = self.mainItem.tbl.cost[1][2]
  489. end
  490. local CountText = SL:GetSimpleNumber(Count, 2)
  491. local myCountText = SL:GetSimpleNumber(myCount, 2)
  492. if Count <= myCount then
  493. str = "<color='#1add1f'>" .. tostring(myCountText) .. "</color>/" .. tostring(CountText)
  494. else
  495. str = "<color='#ff2323'>" .. tostring(myCountText) .. "</color>/" .. tostring(CountText)
  496. end
  497. GUI:Text_setString(self.view.cost_count, str)
  498. --;<toggle id="overlayToggle" width="67" height="76" a="01" default="1" togglegroup_id="toggleGroup" atlas="Atlas/TS_UIForgeGroupPanel.spriteatlas" onclick="" src="button_interface_function8" pimg="button_interface_function7" raycast="1" y="-252">
  499. --; </toggle>
  500. end
  501. function this:OpenCostItemPanel()
  502. GUI:setVisible(self.view.Add_CostItem_panel, true)
  503. GUI:Slider_setMaxPercent(self.view.rate_item_slider, (self.mainItem.tbl.maxRate - self.mainItem.tbl.minRate) / self.specialCost.rate)
  504. GUI:Slider_setPercent(self.view.rate_item_slider, self.specialCost.count and self.specialCost.count or 0)
  505. self.bagCount = SL:GetBagItemCount(self.specialCost.itemId)
  506. GUI:Item_setItemId(self.view.rate_CostItem, self.specialCost.itemId)
  507. local itemName = SL:GetConfig("cfg_item", self.specialCost.itemId, "id").name
  508. GUI:Text_setString(self.view.rate_text1, tostring(math.floor(self.mainItem.tbl.minRate / 100)) .. "%")
  509. GUI:Text_setString(self.view.rate_text2, "+" .. tostring(math.floor(self.mainItem.rate)) .. "%")
  510. GUI:Text_setString(self.view.costItem_name, itemName)
  511. GUI:Text_setString(self.view.total_CostItem, "总数:<color='#1add1f'>" .. tostring(self.bagCount) .. "</color>")
  512. if self.specialCost.count > 0 then
  513. GUI:Text_setString(self.view.use_costItem, "消耗:<color='#1add1f'>" .. tostring(self.specialCost.count) .. "</color>")
  514. else
  515. GUI:Text_setString(self.view.use_costItem, "消耗:<color='#ff2323'>" .. tostring(self.specialCost.count) .. "</color>")
  516. end
  517. end
  518. function this:RateSure()
  519. GUI:setVisible(self.view.Add_CostItem_panel, false)
  520. if table.count(self.specialCost) > 0 and self.specialCost.count > 0 then
  521. GUI:setVisible(self.view.Luckystonenull, false)
  522. else
  523. GUI:setVisible(self.view.Luckystonenull, true)
  524. end
  525. end
  526. function this:SliderBtn(index)
  527. local value = GUI:Slider_getPercent(self.view.rate_item_slider)
  528. if index then
  529. value = value + index
  530. GUI:Slider_setPercent(self.view.rate_item_slider, value)
  531. self:SliderChange(_, value)
  532. end
  533. end
  534. function this:SliderChange(_, value)
  535. if not value then
  536. value = GUI:Slider_getPercent(self.view.rate_item_slider)
  537. end
  538. if value < 0 then
  539. value = 0
  540. elseif value > self.bagCount then
  541. value = self.bagCount
  542. GUI:Slider_setPercent(self.view.rate_item_slider, value)
  543. -- 打开提示框
  544. SL:CommonItemGetPath(nil, self.specialCost.itemId)
  545. elseif value > (self.mainItem.tbl.maxRate - self.mainItem.tbl.minRate) / self.specialCost.rate then
  546. value = (self.mainItem.tbl.maxRate - self.mainItem.tbl.minRate) / self.specialCost.rate
  547. SL:MessageTip({ id = 31001 })
  548. end
  549. self.specialCost.count = math.floor(value)
  550. self.mainItem.rate = value * self.specialCost.rate / 100
  551. GUI:Text_setString(self.view.rate_text1, tostring(math.floor(self.mainItem.tbl.minRate / 100)) .. "%")
  552. GUI:Text_setString(self.view.rate_text2, "+" .. tostring(math.floor(self.mainItem.rate)) .. "%")
  553. GUI:Text_setString(self.view.success_rate1, tostring(math.floor(self.mainItem.tbl.minRate / 100)) .. "%")
  554. GUI:Text_setString(self.view.success_rate2, "+" .. tostring(math.floor(self.mainItem.rate)) .. "%")
  555. if self.specialCost.count > 0 then
  556. GUI:Text_setString(self.view.use_costItem, "消耗:<color='#1add1f'>" .. tostring(self.specialCost.count) .. "</color>")
  557. else
  558. GUI:Text_setString(self.view.use_costItem, "消耗:<color='#ff2323'>" .. tostring(self.specialCost.count) .. "</color>")
  559. end
  560. end
  561. function this:Overlay()
  562. if table.count(self.mainItem) == 0 or table.count(self.assistantItem) == 0 then
  563. SL:TipMessage(SL:GetConfig('cfg_string', 265).text, 1, 1)--"请选择一件装备",
  564. return
  565. end
  566. local assistantItemInfo = SL:GetPosItemInfo(self.assistantItem.equip_pos, self.assistantItem.cfgid, self.assistantItem.id)
  567. if EquipFunc.GetEquipAppendLevel(assistantItemInfo) > 0 or not table.isNullOrEmpty(EquipFunc.GetEquipStrengthAttr(assistantItemInfo)) then
  568. SL:CommonTipsMessage({ showTips = "当前副装备有强化/追加等级,是否继续叠加?", ui = self,callback = self.SureOverlay })
  569. else
  570. local data = { firstItemId = self.mainItem.id, secondItemId = self.assistantItem.id, costItem = self:CalculateCost(), lockEntryIds = self.mainItem.lockEntry }
  571. self.excludeItemid = self.assistantItem.id
  572. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_EQUIP_OVERLAY, data)
  573. end
  574. end
  575. function this.SureOverlay(info)
  576. local ui = info.ui
  577. local data = { firstItemId = ui.mainItem.id, secondItemId = ui.assistantItem.id, costItem = ui:CalculateCost(), lockEntryIds = ui.mainItem.lockEntry }
  578. ui.excludeItemid = ui.assistantItem.id
  579. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_EQUIP_OVERLAY, data)
  580. end
  581. function this:RES_EQUIP_OVERLAY(_, message)
  582. self.mainItem.lockEntry = {}
  583. if self.timeID then
  584. SL:UnSchedule(self.timeID)
  585. end
  586. if message.result == 1 then
  587. GUI:setVisible(self.view.result_success_img, true)
  588. GUI:setVisible(self.view.result_fail_img, false)
  589. else
  590. GUI:setVisible(self.view.result_success_img, false)
  591. GUI:setVisible(self.view.result_fail_img, true)
  592. end
  593. self.timeID = SL:ScheduleOnce(1, function()
  594. GUI:setVisible(self.view.result_success_img, false)
  595. GUI:setVisible(self.view.result_fail_img, false)
  596. end)
  597. self:ClickAssistantItem()
  598. if message.result == 1 then
  599. self:LoadItemInfo(message.firstEntries)
  600. else
  601. self:LoadItemInfo()
  602. end
  603. --logError(table.count(message.firstEntries))
  604. end
  605. function this:COSTBTN()
  606. if table.count(self.mainItem) == 0 or table.count(self.assistantItem) == 0 then
  607. SL:TipMessage(SL:GetConfig('cfg_string', 265).text, 1, 1)--"请选择一件装备",
  608. return
  609. end
  610. if self.lockNum > 0 then
  611. SL:CommonItemGetPath(nil, self.mainItem.tbl.lockCost[1])
  612. else
  613. SL:CommonItemGetPath(nil, self.mainItem.tbl.cost[1][1])
  614. end
  615. end
  616. function this:HelpTip()
  617. local helpCfg = SL:GetConfig("cfg_rule_text", 10, "id")
  618. if helpCfg then
  619. SL:CommonStrTipsMessage({ title = helpCfg.menutxt, str = helpCfg.location })
  620. end
  621. end
  622. return this