I have a few ideas, that if not already in place, might at the very least give you some ideas of your own
- Only synchronize characters that are visible by the client. If two groups of people are on separate sides of the map, the client needn't sync with them. People standing behind you shouldn't need detailed updates either, just occasional rounded value XYZ coordinates every few seconds.
- Upon logging in, place a user within one of a few random 'dimentions' or 'instances' of a map, or to one that has their friends in it.
Bandwidth usage gets exponentially higher for every person who joins the web of currently synchronized clients, meaning everyone in such a position that they all need to exchange data with everyone else to keep synchronized.
Let's say, on average, each person is sending 1kb of data per minute to everyone else through the server.
The bandwidth usage could be expressed like ([number of users] X [number of users])
so, if each one was supposedly using 1kb a minute... Let's see what happens as additional players join.
2x2 = 2kb/m
5x5 = 25kb/m
10x10 = 100kb/m
15x15 = 225kb/m
20x20 = 400kb/m
25x25 = 625kb/m
30x30 = 900kb/m
So as you can see, splitting up players can have a HUUUGE impact on bandwidth. There's a reason people were telling you to move to another map. You could have NINE maps of 10 players for the same bandwidth as ONE map with 30 players!
- Look into the possibility of other volunteers willing to provide an additional server for the game. While setting up a server is no small matter, there's bound to be trustworthy individuals out there willing to give a helping hand, and having servers in different parts of the world could resolve some potential connection and lag issues.