Plans for UberInventory 2.0
The next version of UberInventory will be version 2.0. To make it a bit special I want to add a functionality which I have been wanting to implement ever since I started working on UberInventory back in September/October 2007.
Here is a short list of some of the things I am planning to implement
- Highlight bags, bagslot when hovering over an item within the UberInventory frame to make it easier to locate items you are searching for. Here are some mockup pictures of how it might look like
Normal

Highlighted

- Improve look-n-feel of the settings frame (border around all of setting options within a group instead of just the indent)
Currently I am looking into all the things that need to be tracked additionally and what code is required to do some sort of highlighting.
It will be ready when it is ready, in other words I haven’t set a date when to release the new version. Hmm, I am starting to sound like Blizzard Entertainment themselfs.
Optimizing memory usage in LUA
Couple of days ago I received a message on curse.com about the memory usage of UberInventory. The general statement was that UberInventory uses a lot of memory. We were aware of this issue, but we had never given it much attention. But after this message we could ignore it no longer.
We have been reading several articles on the internet on how to optimize memory usage, performance and garbage collection using LUA. All those documents basically state that using locals as much as possible improves performance when accessing data structures and when storing a lot of data most of the times it is better to create larger tables instead a lot of smaller tables. This some times leads to a little more unreadable data structures but it keeps garbage generation to a minimum and less memory is needed to store the data.
Since UberInventory contains a lot of static data (pricing and recipe data) our first focus was to see if and how we could optmize those data structures.
The following results have been generated using LUA 5.0.1 and we have used the gcinfo() function to produce the numbers.
Orignal version of UberInventory_prices.lua
| Dynimac Memory |
Garbage threshold |
|
|---|---|---|
| Before | 1531 | 3062 |
| After | 4189 | 6124 |
| Delta | 2658 | 3062 |
UBI_Prices = {
[25] = {nil,7},
[35] = {nil,9},
[36] = {nil,7},
};
Modified version of UberInventory_prices.lua
| Dynimac Memory |
Garbage threshold |
|
|---|---|---|
| Before | 1060 | 2121 |
| After | 2500 | 2121 |
| Delta | 1440 | 0 |
UBI_Prices_Buy = {
[38] = 1,
[39] = 5,
[40] = 5,
};
UBI_Prices_Sell = {
[25] = 7,
[35] = 9,
[36] = 7,
};
As you can see with the modified version there is big drop in the total memory that is needed to store the data and the structure does not create any additional garbage.
Changes made to UberInventory_prices.lua
- Split data into two tables, one for buy prices and one for sell prices
Original version of UberInventory_recipes.lua
| Dynimac Memory |
Garbage threshold |
|
|---|---|---|
| Before | 961 | 1921 |
| After | 3160 | 3842 |
| Delta | 2199 | 1921 |
UBI_Creatures = {
[66] = { name='Tharynn Bouden', area='Elwynn Forest' },
[340] = { name='Kendor Kabonka', area='Stormwind City' },
[450] = { name='Defias Renegade Mage', area='Westfall' },
};
UBI_Quests = {
[22] = { name='Goretusk Liver Pie', area='Westfall' },
[38] = { name='Westfall Stew', area='Westfall' },
[90] = { name='Seasoned Wolf Kabobs', area='Duskwood' },
};
UBI_RecipeDrops = {
[4213] = { {8716,1}, {12396,1} },
[4408] = { {7800,1} },
};
Modified version of UberInventory_recipes.lua
| Dynimac Memory |
Garbage threshold |
|
|---|---|---|
| Before | 636 | 1272 |
| After | 1230 | 1272 |
| Delta | 594 | 0 |
UBI_Creatures = {
[66] = 'Tharynn Bouden|Elwynn Forest',
[340] = 'Kendor Kabonka|Stormwind City',
[450] = 'Defias Renegade Mage|Westfall',
[590] = 'Defias Looter|Westfall',
};
UBI_Quests = {
[22] = 'Goretusk Liver Pie|Westfall',
[38] = 'Westfall Stew|Westfall',
[90] = 'Seasoned Wolf Kabobs|Duskwood',
};
UBI_RecipeDrops = {
[4213] = { '8716:1', '12396:1' },
[4408] = { '7800:1' },
};
Here you see the same results, huge drop and no garbage. These changes combined resulted into a decrease in memory of between 2 and 3 MB just for the static data.
Changes made to UberInventory_recipes.lua
- For creatures and quests combine the name and area into one text field instead of using a table structure
- For drop info combine mob id and drop rate into one text field instead of using a table structure
All the changes described in this post are implemented for UberInventory 1.6.
The next step will be digging into the data structures of the dynamic data stored within UberInventory.lua (WTF\Account\…\SavedVariables) and optimize those for memory usage and garbage.
UberInventory 1.6
We are currently working on UberInventory 1.6. At the time of this writing we have not yet set any release date.
Following is a list of tasks we are working on;
- Fix issue that occurs on fresh installs (or joining a new guild) of UberInventory when visiting the guild bank
- Redesigning the settings module
- Adding more options to customize the behavior of UberInventory
- Improving overall performance (specifically determine usability of items)
- Removing obsolete code
Upcoming version of UberInventory
Over the time we have received requests from users that they would really like to be able to search across multiple characters, guildbanks or all the data that has been collected.
Within version 1.3/1.4 of UberInventory we started to make some of the necessary changes to the way we build up the user interface filters and how they are linked back to the data structures used for storing information on items. Over the last couple of days we have been working on making the modifications necessary to also make it happen from a coding point of view.
The new location filter will look as follows

