diff --git a/modules/autovendor.lua b/modules/autovendor.lua index 45a5a019..c34d5c84 100644 --- a/modules/autovendor.lua +++ b/modules/autovendor.lua @@ -1,6 +1,7 @@ pfUI:RegisterModule("autovendor", function () - pfUI.autovendor = CreateFrame("Frame", "pfMoneyUpdate", nil) - pfUI.autovendor.RepairAllItems = function() + local scanlist = {} + + local function RepairAllItems() local cost, possible = GetRepairAllCost() if cost > 0 and possible then DEFAULT_CHAT_FRAME:AddMessage("Your items have been repaired for " .. CreateGoldString(cost)) @@ -8,87 +9,145 @@ pfUI:RegisterModule("autovendor", function () end end - pfUI.autovendor.SellAllGrey = function() - local price = 0 - local count = 0 - + local function ScanGreyItems() + scanlist = {} for bag = 0, 4, 1 do for slot = 1, GetContainerNumSlots(bag), 1 do local name = GetContainerItemLink(bag,slot) if name and string.find(name,"ff9d9d9d") then - - -- get value - local _, icount = GetContainerItemInfo(bag, slot) - local _, _, id = string.find(GetContainerItemLink(bag, slot), "item:(%d+):%d+:%d+:%d+") - if pfSellData[tonumber(id)] then - local _, _, sell, buy = strfind(pfSellData[tonumber(id)], "(.*),(.*)") - price = price + ( sell * ( icount or 1 ) ) - count = count + 1 - end - UseContainerItem(bag,slot) + table.insert(scanlist, { bag, slot }) end end end + end - if count > 0 then - DEFAULT_CHAT_FRAME:AddMessage("Your vendor trash has been sold and you earned " .. CreateGoldString(price)) + local function GetNextGreyItem() + if scanlist[1] then + local bag, slot = scanlist[1][1], scanlist[1][2] + table.remove(scanlist, 1) + + return bag, slot + else + return nil, nil end end - pfUI.autovendor:RegisterEvent("MERCHANT_SHOW") - pfUI.autovendor:SetScript("OnEvent", function() + local autovendor = CreateFrame("Frame", "pfMoneyUpdate", nil) + autovendor:Hide() + + autovendor:SetScript("OnShow", function() + ScanGreyItems() + this.count = 0 + this.price = 0 + end) + + autovendor:SetScript("OnUpdate", function() + local bag, slot = GetNextGreyItem() + + if not bag or not slot then + this:Hide() + return + end + + local name = GetContainerItemLink(bag,slot) + + -- double check to only sell grey + if name and string.find(name,"ff9d9d9d") then + -- get value + local _, icount = GetContainerItemInfo(bag, slot) + local _, _, id = string.find(GetContainerItemLink(bag, slot), "item:(%d+):%d+:%d+:%d+") + if pfSellData[tonumber(id)] then + local _, _, sell, buy = strfind(pfSellData[tonumber(id)], "(.*),(.*)") + this.price = this.price + ( sell * ( icount or 1 ) ) + this.count = this.count + 1 + end + UseContainerItem(bag, slot) + end + end) + + autovendor:SetScript("OnHide", function() + if this.count > 0 then + DEFAULT_CHAT_FRAME:AddMessage("Your vendor trash has been sold and you earned " .. CreateGoldString(this.price)) + end + end) + + autovendor:RegisterEvent("MERCHANT_SHOW") + autovendor:RegisterEvent("MERCHANT_UPDATE") + autovendor:SetScript("OnEvent", function() + autovendor.button:Update() + if event == "MERCHANT_SHOW" then if C["global"]["autorepair"] == "1" then - pfUI.autovendor:RepairAllItems() + RepairAllItems() end if C["global"]["autosell"] == "1" then - pfUI.autovendor:SellAllGrey() + autovendor:Show() end MerchantRepairText:SetText("") if MerchantRepairItemButton:IsShown() then - pfUI.autovendor.button:ClearAllPoints() - pfUI.autovendor.button:SetPoint("RIGHT", MerchantRepairItemButton, "LEFT", -2, 0) + autovendor.button:ClearAllPoints() + autovendor.button:SetPoint("RIGHT", MerchantRepairItemButton, "LEFT", -2, 0) else - pfUI.autovendor.button:ClearAllPoints() - pfUI.autovendor.button:SetPoint("BOTTOMRIGHT", MerchantFrame, "BOTTOMLEFT", 172, 91) + autovendor.button:ClearAllPoints() + autovendor.button:SetPoint("BOTTOMRIGHT", MerchantFrame, "BOTTOMLEFT", 172, 91) end end end) - -- show button - pfUI.autovendor.button = CreateFrame("Button", "pfMerchantpfUI.autovendor.buttonButton", MerchantFrame) - pfUI.autovendor.button:SetWidth(36) - pfUI.autovendor.button:SetHeight(36) - pfUI.autovendor.button.icon = pfUI.autovendor.button:CreateTexture("BORDER") - pfUI.autovendor.button.icon:SetAllPoints(pfUI.autovendor.button) - pfUI.autovendor.button.icon:SetTexture("Interface\\Icons\\Spell_Shadow_SacrificialShield") - pfUI.autovendor.button.icon:SetVertexColor(1,.8,.4) - pfUI.autovendor.button:SetNormalTexture("") - pfUI.autovendor.button:SetPushedTexture("Interface\\Buttons\\UI-Quickslot-Depress") - pfUI.autovendor.button:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square") - pfUI.autovendor.button:SetScript("OnEnter", function() + -- Setup Autosell button + autovendor.button = CreateFrame("Button", "pfMerchantautovendor.buttonButton", MerchantFrame) + autovendor.button:SetWidth(36) + autovendor.button:SetHeight(36) + autovendor.button.icon = autovendor.button:CreateTexture("BORDER") + autovendor.button.icon:SetAllPoints(autovendor.button) + autovendor.button.icon:SetTexture("Interface\\Icons\\Spell_Shadow_SacrificialShield") + autovendor.button.icon:SetVertexColor(1,.8,.4) + autovendor.button:SetNormalTexture("") + autovendor.button:SetPushedTexture("Interface\\Buttons\\UI-Quickslot-Depress") + autovendor.button:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square") + autovendor.button:SetScript("OnEnter", function() GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); GameTooltip:SetText("Sell Grey Items"); GameTooltip:Show(); end) - pfUI.autovendor.button:SetScript("OnLeave", function() + autovendor.button:SetScript("OnLeave", function() GameTooltip:Hide(); end) - pfUI.autovendor.button:SetScript("OnClick", function() - pfUI.autovendor:SellAllGrey() + autovendor.button:SetScript("OnClick", function() + autovendor:Show() end) + autovendor.button.Update = function() + if not autovendor:IsVisible() then + + ScanGreyItems() + + if scanlist[1] then + autovendor.button:Enable() + autovendor.button.icon:SetVertexColor(1,.8,.4) + else + autovendor.button:Disable() + autovendor.button.icon:SetVertexColor(.5,.5,.5) + end + + else + autovendor.button:Disable() + autovendor.button.icon:SetVertexColor(.5,.5,.5) + end + end + + -- Hook MerchantFrame_Update if not pfMerchantFrame_Update then local pfMerchantFrame_Update = MerchantFrame_Update function _G.MerchantFrame_Update() if MerchantFrame.selectedTab == 1 then - pfUI.autovendor.button:Show() + autovendor.button:Show() else - pfUI.autovendor.button:Hide() + autovendor.button:Hide() end pfMerchantFrame_Update() end