Mercurial > wow > itemauditor
view Modules/Events.lua @ 4:c940b527ccab
Fixed Milling. Disenchating will probably have to be fixed the same way
author | Asa Ayers <Asa.Ayers@Gmail.com> |
---|---|
date | Sat, 22 May 2010 15:23:11 -0700 |
parents | bbcf81868171 |
children | 7d0f4ebedf8c |
line wrap: on
line source
local addonName, addonTable = ...; local addon = _G[addonName] local utils = addonTable.utils function addon:PLAYER_ENTERING_WORLD() self:RegisterEvent("MAIL_SHOW") self:RegisterEvent("UNIT_SPELLCAST_START") self:WatchBags() end function addon:MAIL_SHOW() self:Debug("MAIL_SHOW") self.lastMailScan = self:ScanMail() self:UnregisterEvent("MAIL_SHOW") self:RegisterEvent("MAIL_CLOSED") self:RegisterEvent("MAIL_INBOX_UPDATE") self:Debug("MAIL_SHOW complete") end function addon:MAIL_CLOSED() addon:UnregisterEvent("MAIL_CLOSED") self:UnregisterEvent("MAIL_INBOX_UPDATE") self:RegisterEvent("MAIL_SHOW") end function addon:MAIL_INBOX_UPDATE() local newScan = addon:ScanMail() local diff for item, total in pairs(self.lastMailScan) do if newScan[item] == nil then newScan[item] = 0 end diff = total - newScan[item] if diff ~= 0 then self:SaveValue(item, diff) end end self.lastMailScan = newScan end function addon:UNIT_SPELLCAST_START(event, target, spell) if target == "player" and spell == "Milling" then self:UnwatchBags() self:UpdateCurrentInventory() self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED") self:RegisterEvent("LOOT_CLOSED") end end --[[ The item should be destroyed before this point, so the last inventory check needs to be kept so it can be combined with the up coming loot. ]] function addon:LOOT_CLOSED() self:UnregisterEvent("LOOT_CLOSED") self:UnregisterEvent("UNIT_SPELLCAST_INTERRUPTED") local inventory = self.lastInventory self:WatchBags() self.lastInventory = inventory end function addon:UNIT_SPELLCAST_INTERRUPTED(event, target, spell) if target == "player" and spell == "Milling" then self:UnregisterEvent("UNIT_SPELLCAST_INTERRUPTED") self:UnregisterEvent("LOOT_CLOSED") self:WatchBags() end end function addon:UpdateCurrentInventory() self.lastInventory = self:GetCurrentInventory() end function addon:UpdateAudit() self:Debug("UpdateAudit") local currentInventory = self:GetCurrentInventory() local diff = addon:GetInventoryDiff(self.lastInventory, currentInventory) -- this is only here for debugging self.lastdiff = diff if abs(diff.money) > 0 and utils:tcount(diff.items) == 1 then self:Debug("purchase or sale") for itemName, count in pairs(diff.items) do self:SaveValue(itemName, diff.money) end elseif utils:tcount(diff.items) > 1 then local positive, negative = {}, {} local positiveCount, negativeCount = 0, 0 for item, count in pairs(diff.items) do if count > 0 then positive[item] = count positiveCount = positiveCount + count elseif count < 0 then negative[item] = count negativeCount = negativeCount + abs(count) end end if utils:tcount(positive) > 0 and utils:tcount(negative) > 0 then -- 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)) totalChange = totalChange + abs(itemCost * change) end self:Debug("totalChange") self:Debug(totalChange) local valuePerItem = totalChange / positiveCount self:Debug(valuePerItem ) for itemName, change in pairs(positive) do self:Debug(itemName) self:Debug(0-abs(valuePerItem * change)) self:SaveValue(itemName, 0-abs(valuePerItem * change)) end end end self.lastInventory = currentInventory addon:WatchBags() end