Programmers! Can you explain the stash thing to me?

That’s exactly how it’s done and can only be easily spotted when the loot numbers are extreme.

1 Like

There is a limited amount of memory in your PC’s video card, and in order to quickly load things they store everything (including the stash of other players and assets of every zone you visit) into memory. A lot of people’s PCs simply don’t have that much memory.

The correct fix to this is to dump things that have gone unused out of memory, and load more things from server storage (which is the database) when it is needed. They seem to be afraid that their servers can’t handle the calls they would need to make to fix the problem.

This concerns me, as it means the game is in big trouble if there is no solution to this massive problem.

Yeah the reason there is an issue is because they load all the assets into RAM so they don’t have to access them from the hard drive.

They should probably look at this and load them more slowly or something into RAM. They are just loading them all too quickly for older GPUs and PCs.

It’s a client issue mostly.

If you’ve ever tried to parse a long JSON it can really slow your PC down.

1 Like

Full-time, 6-figure, programmer here. The reason why you load every player’s stash nearby is because it’s to prepare for an upcoming feature where you can pickpocket other player’s items.

1 Like

I’ll give a live example. Look at Ark: Survival Evolved. Look at the PVE servers where people have TONS of data stored from bases to dinos. The servers LAG when you play. It affects EVERYONE, the at the same time, on the server. Too much data makes gameplay impossible. Not storing data on a massive scale frees up memory capacity to keep playing fluidly.

If the servers lag, people will die.

This is exactly my thoughts. I can’t see any other reason other than server bandwidth.

Here’s an easy explanation:

  1. We make the single player functionality and realize that vendors want to consider both what’s in the player’s inventory and their stash (for things like gem upgrades)

  2. We make multiplayer and realize that we want to preload the items in a player’s inventory when they join or pick up an item, so that we can display the item on their character

  3. Preloading the inventory also preloads the stash because they are treated the same because of 1.

And voila, stash tabs create network overhead.

So the question is not, “How could they possibly do this?” But rather, “Why have they not prioritized fixing this?”

And the answer to the second question is probably, “They convinced themselves that 4 would be enough to start and they could trickle out more as incentives for players as the player base shrunk post-launch.”

2 Likes

It has nothing to do with bandwidth. It has to do with NUMBER OF CALLS.

The two things are not the same.

The files being transferred are just TEXT people. They are tiny.

You might not be aware but even routers have a limit on how many connections they can handle. Many small requests will brick a router and cause it to start dropping connections.

1 Like

I sure have. I had an issue at a former job once where a five minute database call was taking several hours and the root cause was a combination of this and the software trying to make a call to save each field one by one. They needed to save 20k rows, lmao.

Whhhhrrrrrrrrrrrr
Wilhelm Scream

1 Like

Fallout 76 also has problems with server consistancy due to too many items from people’s stashes loaded onto the server at once

I didn’t mean network bandwidth. But yes, wrong wording.

Was referring to the physical server memory/CPU bus.

It’s not memory either. It’s literally called I/O for inputs and outputs.

Many devices have I/O limits for number of connections. And many software interfaces.

Ultimately, they need to find a fix to the strain they are putting on client computers and they need to do it very soon. I really prefer to not worry about my PC crashing every seasonal release.

I’m even considering buying a new graphics card just to help with this issue.

Edit: I quoted the wrong person, I am still talking about the asset problem for graphics cards, not the server problem.

Memory does technically play a role in IO performance. Context switches, concurrency, etc.

Yeah but not main memory.

To the programmers responding and my general sense is you cant really speculate/know thank you and appreciate the input.

My limited understanding of software development makes me feel its amazing any of it works at all. The one software engineering class I took the professor always liked to bash microsoft word and show how its such a mess yet still widely in use as a standard.

TLDR thank you

2 Likes

I 2nd this. Im actually working on a little hobby project right now and I am barely scraping by on tutorials and online help. Holy crap… lol. Oh also, Im storing everything in JSON and after reading the above Im terrified my project is going to go up in flames when it gets larger lol

1 Like

Partitioning your database can help a lot. That way when you call something you can use extensions and the program doesn’t have to search a huge list. For instance, Ext.Entity.GetCharacter, Ext.Entity.GetItem.

1 Like

In Unreal Engine, inventory can be placed in the character blueprint. While D4 uses a bespoke Blizzard engine, they may have implemented something similar, including stash.

It makes sense from the perspective of a single player game because it puts your stash in RAM when your character loads. Hit your stash and all the data is already in memory so there is no delay. However, it would mean that all that stash data gets transmitted for every other character you encounter when all you really need to see them in the game world is the list of assets to render the character and their coordinates and trajectory.

Classically games run combat and coordinates over UDP, which is very efficient. If a coordinate update is lost, the next one will get the character close enough. A series of lost packets and you might see your character jump when the position update arrives. Data like gear and stash often goes over TCP, which handshakes and guarantees all the packets arrived. A blast of TCP data can cause packet loss in UDP and guess what the result is? The game world stutters or lags.

In an MMO character info is minimal, and then there is a pause if you inspect another character, trade, or access your bank/stash. That’s the item data coming across on TCP/IP.

While this is a bit speculative, it fits what we’re seeing and the Blizzard dev’s information. They will have to slim down the character data you receive to an MMO-style minimum and move the stash data, probably triggering it to load when you hit the chest.