Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - SellJunk = LibStub("AceAddon-3.0"):NewAddon("SellJunk", "AceConsole-3.0","AceEvent-3.0")
 - local addon = LibStub("AceAddon-3.0"):GetAddon("SellJunk")
 - local AceConfigRegistry = LibStub("AceConfigRegistry-3.0")
 - local AceConfigDialog = LibStub("AceConfigDialog-3.0")
 - local addonName, addonTable = ...
 - local L = addonTable.L
 - local _
 - addon.optionsFrame = {}
 - local options = nil
 - addon.sellButton = CreateFrame("Button", nil, MerchantFrame, "OptionsButtonTemplate")
 - if IsAddOnLoaded("GnomishVendorShrinker") then
 - addon.sellButton:SetPoint("TOPRIGHT", -23, 0)
 - else
 - addon.sellButton:SetPoint("TOPLEFT", 60, -32)
 - end
 - addon.sellButton:SetText(L["Sell Junk"])
 - addon.sellButton:SetScript("OnClick", function() SellJunk:Sell() end)
 - -- upvalues
 - local floor = floor
 - local mod = mod
 - local string_find = string.find
 - local pairs = pairs
 - local wipe = wipe
 - local DeleteCursorItem = DeleteCursorItem
 - local GetContainerItemInfo = GetContainerItemInfo
 - local GetItemInfo = GetItemInfo
 - local PickupContainerItem = PickupContainerItem
 - local PickupMerchantItem = PickupMerchantItem
 - function addon:OnInitialize()
 - self:RegisterChatCommand("selljunk", "HandleSlashCommands")
 - self:RegisterChatCommand("sj", "HandleSlashCommands")
 - self.db = LibStub("AceDB-3.0"):New("SellJunkDB")
 - self.db:RegisterDefaults({
 - char = {
 - auto = true,
 - max12 = false,
 - printGold = true,
 - showSpam = true
 - },
 - global = {
 - exceptions = {},
 - }
 - })
 - self:PopulateOptions()
 - AceConfigRegistry:RegisterOptionsTable("SellJunk", options)
 - addon.optionsFrame = AceConfigDialog:AddToBlizOptions("SellJunk", nil, nil, "general")
 - end
 - function addon:OnEnable()
 - self:RegisterEvent("MERCHANT_SHOW")
 - self.total = 0
 - end
 - function addon:MERCHANT_SHOW()
 - if addon.db.char.auto then
 - self:Sell()
 - end
 - end
 - function addon:AddProfit(profit)
 - if profit then
 - self.total = self.total + profit
 - end
 - end
 - -------------------------------------------------------------------
 - -- Sells items: --
 - -- - grey/green quality, unless it's in exception list --
 - -- - better than grey/green quality, if it's in exception list --
 - -------------------------------------------------------------------
 - function addon:Sell()
 - local limit = 0
 - local currPrice
 - local showSpam = addon.db.char.showSpam
 - local max12 = addon.db.char.max12
 - for bag = 0,4 do
 - for slot = 1,GetContainerNumSlots(bag) do
 - local item = GetContainerItemLink(bag,slot)
 - if item then
 - -- is it grey quality item?
 - local grey = string_find(item,"|cff9d9d9d")
 - local green = string_find(item,"|cff1eff00")
 - if ((grey or green) and (not addon:isException(item))) or ((not (grey or green)) and (addon:isException(item))) then
 - currPrice = select(11, GetItemInfo(item)) * select(2, GetContainerItemInfo(bag, slot))
 - -- this should get rid of problems with grey items, that cant be sell to a vendor
 - if currPrice > 0 then
 - addon:AddProfit(currPrice)
 - PickupContainerItem(bag, slot)
 - PickupMerchantItem()
 - if showSpam then
 - self:Print(L["Sold"]..": "..item)
 - end
 - if max12 then
 - limit = limit + 1
 - if limit == 12 then
 - return
 - end
 - end
 - end
 - end
 - end
 - end
 - end
 - if self.db.char.printGold then
 - self:PrintGold()
 - end
 - self.total = 0
 - end
 - -------------------------------------------------------------
 - -- Destroys items: --
 - -- - grey quality, unless it's in exception list --
 - -- - better than grey quality, if it's in exception list --
 - -------------------------------------------------------------
 - function addon:Destroy(count)
 - local limit = 9001 -- it's over NINE THOUSAND!!!
 - if count ~= nil then
 - limit = count
 - end
 - local showSpam = addon.db.char.showSpam
 - for bag = 0,4 do
 - for slot = 1,GetContainerNumSlots(bag) do
 - local item = GetContainerItemLink(bag,slot)
 - if item then
 - -- is it grey quality item?
 - local grey = string_find(item,"|cff9d9d9d")
 - if (grey and (not addon:isException(item))) or ((not grey) and (addon:isException(item))) then
 - PickupContainerItem(bag, slot)
 - DeleteCursorItem()
 - if showSpam then
 - self:Print(L["Destroyed"]..": "..item)
 - end
 - limit = limit - 1
 - if limit == 0 then
 - break
 - end
 - end
 - end
 - end
 - if limit == 0 then
 - break
 - end
 - end
 - if self.db.char.printGold then
 - self:PrintGold()
 - end
 - self.total = 0
 - end
 - function addon:PrintGold()
 - local ret = ""
 - local gold = floor(self.total / (COPPER_PER_SILVER * SILVER_PER_GOLD));
 - local silver = floor((self.total - (gold * COPPER_PER_SILVER * SILVER_PER_GOLD)) / COPPER_PER_SILVER);
 - local copper = mod(self.total, COPPER_PER_SILVER);
 - if gold > 0 then
 - ret = gold.." "..L["gold"].." "
 - end
 - if silver > 0 or gold > 0 then
 - ret = ret..silver .." "..L["silver"].." "
 - end
 - ret = ret..copper.." "..L["copper"]
 - if silver > 0 or gold > 0 or copper > 0 then
 - self:Print(L["Gained"]..": "..ret)
 - end
 - end
 - function addon:Add(link)
 - -- remove all trailing whitespace
 - link = strtrim(link)
 - -- extract name from an itemlink
 - local found, _, name = string_find(link, "^|c%x+|H.+|h.(.*)\].+")
 - -- if it's not an itemlink, guess it's name of an item
 - if not found then
 - name = link
 - end
 - local exceptions = self.db.global.exceptions
 - for k,v in pairs(exceptions) do
 - if v == name or v == link then
 - return
 - end
 - end
 - -- append name of the item to global exception list
 - exceptions[#exceptions + 1] = name
 - self:Print(L["Added"] .. ": " .. link)
 - end
 - function addon:Rem(link)
 - -- remove all trailing whitespace
 - link = strtrim(link)
 - -- extract name from an itemlink
 - local isLink, _, name = string_find(link, "^|c%x+|H.+|h.(.*)\].+")
 - -- if it's not an itemlink, guess it's name of an item
 - if not isLink then
 - name = link
 - end
 - -- looping through exceptions
 - local found = false
 - local exception
 - local exceptions = self.db.global.exceptions
 - for k,v in pairs(exceptions) do
 - found = false
 - -- comparing exception list entry with given name
 - if v:lower() == name:lower() then
 - found = true
 - end
 - -- extract name from itemlink (only for compatibility with old saved variables)
 - isLink, _, exception = string_find(v, "^|c%x+|H.+|h.(.*)\].+")
 - if isLink then
 - -- comparing exception list entry with given name
 - if exception:lower() == name:lower() then
 - found = true
 - end
 - end
 - if found then
 - if exceptions[k + 1] then
 - exceptions[k] = exceptions[k + 1]
 - else
 - exceptions[k] = nil
 - end
 - self:Print(L["Removed"]..": "..link)
 - break
 - end
 - end
 - end
 - function addon:isException(link)
 - local exception = nil
 - -- extracting name of an item from the itemlink
 - local isLink, _, name = string_find(link, "^|c%x+|H.+|h.(.*)\].+")
 - -- it's not an itemlink, so guess it's name of the item
 - if not isLink then
 - name = link
 - end
 - local exceptions = self.db.global.exceptions
 - if exceptions then
 - -- looping through global exceptions
 - for k,v in pairs(exceptions) do
 - -- comparing exception list entry with given name
 - if v:lower() == name:lower() then
 - return true
 - end
 - -- extract name from itemlink (only for compatibility with old saved variables)
 - isLink, _, exception = string_find(v, "^|c%x+|H.+|h.(.*)\].+")
 - if isLink then
 - -- comparing exception list entry with given name
 - if exception:lower() == name:lower() then
 - return true
 - end
 - end
 - end
 - end
 - -- item not found in exception list
 - return false
 - end
 - function addon:ClearDB()
 - wipe(self.db.global.exceptions)
 - self:Print(L["Exceptions succesfully cleared."])
 - end
 - function addon:HandleSlashCommands(input)
 - local arg1, arg2 = self:GetArgs(input, 2, 1, input)
 - if arg1 == 'destroy' then
 - self:Destroy(arg2)
 - elseif arg1 == 'add' and arg2 ~= nil then
 - if arg2:find('|Hitem') == nil then
 - self:Print(L["Command accepts only itemlinks."])
 - else
 - self:Add(arg2, true)
 - end
 - elseif (arg1 == 'rem' or arg1 == 'remove') and arg2 ~= nil then
 - if arg2:find('|Hitem') == nil then
 - self:Print(L["Command accepts only itemlinks."])
 - else
 - self:Rem(arg2, true)
 - end
 - else
 - InterfaceOptionsFrame_OpenToCategory(addon.optionsFrame)
 - end
 - end
 - function addon:PopulateOptions()
 - if not options then
 - options = {
 - order = 1,
 - type = "group",
 - name = "SellJunk",
 - args = {
 - general = {
 - order = 1,
 - type = "group",
 - name = "global",
 - args = {
 - divider1 = {
 - order = 1,
 - type = "description",
 - name = "",
 - },
 - auto = {
 - order = 2,
 - type = "toggle",
 - name = L["Automatically sell junk"],
 - desc = L["Toggles the automatic selling of junk when the merchant window is opened."],
 - get = function() return addon.db.char.auto end,
 - set = function() self.db.char.auto = not self.db.char.auto end,
 - },
 - divider2 = {
 - order = 3,
 - type = "description",
 - name = "",
 - },
 - max12 = {
 - order = 4,
 - type = "toggle",
 - name = L["Sell max. 12 items"],
 - desc = L["This is failsafe mode. Will sell only 12 items in one pass. In case of an error, all items can be bought back from vendor."],
 - get = function() return addon.db.char.max12 end,
 - set = function() self.db.char.max12 = not self.db.char.max12 end,
 - },
 - divider3 = {
 - order = 5,
 - type = "description",
 - name = "",
 - },
 - printGold = {
 - order = 6,
 - type = "toggle",
 - name = L["Show gold gained"],
 - desc = L["Shows gold gained from selling trash."],
 - get = function() return addon.db.char.printGold end,
 - set = function() self.db.char.printGold = not self.db.char.printGold end,
 - },
 - divider4 = {
 - order = 7,
 - type = "description",
 - name = "",
 - },
 - showSpam = {
 - order = 8,
 - type = "toggle",
 - name = L["Show 'item sold' spam"],
 - desc = L["Prints itemlinks to chat, when automatically selling items."],
 - get = function() return addon.db.char.showSpam end,
 - set = function() addon.db.char.showSpam = not addon.db.char.showSpam end,
 - },
 - divider5 = {
 - order = 9,
 - type = "header",
 - name = L["Clear exceptions"],
 - },
 - clearglobal = {
 - order = 10,
 - type = "execute",
 - name = L["Clear"],
 - desc = L["Removes all exceptions."],
 - func = function() addon:ClearDB() end,
 - },
 - divider6 = {
 - order = 12,
 - type = "description",
 - name = "",
 - },
 - header1 = {
 - order = 13,
 - type = "header",
 - name = L["Exceptions"],
 - },
 - note1 = {
 - order = 14,
 - type = "description",
 - name = L["Drag item into this window to add/remove it from exception list"],
 - },
 - add = {
 - order = 15,
 - type = "input",
 - name = L["Add item"]..':',
 - usage = L["<Item Link>"],
 - get = false,
 - set = function(info, v) addon:Add(v) end,
 - },
 - rem = {
 - order = 16,
 - type = "input",
 - name = L["Remove item"]..':',
 - usage = L["<Item Link>"],
 - get = false,
 - set = function(info, v) addon:Rem(v) end,
 - },
 - }
 - }
 - }
 - }
 - end
 - end
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment