view Plugins/ItemCountAddons/DataStore (current account only).lua @ 176:26c750a10b14

Renamed Inventorium debug channel to IMDebug (so it?s easier to recognize only IM changes, not from other addons), write /im d to register this new channel. Implemented stock alerts. Added ?don?t alert at characters? option which allows you to track groups at characters without being bothered about low stock. You can change the speed of the stock alert at the extra config tab.
author Zerotorescue
date Sun, 30 Jan 2011 15:39:18 +0100
parents 08b887885bd5
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;
		
		-- Process all charracters on this account (GetCharacters defaults to THIS_ACCOUNT)
		for characterName, character in pairs(DataStore:GetCharacters(realm, nil)) 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
		
		local guilds = {};
		
		-- Process all accounts
		for accountName in pairs(DataStore:GetAccounts()) do
			-- 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 (current account only)", GetTotalCount, GetCharacterCount, IsEnabled, nil, GetGuildNames, SetGuildState);
	
end