欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

beancounterdb.lua

时间太紧了
LUA
字号:
--[[	Auctioneer Addon for World of Warcraft(tm).	Version: 3.5.0.0914 (Platypus)	Revision: $Id: BeanCounterDB.lua 843 2006-04-24 02:09:14Z vindicator $	BeanCounterDB - BeanCounter database functions	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.--]]--------------------------------------------------------------------------------- Global Data Members-------------------------------------------------------------------------------BeanCounterAccountDB = {};	-- Database on diskBeanCounterRealmDB = nil; 	-- Currently loaded database (reference to BeanCounterAccountDB[realm])--------------------------------------------------------------------------------- Local Data Members-------------------------------------------------------------------------------local currentPlayerId = nil;--------------------------------------------------------------------------------- Constants-------------------------------------------------------------------------------local NIL_VALUE = "<nil>";local CURRENT_DATABASE_VERSION = 30002;--------------------------------------------------------------------------------- Function Prototypes-------------------------------------------------------------------------------local loadDatabase;local upgradeDatabase;local upgradePurchases30000To30001;local upgradePurchases30001To30002;local upgradeSales30000To30002;local clearDatabase;local getPlayerName;local getPlayerId;local getCurrentPlayerId;local copyItemRecords;local stringFromBoolean;local booleanFromString;local stringFromNumber;local numberFromString;local nilSafeStringFromString;local stringFromNilSafeString;local debugPrint;--------------------------------------------------------------------------------- Loads the BeanCounter database-------------------------------------------------------------------------------function loadDatabase(realm)	-- Load or create the database.	BeanCounterRealmDB = BeanCounterAccountDB[realm];	if (BeanCounterRealmDB == nil) then		-- Create a new database.		BeanCounterRealmDB = {};		BeanCounterAccountDB[realm] = BeanCounterRealmDB;		clearDatabase();		-- Import the old AHPurchases and AHSales tables if we are loading		-- this realm's database.		if (realm == GetRealmName() and (AHPurchases or AHSales)) then			-- Import AHPurchases.			if (AHPurchases) then				upgradePurchases30000To30001(AHPurchases);				upgradePurchases30001To30002(AHPurchases, BeanCounterRealmDB.players);				copyItemRecords(AHPurchases.PendingBids, BeanCounterRealmDB.pendingBids);				copyItemRecords(AHPurchases.CompletedBids, BeanCounterRealmDB.completedBids);				copyItemRecords(AHPurchases.Purchases, BeanCounterRealmDB.purchases);				AHPurchases = nil;			end			-- Import AHSales.			if (AHSales) then				upgradeSales30000To30002(AHSales, BeanCounterRealmDB.players);				copyItemRecords(AHSales.PendingAuctions, BeanCounterRealmDB.pendingAuctions);				copyItemRecords(AHSales.CompletedAuctions, BeanCounterRealmDB.completedAuctions);				copyItemRecords(AHSales.Sales, BeanCounterRealmDB.sales);				AHSales = nil;			end		end	end		-- Upgrade the database before returning.	upgradeDatabase(BeanCounterRealmDB);	-- Cache the current player id.	currentPlayerId = getPlayerId(UnitName("player"), true);end--------------------------------------------------------------------------------- Upgrades the BeanCounter database.-------------------------------------------------------------------------------function upgradeDatabase(database)end--------------------------------------------------------------------------------- Upgrades the AHPurchases table from version 30000 to 30001. This upgrade-- added a timeLeft field to the pending bids.-------------------------------------------------------------------------------function upgradePurchases30000To30001(purchases)	if (purchases.version == 30000) then		if (purchases.PendingBids) then			for item in purchases.PendingBids do				local pendingBidsTable = purchases.PendingBids[item];				for index in pendingBidsTable do					pendingBidsTable[index] = pendingBidsTable[index]..";1"					debugPrint("Upgraded AHPurchases.PendingBids["..item.."]["..index.."] = "..pendingBidsTable[index]);				end			end		end		purchases.version = 30001;		debugPrint("AHPurchases upgraded to 30001");	endend--------------------------------------------------------------------------------- Upgrades the AHPurchases table from version 30001 to 30002. This upgrade-- added a buyer id field to the tables.-------------------------------------------------------------------------------function upgradePurchases30001To30002(database, players)	if (database.version == 30001) then		-- Get or create a player id		local playerId = nil;		local playerName = UnitName("player");		for id in players do			if (players[id] == playerName) then				playerId = id;				break;			end		end		if (playerId == nil) then			table.insert(players, playerName);			playerId = table.getn(players);		end				-- Add the player id to each pending bid.		if (database.PendingBids) then			for item in database.PendingBids do				local pendingBidsTable = database.PendingBids[item];				for index in pendingBidsTable do					pendingBidsTable[index] = pendingBidsTable[index]..";"..stringFromNumber(playerId);					debugPrint("Upgraded pendingBids["..item.."]["..index.."] = "..pendingBidsTable[index]);				end			end		end		-- Add the player id to each completed bid.		if (database.CompletedBids) then			for item in database.CompletedBids do				local completedBidsTable = database.CompletedBids[item];				for index in completedBidsTable do					completedBidsTable[index] = completedBidsTable[index]..";"..stringFromNumber(playerId);					debugPrint("Upgraded completedBids["..item.."]["..index.."] = "..completedBidsTable[index]);				end			end		end		-- Add the player id to each purchase.		if (database.Purchases) then			for item in database.Purchases do				local purchasesTable = database.Purchases[item];				for index in purchasesTable do					purchasesTable[index] = purchasesTable[index]..";"..stringFromNumber(playerId);					debugPrint("Upgraded purchases["..item.."]["..index.."] = "..purchasesTable[index]);				end			end		end		database.version = 30002;		debugPrint("AHPurchases upgraded to 30002");	endend--------------------------------------------------------------------------------- Upgrades the AHSales table from version 30000 to 30002. This upgrade added-- a seller id field to the tables.-------------------------------------------------------------------------------function upgradeSales30000To30002(database, players)	if (database.version == 30000) then		-- Get or create a player id		local playerId = nil;		local playerName = UnitName("player");		for id in players do			if (players[id] == playerName) then				playerId = id;				break;			end		end		if (playerId == nil) then			table.insert(players, playerName);			playerId = table.getn(players);		end				-- Add the player id to each pending auction.		if (database.PendingAuctions) then			for item in database.PendingAuctions do				local pendingAuctionsTable = database.PendingAuctions[item];				for index in pendingAuctionsTable do					pendingAuctionsTable[index] = pendingAuctionsTable[index]..";"..stringFromNumber(playerId);					debugPrint("Upgraded pendingAuctions["..item.."]["..index.."] = "..pendingAuctionsTable[index]);				end			end		end		-- Add the player id to each completed auction.		if (database.CompletedAuctions) then			for item in database.CompletedAuctions do				local completedAuctionsTable = database.CompletedAuctions[item];				for index in completedAuctionsTable do					completedAuctionsTable[index] = completedAuctionsTable[index]..";"..stringFromNumber(playerId);					debugPrint("Upgraded completedAuctions["..item.."]["..index.."] = "..completedAuctionsTable[index]);				end			end		end		-- Add the player id to each sale.		if (database.Sales) then			for item in database.Sales do				local salesTable = database.Sales[item];				for index in salesTable do					salesTable[index] = salesTable[index]..";"..stringFromNumber(playerId);					debugPrint("Upgraded sales["..item.."]["..index.."] = "..salesTable[index]);				end			end		end				database.version = 30002;		debugPrint("AHSales upgraded to 30002");	endend--------------------------------------------------------------------------------- Clears the database-------------------------------------------------------------------------------function clearDatabase()	BeanCounterRealmDB.version = CURRENT_DATABASE_VERSION;	BeanCounterRealmDB.players = {};	BeanCounterRealmDB.pendingBids = {};	BeanCounterRealmDB.completedBids = {};	BeanCounterRealmDB.purchases = {};	BeanCounterRealmDB.pendingAuctions = {};	BeanCounterRealmDB.completedAuctions = {};	BeanCounterRealmDB.sales = {};	debugPrint("Reset Database");end--------------------------------------------------------------------------------- Gets a player's name-------------------------------------------------------------------------------function getPlayerName(id)	if (id ~= nil and id <= table.getn(BeanCounterRealmDB.players)) then		return BeanCounterRealmDB.players[id];	end	return "Unknown Player";end--------------------------------------------------------------------------------- Gets a player's id-------------------------------------------------------------------------------function getPlayerId(name, create)	if (name ~= nil) then		for id in BeanCounterRealmDB.players do			if (BeanCounterRealmDB.players[id] == name) then				return id;			end		end		if (create) then			debugPrint("Adding player "..name.." to the database");			table.insert(BeanCounterRealmDB.players, name);			return table.getn(BeanCounterRealmDB.players);		end	end	return nil;end--------------------------------------------------------------------------------- Gets the current player's id-------------------------------------------------------------------------------function getCurrentPlayerId()	return currentPlayerId;end--------------------------------------------------------------------------------- Copies the item records from one table to another.-------------------------------------------------------------------------------function copyItemRecords(source, destination)	if (source and destination) then		for item in source do			-- Get the source item table.			sourceItems = source[item];			if (table.getn(sourceItems) > 0) then				-- Get or create the destination item table.				destinationItems = destination[item];				if (destinationItems == nil) then					destinationItems = {};					destination[item] = destinationItems;				end				-- Copy from the source to the destination table.							for index in sourceItems do					table.insert(destinationItems, sourceItems[index]);				end			end		end	endend--------------------------------------------------------------------------------- Converts boolean into a numeric string.-------------------------------------------------------------------------------function stringFromBoolean(boolean)	if (boolean == nil) then		return NIL_VALUE;	elseif (boolean) then		return "1";	end	return "0";end--------------------------------------------------------------------------------- Converts a numeric string into a boolean.-------------------------------------------------------------------------------function booleanFromString(string)	if (string == NIL_VALUE) then		return nil;	elseif (string == "0") then		return false;	end	return true;end--------------------------------------------------------------------------------- Converts number into a numeric string.-------------------------------------------------------------------------------function stringFromNumber(number)	if (number == nil) then		return NIL_VALUE;	end	return tostring(number);end--------------------------------------------------------------------------------- Converts numeric string into a number.-------------------------------------------------------------------------------function numberFromString(number)	if (number == NIL_VALUE) then		return nil;	end	return tonumber(number);end--------------------------------------------------------------------------------- Converts a string into a nil safe string (nil -> "<nil>")-------------------------------------------------------------------------------function nilSafeStringFromString(string)	if (string == nil) then		return NIL_VALUE;	end	return string;end--------------------------------------------------------------------------------- Converts a nil safe string into a string ("<nil>" -> nil)-------------------------------------------------------------------------------function stringFromNilSafeString(nilSafeString)	if (nilSafeString == NIL_VALUE) then		return nil;	end	return nilSafeString;end--------------------------------------------------------------------------------------------------------------------------------------------------------------function debugPrint(message)	BeanCounter.DebugPrint("[BeanCounter.Database] "..message);end--------------------------------------------------------------------------------- Public API-------------------------------------------------------------------------------BeanCounter.Database = {	Load = loadDatabase;	Clear = clearDatabase;	GetPlayerName = getPlayerName;	GetPlayerId = getPlayerId;	GetCurrentPlayerId = getCurrentPlayerId;	StringFromBoolean = stringFromBoolean;	BooleanFromString = booleanFromString;	StringFromNumber = stringFromNumber;	NumberFromString = numberFromString;	NilSafeStringFromString = nilSafeStringFromString;	StringFromNilSafeString = stringFromNilSafeString;};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -