# HG changeset patch # User Asa Ayers # Date 1279092556 25200 # Node ID 5da5d85cd714df74ef8cae04683510697ea85625 # Parent 75d917ccd94270a9f9a2d9ffb154f4f8c672c13f# Parent a7300f1ac65c8aa274c3c8d2f42c82b321daee9b Merged my tag diff -r a7300f1ac65c -r 5da5d85cd714 .pkgmeta --- a/.pkgmeta Wed Jul 14 07:26:05 2010 +0000 +++ b/.pkgmeta Wed Jul 14 00:29:16 2010 -0700 @@ -39,3 +39,5 @@ - LilSparkysWorkshop manual-changelog: CHANGELOG.txt + +enable-nolib-creation: no diff -r a7300f1ac65c -r 5da5d85cd714 CHANGELOG.txt --- a/CHANGELOG.txt Wed Jul 14 07:26:05 2010 +0000 +++ b/CHANGELOG.txt Wed Jul 14 00:29:16 2010 -0700 @@ -1,3 +1,7 @@ +2010-07-14 Asa Ayers + +- Fixed Bug #9 - If existing items have 0c invested, increase them all to match the first transaction that changes their price. + 2010-07-11 Asa Ayers - Fixed a bug with the mail where items get recorded by the mail scanner and the bag scanner. diff -r a7300f1ac65c -r 5da5d85cd714 Core.lua --- a/Core.lua Wed Jul 14 07:26:05 2010 +0000 +++ b/Core.lua Wed Jul 14 00:29:16 2010 -0700 @@ -166,15 +166,22 @@ elseif mailType == "CODPayment" then itemName = msgSubject:gsub(utils.SubjectPatterns[mailType], function(item) return item end) - results[mailType][itemName] = (results[mailType][itemName] or 0) - msgMoney + results[mailType][itemName] = (results[mailType][itemName] or {total=0,count=0}) + results[mailType][itemName].total = results[mailType][itemName].total - msgMoney elseif mailType == "AHSuccess" then local invoiceType, itemName, playerName, bid, buyout, deposit, consignment = GetInboxInvoiceInfo(mailIndex); - results[mailType][itemName] = (results[mailType][itemName] or 0) - deposit - buyout + consignment + results[mailType][itemName] = (results[mailType][itemName] or {total=0,count=0}) + results[mailType][itemName].total = results[mailType][itemName].total - deposit - buyout + consignment + elseif mailType == "AHWon" then local invoiceType, itemName, playerName, bid, buyout, deposit, consignment = GetInboxInvoiceInfo(mailIndex); - results[mailType][itemName] = (results[mailType][itemName] or 0) + bid + results[mailType][itemName] = (results[mailType][itemName] or {total=0,count=0}) + results[mailType][itemName].total = results[mailType][itemName].total + bid + + local count = select(3, GetInboxItem(1,1)) + results[mailType][itemName].count = results[mailType][itemName].count + count elseif mailType == "AHExpired" or mailType == "AHCancelled" or mailType == "AHOutbid" then -- These should be handled when you pay the deposit at the AH else @@ -185,8 +192,8 @@ end for mailType, collection in pairs(results) do - for item, total in pairs(collection) do - self:Debug(format("|cFF00FF00MailScan|r: %s - %s - %s", mailType, item, total)) + for item, data in pairs(collection) do + self:Debug(format("|cFF00FF00MailScan|r: %s - %s - %s x %s", mailType, item, data.total, data.count)) end end @@ -246,14 +253,15 @@ end end -function addon:SaveValue(link, value) - self:Debug(format("SaveValue(%s, %s)", tostring(link), value)) +function addon:SaveValue(link, value, countChange) + self:Debug("SaveValue(%s, %s, %s)", tostring(link), value, (countChange or 'default')) + countChange = countChange or 0 local item = nil local realLink = self:GetSafeLink(link) local itemName = nil if realLink == nil then + itemName = link self:Debug('SaveValue: GetSafeLink failed, falling back to storing by name: ' .. tostring(itemName)) - itemName = link self.db.factionrealm.item_account[itemName] = (self.db.factionrealm.item_account[itemName] or 0) + value item = {invested = self.db.factionrealm.item_account[itemName], count = 1} else @@ -263,6 +271,13 @@ itemName = GetItemInfo(realLink) end + if value > 0 and countChange > 0 and item.invested == value and item.count ~= countChange then + local costPerItem = value / countChange + value = costPerItem * item.count + item.invested = value + self:Print("You already owned %s %s with an unknown price, so they have also been updated to %s each", (item.count - countChange), itemName, self:FormatMoney(costPerItem)) + end + if abs(value) > 0 then if item.invested < 0 then if self.db.profile.messages.cost_updates then diff -r a7300f1ac65c -r 5da5d85cd714 Modules/Events.lua --- a/Modules/Events.lua Wed Jul 14 07:26:05 2010 +0000 +++ b/Modules/Events.lua Wed Jul 14 00:29:16 2010 -0700 @@ -30,17 +30,29 @@ self:RegisterEvent("MAIL_SHOW") end +local storedCountDiff function addon:MAIL_INBOX_UPDATE() self:Debug("MAIL_INBOX_UPDATE") local newScan = addon:ScanMail() local diff for mailType, collection in pairs(self.lastMailScan) do newScan[mailType] = (newScan[mailType] or {}) - for item, total in pairs(collection) do - - diff = total - (newScan[mailType][item] or 0) - if diff ~= 0 then - self:SaveValue(item, diff) + for itemName, data in pairs(collection) do + newScan[mailType][itemName] = (newScan[mailType][itemName] or {total=0,count=0}) + local totalDiff = data.total - newScan[mailType][itemName].total + local countDiff = data.count - newScan[mailType][itemName].count + --[[ + In one update the item will be taken and in the following update the invoice + will be gone. I need to store the item difference in order ot pass it into + SaveValue. + ]] + if countDiff ~= 0 then + storedCountDiff = countDiff + end + + if totalDiff ~= 0 then + self:SaveValue(itemName, totalDiff, storedCountDiff) + storedCountDiff = 0 end end @@ -112,7 +124,7 @@ self:Debug("purchase or sale") for link, count in pairs(diff.items) do - self:SaveValue(link, 0 - diff.money) + self:SaveValue(link, 0 - diff.money, count) end elseif self:tcount(diff.items) > 1 and self:tcount(positive) > 0 and self:tcount(negative) > 0 then -- we must have created/converted something @@ -121,7 +133,7 @@ local totalChange = 0 for link, change in pairs(negative) do local _, itemCost, count = self:GetItemCost(link, change) - self:SaveValue(link, itemCost * change) + self:SaveValue(link, itemCost * change, change) totalChange = totalChange + (itemCost * abs(change)) end @@ -129,7 +141,7 @@ local valuePerItem = totalChange / positiveCount for link, change in pairs(positive) do - self:SaveValue(link, valuePerItem * change) + self:SaveValue(link, valuePerItem * change, change) end else self:Debug("No match in UpdateAudit.")