changeset 18:c7b3585c73df

Added the missing QuickAuctions module. I've also added integration with Skillet and LilSparkysWorkshop. IA and queue any item set up in QuickAuctions where the reagent cost is less than the current price of the item. This is based on KevTool Queue.
author Asa Ayers <Asa.Ayers@Gmail.com>
date Sat, 03 Jul 2010 14:53:27 -0700
parents e62d878c716d
children 67f4151d535c
files .pkgmeta ItemAuditor.toc Modules/Options.lua Modules/QuickAuctions.lua
diffstat 4 files changed, 180 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/.pkgmeta	Sat Jul 03 10:22:35 2010 -0700
+++ b/.pkgmeta	Sat Jul 03 14:53:27 2010 -0700
@@ -34,4 +34,5 @@
     - Altoholic
 optional-dependencies:
     - QuickAuctions
-
+    - Skillet
+    - LilSparkysWorkshop
--- a/ItemAuditor.toc	Sat Jul 03 10:22:35 2010 -0700
+++ b/ItemAuditor.toc	Sat Jul 03 14:53:27 2010 -0700
@@ -5,7 +5,7 @@
 ## Version: 0.1
 ## SavedVariables: ItemAuditorDB
 ## Dependencies: Altoholic
-## OptionalDeps: QuickAuctions, DevTools
+## OptionalDeps: QuickAuctions, Skillet, LilSparkysWorkshop, DevTools
 
 
 embeds.xml
--- a/Modules/Options.lua	Sat Jul 03 10:22:35 2010 -0700
+++ b/Modules/Options.lua	Sat Jul 03 14:53:27 2010 -0700
@@ -92,6 +92,15 @@
 			func = "ShowOptionsGUI",
 			guiHidden = true,
 		},
