vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        Auctioneer Addon for World of Warcraft(tm).
        Version: 3.9.0.1000 (Kangaroo)
        Revision: $Id: AucStorage.lua 846 2006-05-04 05:10:19Z aradan $

        Auctioneer storage functions.
        Functions that allow auctioneer writing/reading data to/from its savedvariables file.

        License:
                This program is free software; you can redistribute it and/or
                modify it under the terms of the GNU General Public License
                as published by the Free Software Foundation; either version 2
                of the License, or (at your option) any later version.

                This program is distributed in the hope that it will be useful,
                but WITHOUT ANY WARRANTY; without even the implied warranty of
                MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                GNU General Public License for more details.

                You should have received a copy of the GNU General Public License
                along with this program(see GPL.txt); if not, write to the Free Software
                Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
]]

--Local function prototypes
local setHistMed, setSnapMed, getFixedPrice, setFixedPrice, deleteFixedPrice

function setHistMed(auctKey, itemKey, median, count)
        if (not AuctionConfig.stats)                                    then AuctionConfig.stats = {}                                           end
        if (not AuctionConfig.stats.histmed)                    then AuctionConfig.stats.histmed = {}                           end
        if (not AuctionConfig.stats.histmed[auctKey])   then AuctionConfig.stats.histmed[auctKey] = {}          end
        if (not AuctionConfig.stats.histcount)                  then AuctionConfig.stats.histcount = {}                         end
        if (not AuctionConfig.stats.histcount[auctKey]) then AuctionConfig.stats.histcount[auctKey] = {}        end

        if (not median) or (not count) then
                AuctionConfig.stats.histmed[auctKey][itemKey]   = nil
                AuctionConfig.stats.histcount[auctKey][itemKey] = nil
        elseif (count > 0) and (median > 0) then
                AuctionConfig.stats.histmed[auctKey][itemKey]   = median
                AuctionConfig.stats.histcount[auctKey][itemKey] = count
        else
                AuctionConfig.stats.histmed[auctKey][itemKey]   = 0
                AuctionConfig.stats.histcount[auctKey][itemKey] = 0
        end
        -- Clear HSP cache when median changes
        if (Auctioneer_HSPCache and Auctioneer_HSPCache[auctKey]) then
                Auctioneer_HSPCache[auctKey][itemKey] = nil
        end
end

function setSnapMed(auctKey, itemKey, median, count)
        if (not AuctionConfig.stats)                                    then AuctionConfig.stats = {}                                           end
        if (not AuctionConfig.stats.snapmed)                    then AuctionConfig.stats.snapmed = {}                           end
        if (not AuctionConfig.stats.snapmed[auctKey])   then AuctionConfig.stats.snapmed[auctKey] = {}          end
        if (not AuctionConfig.stats.snapcount)                  then AuctionConfig.stats.snapcount = {}                         end
        if (not AuctionConfig.stats.snapcount[auctKey]) then AuctionConfig.stats.snapcount[auctKey] = {}        end

        if (not median) or (not count) then
                AuctionConfig.stats.snapmed[auctKey][itemKey]   = nil
                AuctionConfig.stats.snapcount[auctKey][itemKey] = nil
        elseif (count > 0) and (median > 0) then
                AuctionConfig.stats.snapmed[auctKey][itemKey]   = median
                AuctionConfig.stats.snapcount[auctKey][itemKey] = count
        else
                AuctionConfig.stats.snapmed[auctKey][itemKey]   = 0
                AuctionConfig.stats.snapcount[auctKey][itemKey] = 0
        end
        -- Clear HSP cache when median changes
        if (Auctioneer_HSPCache and Auctioneer_HSPCache[auctKey]) then
                Auctioneer_HSPCache[auctKey][itemKey] = nil
        end
end

function getFixedPrice(itemKey, count, auctKey)
        if (auctKey == nil) then
                auctKey = Auctioneer.Util.GetAuctionKey();
        end

        if (not count) then count = 1; end

        local i, j;
        local start, buy, stackSize, dur;
        if (not AuctionConfig or not AuctionConfig.fixedprice) then
                -- No fixed prices stored at all, do nothing
        elseif (auctKey and AuctionConfig.fixedprice[auctKey] and AuctionConfig.fixedprice[auctKey][itemKey]) then
                -- Get fixed price for this realm/faction
                i,j, start,buy,stackSize,dur = string.find(AuctionConfig.fixedprice[auctKey][itemKey], "(%d+):(%d+):(%d+):(%d+)");
        elseif (AuctionConfig.fixedprice["global"] and AuctionConfig.fixedprice["global"][itemKey]) then
                -- Get global fixed price
                i,j, start,buy,stackSize,dur = string.find(AuctionConfig.fixedprice["global"][itemKey], "(%d+):(%d+):(%d+):(%d+)");
        end

        -- Return nil when no fixed price is found
        if (not i) then return nil;     end

        -- Calculate and return prices for desired stack size
        if (not stackSize) then stackSize = 1; end
        return Auctioneer.Util.Round(start*count/stackSize), Auctioneer.Util.Round(buy*count/stackSize), tonumber(dur);
end

function setFixedPrice(itemKey, startingBid, buyout, duration, count, auctKey)
        if (auctKey == nil) then
                auctKey = Auctioneer.Util.GetAuctionKey();
        elseif (auctKey == false) then
                auctKey = "global";
        end

        if (not count) then count = 1; end

        -- Check if any of the data actually changed, to avoid drifting prices when
        -- auctioned with different stack sizes
        oldStart, oldBuyout, oldDur = getFixedPrice(itemKey, count, auctKey);
        if (oldStart == startingBid and oldBuyout == buyout and oldDur == duration) then return; end

        -- Create table structure for storage if needed
        if (not AuctionConfig) then AuctionConfig = {}; end
        if (not AuctionConfig.fixedprice) then AuctionConfig.fixedprice = {}; end
        if (not AuctionConfig.fixedprice[auctKey]) then AuctionConfig.fixedprice[auctKey] = {}; end

        -- Store the new fixed price
        AuctionConfig.fixedprice[auctKey][itemKey] = string.format("%d:%d:%d:%d", startingBid, buyout, count, duration)
end

function deleteFixedPrice(itemKey, auctKey)
        if (auctKey == nil) then
                auctKey = Auctioneer.Util.GetAuctionKey();
        end

        -- No fixed prices, we're done here
        if (not AuctionConfig or not AuctionConfig.fixedprice) then return; end

        -- Delete realm/faction specific fixed price
        if (auctKey and AuctionConfig.fixedprice[auctKey]) then
                AuctionConfig.fixedprice[auctKey][itemKey] = nil;
        end

        -- Delete global fixed price
        if (AuctionConfig.fixedprice["global"]) then
                AuctionConfig.fixedprice["global"][itemKey] = nil;
        end
end

Auctioneer.Storage = {
        SetHistMed = setHistMed,
        SetSnapMed = setSnapMed,
        GetFixedPrice = getFixedPrice,
        SetFixedPrice = setFixedPrice,
        DeleteFixedPrice = deleteFixedPrice,
}