comparison Modules/QuickAuctions.lua @ 21:d7f02c84994c

Changed QA to be an option part of /ia queue. If QA is there, IA will queue enough of an item to be created to have 1.25x QA auctino count x QA stack size (rounded up) items. If it is not there, it will create 1 on every profitable item. This commit also adds support for Auctioneer.
author Asa Ayers <Asa.Ayers@Gmail.com>
date Tue, 06 Jul 2010 23:48:54 -0700
parents ff9a698caebc
children 819bfdc5d73c
comparison
equal deleted inserted replaced
20:ff9a698caebc 21:d7f02c84994c
75 75
76 --[[ 76 --[[
77 This is based on KTQ 77 This is based on KTQ
78 ]] 78 ]]
79 function addon:Queue() 79 function addon:Queue()
80 if not addon.IsQAEnabled() then
81 self:Debug("Refusing to run :Queue() QA is disabled")
82 return
83 end
84 if LSW == nil then 80 if LSW == nil then
85 self:Print("This feature requires LilSparky's Workshop.") 81 self:Print("This feature requires LilSparky's Workshop.")
86 return 82 return
87 end 83 end
88 self:Debug(format("Auction Threshold: %d%%", self:GetAuctionThreshold()*100 )) 84 if Skillet == nil then
85 self:Print("This feature requires Skillet.")
86 return
87 end
88 if GetAuctionBuyout ~= nil then
89 elseif AucAdvanced and AucAdvanced.Version then
90 else
91 self:Print("This feature requires Auctionator, Auctioneer, AuctionLite, or AuctionMaster.")
92 return
93 end
94
95
96 if addon.IsQAEnabled() then
97 self:Debug(format("Auction Threshold: %d%%", self:GetAuctionThreshold()*100 ))
98 end
89 self:Debug(format("Crafting Threshold: %s", self:FormatMoney(self:GetCraftingThreshold()))) 99 self:Debug(format("Crafting Threshold: %s", self:FormatMoney(self:GetCraftingThreshold())))
100 local profitableItems = {}
101 local profitableIndex = 1
102 local numChecked = 0
90 103
91 for i = 1, GetNumTradeSkills() do 104 for i = 1, GetNumTradeSkills() do
92 local itemLink = GetTradeSkillItemLink(i) 105 local itemLink = GetTradeSkillItemLink(i)
93 local itemId = Skillet:GetItemIDFromLink(itemLink) 106 local itemId = Skillet:GetItemIDFromLink(itemLink)
94 107
102 local skillName, skillType, numAvailable, isExpanded, altVerb = GetTradeSkillInfo(i) 115 local skillName, skillType, numAvailable, isExpanded, altVerb = GetTradeSkillInfo(i)
103 local recipeLink = GetTradeSkillRecipeLink(i) 116 local recipeLink = GetTradeSkillRecipeLink(i)
104 local stackSize = 1 117 local stackSize = 1
105 if recipeLink ~= nil then 118 if recipeLink ~= nil then
106 _, itemLink= GetItemInfo(itemId) 119 _, itemLink= GetItemInfo(itemId)
107 local QAGroup = QAAPI:GetItemGroup(itemLink) 120
108 if QAGroup ~= nil then 121
109 stackSize = QAAPI:GetGroupPostCap(QAGroup) * QAAPI:GetGroupPerAuction(QAGroup) 122 -- if QA isn't enabled, this will just return nil
110 stackSize = stackSize / GetTradeSkillNumMade(i) 123 local QAGroup = nil
111 124 if addon.IsQAEnabled() then
112 -- bonus 125 QAGroup = QAAPI:GetItemGroup(itemLink)
113 stackSize = ceil(stackSize *1.25) 126 if QAGroup ~= nil then
127 stackSize = QAAPI:GetGroupPostCap(QAGroup) * QAAPI:GetGroupPerAuction(QAGroup)
128 stackSize = stackSize / GetTradeSkillNumMade(i)
129
130 -- bonus
131 stackSize = ceil(stackSize *1.25)
132 end
114 end 133 end
115 134
116 local count = Altoholic:GetItemCount(itemId) 135 local count = Altoholic:GetItemCount(itemId)
117 136
118 if count < stackSize and itemLink ~= nil then 137 if count < stackSize and itemLink ~= nil then
119 local found, _, skillString = string.find(recipeLink, "^|%x+|H(.+)|h%[.+%]") 138 local found, _, skillString = string.find(recipeLink, "^|%x+|H(.+)|h%[.+%]")
120 local _, skillId = strsplit(":", skillString ) 139 local _, skillId = strsplit(":", skillString )
128 end 147 end
129 148
130 local currentInvested, _, currentCount = addon:GetItemCost(itemLink) 149 local currentInvested, _, currentCount = addon:GetItemCost(itemLink)
131 local newThreshold = (newCost + currentInvested) / (currentCount + toQueue) 150 local newThreshold = (newCost + currentInvested) / (currentCount + toQueue)
132 151
133 152 if addon.IsQAEnabled() then
134 newThreshold = calculateQAThreshold(newThreshold) 153 newThreshold = calculateQAThreshold(newThreshold)
135 local currentPrice = GetAuctionBuyout(itemLink) or 0 154 else
136 155 -- if quick auctions isn't enabled, this will cause the decision to rely
137 156 -- completly on the crafting threshold
138 -- bonus? 157 newThreshold = 0
158 end
159 local currentPrice = addon:GetAuctionPrice(itemLink) or 0
160 numChecked = numChecked + 1
139 161
140 if newThreshold < currentPrice and (currentPrice - newCost) > self:GetCraftingThreshold() then 162 if newThreshold < currentPrice and (currentPrice - newCost) > self:GetCraftingThreshold() then
141 self:Debug(format("Adding %s x%s to skillet queue. Profit: %s", 163
142 itemLink, 164 profitableItems[profitableIndex] = {
143 toQueue, 165 itemLink = itemLink,
144 addon:FormatMoney(currentPrice - newThreshold) 166 SkillID = skillId,
145 )) 167 Index = i,
146 self:AddToQueue(skillId,i, toQueue) 168 toQueue = toQueue,
169 profit = (currentPrice - newCost) * toQueue
170 }
171 profitableIndex = profitableIndex + 1
147 elseif ItemAuditor.db.profile.messages.queue_skip then 172 elseif ItemAuditor.db.profile.messages.queue_skip then
148 self:Debug(format("Skipping %s x%s. Profit: %s ", itemLink, toQueue, addon:FormatMoney(currentPrice - newCost))) 173 self:Print(format("Skipping %s x%s. Profit: %s ", itemLink, toQueue, addon:FormatMoney(currentPrice - newCost)))
149 end 174 end
150 end 175 end
151 end 176 end
152 end 177 end
153 178 local numAdded = 0
154 179 table.sort(profitableItems, function(a, b) return a.profit > b.profit end)
180 for key, data in pairs(profitableItems) do
181 self:Print(format("Adding %s x%s to skillet queue. Profit: %s",
182 data.itemLink,
183 data.toQueue,
184 self:FormatMoney(data.profit)
185 ))
186 self:AddToQueue(data.SkillID, data.Index, data.toQueue)
187 numAdded = numAdded +1
188 end
189 self:Print(format("%d items checked", numChecked))
190 self:Print(format("%d queued", numAdded))
155 end 191 end
156 192
157 function addon:GetReagentCost(link, total) 193 function addon:GetReagentCost(link, total)
158 local totalCost = 0 194 local totalCost = 0
159 195
176 end 212 end
177 end 213 end
178 214
179 -- If there is none on the auction house, this uses a large enough number 215 -- If there is none on the auction house, this uses a large enough number
180 -- to prevent us from trying to make the item. 216 -- to prevent us from trying to make the item.
181 local ahPrice = (GetAuctionBuyout(link) or 99990000) 217 local ahPrice = (self:GetAuctionPrice(link) or 99990000)
218 -- local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, _, _, _, _, itemVendorPrice = GetItemInfo (link);
182 219
183 return totalCost + (ahPrice * total) 220 return totalCost + (ahPrice * total)
221 end
222
223 function addon:GetAuctionPrice(itemLink)
224 if GetAuctionBuyout ~= nil then
225 return GetAuctionBuyout(itemLink)
226 elseif AucAdvanced and AucAdvanced.Version then
227 local _, _, _, _, _, lowBuy= AucAdvanced.Modules.Util.SimpleAuction.Private.GetItems(itemLink)
228 return lowBuy
229 end
230 return nil
184 end 231 end
185 232
186 function addon:AddToQueue(skillId,skillIndex, toQueue) 233 function addon:AddToQueue(skillId,skillIndex, toQueue)
187 if Skillet == nil then 234 if Skillet == nil then
188 self:Print("Skillet not loaded") 235 self:Print("Skillet not loaded")
236 return
189 end 237 end
190 if Skillet.QueueCommandIterate ~= nil then 238 if Skillet.QueueCommandIterate ~= nil then
191 local queueCommand = Skillet:QueueCommandIterate(tonumber(skillId), toQueue) 239 local queueCommand = Skillet:QueueCommandIterate(tonumber(skillId), toQueue)
192 Skillet:AddToQueue(queueCommand) 240 Skillet:AddToQueue(queueCommand)
193 else 241 else