vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local locals = KC_ITEMS_LOCALS.modules.broker

KC_Broker = KC_ItemsModule:new({
        type             = "broker",
        name             = locals.name,
        desc             = locals.description,
        cmdOptions       = locals.chat,
        dependencies = {"common", "auction"},
        optPath          = {"Options"},
        db                       = AceDatabase:new("KC_AuctionBrokerDB")
})

KC_Items:Register(KC_Broker)

function KC_Broker:Enable()
        self:RegisterEvent("AUCTION_HOUSE_SHOW")
        -- One Click Auctions
        self:Hook("ContainerFrameItemButton_OnClick", "BagClick")
end

function KC_Broker:Disable()
        KC_ItemsModule.Disable(self)
        if (not AuctionFrame) then return end
        AuctionsItemText:SetText(self.AuctionsItemText or AuctionsItemText:GetText())
        BrowseTitle:SetText(self.BrowseTitle or BrowseTitle:GetText())
end

function KC_Broker:AUCTION_HOUSE_SHOW()
        -- Data Caching
        self.AuctionsItemText = AuctionsItemText:GetText()
        self.BrowseTitle = BrowseTitle:GetText()
        -- Autofill
        _ = self:GetOpt(self.optPath, "autofill") and self:RegisterEvent("NEW_AUCTION_UPDATE", "AutoFill")
        _ = self:GetOpt(self.optPath, "autofill") and self:Hook("StartAuction", "Remember")
        -- Duration Memory
        _ = self:GetOpt(self.optPath, "remduration") and self:Hook("AuctionsRadioButton_OnClick", "UpdateDuration")
        _ = self:GetOpt(self.optPath, "remduration") and AuctionsRadioButton_OnClick(self:GetOpt(self.optPath, "duration"))
        -- Coloration
        if (self.app.auction and self:GetOpt(self.optPath, "ahcolor")) then
                self:Hook("AuctionFrameBrowse_Update")
                self:UpdateGuide()
                BrowseTitle:SetPoint("TOP",35 , -18)
                BrowseTitle:SetText( format("%s  -  %s", self.BrowseTitle, locals.labels.guide))                
        end
        self:UnregisterEvent("AUCTION_HOUSE_SHOW")
end

function KC_Broker:AutoFill()
        local name, texture, qty, quality, canUse, price = GetAuctionSellItemInfo()
        
        if (not name) then return end

        local factionID = self.common:GetRealmFactionID()
        local code              = self.common:GetCodeFromInv(name, true)
        local mode              = self:GetOpt(self.optPath, "fillmode") or locals.modes.mixed
        local cut               = self:GetOpt(self.optPath, "cut") or 1
        local skipmem   = self:GetOpt(self.optPath, "skipmem")
        local min, buy = 0, 0
        local used = locals.modes.none

        if (mode == locals.modes.memory or (mode == locals.modes.mixed and not skipmem)) then
                min, buy = self:GetLastPrices(code, factionID)
                used = locals.modes.memory
        end

        if ((mode == locals.modes.smart or (mode == locals.modes.mixed and min == 0)) and self.app.auction) then
                _, _, min, _, _, _, buy = self.app.auction:GetItemData(code)
                min = min and min * cut or 0
                buy = buy and buy * cut or 0
                used = locals.modes.smart
        end

        if ((mode == locals.modes.vendor or (mode == locals.modes.mixed and min == 0)) and self.app.sellvalue) then
                local vsell = self.common:GetItemPrices(code)
                min = min > 0 and min or vsell * 2.5
                buy = buy > 0 and buy or vsell * 3.5

                min = min < vsell and vsell * 1.1 or min

                min = buy < vsell and vsell * 1.5 or min
                buy = buy < vsell and vsell * 1.8 or buy
                used = locals.modes.vendor
        end

        buy = buy < min and min * 1.1 or buy

        _ = min > 0 and MoneyInputFrame_SetCopper(StartPrice, floor(min * qty))
        _ = buy < 1 and MoneyInputFrame_SetCopper(BuyoutPrice, floor(price * 2.5))
        _ = buy > 0 and MoneyInputFrame_SetCopper(BuyoutPrice, floor(buy * qty))
        
        AuctionsItemText:SetText(format("%s  -  |cff00ff33Mode: %s", self.AuctionsItemText, used))
end

function KC_Broker:GetLastPrices(code, factionID)
        return self.common:Split(self.db:get({factionID}, code) or "0,0", ",")
end

function KC_Broker:Remember(min, buy, dur)
        local name, _, qty      = GetAuctionSellItemInfo()
        local factionID         = self.common:GetRealmFactionID()
        local code                      = self.common:GetCodeFromInv(name, true)

        self.db:set({factionID}, code, format("%s,%s", self.common:Round(min / qty,3), self.common:Round(buy / qty, 3)))

        self.Hooks["StartAuction"].orig(min, buy, dur)
end

function KC_Broker:UpdateDuration(index)
        self:SetOpt(self.optPath, "duration", index)
        self.Hooks["AuctionsRadioButton_OnClick"].orig(index)
end

