Okay, here's my opinion, for what it's worth.
****
1. Stop working on a huge world with 23 races and 2000 items and 5000 square miles of terrain. If you correctly code a mini-MMORPG, then you will be able to scale it up in size.
****
2. Develop you core libraries. These include - interface, entity UDTs, core UDTs, animation handling, sound handling, timer based movement handling. I wrote replacement commands for things like 'move object', because they simply are not powerful enough to satisfy the demands of an RPG.
****
3. Divide every task into a mini task. Making minor changes to 7000 lines of code and continually recompiling makes the job just impossible. I use my core shell (2.) to start every subtask. I can quickly develop and compile this mini programs, and I can drop the code into my main project because it's structured the same. Sub tasks I've done include - animation, opening and closing doors, texture animation and rotations, HUD and GUI, etc.
****
4. The basic RPG must have several basic elements to be considered an RPG, online or not. Some of these are - NPCs, items and inventory, magic, combat, world objects and entities, and basic automatic behaviors that are independent of quests.
****
For an online game, the game clients shouldn't handle any of the Character movement. This should all be handled centrally by the server. It should automatically generate NPC locations and report those locations to the clients. Input requests should be made from each player's client and the server should process the request and report back the resulting position of the character. And of course, you need to interpolate positions between server position resets. It should also be done by a console application, maximizing the server's capabilities.
****
5. I think that a logical first step is to create a separate control console application. It would handle all of the NPC AI, player positions, etc. For example, your console app could be running DarkAI, and your clients wouldn't need it, as they don't control NPC movement. You should set it up so that the console application writes the information to a file, with a delay similar to what you would experience over the internet. When you can make your client communicate successfully with the control app, then you're ready to make it work online, not before.
****
Remember, in the end you'll need a dedicated server running your console application in order to work. There simply isn't any other way. P2P is unacceptable unless you're just challenging someone to a match of some kind, and then you still need a central server to connect people without them having to type in their IP addresses. Most people don't grasp this when they set off to make an online game.
So, to sum it all up -
1. Make an RPG that does everything you want it to, without online capability. 2. Scale that into two separate applications, control and client, communicating between them to process client input and server output.
3. Separate the two applications onto two different computers and use the internet to communicate the console data between them.
Then viola! You'll have your online game.
Come see the WIP!