Jump to content
Posted 30 September 2012 - 10:53 AM
Posted 30 September 2012 - 12:23 PM
Posted 30 September 2012 - 01:06 PM
Posted 30 September 2012 - 08:24 PM
players can change most aspects of it
Posted 22 October 2012 - 01:11 PM
On UNIX, you can use fork() to spin off a "fixed" copy of whatever is in memory right now.
However, it sounds like you don't have the right data structures. The "modifiable" state of a world is unlikely to be 160 MB. Most games define "world data" as immutable state that doesn't need to get saved, plus mutable state for what the players can change. In addition, most MMO games will save all mutable state by each player, rather than in the world, which is why players can't affect the world like dig tunnels or cut trees etc. For games that allow the world to be mutated (Eve Online?) those games will still keep the amount of modifiable world state small, and sliced into sections (by system, by zone, etc.)
With this approach, the amount of data you need to save at any one time should be small, and can be done by collecting what you need into a memory buffer and doing an asynchronous write on that memory.
The main danger when saving players is one of item duplication and similar race conditions. For example, let's say my character is saved, then I trade a Flaming Sword of Fire to you, and then you are saved, and then the server crashes before it can save me again -- now there's an item duplication. Thus, things that matter for the economy (like trades) are typically implemented on a transaction-based database.
I open sourced my C++/iOS OpenGL 2D RPG engine :-)
See my blog: (Tutorials and GameDev)
Posted 29 October 2012 - 02:19 PM