function KC_Broker:BagClick(button, ignore)
        if (AuctionFrame and AuctionFrame:IsVisible()) then
                if (button == "LeftButton" and IsAltKeyDown()and GetContainerItemLink(this:GetParent():GetID(), this:GetID())) then
                        PickupContainerItem(this:GetParent():GetID(), this:GetID())
                        ClickAuctionSellItemButton()
                        self:AutoFill()
                        StartAuction(MoneyInputFrame_GetCopper(StartPrice), MoneyInputFrame_GetCopper(BuyoutPrice), AuctionFrameAuctions.duration)
                elseif (button == "RightButton" and IsControlKeyDown()) then
                        local link = GetContainerItemLink(this:GetParent():GetID(),this:GetID())
                        if (not link) then return end
                        BrowseName:SetText(self.common:GetItemInfo(self.common:GetCode(link))["name"])
                        AuctionFrameBrowse_Search();
                        BrowseNoResultsText:SetText(BROWSE_NO_RESULTS);         
                        BrowseName:ClearFocus();
                elseif (button == "RightButton" and IsAltKeyDown()) then
                        self:SmartSplit()
                else
                        self.Hooks["ContainerFrameItemButton_OnClick"].orig(button, ignore)
                end
        elseif (button == "RightButton" and IsAltKeyDown()) then
                self:SmartSplit()
        else
                self.Hooks["ContainerFrameItemButton_OnClick"].orig(button, ignore)
        end
end

function KC_Broker:SmartSplit()
        SplitContainerItem(this:GetParent():GetID(), this:GetID(), 1)
        for bag=0,4 do
                for slot=1, GetContainerNumSlots(bag) do
                        if (not GetContainerItemLink(bag, slot)) then
                                PickupContainerItem(bag, slot)
                                return  
                        end
                end
        end
end

function KC_Broker:AuctionFrameBrowse_Update()
        self.Hooks["AuctionFrameBrowse_Update"].orig()
        local offset = FauxScrollFrame_GetOffset(BrowseScrollFrame)
        
        local knownColor        = {self.common:Explode(self:GetOpt(self.optPath, "knownColor") or ".1!.1!1", "!")}
        local sellColor         = {self.common:Explode(self:GetOpt(self.optPath, "sellColor")  or "1!.5!.8", "!")}
        local buyColor          = {self.common:Explode(self:GetOpt(self.optPath, "buyColor")   or "1!1!0", "!")}
        local minColor          = {self.common:Explode(self:GetOpt(self.optPath, "minColor")   or "0!.8!1", "!")}

        for i=1, NUM_BROWSE_TO_DISPLAY do

                local code = self.common:GetCode(GetAuctionItemLink("list", i+offset), true);
                
                if (not code) then return; end

                local _, _, count, _, _, _, min, _, buy, bid, _, _ = GetAuctionItemInfo("list", i+offset);
                local sSeen, sAvgStack, sMin, sBidcount, sBid, sBuycount, sBuy = self.app.auction:GetItemData(code);
                local sell = self.common:GetItemPrices(code)
                
                local sellPass          = sSeen and buy < (sell * count) and buy > 0
                local buyPass           = sBuy and buy / count < sBuy * .75 and buy > 0
                local minPass           = sMin and min / count < sMin * .75

                --FilterKnown Code
                KCITooltip:SetAuctionItem("list", i+offset);
                local text = format("%s %s %s", getglobal("KCITooltipTextLeft2"):GetText() or "", getglobal("KCITooltipTextLeft3"):GetText() or "", getglobal("KCITooltipTextLeft4"):GetText() or ""); 
                local knownPass = strfind(text, ITEM_SPELL_KNOWN);
                
                if (knownPass) then
                        local iconTexture = getglobal("BrowseButton"..i.."ItemIconTexture");
                        iconTexture:SetVertexColor(unpack(knownColor));
                elseif (sellPass) then
                        local iconTexture = getglobal("BrowseButton"..i.."ItemIconTexture");
                        iconTexture:SetVertexColor(unpack(sellColor));
                elseif (buyPass) then
                        local iconTexture = getglobal("BrowseButton"..i.."ItemIconTexture");
                        iconTexture:SetVertexColor(unpack(buyColor));
                elseif (minPass) then
                        local iconTexture = getglobal("BrowseButton"..i.."ItemIconTexture");
                        iconTexture:SetVertexColor(unpack(minColor));
                end
        end
        KCITooltip:Hide()
end

function KC_Broker:UpdateGuide()
        local kc        = {self.common:Explode(self:GetOpt(self.optPath, "knownColor") or ".1!.1!1", "!")}
        local sc        = {self.common:Explode(self:GetOpt(self.optPath, "sellColor")  or "1!.5!.8", "!")}
        local bc        = {self.common:Explode(self:GetOpt(self.optPath, "buyColor")   or "1!1!0", "!")}
        local mc        = {self.common:Explode(self:GetOpt(self.optPath, "minColor")   or "0!.8!1", "!")}

        locals.labels.guide = format(locals.labels.guidebase, self.common:GetHexCode(kc[1], kc[2], kc[3], true), self.common:GetHexCode(sc[1], sc[2], sc[3], true), self.common:GetHexCode(bc[1], bc[2], bc[3], true),self.common:GetHexCode(mc[1], mc[2], mc[3], true))
end

Generated by GNU Enscript 1.6.5.90.