Mercurial > wow > inventory
view Queue.lua @ 36:58fb38f0b447
The list of possible commands when you write /im without any arguement will now include commands inserted by modules with their own descriptions.
Clicking a command in this list will now execute it.
The slash command handler function is now a global so you can invoke these through other methods.
Added an optional event function to registering auction pricing addons, when defined this will be executed when the pricing addon gets selected.
Removed the unused ?Override local item data? option.
Added ?AuctionProfitMaster? and ?ZeroAuctions? pricing support. The pricing info displayed in the summary window will be used for this.
Trying to queue without any items in the summary should no longer give an error.
author | Zerotorescue |
---|---|
date | Sat, 20 Nov 2010 17:24:16 +0100 |
parents | e732843b16d2 |
children | d903b0a151d3 |
line wrap: on
line source
local addon = select(2, ...); local mod = addon:NewModule("Queue", "AceEvent-3.0", "AceTimer-3.0"); function mod:OnEnable() -- Register our own slash commands addon:RegisterSlash(function() mod:QueueAll(); end, { "q", "que", "queue" }, "|Hfunction:InventoriumCommandHandler:queue|h|cff00fff7/im queue|r|h (or /im q) - Queue all items found in the currently opened profession that are within the groups tracked at this current character."); self:RegisterMessage("IM_QUEUE_ALL"); self:RegisterMessage("IM_QUEUE_GROUP"); end function mod:IM_QUEUE_ALL() self:QueueAll(); end function mod:IM_QUEUE_GROUP(event, groupName) self:QueueGroup(groupName); end function mod:QueueAll() local playerName = UnitName("player"); -- Go through all groups for groupName, values in pairs(addon.db.global.groups) do local trackAt = (values.trackAtCharacters or (values.trackAtCharacters == nil and addon.db.global.defaults.trackAtCharacters)); if trackAt[playerName] then self:QueueGroup(groupName); end end end function mod:QueueGroup(groupName) if not addon.db.global.groups[groupName] then print(("Tried to queue items from a group named \"%s\", but no such group exists."):format(groupName)); return; end local temp = {}; -- Go through all trade skills for the profession for i = 1, GetNumTradeSkills() do -- Process every single tradeskill self:ProcessTradeSkill(i, groupName, temp); end if addon.db.global.groups[groupName].items then for itemId, _ in pairs(addon.db.global.groups[groupName].items) do if not temp[itemId] then local itemLink = select(2, GetItemInfo(itemId)); print("Couldn't queue " .. itemLink .. " (not part of this profession)"); end end end end function mod:ProcessTradeSkill(i, groupName, temp) -- Try to retrieve the itemlink, this will be nil if current item is a group instead local itemLink = GetTradeSkillItemLink(i); if itemLink then local itemId = addon:GetItemId(itemLink); if not itemId then -- If this isn't an item, it can only be an enchant instead itemId = tonumber(itemLink:match("|Henchant:([-0-9]+)|h")); itemId = addon.scrollIds[itemId]; -- change enchantIds into scrollIds end if addon.db.global.groups[groupName].items[itemId] then -- This item is in this group, queue it! if temp then -- Remember which items have been processed temp[itemId] = true; end local currentStock = addon:GetItemCount(itemId, groupName); if currentStock >= 0 then -- Current stock will be -1 when no itemcount addon was found -- Retrieve group settings local restockTarget = addon:GetOptionByKey(groupName, "restockTarget"); local bonusQueue = addon:GetOptionByKey(groupName, "bonusQueue"); local minCraftingQueue = floor( addon:GetOptionByKey(groupName, "minCraftingQueue") * restockTarget ); -- Calculate the amount to be queued local amount = ( restockTarget - currentStock ); if currentStock == 0 and bonusQueue > 0 then -- If we have none left and the bonus queue is enabled, modify the amount to be queued amount = floor( ( amount * ( bonusQueue + 1 ) ) + .5 ); -- round end if amount > 0 and amount >= minCraftingQueue then -- If we are queueing at least one AND more than the minimum amount, then proceed -- Auction value settings local priceThreshold = addon:GetOptionByKey(groupName, "priceThreshold"); if priceThreshold == 0 or addon:GetAuctionValue(itemLink, groupName) >= priceThreshold then -- If no price threshold is set or the auction value is equal to or larger than the price threshold, then proceed self:Queue(i, amount, groupName); print("Queued " .. amount .. " of " .. itemLink); end end else print("No usable itemcount addon found."); end end end end function mod:Queue(tradeSkillIndex, amount, group) tradeSkillIndex = tonumber(tradeSkillIndex); amount = tonumber(amount); if not tradeSkillIndex or not amount then return; end local selectedExternalAddon = addon:GetOptionByKey(group, "craftingAddon"); if addon.supportedAddons.crafting[selectedExternalAddon] and addon.supportedAddons.crafting[selectedExternalAddon].IsEnabled() then -- Try to use the default auction pricing addon return addon.supportedAddons.crafting[selectedExternalAddon].Queue(tradeSkillIndex, amount); else -- Default not available, get the first one then for name, value in pairs(addon.supportedAddons.crafting) do if value.IsEnabled() then return value.Queue(tradeSkillIndex, amount); end end end return -2; end