Zerotorescue@17: local addon = select(2, ...); Zerotorescue@13: local mod = addon:NewModule("Queue", "AceEvent-3.0", "AceTimer-3.0"); Zerotorescue@13: Zerotorescue@13: function mod:OnEnable() Zerotorescue@13: -- Register our own slash commands Zerotorescue@13: addon:RegisterSlash(function() Zerotorescue@13: self:QueueAll(); Zerotorescue@13: end, "q", "que", "queue"); Zerotorescue@14: Zerotorescue@14: self:RegisterMessage("IM_QUEUE_ALL"); Zerotorescue@14: self:RegisterMessage("IM_QUEUE_GROUP"); Zerotorescue@14: end Zerotorescue@14: Zerotorescue@14: function mod:IM_QUEUE_ALL() Zerotorescue@14: self:QueueAll(); Zerotorescue@14: end Zerotorescue@14: Zerotorescue@14: function mod:IM_QUEUE_GROUP(event, groupName) Zerotorescue@14: self:QueueGroup(groupName); Zerotorescue@13: end Zerotorescue@13: Zerotorescue@13: function mod:QueueAll() Zerotorescue@14: local playerName = UnitName("player"); Zerotorescue@14: Zerotorescue@14: -- Go through all groups Zerotorescue@14: for groupName, values in pairs(addon.db.global.groups) do Zerotorescue@14: local trackAt = (values.trackAtCharacters or (values.trackAtCharacters == nil and addon.db.global.defaults.trackAtCharacters)); Zerotorescue@14: Zerotorescue@14: if trackAt[playerName] then Zerotorescue@14: self:QueueGroup(groupName); Zerotorescue@13: end Zerotorescue@13: end Zerotorescue@13: end Zerotorescue@13: Zerotorescue@13: function mod:QueueGroup(groupName) Zerotorescue@14: if not addon.db.global.groups[groupName] then Zerotorescue@14: print(("Tried to queue items from a group named \"%s\", but no such group exists."):format(groupName)); Zerotorescue@14: return; Zerotorescue@14: end Zerotorescue@14: Zerotorescue@14: local temp = {}; Zerotorescue@13: Zerotorescue@13: -- Go through all trade skills for the profession Zerotorescue@13: for i = 1, GetNumTradeSkills() do Zerotorescue@13: -- Process every single tradeskill Zerotorescue@14: self:ProcessTradeSkill(i, groupName, temp); Zerotorescue@14: end Zerotorescue@14: Zerotorescue@14: for itemId, _ in pairs(addon.db.global.groups[groupName].items) do Zerotorescue@14: if not temp[itemId] then Zerotorescue@14: local itemLink = select(2, GetItemInfo(itemId)); Zerotorescue@17: print("Couldn't queue " .. itemLink .. " (not part of this profession)"); Zerotorescue@14: end Zerotorescue@13: end Zerotorescue@13: end Zerotorescue@13: Zerotorescue@14: function mod:ProcessTradeSkill(i, groupName, temp) Zerotorescue@13: -- Try to retrieve the itemlink, this will be nil if current item is a group instead Zerotorescue@13: local itemLink = GetTradeSkillItemLink(i); Zerotorescue@13: Zerotorescue@13: if itemLink then Zerotorescue@13: local itemId = addon:GetItemId(itemLink); Zerotorescue@13: if not itemId then Zerotorescue@13: -- If this isn't an item, it can only be an enchant instead Zerotorescue@13: itemId = tonumber(itemLink:match("|Henchant:([-0-9]+)|h")); Zerotorescue@13: Zerotorescue@17: itemId = addon.scrollIds[itemId]; -- change enchantIds into scrollIds Zerotorescue@13: end Zerotorescue@13: Zerotorescue@13: if addon.db.global.groups[groupName].items[itemId] then Zerotorescue@13: -- This item is in this group, queue it! Zerotorescue@13: Zerotorescue@14: if temp then Zerotorescue@14: -- Remember which items have been processed Zerotorescue@14: temp[itemId] = true; Zerotorescue@14: end Zerotorescue@13: Zerotorescue@14: local currentStock = addon:GetItemCount(itemId); Zerotorescue@14: if currentStock >= 0 then Zerotorescue@14: -- Current stock will be -1 when no itemcount addon was found Zerotorescue@17: local restockTarget = addon:GetOptionByKey(groupName, "restockTarget"); Zerotorescue@17: local bonusQueue = addon:GetOptionByKey(groupName, "bonusQueue"); Zerotorescue@17: local minCraftingQueue = floor( addon:GetOptionByKey(groupName, "minCraftingQueue") * restockTarget ); Zerotorescue@13: Zerotorescue@17: local amount = ( restockTarget - currentStock ); Zerotorescue@17: Zerotorescue@17: if currentStock == 0 and bonusQueue > 0 then Zerotorescue@17: amount = floor( ( amount * ( bonusQueue + 1 ) ) + .5 ); -- round Zerotorescue@17: end Zerotorescue@17: Zerotorescue@17: if amount > 0 and amount >= minCraftingQueue then Zerotorescue@14: self:Queue(i, amount); Zerotorescue@14: Zerotorescue@14: print("Queued " .. amount .. " of " .. itemLink); Zerotorescue@14: end Zerotorescue@14: else Zerotorescue@14: print("No usable itemcount addon found."); Zerotorescue@13: end Zerotorescue@13: end Zerotorescue@13: end Zerotorescue@13: end Zerotorescue@13: Zerotorescue@13: function mod:Queue(tradeSkillIndex, amount) Zerotorescue@13: tradeSkillIndex = tonumber(tradeSkillIndex); Zerotorescue@13: amount = tonumber(amount); Zerotorescue@13: Zerotorescue@13: if not tradeSkillIndex or not amount then return; end Zerotorescue@13: Zerotorescue@13: if addon.supportedAddons.crafting[addon.db.global.defaults.craftingAddon] then Zerotorescue@13: -- Try to use the default auction pricing addon Zerotorescue@13: Zerotorescue@13: return addon.supportedAddons.crafting[addon.db.global.defaults.craftingAddon].Queue(tradeSkillIndex, amount); Zerotorescue@13: else Zerotorescue@13: -- Default not available, get the first one then Zerotorescue@13: Zerotorescue@13: for name, value in pairs(addon.supportedAddons.crafting) do Zerotorescue@13: if value.IsEnabled() then Zerotorescue@13: return value.Queue(tradeSkillIndex, amount); Zerotorescue@13: end Zerotorescue@13: end Zerotorescue@13: end Zerotorescue@13: Zerotorescue@13: return -2; Zerotorescue@13: end