annotate Queue.lua @ 74:8d11fc88ecab

Default summary width is now 700 pixels (up from 650). Changed the item data table into a class which is now also used at the custom widgets.
author Zerotorescue
date Fri, 24 Dec 2010 21:55:11 +0100
parents fee06221176f
children 2127ab01ed4a
rev   line source
Zerotorescue@17 1 local addon = select(2, ...);
Zerotorescue@13 2 local mod = addon:NewModule("Queue", "AceEvent-3.0", "AceTimer-3.0");
Zerotorescue@13 3
Zerotorescue@62 4 local pairs = pairs;
Zerotorescue@62 5
Zerotorescue@13 6 function mod:OnEnable()
Zerotorescue@13 7 -- Register our own slash commands
Zerotorescue@62 8 -- /im queue
Zerotorescue@13 9 addon:RegisterSlash(function()
Zerotorescue@36 10 mod:QueueAll();
Zerotorescue@36 11 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.");
Zerotorescue@14 12
Zerotorescue@14 13 self:RegisterMessage("IM_QUEUE_ALL");
Zerotorescue@14 14 self:RegisterMessage("IM_QUEUE_GROUP");
Zerotorescue@14 15 end
Zerotorescue@14 16
Zerotorescue@14 17 function mod:IM_QUEUE_ALL()
Zerotorescue@14 18 self:QueueAll();
Zerotorescue@14 19 end
Zerotorescue@14 20
Zerotorescue@14 21 function mod:IM_QUEUE_GROUP(event, groupName)
Zerotorescue@14 22 self:QueueGroup(groupName);
Zerotorescue@13 23 end
Zerotorescue@13 24
Zerotorescue@13 25 function mod:QueueAll()
Zerotorescue@14 26 local playerName = UnitName("player");
Zerotorescue@14 27
Zerotorescue@14 28 -- Go through all groups
Zerotorescue@61 29 for groupName, values in pairs(addon.db.profile.groups) do
Zerotorescue@62 30 local trackAt = addon:GetOptionByKey(groupName, "trackAtCharacters");
Zerotorescue@14 31
Zerotorescue@14 32 if trackAt[playerName] then
Zerotorescue@14 33 self:QueueGroup(groupName);
Zerotorescue@13 34 end
Zerotorescue@13 35 end
Zerotorescue@13 36 end
Zerotorescue@13 37
Zerotorescue@13 38 function mod:QueueGroup(groupName)
Zerotorescue@61 39 if not addon.db.profile.groups[groupName] then
Zerotorescue@14 40 print(("Tried to queue items from a group named \"%s\", but no such group exists."):format(groupName));
Zerotorescue@14 41 return;
Zerotorescue@14 42 end
Zerotorescue@14 43
Zerotorescue@14 44 local temp = {};
Zerotorescue@13 45
Zerotorescue@13 46 -- Go through all trade skills for the profession
Zerotorescue@13 47 for i = 1, GetNumTradeSkills() do
Zerotorescue@13 48 -- Process every single tradeskill
Zerotorescue@14 49 self:ProcessTradeSkill(i, groupName, temp);
Zerotorescue@14 50 end
Zerotorescue@36 51
Zerotorescue@61 52 if addon.db.profile.groups[groupName].items then
Zerotorescue@61 53 for itemId, _ in pairs(addon.db.profile.groups[groupName].items) do
Zerotorescue@36 54 if not temp[itemId] then
Zerotorescue@36 55 local itemLink = select(2, GetItemInfo(itemId));
Zerotorescue@36 56
Zerotorescue@62 57 print("Couldn't queue " .. (itemLink or itemId or "???") .. " (not part of this profession)");
Zerotorescue@36 58 end
Zerotorescue@14 59 end
Zerotorescue@13 60 end
Zerotorescue@13 61 end
Zerotorescue@13 62
Zerotorescue@14 63 function mod:ProcessTradeSkill(i, groupName, temp)
Zerotorescue@13 64 -- Try to retrieve the itemlink, this will be nil if current item is a group instead
Zerotorescue@13 65 local itemLink = GetTradeSkillItemLink(i);
Zerotorescue@13 66
Zerotorescue@13 67 if itemLink then
Zerotorescue@13 68 local itemId = addon:GetItemId(itemLink);
Zerotorescue@13 69 if not itemId then
Zerotorescue@13 70 -- If this isn't an item, it can only be an enchant instead
Zerotorescue@13 71 itemId = tonumber(itemLink:match("|Henchant:([-0-9]+)|h"));
Zerotorescue@13 72
Zerotorescue@17 73 itemId = addon.scrollIds[itemId]; -- change enchantIds into scrollIds
Zerotorescue@13 74 end
Zerotorescue@13 75
Zerotorescue@61 76 if addon.db.profile.groups[groupName].items[itemId] then
Zerotorescue@13 77 -- This item is in this group, queue it!
Zerotorescue@13 78
Zerotorescue@14 79 if temp then
Zerotorescue@14 80 -- Remember which items have been processed
Zerotorescue@14 81 temp[itemId] = true;
Zerotorescue@14 82 end
Zerotorescue@13 83
Zerotorescue@23 84 local currentStock = addon:GetItemCount(itemId, groupName);
Zerotorescue@31 85
Zerotorescue@14 86 if currentStock >= 0 then
Zerotorescue@14 87 -- Current stock will be -1 when no itemcount addon was found
Zerotorescue@31 88
Zerotorescue@31 89 -- Retrieve group settings
Zerotorescue@17 90 local restockTarget = addon:GetOptionByKey(groupName, "restockTarget");
Zerotorescue@17 91 local bonusQueue = addon:GetOptionByKey(groupName, "bonusQueue");
Zerotorescue@17 92 local minCraftingQueue = floor( addon:GetOptionByKey(groupName, "minCraftingQueue") * restockTarget );
Zerotorescue@13 93
Zerotorescue@31 94 -- Calculate the amount to be queued
Zerotorescue@17 95 local amount = ( restockTarget - currentStock );
Zerotorescue@17 96
Zerotorescue@17 97 if currentStock == 0 and bonusQueue > 0 then
Zerotorescue@31 98 -- If we have none left and the bonus queue is enabled, modify the amount to be queued
Zerotorescue@31 99
Zerotorescue@17 100 amount = floor( ( amount * ( bonusQueue + 1 ) ) + .5 ); -- round
Zerotorescue@17 101 end
Zerotorescue@17 102
Zerotorescue@17 103 if amount > 0 and amount >= minCraftingQueue then
Zerotorescue@31 104 -- If we are queueing at least one AND more than the minimum amount, then proceed
Zerotorescue@14 105
Zerotorescue@31 106 -- Auction value settings
Zerotorescue@31 107 local priceThreshold = addon:GetOptionByKey(groupName, "priceThreshold");
Zerotorescue@31 108
Zerotorescue@31 109 if priceThreshold == 0 or addon:GetAuctionValue(itemLink, groupName) >= priceThreshold then
Zerotorescue@31 110 -- If no price threshold is set or the auction value is equal to or larger than the price threshold, then proceed
Zerotorescue@31 111
Zerotorescue@31 112 self:Queue(i, amount, groupName);
Zerotorescue@31 113
Zerotorescue@31 114 print("Queued " .. amount .. " of " .. itemLink);
Zerotorescue@31 115 end
Zerotorescue@14 116 end
Zerotorescue@14 117 else
Zerotorescue@14 118 print("No usable itemcount addon found.");
Zerotorescue@13 119 end
Zerotorescue@13 120 end
Zerotorescue@13 121 end
Zerotorescue@13 122 end
Zerotorescue@13 123
Zerotorescue@23 124 function mod:Queue(tradeSkillIndex, amount, group)
Zerotorescue@13 125 tradeSkillIndex = tonumber(tradeSkillIndex);
Zerotorescue@13 126 amount = tonumber(amount);
Zerotorescue@13 127
Zerotorescue@13 128 if not tradeSkillIndex or not amount then return; end
Zerotorescue@13 129
Zerotorescue@23 130 local selectedExternalAddon = addon:GetOptionByKey(group, "craftingAddon");
Zerotorescue@23 131
Zerotorescue@23 132 if addon.supportedAddons.crafting[selectedExternalAddon] and addon.supportedAddons.crafting[selectedExternalAddon].IsEnabled() then
Zerotorescue@13 133 -- Try to use the default auction pricing addon
Zerotorescue@13 134
Zerotorescue@23 135 return addon.supportedAddons.crafting[selectedExternalAddon].Queue(tradeSkillIndex, amount);
Zerotorescue@13 136 else
Zerotorescue@13 137 -- Default not available, get the first one then
Zerotorescue@13 138
Zerotorescue@13 139 for name, value in pairs(addon.supportedAddons.crafting) do
Zerotorescue@13 140 if value.IsEnabled() then
Zerotorescue@13 141 return value.Queue(tradeSkillIndex, amount);
Zerotorescue@13 142 end
Zerotorescue@13 143 end
Zerotorescue@13 144 end
Zerotorescue@13 145
Zerotorescue@13 146 return -2;
Zerotorescue@13 147 end