# HG changeset patch # User Asa Ayers # Date 1277453878 25200 # Node ID 374dd1a90d023c3ea0baae23321683d90271ba97 # Parent 0271e781b154b1e285366f7a1e7611b4513ba2e3 Changed the way things are stored so that items known only by name, usually from AH mail, will be stored by their name, but will get converted if the link is discovered through a tooltip. This version is funcioning again diff -r 0271e781b154 -r 374dd1a90d02 Core.lua --- a/Core.lua Wed Jun 23 23:47:48 2010 -0700 +++ b/Core.lua Fri Jun 25 01:17:58 2010 -0700 @@ -1,6 +1,7 @@ local addonName, addonTable = ...; _G[addonName] = LibStub("AceAddon-3.0"):NewAddon(addonName, "AceConsole-3.0", "AceEvent-3.0", "AceBucket-3.0") local addon = _G[addonName] +addonTable.ItemAuditor = addon local utils = addonTable.utils @@ -112,6 +113,7 @@ results[mailType] = (results[mailType] or {}) if mailType == "NonAHMail" and msgCOD > 0 then + --[[ mailType = 'COD' results[mailType] = (results[mailType] or {}) @@ -130,18 +132,19 @@ else self:Debug("Don't know what to do with more than one item type on COD mail.") end + ]] 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 0) - 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 0) - 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 0) + bid elseif mailType == "AHExpired" or mailType == "AHCancelled" or mailType == "AHOutbid" then -- These should be handled when you pay the deposit at the AH else @@ -153,12 +156,20 @@ return results end -function addon:GetItem(link) - link = utils:GetSafeLink(link) - DevTools_Dump(link) - if self.items[link] == nil then - local itemName = GetItemInfo(link) +function addon:GetItem(link, viewOnly) + if viewOnly == nil then + viewOnly = false + end + local itemName = nil + if self:GetSafeLink(link) == nil then + itemName = link + else + link = self:GetSafeLink(link) + itemName = GetItemInfo(link) + end + + if self.db.factionrealm.item_account[itemName] ~= nil then self.items[link] = { count = Altoholic:GetItemCount(utils:GetIDFromLink(link)), invested = abs(self.db.factionrealm.item_account[itemName] or 0), @@ -166,32 +177,67 @@ self.db.factionrealm.item_account[itemName] = nil end + if viewOnly == false and self.items[link] == nil then + local itemName = GetItemInfo(link) + + self.items[link] = { + count = Altoholic:GetItemCount(self:GetIDFromLink(link)), + invested = abs(self.db.factionrealm.item_account[itemName] or 0), + } + + end + + + + if viewOnly == true and self.items[link] == nil then + return {count = 0, invested = 0} + elseif viewOnly == true then + return {count = self.items[link].count, invested = self.items[link].invested} + end return self.items[link] end function addon:RemoveItem(link) - link = utils:GetSafeLink(link) - self.items[link] = nil + self.db.factionrealm.item_account[link] = nil + link = self:GetSafeLink(link) + if link ~= nil then + self.items[link] = nil + end end +--[[ +ItemAuditor:SaveValue('Scroll of Enchant Weapon - Exceptional Spellpower', 1) + DevTools_Dump(ItemAuditor.db.factionrealm.item_account) + + = ItemAuditor:GetItem('Scroll of Enchant Weapon - Exceptional Spellpower', true).invested +]] function addon:SaveValue(link, value) - local item_account = self.db.factionrealm.item_account + local item = nil + local realLink = self:GetSafeLink(link) + local itemName = nil + if realLink == nil then + 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 - local item = self:GetItem(link) + item = self:GetItem(realLink) - item.invested = item.invested + value + item.invested = item.invested + value + + itemName = GetItemInfo(realLink) + end - local itemName = GetItemInfo(link) if abs(value) > 0 then self:Debug("Updated price of " .. itemName .. " to " .. utils:FormatMoney(item.invested) .. "(change: " .. utils:FormatMoney(value) .. ")") end - if item.invested > 0 then + if item.invested <= 0 then self:Debug("Updated price of " .. itemName .. " to " .. utils:FormatMoney(0)) self:RemoveItem(link) - end - - if item.count == 0 then + elseif item.count == 0 then self:Print("You ran out of " .. itemName .. " and never recovered " .. utils:FormatMoney(item.invested)) self:RemoveItem(link) end @@ -220,23 +266,44 @@ end end +function addon:GetItemID(itemName) + return utils:GetItemID(itemName) +end + +function addon:GetSafeLink(link) + local newLink = nil + + if link ~= string.match(link, '.-:[-0-9]+[:0-9]*') then + newLink = link and string.match(link, "|H(.-):([-0-9]+):([0-9]+)|h") + end + if newLink == nil then + local itemID = self:GetItemID(link) + if itemID ~= nil then + _, newLink = GetItemInfo(itemID) + return self:GetSafeLink(newLink) + end + end + return newLink and string.gsub(newLink, ":0:0:0:0:0:0", "") +end + +function addon:GetIDFromLink(link) + local _, _, _, _, Id = string.find(link, "|?c?f?f?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?") + return tonumber(Id) +end + function addon:GetItemCost(link, countModifier) - local item = self:GetItem(link) + local item = self:GetItem(link, true) - local invested = item.invested - - if invested > 0 then - local ItemID = utils:GetIDFromLink(link) - if ItemID ~= nil then - local count = self:GetItem(link).count - - if countModifier ~= nil then - count = count - countModifier - end - if count > 0 then - return ceil(invested), ceil(invested/count), count - end + if item.invested > 0 then + local count = item.count + + if countModifier ~= nil then + count = count - countModifier end + if count > 0 then + return ceil(item.invested), ceil(item.invested/item.count), count + end + end return 0, 0, 0 end diff -r 0271e781b154 -r 374dd1a90d02 Modules/Events.lua --- a/Modules/Events.lua Wed Jun 23 23:47:48 2010 -0700 +++ b/Modules/Events.lua Fri Jun 25 01:17:58 2010 -0700 @@ -4,12 +4,11 @@ local utils = addonTable.utils function addon:PLAYER_ENTERING_WORLD() - addon:ConvertItems() - DevTools_Dump(ItemAuditor.db.factionrealm.items) - self:RegisterEvent("MAIL_SHOW") self:RegisterEvent("UNIT_SPELLCAST_START") self:WatchBags() + + addon:ConvertItems() end function addon:MAIL_SHOW() @@ -81,7 +80,7 @@ end function addon:UpdateAudit() - -- self:Debug("UpdateAudit") + self:Debug("UpdateAudit") local currentInventory = self:GetCurrentInventory() local diff = addon:GetInventoryDiff(self.lastInventory, currentInventory) -- this is only here for debugging @@ -104,8 +103,8 @@ elseif utils:tcount(diff.items) == 1 then self:Debug("purchase or sale") - for itemName, count in pairs(diff.items) do - self:SaveValue(itemName, diff.money) + for link, count in pairs(diff.items) do + self:SaveValue(link, 0 - diff.money) end elseif utils:tcount(diff.items) > 1 then @@ -113,17 +112,17 @@ -- we must have created/converted something -- self:Debug("conversion") local totalChange = 0 - for itemName, change in pairs(negative) do - local _, itemCost, count = self:GetItemCost(itemName, change) - self:SaveValue(itemName, abs(itemCost * change)) + for link, change in pairs(negative) do + local _, itemCost, count = self:GetItemCost(link, change) + self:SaveValue(link, itemCost * change) - totalChange = totalChange + abs(itemCost * change) + totalChange = totalChange + (itemCost * abs(change)) end local valuePerItem = totalChange / positiveCount - for itemName, change in pairs(positive) do - self:SaveValue(itemName, 0-abs(valuePerItem * change)) + for link, change in pairs(positive) do + self:SaveValue(link, valuePerItem * change) end end end diff -r 0271e781b154 -r 374dd1a90d02 Modules/Utils.lua --- a/Modules/Utils.lua Wed Jun 23 23:47:48 2010 -0700 +++ b/Modules/Utils.lua Fri Jun 25 01:17:58 2010 -0700 @@ -5,6 +5,7 @@ AceConsole:Embed(addon) addonTable.utils = addon +IAUtils = addon function addon:FormatMoney(money) local prefix = "" @@ -36,9 +37,30 @@ end end + if tmp_item_cache[itemName] == nil then + for link, data in pairs(ItemAuditor.db.factionrealm.items) do + local name, itemLink = GetItemInfo (link); + if name == itemName then + local _, _, _, _, itemID = string.find(itemLink, "|?c?f?f?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?") + tmp_item_cache[itemName] = tonumber(itemID) + end + end + + end + return tmp_item_cache[itemName] end +function addon:GetLinkFromName(itemName) + local itemID = self:GetItemID(itemName) + local itemLink + if itemID ~= nil then + _, itemLink = GetItemInfo(itemID) + end + + return itemLink +end + function addon:SaveItemID(itemName, id) item_db[itemName] = tonumber(id) end @@ -71,17 +93,7 @@ return n end -function addon:GetSafeLink(link) - if link ~= string.match(link, '.-:[-0-9]+[:0-9]*') then - link = link and string.match(link, "|H(.-):([-0-9]+):([0-9]+)|h") - end - return link and string.gsub(link, ":0:0:0:0:0:0", "") -end -function addon:GetIDFromLink(link) - local _, _, _, _, Id = string.find(link, "|?c?f?f?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?") - return tonumber(Id) -end function addon:GetDebug(info) return true