---@class KLArchangelDecomposePanel:UIKmlLuaPanelBase ---@field view KLArchangelDecomposePanelView ---@field grailList CommonProtos.Item[] ---@field selectGrailList number[] ---@field grailItemList KLGrailDecomposeItem[] local KLArchangelDecomposePanel = class(UIKmlLuaPanelBase) local this = KLArchangelDecomposePanel function this:AsyncLoadUI() end ---创建时调用一次 function this:Init() SL.HideMainPanel() self.grailList = {} self.grailItemList = {} GUI:DataListInitData(self.view.DecomposeGetDataList, function() return #self.getList end, function(realIndex) end, function(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:GetDataListItemUpdateFunc(realIndex, kmlcontrol) end) GUI:DataListInitData(self.view.DecomposeCustomDataList, function() return #self.costList end, function(realIndex) end, function(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:CustomDataListItemUpdateFunc(realIndex, kmlcontrol) end) GUI:DataListInitData(self.view.grail_list, function() return #self.grailList end, function(realIndex) return self:GrailDecomposeItemGetFunc(realIndex) end, function(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:GrailDecomposeItemUpdateFunc(realIndex, kmlcontrol) end) end ---注册UI事件和服务器消息 function this:RegistEvents() GUI:AddOnClickEvent(self.view.allselect, self, self.AllSelect) GUI:AddOnClickEvent(self.view.CloseButton, self, self.ClosePanel) GUI:AddOnClickEvent(self.view.DecomposeButton, self, self.Decompose) SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GRAIL_DECOMPOSE_RESULT, self.RES_GRAIL_DECOMPOSE_RESULT, self) end ---界面显示时调用一次 function this:Show() self.all = false GUI:setVisible(self.view.gouxuan, false) end ---创建或者刷新界面数据时调用 function this:Refresh() self.grailList = {} self.selectGrailList = {} if not self.bagUI then GUI:UIPanel_Open("dev/outui/Archangel/Panel/KLFusionBag/KLFusionBagPanel", nil, nil, { x = -482, y = 0, itemClick = self.BagItemClick, callBackUI = self }, false, function(bagUI) ---@type KLFusionBagPanel self.bagUI = bagUI self.bagUI:RefreshItem(self:GetBagList()) end) else self.bagUI:RefreshItem(self:GetBagList()) end GUI:setVisible(self.view.hide_panel, false) GUI:setVisible(self.view.NoInfo, true) end function this:AllSelect() self.all = not self.all GUI:setVisible(self.view.gouxuan, self.all) self.selectGrailList = {} self.grailList = {} self.selectGrailShow = {} local data = self:GetBagList() for i, v in pairs(data) do if self.all then table.insert(self.selectGrailList, v.id) local pos = table.getKey(self.selectGrailList, v.id) self.grailList[pos] = v end self.selectGrailShow[v.id] = self.all end self.bagUI:RefreshGrailSelect(self.selectGrailShow) self:RefreshCostandGet() end function this:BagItemClick(itemControl, itemData, itemSelf) if table.contains(self.selectGrailList, itemData.id) then itemSelf:SetSelectEffect(false, true) local pos = table.getKey(self.selectGrailList, itemData.id) table.remove(self.grailList, pos) table.removeByValue(self.selectGrailList, itemData.id) else table.insert(self.selectGrailList, itemData.id) local pos = table.getKey(self.selectGrailList, itemData.id) self.grailList[pos] = itemData itemSelf:SetSelectEffect(true, true) end self:RefreshCostandGet() end function this:RefreshCostandGet() if table.count(self.selectGrailList) == 0 then GUI:setVisible(self.view.hide_panel, false) GUI:setVisible(self.view.NoInfo, true) return end GUI:setVisible(self.view.hide_panel, true) GUI:setVisible(self.view.NoInfo, false) --刷新道具显示 GUI:DataListUpdateData(self.view.grail_list) --刷新所得 local getListData = {} local costListData = {} self.getList = {} self.costList = {} for i, v in pairs(self.grailList) do local angelstrengthenLv = InfoManager.archangeEquipInfo:GetGrailStrengthLv(v.id) local strengthenTbl = SL:GetConfig("cfg_equip_angelStrengthen", v.cfgId, "id") local costTbl = SL:GetConfigTwoKeys("cfg_equip_angelStrengthenCost", strengthenTbl.SplitGroup, angelstrengthenLv, "AngelstrengthenGroup", "AngelstrengthenLv") for _, j in pairs(costTbl.AngelstrengthenGet) do if getListData[j[1]] then getListData[j[1]] = getListData[j[1]] + j[2] else getListData[j[1]] = j[2] end end for _, j in pairs(costTbl.RecoVeryCost) do if costListData[j[1]] then costListData[j[1]] = costListData[j[1]] + j[2] else costListData[j[1]] = j[2] end end end for i, v in pairs(getListData) do table.insert(self.getList, { itemId = i, count = v }) end for i, v in pairs(costListData) do table.insert(self.costList, { itemId = i, count = v }) end GUI:DataListUpdateData(self.view.DecomposeGetDataList) GUI:DataListUpdateData(self.view.DecomposeCustomDataList) end function this:GrailDecomposeItemGetFunc(realIndex) local item = GUI:UIPanel_Open("dev/outui/Archangel/Item/KLGrailDecompose/KLGrailDecomposeItem", self.view.grail_list, self, nil, true) self.grailItemList[item.view.root] = item return item.view.root end function this:GrailDecomposeItemUpdateFunc(realIndex, kmlcontrol) self.grailItemList[kmlcontrol]:RefeshData(self.grailList[realIndex + 1].cfgId, self.grailList[realIndex + 1].id) end function this:GetDataListItemUpdateFunc(realIndex, kmlcontrol) local GetItem = GUI:GetChildControl(self.view.DecomposeGetDataList, realIndex, "GetItem") GUI:Item_setItemId(GetItem, self.getList[realIndex + 1].itemId) GUI:Item_setItemCount(GetItem, tostring(self.getList[realIndex + 1].count)) end function this:CustomDataListItemUpdateFunc(realIndex, kmlcontrol) local cost_item = GUI:GetChildControl(self.view.DecomposeCustomDataList, realIndex, "cost_item") local cost_name = GUI:GetChildControl(self.view.DecomposeCustomDataList, realIndex, "cost_name") local cost_num = GUI:GetChildControl(self.view.DecomposeCustomDataList, realIndex, "cost_num") local costAddBtn = GUI:GetChildControl(self.view.DecomposeCustomDataList, realIndex, "costAddBtn") local data = self.costList[realIndex + 1] GUI:Item_setItemId(cost_item, data.itemId) ---@type cfg_item_column local itemTbl = SL:GetConfig("cfg_item", data.itemId, "id") GUI:Text_setString(cost_name, itemTbl.name) local costNumStr = "" local bagCount = SL:GetBagItemCount(data.itemId) if bagCount >= data.count then costNumStr = "" .. tostring(bagCount) .. "/" .. tostring(data.count) --self.isCost = true else costNumStr = "" .. tostring(bagCount) .. "/" .. tostring(data.count) --self.isCost = false end GUI:Text_setString(cost_num, costNumStr) GUI:AddOnClickEvent(costAddBtn, self, function() SL:CommonItemGetPath(nil, data.itemId) end) end function this:GetBagList() local data = {} local bagItemTabl = SL:GetMetaValue("BAG_DATA")[1] if bagItemTabl then for _, v in pairs(bagItemTabl) do local tbl = nil if SL:HasConfig("cfg_equip_angelGrail", v.cfgId, "id") then table.insert(data, v) end end end return data end function this:Decompose() local indexlist = {} for i, v in pairs(self.selectGrailList) do table.insert(indexlist, SL:GetBagIndex(v)) end SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ANGEL_GRAIL_DECOMPOSE, { indexList = indexlist, grailIds = self.selectGrailList }) end function this:RES_GRAIL_DECOMPOSE_RESULT(_, message) if message then for i, v in pairs(self.selectGrailList) do InfoManager.archangeEquipInfo:GrailInfoChange(v) end InfoManager.archangeEquipInfo:CheckEquipRed() local group = GUI:GetUI("dev/outui/Archangel/Panel/KLArchangelGroup/KLArchangelGroupPanel") if group then group:RefreshRed() end self:Refresh() end end function this:ClosePanel() GUI:UIPanel_Close("dev/outui/Archangel/Panel/KLArchangelDecompose/KLArchangelDecomposePanel") GUI:UIPanel_Close("dev/outui/Archangel/Panel/KLArchangelGroup/KLArchangelGroupPanel") end function this:Hide() end function this:Close() GUI:UIPanel_Close("dev/outui/Archangel/Panel/KLFusionBag/KLFusionBagPanel") end return this