For past few days I've been working on seemingly simple tiny project that would allow me to create a summary of guild stash activity for all members of the guild - who deposited how much, who withdrew how much, how it all looks like taking into account market prices and such.
However, I've reached the point where it seems like it's impossible to present any reliable data regarding Guild Stashes, simply because the very stash logs are already past being unreliable.
First of all, any currency that can stack past quantity of 1000 is being represented in the logs as a short string like for example "27.2K". One digit units, tens and even hundreds (due to unclear rounding) become absolute mystery at this point. It creates a situation where someone can take out certain quantity, be logged in the guild stash logs, but yet provide absolute zero information about amount of withdrew quantity, simply because it small enough. This makes tracking of currency such as Rogue's Marker absolutely unreliable.
But that's not all. Aside from the name of stash tab, logs don't provide any information regarding placement of an item. It might not sound like a big issue at first, but it's a huge issue as soon as one of your currencies gets capped and someone deposits this currency again as separate stack. Because vast majority of those logs don't appear as "added" or "removed" actions, but rather as "modified", the only way to calculate which action actually took place is to compare it with the last known quantity. And here comes the absolute deal breaker - you can't. As long as you assume there is only one location for an item it's pretty easy - check the difference between new value and last known value. However, as soon your currency gets capped and new slot is being filled, all data becomes garbage. Because it's under the same stash tab and has the exact same name, you are no longer able to tell what operation took place. You can't calculate the difference based on last and newest state, because you can't be sure which stack got modified at this point.
For example, we have 2x 2000 Scroll of Wisdom split into 2 slots.
Guild logs say that Scroll of Wisdom has been modified to 2010x quantity.
We can calculate the difference, we know that there are +10 Scroll of Wisdom.
Guild logs now say that Scroll of Wisdom has been modified to 1990x quantity.
And here the fun begins. Is the difference -10 Scroll of Wisdom, or -20 Scroll of Wisdom?
If it's the original untouched 2000 stack that got modified, its -10
If it's recently updated stack of 2010, then we got -20
There is literally no way to tell the difference at this point, and this mismatch will only pile up over time.
Guild stash logs are in dire need of some rework. It's unreliable, takes ages to generate, and can't be accessed via API.
But it would be rude for me to just complain, so there are few ideas how to improve the system.
- Cache generated logs on per day basis for some time. Generating new logs over and over again is a lose-lose situation for both sides. User needs to wait ages for generation, and server needs to generate it all over again. Just cache already generated logs, unless it's the current day, and keep it in the cache for around 10-15 minutes in case if user decides to regenerate it again or some API tries to.
- Remove "modified" action from logs. It's vague and unreliable. Keep only "added" and "removed" actions in the logs. You could even save few bytes of storage space by simply prefixing that information into quantity number with + or - (ie. "+4x Scroll of Wisdom", "-20x Scroll of Wisdom"). Even for items that don't stack, doing "+1x " and "-1x " is still saving some bytes compared to "added"/"removed"/"modified". With this change, tracking of currency placement is no longer an issue, because it doesn't matter which stack gets updates, as long as you clearly know the overall difference now.
- Display full quantity of an item. I can't see any benefit of only providing shortened version. Going with the example of Rogue's Markers that stack up to 50K, we're talking about the difference between displaying "49.9Kx" and "49999x". There is literally no difference size-wise between the two. Shortened form requires 3 symbols + dot + "K" = 5 symbols. Displaying full value ALSO requires 5 symbols, one per digit. There is no disk space benefit. In fact, there is only disadvantage of actually rounding numbers and formatting it to display as shortened string.