So after reading thousands of posts on how to handle collision server side I have decided to use the bounding box technique. After all for a MMO really all collisions are made between players and static objects. No npc to player or player to player collisions etc.
So what does this mean? Objects are a bunch of boxes.
Example of server side object
1 Main bounding box which surrounds the entire object.
Coordinates of the object center
Horizontal Distance Max(x,y)
Vertical Distance Max (z)
List of Boxes
Count of objects
region identifier
Box Example:
Vector3 point1 (x,y,z)
Vector3 point2 (x,y,z)
Horizontal Max Distance
Vertical Max Distance
Vector3 Center Point (x,y,z)
Each object can contain multiple boxes that make up its shape. Like a house for example with just a door, no windows and no chimney would have 10 boxes and 1 box around it all. Instead of checking each individual box for every object the player must touch or try to enter the main bounding box.
Basically each movement the server compares the players position to each object in said region. If the player is x distance away from object A and is less than or equal to it then do further checking. If object is too high or too steep for player to get on it then stop the player. Otherwise let the player go on the box. If a player tries to jump on a table or something make sure that the height of said table is less than or equal to players jump height. If not then stop the player from getting on it.
Hmm that sounds like a lot of work if you do that for 300 players 10 times a second?!?!? Well basically the client wont encounter many of the boxes (At least server side). Client side the colliders will be slightly bigger and stop collision client side. So if the client can do it then why does the server have to try? Cheaters. Client side will restrict movement just enough many server side checks shouldn't have to happen. Really the only thing server side will have to check against collision wise most of the time will be whats under a players feet and what a player can jump on along with terrain. 80% of server side collisions will just be there if a client tries to cheat. Think of it this way... You have a chess board right? Server has colliders just outside the board around the whole thing. The client has them just barely on the inside around the whole thing. The client side colliders should stop the player just before they reach the server side colliders. If a client finds a way around the client side ones the server colliders kick in and basically say NOPE. This prevents much of the load actually taking place but its there if needed. This means the server really only has to compare against terrain and object height.