diff --git a/Sorting/SortEngine.lua b/Sorting/SortEngine.lua index 99ba3de..911f617 100644 --- a/Sorting/SortEngine.lua +++ b/Sorting/SortEngine.lua @@ -564,6 +564,11 @@ local function AddSortKeys(items) -- Texture pattern for grouping similar items (especially trade goods) item.texturePattern = GetTexturePattern(itemTexture) + -- Group Trade Goods that are meats/eggs together regardless of texture + local nameLower = item.itemName and string.lower(item.itemName) or "" + if itemType == "Trade Goods" and (string.find(nameLower, "meat") or string.find(nameLower, "egg")) then + item.texturePattern = "trade_meat_egg" + end -- Inverted values for descending sorts item.invertedQuality = -(tonumber(itemRarity) or 0) diff --git a/UI/BagFrame.lua b/UI/BagFrame.lua index 7a1222d..aa0f50c 100644 --- a/UI/BagFrame.lua +++ b/UI/BagFrame.lua @@ -553,6 +553,19 @@ function BagFrame:DisplayItemsByCategory(bagData, isOtherChar, charName) if numItems > 0 then -- Sort items in category: Subclass > Quality > Name table.sort(items, function(a, b) + -- Group Trade Goods that are meats/eggs together + local function isMeatEgg(d) + if not d or not d.name then return false end + local t = d.type or d.class or "" + if t ~= "Trade Goods" then return false end + local n = string.lower(d.name) + return string.find(n, "meat") or string.find(n, "egg") + end + local ma = isMeatEgg(a.itemData) + local mb = isMeatEgg(b.itemData) + if ma ~= mb then + return ma and not mb + end -- Priority: consumable restore tags (eat > drink > restore > nil) local pa = a.itemData and a.itemData.restoreTag or nil local pb = b.itemData and b.itemData.restoreTag or nil diff --git a/UI/ItemButton.lua b/UI/ItemButton.lua index db454a7..485628f 100644 --- a/UI/ItemButton.lua +++ b/UI/ItemButton.lua @@ -983,28 +983,28 @@ function Guda_ItemButton_OnEnter(self) -- Debug: print hovered item's texture path to chat -- Uses GetItemInfo on the hovered item's ID - --if self.hasItem then - -- local link = nil - -- if self.itemData and self.itemData.link then - -- link = self.itemData.link - -- else - -- -- Fallback to live bag query - -- link = GetContainerItemLink(self.bagID, self.slotID) - -- end - -- 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.Modules.Utils.GetItemInfoSafe then - -- local name, itemLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, - -- itemSubType, itemTexture, itemEquipLoc, itemSellPrice = addon.Modules.Utils:GetItemInfoSafe(itemID) - -- if addon and addon.Print then - -- addon:Print("itemTexture: %s", tostring(itemTexture)) - -- addon:Print("itemCategory: %s", tostring(itemCategory)) - -- addon:Print("itemType: %s", tostring(itemType)) - -- addon:Print("itemType: %s", tostring(itemType)) - -- end - -- end - -- end - --end + if self.hasItem then + local link = nil + if self.itemData and self.itemData.link then + link = self.itemData.link + else + -- Fallback to live bag query + link = GetContainerItemLink(self.bagID, self.slotID) + end + 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.Modules.Utils.GetItemInfoSafe then + local name, itemLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, + itemSubType, itemTexture, itemEquipLoc, itemSellPrice = addon.Modules.Utils:GetItemInfoSafe(itemID) + if addon and addon.Print then + addon:Print("itemTexture: %s", tostring(itemTexture)) + addon:Print("itemCategory: %s", tostring(itemCategory)) + addon:Print("itemType: %s", tostring(itemType)) + addon:Print("itemType: %s", tostring(itemType)) + end + end + end + end -- Handle merchant sell cursor (same approach as BagShui) if MerchantFrame:IsShown() and not self.isBank and not self.otherChar and self.hasItem then ShowContainerSellCursor(self.bagID, self.slotID)