fix: prevent disenchanting locked item

This commit is contained in:
Vati
2026-03-14 17:24:23 +04:00
parent 76b1091784
commit fc802454f0
3 changed files with 30 additions and 8 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
## Title: Guda ## Title: Guda
## Notes: All-in-one bag and bank addon for World of Warcraft 1.12.1 (Turtle WoW) ## Notes: All-in-one bag and bank addon for World of Warcraft 1.12.1 (Turtle WoW)
## Author: Vati ## Author: Vati
## Version: 2.1.3 ## Version: 2.1.4
## SavedVariables: Guda_DB ## SavedVariables: Guda_DB
## SavedVariablesPerCharacter: Guda_CharDB ## SavedVariablesPerCharacter: Guda_CharDB
+28 -6
View File
@@ -535,7 +535,7 @@ local function UpdateLockIcon(button, iconSize)
if not button.lockIcon then if not button.lockIcon then
button.lockIcon = AcquireLockIcon() button.lockIcon = AcquireLockIcon()
end end
local lockSize = math.max(10, math.min(14, iconSize * 0.35)) local lockSize = math.max(8, math.min(12, iconSize * 0.35 - 2))
button.lockIcon:SetWidth(lockSize) button.lockIcon:SetWidth(lockSize)
button.lockIcon:SetHeight(lockSize) button.lockIcon:SetHeight(lockSize)
if button.lockIcon.shadow then if button.lockIcon.shadow then
@@ -543,7 +543,7 @@ local function UpdateLockIcon(button, iconSize)
button.lockIcon.shadow:SetHeight(lockSize) button.lockIcon.shadow:SetHeight(lockSize)
end end
button.lockIcon:ClearAllPoints() button.lockIcon:ClearAllPoints()
button.lockIcon:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", 1, -1) button.lockIcon:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", 3, -3)
button.lockIcon:SetFrameLevel(button:GetFrameLevel() + 5) button.lockIcon:SetFrameLevel(button:GetFrameLevel() + 5)
button.lockIcon:Show() button.lockIcon:Show()
else else
@@ -561,18 +561,27 @@ local function HideLockIcon(button)
end end
end end
-- Hook UseContainerItem to prevent selling protected items at vendor -- Hook UseContainerItem to prevent selling/disenchanting protected items
local OriginalUseContainerItem = UseContainerItem local OriginalUseContainerItem = UseContainerItem
UseContainerItem = function(bag, slot, ...) UseContainerItem = function(bag, slot, ...)
local DB = addon.Modules.DB local DB = addon.Modules.DB
if DB and MerchantFrame and MerchantFrame:IsVisible() then if DB then
local link = GetContainerItemLink(bag, slot) local link = GetContainerItemLink(bag, slot)
if link then if link then
local Utils = addon.Modules.Utils local Utils = addon.Modules.Utils
local itemID = Utils and Utils.ExtractItemID and Utils:ExtractItemID(link) local itemID = Utils and Utils.ExtractItemID and Utils:ExtractItemID(link)
if itemID and DB:IsItemProtected(itemID) then if itemID and DB:IsItemProtected(itemID) then
addon:Print("Cannot sell " .. link .. " — item is protected") -- Block selling at merchant
return if MerchantFrame and MerchantFrame:IsVisible() then
addon:Print("Cannot sell " .. link .. " — item is protected")
return
end
-- Block disenchant/milling/prospecting (spell targeting an item)
if SpellIsTargeting and SpellIsTargeting() then
SpellStopTargeting()
addon:Print("Cannot disenchant " .. link .. " — item is protected")
return
end
end end
end end
end end
@@ -1000,6 +1009,19 @@ function Guda_ItemButton_OnLoad(self)
end end
end end
-- Block disenchant/milling/prospecting on protected items
if SpellIsTargeting and SpellIsTargeting() and this.hasItem and this.bagID and this.slotID then
local link = GetContainerItemLink(this.bagID, this.slotID)
if link and addon and addon.Modules and addon.Modules.Utils and addon.Modules.DB then
local itemID = addon.Modules.Utils:ExtractItemID(link)
if itemID and addon.Modules.DB:IsItemProtected(itemID) then
SpellStopTargeting()
addon:Print("Cannot disenchant " .. link .. " — item is protected")
return
end
end
end
-- Default behavior -- Default behavior
if ContainerFrameItemButton_OnClick then if ContainerFrameItemButton_OnClick then
-- Mailbox clicks should be ignored except for Ctrl+Click (preview) -- Mailbox clicks should be ignored except for Ctrl+Click (preview)
+1 -1
View File
@@ -54,7 +54,7 @@ function Guda_SettingsPopup_OnLoad(self)
"Alt + Left Click on an item in the bar to untrack it.\n\n" .. "Alt + Left Click on an item in the bar to untrack it.\n\n" ..
"|cffffd100Locked Items:|r\n" .. "|cffffd100Locked Items:|r\n" ..
"Ctrl + Right Click on any item to lock/unlock it.\n" .. "Ctrl + Right Click on any item to lock/unlock it.\n" ..
"Locked items cannot be sold at vendors or deleted.\n" .. "Locked items cannot be sold at vendors, deleted, or disenchanted.\n" ..
"Equipment set items are automatically protected.\n" .. "Equipment set items are automatically protected.\n" ..
"A lock icon appears on the bottom-right corner.\n\n" .. "A lock icon appears on the bottom-right corner.\n\n" ..
"|cffffd100Moving Bars:|r\n" .. "|cffffd100Moving Bars:|r\n" ..