Mercurial > wow > inventory
diff Plugins/ItemCountAddons/DataStore (all accounts).lua @ 157:e136c99fe5bb
You can now select which guilds to include in the item count when selecting an item count supporting this.
Renamed DataStore (with guilds) to ?all accounts?.
Removed DataStore (without guilds) option.
author | Zerotorescue |
---|---|
date | Sat, 22 Jan 2011 19:24:48 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Plugins/ItemCountAddons/DataStore (all accounts).lua Sat Jan 22 19:24:48 2011 +0100 @@ -0,0 +1,91 @@ +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