vanilla-wow-addons – Rev 1
?pathlinks?
--[[
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,
}