local debug = false local iconDisplayDuration = 3 -- itemName, itemLink, itemQuality, itemLevel, itemMinLevel, itemType, itemSubType,itemStackCount, itemEquipLoc, itemTexture, sellPrice, classID, subclassID, bindType,expacID, setID, isCraftingReagent = GetItemInfo(slot) -- lootIcon, lootName, lootQuantity, currencyID, lootQuality, locked, isQuestItem, questID, isActive = GetLootSlotInfo(slot) -- Link sometimes does not work local function getItemLink(slot) return GetLootSlotLink(slot) end local function getItemName(slot) return select(2, GetLootSlotInfo(slot)) end local function getItemType(slot) return select(6, GetItemInfo(getItemLink(slot))) end local function getItemSubtype(slot) return select(7, GetItemInfo(getItemLink(slot))) end local function getItemLevel(slot) return select(4, GetItemInfo(getItemLink(slot))) end local function getItemValue(slot) return select(11, GetItemInfo(getItemLink(slot))) end local function getItemQuantity(slot) return select(3, GetLootSlotInfo(slot)) end local function getItemQuality(slot) return select(3, GetItemInfo(getItemLink(slot))) end local function getItemEquipLocation(slot) return select(9, GetItemInfo(getItemLink(slot))) end local function getItemIcon(slot) return select(10, GetItemInfo(getItemLink(slot))) end local doLoot = function(slot) aura_env.debugLog("Looting slot: " .. slot) LootSlot(slot) local itemIcon = getItemIcon(slot) local itemName = getItemName(slot) local itemQuantity = getItemQuantity(slot) local itemQuality = getItemQuality(slot) aura_env.debugLog("Drawing icon for " .. itemName .. " with quality " .. itemQuality) local nameWithColor = aura_env.qualityColors[itemQuality + 1] .. "[" .. itemName .. "]\124r" local nameWithQuantity = nameWithColor .. " x" .. itemQuantity aura_env.debugLog("Assigning name" .. nameWithQuantity) aura_env.allstates[#aura_env.allstates + 1] = { show = true, changed = true, index = GetTime(), resort = true, icon = itemIcon, name = nameWithQuantity, amount = itemQuantity, progressType = "timed", expirationTime = GetTime() + iconDisplayDuration, duration = iconDisplayDuration, autoHide = true, } end local goldFilter = { enabled = true, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Gold filter; slot: " .. slot) local itemName = getItemName(slot) if (itemname and itemName:match("%d+ (Gold|Silver|Copper)")) then aura_env.debugLog("Gold filter pass") return true end end end } local orderResourcesFilter = { enabled = true, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Resource filter; slot: " .. slot) local itemName = getItemName(slot) if (itemName and itemName:match("Order Resources")) then aura_env.debugLog("Order resource filter pass") return true end end end } local mountFilter = { enabled = true, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Mount filter; slot: " .. slot) local itemType = getItemType(slot) if (itemType and itemType == "Mount") then aura_env.debugLog("Mount filter pass") return true end end end } local ilvlFilter = { enabled = true, ilvlThreshold = 880, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("ILvl filter; slot: " .. slot) local itemLevel = getItemLevel(slot) if (itemLevel and itemLevel > self.ilvlThreshold) then aura_env.debugLog("Item level filter pass") return true end end end } local professionFilter = { enabled = true, herbs = true, cloth = false, ore = false, leather = false, cooking = false, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Profession filter; slot: " .. slot) local itemType = getItemType(slot) if (itemType and itemType == "Tradeskill") then local itemSubtype = getItemSubtype(slot) if (itemSubtype and (itemSubtype == "Herb" and self.herbs) or (itemSubtype == "Leather" and self.leather) or (itemSubtype == "Cloth" and self.cloth) or (itemSubtype == "Ore" and self.ore) or (itemSubtype == "Cooking" and self.cooking)) then aura_env.debugLog("Profession filter pass") return true end end end end } local valueFilter = { enabled = true, valueThreshold = 35 * 100 * 100, applyThresholdToItemStack = false, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Value filter; slot: " .. slot) local itemValue = getItemValue(slot) if (self.applyThresholdToItemStack) then local itemQuantity = getItemQuantity(slot) aura_env.debugLog("There exist " .. itemQuantity .. " items in slot " .. slot) itemValue = itemValue * itemQuantity end if (itemValue and itemValue > self.valueThreshold) then aura_env.debugLog("Value filter pass") return true end end end } local greyValueFilter = { enabled = true, -- Set threshold to 0 to loot all greys valueThreshold = 5 * 100 * 100, applyThresholdToItemStack = false, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Grey value filter; slot: " .. slot) local itemQuality = getItemQuality(slot) if (itemQuality > 0) then local itemValue = getItemValue(slot) if (self.applyThresholdToItemStack) then local itemQuantity = getItemQuantity(slot) aura_env.debugLog("There exist " .. itemQuantity .. " items in slot " .. slot) itemValue = itemValue * itemQuantity end if (itemValue and itemValue > self.valueThreshold) then aura_env.debugLog("Grey value filter pass") return true end end end end } local questItemFilter = { enabled = true, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Quest item filter; slot: " .. slot) local itemType = getItemType(slot) local itemSubtype = getItemSubtype(slot) if (itemType and itemSubtype and itemType == itemSubtype == "Quest") then aura_env.debugLog("Quest item filter pass") return true end end end } local classGearFilter = { enabled = true, ilvlThreshold = 800, qualityThreshold = 2, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Class gear filter; slot: " .. slot) local itemType = getItemType(slot) local itemEquipLoc = getItemEquipLocation(slot) if (itemType == "Armor" or itemType == "Weapon" or itemEquipLoc == "INVTYPE_FINGER" or itemEquipLoc == "INVTYPE_TRINKET" or itemEquipLoc == "INVTYPE_CLOAK" or itemEquipLoc == "INVTYPE_NECK") then local itemLevel = getItemLevel(slot) local itemQuality = getItemQuality(slot) local isEquippable = aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 if (isEquippable and itemLevel > self.ilvlThreshold and itemQuality > self.qualityThreshold) then aura_env.debugLog("Class gear filter pass") return true end end end end } local azeriteFilter = { enabled = true, ilvlThreshold = 800, qualityThreshold = 2, filter = function(self, slot) if (self.enabled) then aura_env.debugLog("Azerite filter; slot: " .. slot) local itemType = getItemType(slot) local itemSubtype = getItemSubtype(slot) local itemQuality = getItemQuality(slot) if (itemType and itemSubtype and itemQuality and itemType == "Consumable" and itemSubtype == "Other" and itemQuality > 1) then aura_env.debugLog("Azerite filter pass") return true end end end } aura_env.filterService = { filters = { goldFilter, orderResourcesFilter, mountFilter, ilvlFilter, professionFilter, valueFilter, greyValueFilter, questItemFilter, classGearFilter, azeriteFilter }, slotsToLoot = {}, run = function(self, lootInfo) self.slotsToLoot = {} for slot, item in pairs(lootInfo) do aura_env.debugLog("Loot slot: " .. slot .. " " .. item.item) aura_env.debugLog(getItemSubtype(slot)) self:runFilters(slot) end aura_env.debugLog("Slots to loot: " .. #self.slotsToLoot) aura_env.debugLog(self.slotsToLoot) for i = #self.slotsToLoot, 1, -1 do local slot = self.slotsToLoot[i] aura_env.debugLog("Looting slot (iterator): " .. slot) doLoot(slot) end end, runFilters = function(self, slot) for k, filter in pairs(self.filters) do if (filter:filter(slot)) then self.slotsToLoot[#self.slotsToLoot + 1] = slot return end end end } aura_env.debugLog = function(obj) if (debug) then print(GetTime()) DevTools_Dump(obj) print() end end aura_env.skills = { --Warrior [1] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 0, ["Mail"] = 0, ["Plate"] = 1, ["Shields"] = 1, --Weapon Skills ["One-Handed Axes"] = 1, ["Two-Handed Axes"] = 1, ["Bows"] = 1, ["Guns"] = 1, ["One-Handed Maces"] = 1, ["Two-Handed Maces"] = 1, ["Polearms"] = 1, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 1, ["Warglaives"] = 1, ["Staves"] = 1, ["Fist Weapons"] = 1, ["Daggers"] = 1, ["Crossbows"] = 1, ["Wands"] = 0, }, --Paladin [2] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 0, ["Mail"] = 0, ["Plate"] = 1, ["Shields"] = 1, --Weapon Skills ["One-Handed Axes"] = 1, ["Two-Handed Axes"] = 1, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 1, ["Two-Handed Maces"] = 1, ["Polearms"] = 1, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 1, ["Warglaives"] = 0, ["Staves"] = 0, ["Fist Weapons"] = 0, ["Daggers"] = 0, ["Crossbows"] = 0, ["Wands"] = 0, }, --Hunter [3] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 0, ["Mail"] = 1, ["Plate"] = 0, ["Shields"] = 0, --Weapon Skills ["One-Handed Axes"] = 1, ["Two-Handed Axes"] = 1, ["Bows"] = 1, ["Guns"] = 1, ["One-Handed Maces"] = 0, ["Two-Handed Maces"] = 0, ["Polearms"] = 1, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 1, ["Warglaives"] = 0, ["Staves"] = 1, ["Fist Weapons"] = 1, ["Daggers"] = 1, ["Crossbows"] = 1, ["Wands"] = 0, }, --Rogue [4] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 1, ["Mail"] = 0, ["Plate"] = 0, ["Shields"] = 0, --Weapon Skills ["One-Handed Axes"] = 1, ["Two-Handed Axes"] = 0, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 1, ["Two-Handed Maces"] = 0, ["Polearms"] = 0, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 0, ["Warglaives"] = 0, ["Staves"] = 0, ["Fist Weapons"] = 1, ["Daggers"] = 1, ["Crossbows"] = 0, ["Wands"] = 0, }, --Priest [5] = { --Armor Skills ["Cloth"] = 1, ["Leather"] = 0, ["Mail"] = 0, ["Plate"] = 0, ["Shields"] = 0, --Weapon Skills ["One-Handed Axes"] = 0, ["Two-Handed Axes"] = 0, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 1, ["Two-Handed Maces"] = 0, ["Polearms"] = 0, ["One-Handed Swords"] = 0, ["Two-Handed Swords"] = 0, ["Warglaives"] = 0, ["Staves"] = 1, ["Fist Weapons"] = 0, ["Daggers"] = 1, ["Crossbows"] = 0, ["Wands"] = 1, }, --Death Knight [6] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 0, ["Mail"] = 0, ["Plate"] = 1, ["Shields"] = 0, --Weapon Skills ["One-Handed Axes"] = 1, ["Two-Handed Axes"] = 1, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 1, ["Two-Handed Maces"] = 1, ["Polearms"] = 1, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 1, ["Warglaives"] = 0, ["Staves"] = 0, ["Fist Weapons"] = 0, ["Daggers"] = 0, ["Crossbows"] = 0, ["Wands"] = 0, }, --Shaman [7] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 0, ["Mail"] = 1, ["Plate"] = 0, ["Shields"] = 1, --Weapon Skills ["One-Handed Axes"] = 1, ["Two-Handed Axes"] = 0, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 1, ["Two-Handed Maces"] = 0, ["Polearms"] = 0, ["One-Handed Swords"] = 0, ["Two-Handed Swords"] = 0, ["Warglaives"] = 0, ["Staves"] = 1, ["Fist Weapons"] = 1, ["Daggers"] = 1, ["Crossbows"] = 0, ["Wands"] = 0, }, --Mage [8] = { --Armor Skills ["Cloth"] = 1, ["Leather"] = 0, ["Mail"] = 0, ["Plate"] = 0, ["Shields"] = 0, --Weapon Skills ["One-Handed Axes"] = 0, ["Two-Handed Axes"] = 0, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 0, ["Two-Handed Maces"] = 0, ["Polearms"] = 0, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 0, ["Warglaives"] = 0, ["Staves"] = 1, ["Fist Weapons"] = 0, ["Daggers"] = 1, ["Crossbows"] = 0, ["Wands"] = 1, }, --Warlock [9] = { --Armor Skills ["Cloth"] = 1, ["Leather"] = 0, ["Mail"] = 0, ["Plate"] = 0, ["Shields"] = 0, --Weapon Skills ["One-Handed Axes"] = 0, ["Two-Handed Axes"] = 0, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 0, ["Two-Handed Maces"] = 0, ["Polearms"] = 0, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 0, ["Warglaives"] = 0, ["Staves"] = 1, ["Fist Weapons"] = 0, ["Daggers"] = 1, ["Crossbows"] = 0, ["Wands"] = 1, }, --Monk [10] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 1, ["Mail"] = 0, ["Plate"] = 1, ["Shields"] = 1, --Weapon Skills ["One-Handed Axes"] = 1, ["Two-Handed Axes"] = 0, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 1, ["Two-Handed Maces"] = 0, ["Polearms"] = 1, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 0, ["Warglaives"] = 0, ["Staves"] = 1, ["Fist Weapons"] = 1, ["Daggers"] = 0, ["Crossbows"] = 0, ["Wands"] = 0, }, --Druid [11] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 1, ["Mail"] = 0, ["Plate"] = 0, ["Shields"] = 0, --Weapon Skills ["One-Handed Axes"] = 0, ["Two-Handed Axes"] = 0, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 1, ["Two-Handed Maces"] = 0, ["Polearms"] = 1, ["One-Handed Swords"] = 0, ["Two-Handed Swords"] = 0, ["Warglaives"] = 0, ["Staves"] = 1, ["Fist Weapons"] = 1, ["Daggers"] = 1, ["Crossbows"] = 0, ["Wands"] = 0, }, --Demon Hunter [12] = { --Armor Skills ["Cloth"] = 0, ["Leather"] = 1, ["Mail"] = 0, ["Plate"] = 0, ["Shields"] = 0, --Weapon Skills ["One-Handed Axes"] = 1, ["Two-Handed Axes"] = 0, ["Bows"] = 0, ["Guns"] = 0, ["One-Handed Maces"] = 0, ["Two-Handed Maces"] = 0, ["Polearms"] = 0, ["One-Handed Swords"] = 1, ["Two-Handed Swords"] = 0, ["Warglaives"] = 1, ["Staves"] = 0, ["Fist Weapons"] = 1, ["Daggers"] = 0, ["Crossbows"] = 0, ["Wands"] = 0, }, } aura_env.qualityColors = { "\124cff9d9d9d", -- Poor "\124cffffffff", -- Common "\124cff1eff00", -- Uncommon "\124cff0070dd", -- Rare "\124cffa335ee", -- Epic "\124cffff8000", -- Legendary "\124cffe6cc80", -- Artifact "\124cff00ccff", -- Heirloom }