All items – Combination of all characters and all guildbanks, including the current character
Maymayhem – My current logged in character, will display items from all locations
Bag – Show items stored in the bags of the current logged in character
Bank – Show banked items of the current logged in character
Keyring – Show items stored in the keyring of the current logged in character
Mailbox – Show items stored in the mailbox of the current logged in character
Equipped – Show equipped items of the current logged in character
All Guildbanks – All guildbanks combined
The Mystics – Items stored in The Mystics guild bank
Wolf Pack – Items stored in the Wolf Pack guild bank
All Characters – All characters combined, including the current logged in character
Drexore – Items from the Drexore character
Galure – Items from the Galure character
etc.
This preview demonstrates the new functionality within the UberInventory interface

At the moment there are still some issues that need to be tackled;
- Show correct cash totals when selecting combi items (All items, All Guildbanks and All Characters)
- Display proper info within tooltips
- Do some in-game testing
- Warn if there are 50 messages stored in the mailbox. WoW only show 50 mails even if you have more mails waiting.
We are making good progress and are hoping to be able to provide you all with a new version of UberInventory before Christmas.
The new version will also contain an updated version of the static data for prices and recipe data, and now contains information on book related items (like Gift of the Wild).
New version available for BagTips, MailTips and UberInventory
New versions are now available for the following addons, all are updated for the most recent version of World of Warcraft (3.0.2)
BagTips (v 0.6)
MailTips (v 0.9)
UberInventory (v 1.1)
New versions have also been posted to curse.com
BagTips (v 0.6)
MailTips (v 0.9)
UberInventory (v 1.1)
For BagTips and MailTips only the .toc files have been updated, for UberInventory the following changes have been made
- Changed: Updated TOC for WoW 3.0.2
- Changed: Removed forced garbagecollecting (speed improvement)
- Fixed: Moved guildbank updates to separate handler to prevent disconnects due to high volume of addon messages being sent
- Fixed: Removed unused events (speed improvement)
- Added: Additional mailbox events are being monitored
- Added: Pending sales are now also recorded as actual cash stored in your mailbox
Preparing for Wrath of the Lich King (and 3.0.2)
Just finished a quick test with the three AddOns I have created (BagTips, MailTips and UberInventory) under Wrath of the Lich King.
The AddOns BagTips and MailTips work without the need of any modifications. UberInventory is in need of some changes due to the numerous documented and (sadly) undocumented changes. Most of the changes I have already implemented, but there are still some minor issues to be tackled.
I hope to have those issues sorted within the next couple of days.
When UberInventory passes the test of running fine in Wrath of the Lich King, new versions of all three AddOns will be made available on curse.com
Installing World of Warcraft – Wrath of the Lich King – PTR
To get Wrath of the Lich King I have spent the better part downloading and installing patches. Why don’t they just from time to time put up a new base download kit that includes of of the patches since then, would have made my life a lot simpler. How I had to do this;
- Download the downloader application (1 MB)
- Run the downloader (1.07 GB)
- Patch 3.0.2.8916 to 0.0.2.8962 (280 MB)
- Patch 3.0.2.8962 to 0.0.2.8970 (104 MB)
- Patch 0.0.2.8970 to 0.0.2.8982 (223 MB)
- Patch 0.0.2.8982 to 0.0.2.9014 (76 MB)
- Patch 0.0.2.9014 to 0.0.2.9038 (31.6 MB)
- Patch 0.0.2.9038 to 0.0.2.9056 (8.7 MB)
The downloading is fine, the only thing that is extremely annoying is that after each install you have to accept the TOS and EULA, just to notice there is an additional patch that needs to be downloaded and installed. Come on, really?!? Why not just first check if there is a download available (so before logging in) and apply any patches.
Okay, I know I am making a bit of a fus, but I just had to get this of my chest. Now I am fine :)
BTW, when logging into WotLK the authenticator linked to my account is not used. Not a big issue, since it is just on a test server using account that get wiped anyways, but it was a bit unexpected.
State of UberInventory
Lately I have received some notes from users that UberInventory seems to be causing World of Warcraft to respond slow when performing any inventory related activities (looting, visiting bank/guildbank). Also there was a post on UberInventory causing game sessions to be ended unexpectedly.
Over the last couple of weeks we have been mainly doing debug work to try to figure out what might be causing these issues. Here is what we have found so far
- After a visit to the guildbank data is sent over the guild channel to other guildies so they too can see what is in the guildbank without needing to visit the guildbank. Of course this only works when they too have UberInventory installed. For each unique item within the guildbank a message is sent, normally this works fine. Things start to go wrong when the World of Warcraft servers are slow, lag is higher than normal or your guild has a very well stocked guildbank. The message system in WoW has its limit.
- QuestGuru is causing a lot of additional events to be triggered in the game when looting any Quest item. One of these events (GUILD_ROSTER_UPDATE) was also handled by UberInventory
- The method currently used to keep data up to date for UberInventory needs refactoring
- After each update of the inventory garbage collection is performed trying to keep the memory footprint of UberInventory as low as possible
For some of the issues identified solutions have been implemented and are currently being tested.
- Instead of sending all of the messages instantaneously, the messages are added to a queue preventing the system from getting overloaded and causing game sessions to end
- The event GUILD_ROSTER_UPDATE is no longer tracked and handled by UberInventory
- Garbage collection is no longer forced by UberInventory, this is now totally up to WoW to decide when garbage collection is needed. What we can see so far the difference in memory used is about the same
Hopefully we will be able to post an update for UberInventory during this week.
Currently we have the following known issues
- When logging out of a character of leaving the game, the message ‘You are not in a guild’ sometimes appears
- When playing WoW from different platforms (Windows, Mac) using the same set of data (content of WTF folder) the “Days since last visit” reports a very high negative number.
- When you do not have access to all of the guildbank tabs, no data should be sent to other guildies
No timelines are set for these issues, but we will try to get these sorted as soon as possible.
Using the Blizzard Authenticator
For little over a week now I have been using my Blizzard Authenticator and it works nice and easy. Not as invasive I had anticipated, so that is great.
The process of linking the authenticator is easy, maybe a little too easy. When you link the authenticator to your account just only need to input the 10-digit code from the back of the authenticator and you are done. From that moment on you can only log into your account on the web or within the game using the authenticator.
I would have expected that I would be asked for a code from the authenticator so it can check if your are linking an authenticator currently in your possession. So make sure you double, or better yet triple, check the 10-digit code you enter on the webpage before hitting the submit button. Once linked without the proper code from the authenticator you will have to got through a lengthy process to get things undone.
Following are some (partial) screenshots on the process of linking the authenticator to your World of Warcraft account
Step 1) Login into you account page at Blizzard and choose ‘Blizzard Authenticator Security Token’

Step 2) Enter the 10-digit code of your authenticator

Step 3) Success message (hopefully)

After these steps your will be presented with the following entry form when logging into your account
World of Warcraft – webpage

World of Warcraft – Game client

Ordered my authenticator
Last night I finally ordered a Blizzard Authenticator, so I can finally more securely protect my World of Warcraft account.
Hopefully it will arrive some where at the end of this week or the beginning of next week.
To be continued…
