view Plugins/ItemCountAddons/DataStore (all accounts).lua @ 249:fa21e06ca268 tip

Added tag v1.0.1-ALPHA for changeset 50aece0904ec
author Zerotorescue
date Tue, 08 Mar 2011 12:07:24 +0100
parents e136c99fe5bb
children
line wrap: on
line source
do
	local disabledGuilds = {};
	
	local function GetGuildNames()
		local guilds = {};
		
		local realm = GetRealmName();
		
		-- Process all accounts
		for accountName in pairs(DataStore:GetAccounts()) do
			for guildName, guild in pairs(DataStore:GetGuilds(realm, accountName)) do
			
				if disabledGuilds[guildName] then
					guilds[guildName] = false;
				else
					guilds[guildName] = true;
				end
				
			end
		end
		
		return guilds;
	end
	
	local function SetGuildState(guildName, state)
		if guildName and type(guildName) == "table" then
			disabledGuilds = guildName;
		else
			if not state then
				disabledGuilds[guildName] = true;
			else
				disabledGuilds[guildName] = nil;
			end
		end
	end
	
	local function GetTotalCount(itemId)
		local realm = GetRealmName();
		
		local totalCount = 0;
		
		local guilds = {};
		
		-- Process all accounts
		for accountName in pairs(DataStore:GetAccounts()) do
			-- Process all charracters
			for characterName, character in pairs(DataStore:GetCharacters(realm, accountName)) do
				-- Get only useful info (currency / gear shouldn't contain the stuff we are interested in)
				local bag, bank = DataStore:GetContainerItemCount(character, itemId);
				bag = (bag or 0); bank = (bank or 0);
				local auctionHouse = DataStore:GetAuctionHouseItemCount(character, itemId) or 0;
				local mail = DataStore:GetMailItemCount(character, itemId) or 0;
				
				totalCount = totalCount + bag + bank + auctionHouse + mail;
			end
			
			-- Process all guilds
			for guildName, guild in pairs(DataStore:GetGuilds(realm, accountName)) do
				if not guilds[guildName] and not disabledGuilds[guildName] then
					-- We don't want itemcounts from a single guild to be counted twice, so first to present data wins
					
					guilds[guildName] = true;
					
					local guild = DataStore:GetGuildBankItemCount(guild, itemId) or 0;
				
					totalCount = totalCount + guild;
				end
			end
		end
		
		return totalCount or -1;
	end
	
	local function GetCharacterCount(itemId)
		local character = DataStore:GetCharacter();
		
		local bag, bank = DataStore:GetContainerItemCount(character, itemId);
		bag = (bag or 0); bank = (bank or 0);
		local auctionHouse = DataStore:GetAuctionHouseItemCount(character, itemId) or 0;
		local mail = DataStore:GetMailItemCount(character, itemId) or 0;
		
		return bag, bank, auctionHouse, mail;
	end
	
	local function IsEnabled()
		return (DataStore and DataStore.GetContainerItemCount and DataStore.GetAuctionHouseItemCount and DataStore.GetMailItemCount);
	end
	
	IMRegisterItemCountAddon("DataStore (all accounts)", GetTotalCount, GetCharacterCount, IsEnabled, nil, GetGuildNames, SetGuildState);
	
end