From f46f79f70ada8a46e872f236c1dd16d9b69d9e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=9A=E7=BE=8E?= <2370337237@QQ.COM> Date: Thu, 3 Jul 2025 22:28:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=AD=A6=E5=99=A8=E9=99=84?= =?UTF-8?q?=E9=AD=94=E5=B9=BB=E5=85=89=E6=8C=89=E9=92=AE=EF=BC=8C=E6=9C=AA?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ItemCollection/SM_ItemCollectionUI.lua | 179 ++++++++++++++++++++++--- Textures/NeckButon_ARTWORK.blp | Bin 6660 -> 6660 bytes 2 files changed, 160 insertions(+), 19 deletions(-) diff --git a/ItemCollection/SM_ItemCollectionUI.lua b/ItemCollection/SM_ItemCollectionUI.lua index 84f2d2c..17988c7 100644 --- a/ItemCollection/SM_ItemCollectionUI.lua +++ b/ItemCollection/SM_ItemCollectionUI.lua @@ -160,10 +160,9 @@ function SM_ItemCollectionUI:InitSlotData() { name = "主手", invType = "INVTYPE_WEAPONMAINHAND", items = {}, icon = "Interface\\PaperDoll\\UI-PaperDoll-Slot-MainHand" }, { name = "副手", invType = "INVTYPE_WEAPONOFFHAND", items = {}, icon = "Interface\\PaperDoll\\UI-PaperDoll-Slot-Relic" }, { name = "远程", invType = "INVTYPE_RANGED", items = {}, icon = "Interface\\PaperDoll\\UI-PaperDoll-Slot-Ranged" }, - { name = "颈部", invType = "INVTYPE_NECK", items = {}, icon = "Interface\\PaperDoll\\UI-PaperDoll-Slot-Neck" }, - { name = "戒指", invType = "INVTYPE_FINGER", items = {}, icon = "Interface\\PaperDoll\\UI-PaperDoll-Slot-Finger" }, - { name = "饰品", invType = "INVTYPE_TRINKET", items = {}, icon = "Interface\\PaperDoll\\UI-PaperDoll-Slot-Trinket" }, - + { name = "颈部", invType = "INVTYPE_NECK", items = {}, icon = "Interface\\AddOns\\SM_CollectionSystem\\Interface\\PaperDoll\\UI-PaperDoll-Slot-Neck" }, + { name = "戒指", invType = "INVTYPE_FINGER", items = {}, icon = "Interface\\AddOns\\SM_CollectionSystem\\Interface\\PaperDoll\\UI-PaperDoll-Slot-Finger" }, + { name = "饰品", invType = "INVTYPE_TRINKET", items = {}, icon = "Interface\\AddOns\\SM_CollectionSystem\\Interface\\PaperDoll\\UI-PaperDoll-Slot-Trinket" }, } self.ALL_SLOTS = MODEL_SLOTS -- 动态生成类型映射表,保证和槽位定义一致 @@ -560,11 +559,10 @@ function SM_ItemCollectionUI:ShowItemPreview(slot, panel) -- 创建预览框架 local previewFrame = CreateFrame("Frame", "ItemCollectionPreviewFrame", panel) - previewFrame:SetSize(580, 400) - previewFrame:SetPoint("LEFT", SM_Collections.MainFrame, "LEFT", 30, -20) - previewFrame:SetBackdrop({ - bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", - }) + previewFrame:SetSize(580, 410) + previewFrame:SetPoint("TOPLEFT", SM_Collections.MainFrame, "TOPLEFT", 30, -90) + previewFrame:SetBackdrop({bgFile = "Interface\\AddOns\\SM_CollectionSystem\\Textures\\liebiaoditu"}) + previewFrame:SetBackdropColor(0, 0, 0, 1) -- 设置纯黑背景,参数为(r, g, b, a) previewFrame:Show() panel.previewFrame = previewFrame self.previewFrame = previewFrame @@ -1209,7 +1207,7 @@ function SM_ItemCollectionUI:CreateButtons() -- 对于没有对应纹理的槽位(颈部、戒指、饰品),创建独立按钮 if slotName == "neck" or slotName == "finger" or slotName == "trinket" then -- 创建独立按钮,不使用模板 - btn = CreateFrame("Button", nil, SM_ItemCollectionUI.currentPanel) + btn = CreateFrame("Button", "ItemCollectionSlot" .. i, SM_ItemCollectionUI.currentPanel) btn:SetSize(30, 30) -- 智能定位:相对于最后一个按钮 if lastButton then @@ -1245,15 +1243,16 @@ function SM_ItemCollectionUI:CreateButtons() --SetPortraitToTexture(ArtworkTexture, "Interface\\AddOns\\SM_CollectionSystem\\Textures\\NeckButon_ARTWORK") btn.ArtworkTexture = ArtworkTexture - -- local selectedTexture = btn:CreateTexture(nil, "OVERLAY", nil, 1) - -- selectedTexture:SetSize(45, 47) - -- selectedTexture:SetPoint("CENTER", 0, -2) - -- selectedTexture:SetTexture("Interface\\AddOns\\SM_CollectionSystem\\Interface\\Transmogrify\\Transmogrify") - -- selectedTexture:SetTexCoord(0.734375, 0.802734375, 0.171875, 0.244140625) -- 这是XML里的 - -- selectedTexture:Hide() - -- btn.SelectedTexture = selectedTexture + local selectedTexture = btn:CreateTexture(nil, "OVERLAY", nil, 1) + selectedTexture:SetSize(45, 47) + selectedTexture:SetPoint("CENTER", 0, -2) + selectedTexture:SetTexture("Interface\\AddOns\\SM_CollectionSystem\\Interface\\Transmogrify\\Transmogrify") + selectedTexture:SetTexCoord(0.734375, 0.802734375, 0.171875, 0.244140625) -- 这是XML里的 + selectedTexture:Hide() + btn.SelectedTexture = selectedTexture else - btn = CreateFrame("Button", nil, SM_ItemCollectionUI.currentPanel, "SM_CollectionSystemWardrobeSlotButtonTemplate") + btn = CreateFrame("Button", "ItemCollectionSlot" .. i, SM_ItemCollectionUI.currentPanel, + "SM_CollectionSystemWardrobeSlotButtonTemplate") btn:SetSize(40, 40) btn:SetPoint("TOPLEFT", 80 + (i - 1) * 35, 35) @@ -1303,8 +1302,150 @@ function SM_ItemCollectionUI:CreateButtons() atlasName = atlasName .. "back" elseif slotName == "weaponmainhand" then atlasName = atlasName .. "mainhand" + + -- 添加附魔按钮 + local enchantBtn = CreateFrame("Button", btn:GetName() .. "Enchant", btn) + enchantBtn:SetSize(25, 25) + enchantBtn:SetPoint("TOPRIGHT", btn, "TOPRIGHT", 2, 2) + + -- 使用已有的附魔纹理 + local enchantTexture = enchantBtn:CreateTexture(nil, "ARTWORK") + enchantTexture:SetAllPoints() + enchantTexture:SetTexture( + "Interface\\AddOns\\SM_CollectionSystem\\Interface\\Transmogrify\\Transmogrify") + + -- 应用atlas纹理 + SM_Collections:Mixin(enchantTexture, SetAtlasMixin) + enchantTexture:SetAtlas("transmog-nav-slot-enchant", true) + enchantBtn.texture = enchantTexture + + -- 添加高光纹理 + local highlightTexture = enchantBtn:CreateTexture(nil, "HIGHLIGHT") + highlightTexture:SetSize(17, 17) + highlightTexture:SetPoint("CENTER", 0, 2) + highlightTexture:SetTexture( + "Interface\\AddOns\\SM_CollectionSystem\\Interface\\ContainerFrame\\Bags") + highlightTexture:SetTexCoord(0.1640625, 0.3046875, 0.6875, 0.828125) + highlightTexture:SetBlendMode("ADD") + enchantBtn.highlightTexture = highlightTexture + + -- 添加选中纹理,默认隐藏 + local selectedTexture = enchantBtn:CreateTexture(nil, "OVERLAY") + selectedTexture:SetSize(22, 22) + selectedTexture:SetPoint("CENTER", 0, 2) + selectedTexture:SetTexture("Interface\\AddOns\\SM_CollectionSystem\\Textures\\Cir_Overlay") + selectedTexture:Hide() + enchantBtn.SelectedTexture = selectedTexture + + -- 将附魔按钮添加到全局按钮列表中 + table.insert(SM_ItemCollectionUI.buttons, enchantBtn) + + -- 设置点击事件 + enchantBtn:SetScript("OnClick", function(self) + -- 播放点击音效 + PlaySound("igSpellBookSpellIconPickup") + print("点击了武器附魔按钮") + + -- 清除所有附魔按钮的选中状态 + for _, button in ipairs(SM_ItemCollectionUI.buttons) do + if button.SelectedTexture then + button.SelectedTexture:Hide() + end + end + + -- 显示当前按钮的选中状态 + self.SelectedTexture:Show() + + -- 这里可以添加处理附魔选择的函数 + -- SM_ItemCollectionUI:HandleEnchantButtonClick(self.slotData) + end) + + -- 设置提示 + enchantBtn:SetScript("OnEnter", function(self) + GameTooltip:SetOwner(self, "ANCHOR_RIGHT") + GameTooltip:SetText("武器附魔") + GameTooltip:Show() + end) + + enchantBtn:SetScript("OnLeave", function(self) + GameTooltip:Hide() + end) + + -- 存储在主按钮上,以便后续访问 + btn.enchantButton = enchantBtn elseif slotName == "weaponoffhand" then atlasName = atlasName .. "secondaryhand" + + -- 添加附魔按钮 + local enchantBtn = CreateFrame("Button", btn:GetName() .. "Enchant", btn) + enchantBtn:SetSize(25, 25) + enchantBtn:SetPoint("TOPRIGHT", btn, "TOPRIGHT", 2, 2) + + -- 使用已有的附魔纹理 + local enchantTexture = enchantBtn:CreateTexture(nil, "ARTWORK") + enchantTexture:SetAllPoints() + enchantTexture:SetTexture( + "Interface\\AddOns\\SM_CollectionSystem\\Interface\\Transmogrify\\Transmogrify") + + -- 应用atlas纹理 + SM_Collections:Mixin(enchantTexture, SetAtlasMixin) + enchantTexture:SetAtlas("transmog-nav-slot-enchant", true) + enchantBtn.texture = enchantTexture + + -- 添加高光纹理 + local highlightTexture = enchantBtn:CreateTexture(nil, "HIGHLIGHT") + highlightTexture:SetSize(17, 17) + highlightTexture:SetPoint("CENTER", 0, 2) + highlightTexture:SetTexture( + "Interface\\AddOns\\SM_CollectionSystem\\Interface\\ContainerFrame\\Bags") + highlightTexture:SetTexCoord(0.1640625, 0.3046875, 0.6875, 0.828125) + highlightTexture:SetBlendMode("ADD") + enchantBtn.highlightTexture = highlightTexture + + -- 添加选中纹理,默认隐藏 + local selectedTexture = enchantBtn:CreateTexture(nil, "OVERLAY") + selectedTexture:SetSize(22, 22) + selectedTexture:SetPoint("CENTER", 0, 2) + selectedTexture:SetTexture("Interface\\AddOns\\SM_CollectionSystem\\Textures\\Cir_Overlay") + selectedTexture:Hide() + enchantBtn.SelectedTexture = selectedTexture + + -- 将附魔按钮添加到全局按钮列表中 + table.insert(SM_ItemCollectionUI.buttons, enchantBtn) + + -- 设置点击事件 + enchantBtn:SetScript("OnClick", function(self) + -- 播放点击音效 + PlaySound("igSpellBookSpellIconPickup") + print("点击了副手附魔按钮") + + -- 清除所有附魔按钮的选中状态 + for _, button in ipairs(SM_ItemCollectionUI.buttons) do + if button.SelectedTexture then + button.SelectedTexture:Hide() + end + end + + -- 显示当前按钮的选中状态 + self.SelectedTexture:Show() + + -- 这里可以添加处理附魔选择的函数 + -- SM_ItemCollectionUI:HandleEnchantButtonClick(self.slotData) + end) + + -- 设置提示 + enchantBtn:SetScript("OnEnter", function(self) + GameTooltip:SetOwner(self, "ANCHOR_RIGHT") + GameTooltip:SetText("副手附魔") + GameTooltip:Show() + end) + + enchantBtn:SetScript("OnLeave", function(self) + GameTooltip:Hide() + end) + + -- 存储在主按钮上,以便后续访问 + btn.enchantButton = enchantBtn elseif slotName == "ranged" then atlasName = atlasName .. "ranged" elseif slotName == "tabard" then @@ -1347,7 +1488,7 @@ function SM_ItemCollectionUI:CreateButtons() btn:SetScript("OnClick", function(self) -- 播放点击音效 PlaySound("igSpellBookSpellIconPickup") - + print("点击了按钮:", btn:GetName()) -- 清除所有按钮的选中状态 for _, button in ipairs(SM_ItemCollectionUI.buttons) do if button.SelectedTexture then diff --git a/Textures/NeckButon_ARTWORK.blp b/Textures/NeckButon_ARTWORK.blp index d9d141dce539330ba6cae388528b91195e294afa..4b284617ce3014b90aa106de25dda17631f8d4e4 100644 GIT binary patch literal 6660 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