+		queue = {
+			type = "execute",
+			name = "queue",
+			desc = "Queue",
+			func = "Queue",
+			guiHidden = true,
+		},
+		
+		
 	},
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/QuickAuctions.lua	Sat Jul 03 14:53:27 2010 -0700
@@ -0,0 +1,168 @@
+local addonName, addonTable = ...; 
+local addon = _G[addonName]
+
+function addon:IsQACompatible()
+	return (QAAPI ~= nil and QAAPI.GetGroups ~= nil)
+end
+
+function addon:IsQAEnabled()
+	return addon:IsQACompatible() and ItemAuditor.db.char.use_quick_auctions
+end
+
+function addon:IsQADisabled()
+	return not self:IsQAEnabled()
+end
+
+function addon:SetQAEnabled(info, value)
+	ItemAuditor.db.char.use_quick_auctions = value
+end
+
+function addon:RefreshQAGroups()
+	if not addon.IsQAEnabled() then
+		return
+	end
+	for groupName in pairs(QAAPI:GetGroups()) do
+		self:UpdateQAGroup(groupName)
+	end
+end
+
+function addon:UpdateQAThreshold(link)
+	if not addon.IsQAEnabled() then
+		return
+	end
+	_, link= GetItemInfo(link)
+	
+	self:UpdateQAGroup(QAAPI:GetItemGroup(link))
+end
+
+function addon:UpdateQAGroup(groupName)
+	if not addon.IsQAEnabled() then
+		return
+	end
+	if groupName then
+		local threshold = 0
+		
+		for link in pairs(QAAPI:GetItemsInGroup(groupName)) do
+			local _, itemCost= ItemAuditor:GetItemCost(link, 0)
+			
+			threshold = max(threshold, itemCost)
+		end
+		
+		if threshold == 0 then
+			threshold = 1
+		end
+		
+		-- add my minimum profit margin
+		threshold = threshold * 1.10
+		
+		-- Adding the cost of mailing every item once.
+		threshold = threshold + 30
+		
+		-- add AH Cut
+		local keep = 1 - addon:GetAHCut()
+		threshold = threshold/keep
+		
+		QAAPI:SetGroupThreshold(groupName, ceil(threshold))
+	end
+end
+
+--[[
+	This is based on KTQ
+]]
+function addon:Queue()
+	if not addon.IsQAEnabled() then
+		self:Debug("Refusing to run :Queue() QA is disabled")
+		return
+	end
+	if LSW == nil then
+		self:Print("This feature requires LilSparky's Workshop.")
+		return
+	end
+	
+	for i = 1, GetNumTradeSkills() do
+		local itemLink = GetTradeSkillItemLink(i)
+		local itemId = Skillet:GetItemIDFromLink(itemLink)
+
+		--Figure out if its an enchant or not
+		_, _, _, _, altVerb = GetTradeSkillInfo(i)
+		if LSW.scrollData[itemId] ~= nil and altVerb == 'Enchant' then
+			-- Ask LSW for the correct scroll
+			itemId = LSW.scrollData[itemId]["scrollID"]
+		end
+
+		local skillName, skillType, numAvailable, isExpanded, altVerb = GetTradeSkillInfo(i)
+		local recipeLink = GetTradeSkillRecipeLink(i)
+		local stackSize  = 0
+		if recipeLink ~= nil then
+			_, itemLink= GetItemInfo(itemId)
+			local QAGroup = QAAPI:GetItemGroup(itemLink)
+			if QAGroup ~= nil then
+				stackSize = QAAPI:GetGroupPostCap(QAGroup) * QAAPI:GetGroupPerAuction(QAGroup)
+				stackSize = stackSize / GetTradeSkillNumMade(i)
+			end
+
+			local count = Altoholic:GetItemCount(itemId)
+			
+			if count < stackSize then
+				local found, _, skillString = string.find(recipeLink, "^|%x+|H(.+)|h%[.+%]")
+				local _, skillId = strsplit(":", skillString )
+				
+				
+				local totalCost = 0
+				for reagentId = 1, GetTradeSkillNumReagents(i) do
+					_, _, reagentCount = GetTradeSkillReagentInfo(i, reagentId);
+					reagentLink = GetTradeSkillReagentItemLink(i, reagentId)
+					
+					totalCost = totalCost + addon:GetReagentCost(reagentLink, reagentCount)  
+				end
+				
+				local currentPrice = GetAuctionBuyout(itemLink) or 0
+				
+				local toQueue = stackSize - count
+				-- bonus?
+				
+				if totalCost < currentPrice then
+					self:Debug(format("Adding %s x%s to skillet queue.", itemLink, toQueue))
+					self:AddToQueue(skillId,i, toQueue)
+				else
+					self:Debug(format("Skipping %s. Would cost %s to craft and sell for %s", itemLink, addon:FormatMoney(totalCost), addon:FormatMoney(currentPrice)))
+				end
+			end
+		  end
+	end
+	
+	
+end
+
+function addon:GetReagentCost(link, total)
+	local totalCost = 0
+	local investedTotal, investedPerItem, count = addon:GetItemCost(link)
+	
+	if count > 0 then
+		if total <= count then
+			totalCost = investedPerItem * total
+			total = 0
+		else
+			totalCost = investedTotal
+			total = total - count
+		end
+	end
+	
+	-- If there is none on the auction house, this uses a large enough number
+	-- to prevent us from trying to make the item.
+	local ahPrice = (GetAuctionBuyout(link) or 99990000)
+	
+	return totalCost + (ahPrice * total)
+end
+
+function addon:AddToQueue(skillId,skillIndex, toQueue)
+	if Skillet == nil then
+		self:Print("Skillet not loaded")
+	end
+	if Skillet.QueueCommandIterate ~= nil then
+		local queueCommand = Skillet:QueueCommandIterate(tonumber(skillId), toQueue)
+		Skillet:AddToQueue(queueCommand)
+	else
+		Skillet.stitch:AddToQueue(skillIndex, toQueue)
+	end
+end