diff --git a/Core/Utils.lua b/Core/Utils.lua index 81d031b..0564cfd 100644 --- a/Core/Utils.lua +++ b/Core/Utils.lua @@ -212,6 +212,21 @@ function Utils:IsQuestItemTooltip(bagID, slotID) string.find(tl, "starts a quest") or string.find(tl, "quest item") or string.find(tl, "manual") then + + -- Double check category to avoid misidentifying equipment with "Use:" + local link = GetContainerItemLink(bagID, slotID) + if link and self.ExtractItemID and self.GetItemInfoSafe then + local itemID = self:ExtractItemID(link) + if itemID then + local _, _, _, _, itemCategory, itemType = self:GetItemInfoSafe(itemID) + -- If it's Weapon or Armor, and NOT categorized as Quest, then it's not a Quest Item + if (itemCategory == "Weapon" or itemCategory == "Armor" or itemType == "Weapon" or itemType == "Armor") and + (itemCategory ~= "Quest" and itemType ~= "Quest") then + return false + end + end + end + return true end end diff --git a/Guda.toc b/Guda.toc index aae33fc..5f887d9 100644 --- a/Guda.toc +++ b/Guda.toc @@ -2,7 +2,7 @@ ## Title: Guda ## Notes: All-in-one bag and bank addon for World of Warcraft 1.12.1 (Turtle WoW) ## Author: Vati -## Version: 1.6.0 +## Version: 1.6.1 ## SavedVariables: Guda_DB ## SavedVariablesPerCharacter: Guda_CharDB diff --git a/UI/FrameHelpers.lua b/UI/FrameHelpers.lua index 4ea1866..e27e4cb 100644 --- a/UI/FrameHelpers.lua +++ b/UI/FrameHelpers.lua @@ -56,10 +56,21 @@ function Guda_CategorizeItem(itemData, bagID, slotID, categories, specialItems, -- Priority 3: Quest Items -- Check multiple sources: tooltip scan, itemClass, itemType, and QuestItemsDB local isQuestItem = false - if itemData.class == "Quest" or itemData.type == "Quest" then + local itemCategory = itemData.class or itemData.category or "" + local itemType = itemData.type or "" + + -- If it's a Weapon or Armor, it shouldn't be a QuestItem unless it's specifically categorized as Quest + local isEquipment = (itemCategory == "Weapon" or itemCategory == "Armor" or itemType == "Weapon" or itemType == "Armor") + local isQuestCategory = (itemCategory == "Quest" or itemType == "Quest") + + if isQuestCategory then isQuestItem = true elseif not isOtherChar then isQuestItem = addon.Modules.Utils:IsQuestItemTooltip(bagID, slotID) + -- If tooltip said it is quest, but it is equipment and not quest category, reject it + if isQuestItem and isEquipment and not isQuestCategory then + isQuestItem = false + end end -- Also check the QuestItemsDB for known faction-specific quest items if not isQuestItem and itemData.link then diff --git a/UI/ItemButton.lua b/UI/ItemButton.lua index 3251d46..e094e5f 100644 --- a/UI/ItemButton.lua +++ b/UI/ItemButton.lua @@ -52,35 +52,44 @@ local function IsQuestItem(bagID, slotID, isBank) end end - -- Also check item category/type via GetItemInfo for "Quest" - -- Turtle WoW GetItemInfo returns: name, link, rarity, level, itemCategory, itemType, stack, subType, texture, equipLoc, sellPrice - if not isQuestItem then - local link = GetContainerItemLink(bagID, slotID) - if link and addon and addon.Modules and addon.Modules.Utils and addon.Modules.Utils.ExtractItemID and addon.Modules.Utils.GetItemInfoSafe then - local itemID = addon.Modules.Utils:ExtractItemID(link) - if itemID then - local itemName, _, _, _, itemCategory, itemType = addon.Modules.Utils:GetItemInfoSafe(itemID) - if itemCategory == "Quest" or itemType == "Quest" then - isQuestItem = true - end - end - end - end + -- Also check item category/type via GetItemInfo for "Quest" + -- Turtle WoW GetItemInfo returns: name, link, rarity, level, itemCategory, itemType, stack, subType, texture, equipLoc, sellPrice + local link = GetContainerItemLink(bagID, slotID) + local itemID + local itemCategory, itemType + + if link and addon and addon.Modules and addon.Modules.Utils and addon.Modules.Utils.ExtractItemID and addon.Modules.Utils.GetItemInfoSafe then + itemID = addon.Modules.Utils:ExtractItemID(link) + if itemID then + _, _, _, _, itemCategory, itemType = addon.Modules.Utils:GetItemInfoSafe(itemID) + end + end - -- Check the QuestItemsDB for known faction-specific quest items - if not isQuestItem then - local link = GetContainerItemLink(bagID, slotID) - if link and addon and addon.Modules and addon.Modules.Utils and addon.Modules.Utils.ExtractItemID then - local itemID = addon.Modules.Utils:ExtractItemID(link) - if itemID and addon.IsQuestItemByID then - local playerFaction = UnitFactionGroup("player") - local isDBQuestItem = addon:IsQuestItemByID(itemID, playerFaction) - if isDBQuestItem then - isQuestItem = true - end - end - end - end + -- If it's a Weapon or Armor, it shouldn't be a QuestItem unless it's specifically categorized as Quest + -- This avoids "Use:" equipment showing up in the quest bar + if itemCategory == "Weapon" or itemCategory == "Armor" or itemType == "Weapon" or itemType == "Armor" then + if itemCategory ~= "Quest" and itemType ~= "Quest" then + isQuestItem = false + isQuestStarter = false + end + end + + if not isQuestItem then + if itemCategory == "Quest" or itemType == "Quest" then + isQuestItem = true + end + end + + -- Check the QuestItemsDB for known faction-specific quest items + if not isQuestItem then + if itemID and addon.IsQuestItemByID then + local playerFaction = UnitFactionGroup("player") + local isDBQuestItem = addon:IsQuestItemByID(itemID, playerFaction) + if isDBQuestItem then + isQuestItem = true + end + end + end return isQuestItem, isQuestStarter end diff --git a/UI/QuestItemBar.lua b/UI/QuestItemBar.lua index 767b21b..b801a48 100644 --- a/UI/QuestItemBar.lua +++ b/UI/QuestItemBar.lua @@ -62,30 +62,39 @@ function QuestItemBar:CheckQuestItemUsable(bagID, slotID) end -- Fallback check for quest category if not detected from tooltip + local link = GetContainerItemLink(bagID, slotID) + local itemID + local itemCategory, itemType + + if link and addon.Modules.Utils and addon.Modules.Utils.ExtractItemID and addon.Modules.Utils.GetItemInfoSafe then + itemID = addon.Modules.Utils:ExtractItemID(link) + if itemID then + _, _, _, _, itemCategory, itemType = addon.Modules.Utils:GetItemInfoSafe(itemID) + end + end + + -- If it's a Weapon or Armor, it shouldn't be a QuestItem unless it's specifically categorized as Quest + -- This avoids "Use:" equipment showing up in the quest bar + if itemCategory == "Weapon" or itemCategory == "Armor" or itemType == "Weapon" or itemType == "Armor" then + if itemCategory ~= "Quest" and itemType ~= "Quest" then + isQuestItem = false + isQuestStarter = false + end + end + if not isQuestItem then - local link = GetContainerItemLink(bagID, slotID) - if link and addon.Modules.Utils and addon.Modules.Utils.ExtractItemID and addon.Modules.Utils.GetItemInfoSafe then - local itemID = addon.Modules.Utils:ExtractItemID(link) - if itemID then - local _, _, _, _, itemCategory, itemType = addon.Modules.Utils:GetItemInfoSafe(itemID) - if itemCategory == "Quest" or itemType == "Quest" then - isQuestItem = true - end - end + if itemCategory == "Quest" or itemType == "Quest" then + isQuestItem = true end end -- Check the QuestItemsDB for known faction-specific quest items if not isQuestItem then - local link = GetContainerItemLink(bagID, slotID) - if link and addon.Modules.Utils and addon.Modules.Utils.ExtractItemID then - local itemID = addon.Modules.Utils:ExtractItemID(link) - if itemID and addon.IsQuestItemByID then - local playerFaction = UnitFactionGroup("player") - local isDBQuestItem = addon:IsQuestItemByID(itemID, playerFaction) - if isDBQuestItem then - isQuestItem = true - end + if itemID and addon.IsQuestItemByID then + local playerFaction = UnitFactionGroup("player") + local isDBQuestItem = addon:IsQuestItemByID(itemID, playerFaction) + if isDBQuestItem then + isQuestItem = true end end end