Asa@3: local addonName, addonTable = ...; Asa@3: local addon = _G[addonName] Asa@3: Asa@3: local utils = addonTable.utils Asa@3: Asa@3: function addon:PLAYER_ENTERING_WORLD() Asa@3: self:RegisterEvent("MAIL_SHOW") Asa@3: self:WatchBags() Asa@3: end Asa@3: Asa@3: function addon:MAIL_SHOW() Asa@3: self:Debug("MAIL_SHOW") Asa@3: self.lastMailScan = self:ScanMail() Asa@3: self:UnregisterEvent("MAIL_SHOW") Asa@3: self:RegisterEvent("MAIL_CLOSED") Asa@3: self:RegisterEvent("MAIL_INBOX_UPDATE") Asa@3: self:Debug("MAIL_SHOW complete") Asa@3: end Asa@3: Asa@3: function addon:MAIL_CLOSED() Asa@3: addon:UnregisterEvent("MAIL_CLOSED") Asa@3: self:UnregisterEvent("MAIL_INBOX_UPDATE") Asa@3: self:RegisterEvent("MAIL_SHOW") Asa@3: end Asa@3: Asa@3: function addon:MAIL_INBOX_UPDATE() Asa@3: local newScan = addon:ScanMail() Asa@3: local diff Asa@3: for item, total in pairs(self.lastMailScan) do Asa@3: Asa@3: if newScan[item] == nil then Asa@3: newScan[item] = 0 Asa@3: end Asa@3: diff = total - newScan[item] Asa@3: if diff ~= 0 then Asa@3: self:SaveValue(item, diff) Asa@3: end Asa@3: Asa@3: end Asa@3: Asa@3: self.lastMailScan = newScan Asa@3: end Asa@3: Asa@3: function addon:UNIT_SPELLCAST_SENT(target, spell) Asa@3: if target == "player" and spell = "Milling" then Asa@3: Asa@3: end Asa@3: end Asa@3: Asa@3: function addon:UNIT_SPELLCAST_INTERRUPTED(target, spell) Asa@3: Asa@3: end Asa@3: Asa@3: function addon:UpdateAudit() Asa@3: self:Debug("UpdateAudit") Asa@3: local currentInventory = self:GetCurrentInventory() Asa@3: local diff = addon:GetInventoryDiff(self.lastInventory, currentInventory) Asa@3: -- this is only here for debugging Asa@3: self.lastdiff = diff Asa@3: Asa@3: if abs(diff.money) > 0 and utils:tcount(diff.items) == 1 then Asa@3: self:Debug("purchase or sale") Asa@3: Asa@3: for itemName, count in pairs(diff.items) do Asa@3: self:SaveValue(itemName, diff.money) Asa@3: end Asa@3: elseif utils:tcount(diff.items) > 1 then Asa@3: local positive, negative = {}, {} Asa@3: local positiveCount, negativeCount = 0, 0 Asa@3: for item, count in pairs(diff.items) do Asa@3: if count > 0 then Asa@3: positive[item] = count Asa@3: positiveCount = positiveCount + count Asa@3: elseif count < 0 then Asa@3: negative[item] = count Asa@3: negativeCount = negativeCount + abs(count) Asa@3: end Asa@3: end Asa@3: Asa@3: if utils:tcount(positive) > 0 and utils:tcount(negative) > 0 then Asa@3: -- we must have created/converted something Asa@3: self:Debug("conversion") Asa@3: local totalChange = 0 Asa@3: for itemName, change in pairs(negative) do Asa@3: local _, itemCost, count = self:GetItemCost(itemName, change) Asa@3: self:SaveValue(itemName, abs(itemCost * change)) Asa@3: Asa@3: totalChange = totalChange + abs(itemCost * change) Asa@3: end Asa@3: Asa@3: self:Debug("totalChange") Asa@3: self:Debug(totalChange) Asa@3: Asa@3: local valuePerItem = totalChange / positiveCount Asa@3: self:Debug(valuePerItem ) Asa@3: for itemName, change in pairs(positive) do Asa@3: self:Debug(itemName) Asa@3: self:Debug(0-abs(valuePerItem * change)) Asa@3: self:SaveValue(itemName, 0-abs(valuePerItem * change)) Asa@3: end Asa@3: end Asa@3: end Asa@3: Asa@3: self.lastInventory = currentInventory Asa@3: end