comparison Modules/QuickAuctions.lua @ 63:e7d287cc3b02

Replaced all instances of addon with ItemAuditor and I moved ItemAuditor out of the global namespace. The conversion was mostly a search/replace offering no new functionality. That will come in a later commit.
author Asa Ayers <Asa.Ayers@Gmail.com>
date Tue, 27 Jul 2010 17:58:33 -0700
parents 70dc84df13b3
children e92a5adf75bf
comparison
equal deleted inserted replaced
62:70dc84df13b3 63:e7d287cc3b02
1 local addonName, addonTable = ...; 1 local ItemAuditor = select(2, ...)
2 local addon = _G[addonName] 2 local QuickAuctions= ItemAuditor:NewModule("QuickAuctions")
3 3
4 --[[ 4 --[[
5 This is simply for compatibility while I change the QA API. Once 5 This is simply for compatibility while I change the QA API. Once
6 my changes get merged into the main project, this can go away. 6 my changes get merged into the main project, this can go away.
7 ]] 7 ]]
19 end 19 end
20 end 20 end
21 21
22 22
23 23
24 function addon:IsQACompatible() 24 function ItemAuditor:IsQACompatible()
25 return (QAAPI ~= nil and QAAPI.GetGroupConfig ~= nil) 25 return (QAAPI ~= nil and QAAPI.GetGroupConfig ~= nil)
26 end 26 end
27 27
28 function addon:IsQAEnabled() 28 function ItemAuditor:IsQAEnabled()
29 return addon:IsQACompatible() and ItemAuditor.db.char.use_quick_auctions 29 return ItemAuditor:IsQACompatible() and ItemAuditor.db.char.use_quick_auctions
30 end 30 end
31 31
32 function addon:IsQADisabled() 32 function ItemAuditor:IsQADisabled()
33 return not self:IsQAEnabled() 33 return not self:IsQAEnabled()
34 end 34 end
35 35
36 function addon:SetQAEnabled(info, value) 36 function ItemAuditor:SetQAEnabled(info, value)
37 ItemAuditor.db.char.use_quick_auctions = value 37 ItemAuditor.db.char.use_quick_auctions = value
38 end 38 end
39 39
40 function addon:RefreshQAGroups() 40 function ItemAuditor:RefreshQAGroups()
41 if not addon.IsQAEnabled() then 41 if not ItemAuditor.IsQAEnabled() then
42 return 42 return
43 end 43 end
44 for groupName in pairs(QAAPI:GetGroups()) do 44 for groupName in pairs(QAAPI:GetGroups()) do
45 self:UpdateQAGroup(groupName) 45 self:UpdateQAGroup(groupName)
46 end 46 end
47 end 47 end
48 48
49 function addon:UpdateQAThreshold(link) 49 function ItemAuditor:UpdateQAThreshold(link)
50 if not addon.IsQAEnabled() then 50 if not ItemAuditor.IsQAEnabled() then
51 return 51 return
52 end 52 end
53 _, link= GetItemInfo(link) 53 _, link= GetItemInfo(link)
54 54
55 self:UpdateQAGroup(QAAPI:GetItemGroup(link)) 55 self:UpdateQAGroup(QAAPI:GetItemGroup(link))
56 end 56 end
57
58 addon.profit_margin = 1.15
59 57
60 local function calculateQAThreshold(copper) 58 local function calculateQAThreshold(copper)
61 if copper == 0 then 59 if copper == 0 then
62 copper = 1 60 copper = 1
63 end 61 end
64 62
65 -- add my minimum profit margin 63 -- add my minimum profit margin
66 -- GetAuctionThreshold returns a percent as a whole number. This will convert 25 to 1.25 64 -- GetAuctionThreshold returns a percent as a whole number. This will convert 25 to 1.25
67 copper = copper * (1+addon:GetAuctionThreshold()) 65 copper = copper * (1+ItemAuditor:GetAuctionThreshold())
68 66
69 -- add AH Cut 67 -- add AH Cut
70 local keep = 1 - addon:GetAHCut() 68 local keep = 1 - ItemAuditor:GetAHCut()
71 return copper/keep 69 return copper/keep
72 end 70 end
73 71
74 function addon:UpdateQAGroup(groupName) 72 function ItemAuditor:UpdateQAGroup(groupName)
75 if not addon.IsQAEnabled() then 73 if not ItemAuditor.IsQAEnabled() then
76 return 74 return
77 end 75 end
78 if groupName then 76 if groupName then
79 local threshold = 0 77 local threshold = 0
80 78
89 QAAPI:SetGroupConfig(groupName, 'threshold', ceil(threshold)) 87 QAAPI:SetGroupConfig(groupName, 'threshold', ceil(threshold))
90 end 88 end
91 end 89 end
92 90
93 local function isProfitable(data) 91 local function isProfitable(data)
94 if addon.IsQAEnabled() then 92 if ItemAuditor.IsQAEnabled() then
95 local QAGroup = QAAPI:GetItemGroup(data.link) 93 local QAGroup = QAAPI:GetItemGroup(data.link)
96 if QAGroup ~= nil then 94 if QAGroup ~= nil then
97 local currentInvested, _, currentCount = addon:GetItemCost(data.link) 95 local currentInvested, _, currentCount = ItemAuditor:GetItemCost(data.link)
98 local threshold, postCap, perAuction = QAAPI:GetGroupConfig(QAGroup) 96 local threshold, postCap, perAuction = QAAPI:GetGroupConfig(QAGroup)
99 local stackSize = postCap * perAuction 97 local stackSize = postCap * perAuction
100 98
101 stackSize = stackSize / GetTradeSkillNumMade(data.tradeSkillIndex) 99 stackSize = stackSize / GetTradeSkillNumMade(data.tradeSkillIndex)
102 100
118 ItemAuditor:RegisterCraftingDecider('IA QuickAuctions', isProfitable) 116 ItemAuditor:RegisterCraftingDecider('IA QuickAuctions', isProfitable)
119 117
120 --[[ 118 --[[
121 This is based on KTQ 119 This is based on KTQ
122 ]] 120 ]]
123 function addon:Queue() 121 function ItemAuditor:Queue()
124 if LSW == nil then 122 if LSW == nil then
125 self:Print("This feature requires LilSparky's Workshop.") 123 self:Print("This feature requires LilSparky's Workshop.")
126 return 124 return
127 end 125 end
128 if Skillet == nil then 126 if Skillet == nil then
135 self:Print("This feature requires Auctionator, Auctioneer, AuctionLite, or AuctionMaster.") 133 self:Print("This feature requires Auctionator, Auctioneer, AuctionLite, or AuctionMaster.")
136 return 134 return
137 end 135 end
138 136
139 137
140 if addon.IsQAEnabled() then 138 if ItemAuditor.IsQAEnabled() then
141 self:Debug("Auction Threshold: %d%%", self:GetAuctionThreshold()*100 ) 139 self:Debug("Auction Threshold: %d%%", self:GetAuctionThreshold()*100 )
142 end 140 end
143 self:Debug(format("Crafting Threshold: %s", self:FormatMoney(self:GetCraftingThreshold()))) 141 self:Debug(format("Crafting Threshold: %s", self:FormatMoney(self:GetCraftingThreshold())))
144 local profitableItems = {} 142 local profitableItems = {}
145 local profitableIndex = 1 143 local profitableIndex = 1
163 _, itemLink= GetItemInfo(itemId) 161 _, itemLink= GetItemInfo(itemId)
164 162
165 163
166 -- if QA isn't enabled, this will just return nil 164 -- if QA isn't enabled, this will just return nil
167 local QAGroup = nil 165 local QAGroup = nil
168 if addon.IsQAEnabled() then 166 if ItemAuditor.IsQAEnabled() then
169 QAGroup = QAAPI:GetItemGroup(itemLink) 167 QAGroup = QAAPI:GetItemGroup(itemLink)
170 if QAGroup ~= nil then 168 if QAGroup ~= nil then
171 local threshold, postCap, perAuction = QAAPI:GetGroupConfig(QAGroup) 169 local threshold, postCap, perAuction = QAAPI:GetGroupConfig(QAGroup)
172 stackSize = postCap * perAuction 170 stackSize = postCap * perAuction
173 stackSize = stackSize / GetTradeSkillNumMade(i) 171 stackSize = stackSize / GetTradeSkillNumMade(i)
186 local toQueue = stackSize - count 184 local toQueue = stackSize - count
187 local newCost = 0 185 local newCost = 0
188 for reagentId = 1, GetTradeSkillNumReagents(i) do 186 for reagentId = 1, GetTradeSkillNumReagents(i) do
189 _, _, reagentCount = GetTradeSkillReagentInfo(i, reagentId); 187 _, _, reagentCount = GetTradeSkillReagentInfo(i, reagentId);
190 reagentLink = GetTradeSkillReagentItemLink(i, reagentId) 188 reagentLink = GetTradeSkillReagentItemLink(i, reagentId)
191 newCost = newCost + addon:GetReagentCost(reagentLink, reagentCount) 189 newCost = newCost + ItemAuditor:GetReagentCost(reagentLink, reagentCount)
192 end 190 end
193 191
194 local currentInvested, _, currentCount = addon:GetItemCost(itemLink) 192 local currentInvested, _, currentCount = ItemAuditor:GetItemCost(itemLink)
195 local newThreshold = (newCost + currentInvested) / (currentCount + toQueue) 193 local newThreshold = (newCost + currentInvested) / (currentCount + toQueue)
196 194
197 if addon.IsQAEnabled() then 195 if ItemAuditor.IsQAEnabled() then
198 newThreshold = calculateQAThreshold(newThreshold) 196 newThreshold = calculateQAThreshold(newThreshold)
199 else 197 else
200 -- if quick auctions isn't enabled, this will cause the decision to rely 198 -- if quick auctions isn't enabled, this will cause the decision to rely
201 -- completly on the crafting threshold 199 -- completly on the crafting threshold
202 newThreshold = 0 200 newThreshold = 0
203 end 201 end
204 local currentPrice = addon:GetAuctionPrice(itemLink) or 0 202 local currentPrice = ItemAuditor:GetAuctionPrice(itemLink) or 0
205 numChecked = numChecked + 1 203 numChecked = numChecked + 1
206 204
207 if newThreshold < currentPrice and (currentPrice - newCost) > self:GetCraftingThreshold() then 205 if newThreshold < currentPrice and (currentPrice - newCost) > self:GetCraftingThreshold() then
208 206
209 profitableItems[profitableIndex] = { 207 profitableItems[profitableIndex] = {
213 toQueue = toQueue, 211 toQueue = toQueue,
214 profit = (currentPrice - newCost) * toQueue 212 profit = (currentPrice - newCost) * toQueue
215 } 213 }
216 profitableIndex = profitableIndex + 1 214 profitableIndex = profitableIndex + 1
217 else 215 else
218 local skipMessage = format("Skipping %s x%s. Profit: %s ", itemLink, toQueue, addon:FormatMoney(currentPrice - newCost)) 216 local skipMessage = format("Skipping %s x%s. Profit: %s ", itemLink, toQueue, ItemAuditor:FormatMoney(currentPrice - newCost))
219 if ItemAuditor.db.profile.messages.queue_skip then 217 if ItemAuditor.db.profile.messages.queue_skip then
220 self:Print(skipMessage) 218 self:Print(skipMessage)
221 else 219 else
222 self:Debug(format("Skipping %s x%s. Profit: %s ", itemLink, toQueue, addon:FormatMoney(currentPrice - newCost))) 220 self:Debug(format("Skipping %s x%s. Profit: %s ", itemLink, toQueue, ItemAuditor:FormatMoney(currentPrice - newCost)))
223 end 221 end
224 end 222 end
225 end 223 end
226 end 224 end
227 end 225 end
238 end 236 end
239 self:Print(format("%d items checked", numChecked)) 237 self:Print(format("%d items checked", numChecked))
240 self:Print(format("%d queued", numAdded)) 238 self:Print(format("%d queued", numAdded))
241 end 239 end
242 240
243 function addon:GetReagentCost(link, total) 241 function ItemAuditor:GetReagentCost(link, total)
244 local totalCost = 0 242 local totalCost = 0
245 243
246 if Skillet:VendorSellsReagent(link) then 244 if Skillet:VendorSellsReagent(link) then
247 local _, _, _, _, _, _, _, _, _, _, itemVendorPrice = GetItemInfo (link); 245 local _, _, _, _, _, _, _, _, _, _, itemVendorPrice = GetItemInfo (link);
248 totalCost = itemVendorPrice * total 246 totalCost = itemVendorPrice * total
249 total = 0 247 total = 0
250 end 248 end
251 249
252 250
253 local investedTotal, investedPerItem, count = addon:GetItemCost(link) 251 local investedTotal, investedPerItem, count = ItemAuditor:GetItemCost(link)
254 252
255 if count > 0 then 253 if count > 0 then
256 if total <= count then 254 if total <= count then
257 totalCost = investedPerItem * total 255 totalCost = investedPerItem * total
258 total = 0 256 total = 0
268 -- local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, _, _, _, _, itemVendorPrice = GetItemInfo (link); 266 -- local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, _, _, _, _, itemVendorPrice = GetItemInfo (link);
269 267
270 return totalCost + (ahPrice * total) 268 return totalCost + (ahPrice * total)
271 end 269 end
272 270
273 function addon:GetAuctionPrice(itemLink) 271 function ItemAuditor:GetAuctionPrice(itemLink)
274 if GetAuctionBuyout ~= nil then 272 if GetAuctionBuyout ~= nil then
275 return GetAuctionBuyout(itemLink) 273 return GetAuctionBuyout(itemLink)
276 elseif AucAdvanced and AucAdvanced.Version then 274 elseif AucAdvanced and AucAdvanced.Version then
277 local _, _, _, _, _, lowBuy= AucAdvanced.Modules.Util.SimpleAuction.Private.GetItems(itemLink) 275 local _, _, _, _, _, lowBuy= AucAdvanced.Modules.Util.SimpleAuction.Private.GetItems(itemLink)
278 return lowBuy 276 return lowBuy
279 end 277 end
280 return nil 278 return nil
281 end 279 end
282 280
283 function addon:AddToQueue(skillId,skillIndex, toQueue) 281 function ItemAuditor:AddToQueue(skillId,skillIndex, toQueue)
284 if Skillet == nil then 282 if Skillet == nil then
285 self:Print("Skillet not loaded") 283 self:Print("Skillet not loaded")
286 return 284 return
287 end 285 end
288 if Skillet.QueueCommandIterate ~= nil then 286 if Skillet.QueueCommandIterate ~= nil then