If we take World of Warcraft as an example, but again; it doesn't have to be this big, but it's a game every one knows and it's easy to explain and refer to. As far as I am aware player movement in these types of games are done locally on each client, the client then reports it's position at set intervals to the server which then verifies that the player is within the world bounds.
Now the problem (in my mind, at least) rises when you have a really complex world that has a lot of mountains, hills, chasms, houses, caves, etc. How does the server verify that the player is in the bounds of the world? These are the options I've come up with, and why I think the might not work.
- Using a mesh collider, is not feasible due to the amount of players (it would be to expensive on the server to keep verifying the position of the players against a mesh collider, or at least I think).
- Using simple bounding volumes makes it feel like the world would get to coarse (how would you use an AABB or Spherical collider for terrain that has valleys and mountains for example?)
- Using a navmesh, would also make the world to coarse, although less so then simple bounding volumes but how would you deal with being able to jump on and stand on a rock with a navmesh for example, if there are, literally, millions of rocks in the world. You're probably still going to need a navmesh for NPC navigation, but I feel it would be to coarse for player movement.
- Using a world heightmap, that holds the world height at some resolution, maybe every 1.0 units, this would work for open terrain but would be almost impossible to make work for houses, caves, etc.
The only feasible option (in my mind, with limited knowledge) I've come up with is to use AABB bounding volumes which contain a part of the world, and make sure the player character is completely contained in one (or more) of the AABBs at all times and then just trust the player position as long as it's inside the AABB volume.