Persistent world with UE4 (not an MMO)

The reason most MMOs don’t allow the user to affect the world permanantly, is exactly that it’s really hard to provide all those modifications to a player when they log on!

One option would be to use the built-in savegame system. Mark the players themselves (and their inventory) as NOT SAVED, and save all the actors that are permanent in the world.
Now, saving is kind-of expensive and takes a while, so it will stop world processing for a short time when it happens, so you probably only want to do it once in a while (every 15 minutes?)
Once the file is saved, you might want to use some other script/feature to copy a backup of the save file to somewhere else, so you can restore if the server dies.

The other option is to go the virtual world approach, and write a separate database record every time the player affects the world. The state of the world is then derived by re-running all of those records forward in time. There is no support built-in to any game engine I know (except the virtual-world engines/systems) for this, because it’s highly context dependent.
You will generally have to apply two kinds of optimizations to make this viable:

  • Player will only get world modifications within some area around where they are – say, 500 meters or so? If you support burning down entire forests, and have sight lines from a mountaintop into that forest, your radius needs to be very big, so don’t support that!
  • Changes will happen in some order (sequence) and have a sequence number. Players will cache data they received until sequence X, and server will only send changes that happened since sequence X when the player logs on. Server may even “bake” the end result of changes until some point Y, and provide as a patch file, when the user logs on (once a day? once a week?)

In general, though, persistent world changes are REALLY HARD and require heavy duty attention to the interaction between implementation, gameplay/design, networking, and persistence.
If you’ve only developed in JavaScript before, chances are you haven’t really learned all the tricks of low-level optimization that need to be applied to make these things tractable on typical user network/hardware. But it’s super fun to learn this stuff, so I envy your future :slight_smile: