Zerotorescue@157: do Zerotorescue@157: local disabledGuilds = {}; Zerotorescue@157: Zerotorescue@157: local function GetGuildNames() Zerotorescue@157: local guilds = {}; Zerotorescue@157: Zerotorescue@157: local realm = GetRealmName(); Zerotorescue@157: Zerotorescue@157: -- Process all accounts Zerotorescue@157: for accountName in pairs(DataStore:GetAccounts()) do Zerotorescue@157: for guildName, guild in pairs(DataStore:GetGuilds(realm, accountName)) do Zerotorescue@157: Zerotorescue@157: if disabledGuilds[guildName] then Zerotorescue@157: guilds[guildName] = false; Zerotorescue@157: else Zerotorescue@157: guilds[guildName] = true; Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: end Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: return guilds; Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: local function SetGuildState(guildName, state) Zerotorescue@157: if guildName and type(guildName) == "table" then Zerotorescue@157: disabledGuilds = guildName; Zerotorescue@157: else Zerotorescue@157: if not state then Zerotorescue@157: disabledGuilds[guildName] = true; Zerotorescue@157: else Zerotorescue@157: disabledGuilds[guildName] = nil; Zerotorescue@157: end Zerotorescue@157: end Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: local function GetTotalCount(itemId) Zerotorescue@157: local realm = GetRealmName(); Zerotorescue@157: Zerotorescue@157: local totalCount = 0; Zerotorescue@157: Zerotorescue@157: local guilds = {}; Zerotorescue@157: Zerotorescue@157: -- Process all accounts Zerotorescue@157: for accountName in pairs(DataStore:GetAccounts()) do Zerotorescue@157: -- Process all charracters Zerotorescue@157: for characterName, character in pairs(DataStore:GetCharacters(realm, accountName)) do Zerotorescue@157: -- Get only useful info (currency / gear shouldn't contain the stuff we are interested in) Zerotorescue@157: local bag, bank = DataStore:GetContainerItemCount(character, itemId); Zerotorescue@157: bag = (bag or 0); bank = (bank or 0); Zerotorescue@157: local auctionHouse = DataStore:GetAuctionHouseItemCount(character, itemId) or 0; Zerotorescue@157: local mail = DataStore:GetMailItemCount(character, itemId) or 0; Zerotorescue@157: Zerotorescue@157: totalCount = totalCount + bag + bank + auctionHouse + mail; Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: -- Process all guilds Zerotorescue@157: for guildName, guild in pairs(DataStore:GetGuilds(realm, accountName)) do Zerotorescue@157: if not guilds[guildName] and not disabledGuilds[guildName] then Zerotorescue@157: -- We don't want itemcounts from a single guild to be counted twice, so first to present data wins Zerotorescue@157: Zerotorescue@157: guilds[guildName] = true; Zerotorescue@157: Zerotorescue@157: local guild = DataStore:GetGuildBankItemCount(guild, itemId) or 0; Zerotorescue@157: Zerotorescue@157: totalCount = totalCount + guild; Zerotorescue@157: end Zerotorescue@157: end Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: return totalCount or -1; Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: local function GetCharacterCount(itemId) Zerotorescue@157: local character = DataStore:GetCharacter(); Zerotorescue@157: Zerotorescue@157: local bag, bank = DataStore:GetContainerItemCount(character, itemId); Zerotorescue@157: bag = (bag or 0); bank = (bank or 0); Zerotorescue@157: local auctionHouse = DataStore:GetAuctionHouseItemCount(character, itemId) or 0; Zerotorescue@157: local mail = DataStore:GetMailItemCount(character, itemId) or 0; Zerotorescue@157: Zerotorescue@157: return bag, bank, auctionHouse, mail; Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: local function IsEnabled() Zerotorescue@157: return (DataStore and DataStore.GetContainerItemCount and DataStore.GetAuctionHouseItemCount and DataStore.GetMailItemCount); Zerotorescue@157: end Zerotorescue@157: Zerotorescue@157: IMRegisterItemCountAddon("DataStore (all accounts)", GetTotalCount, GetCharacterCount, IsEnabled, nil, GetGuildNames, SetGuildState); Zerotorescue@157: Zerotorescue@157: end