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