The first thing you must implement is your scripting system and message system for every object in the world. As nvoigt said you must be able to quickly access all objects and I'll add to that by saying you must also be able to quickly manipulate objects.
A good system is a message based system because by combining messages and using queues much like Windows you can control every aspect of every object.
Code:
class Script;
class Object;
class ObjectContainer;
class Script
{
ObjectContainer m_pObjectManager;
...
void Encode();
void Decode();
void Compile();
void Translate();
void RouteToObject();
...
};
class Object
{
friend class ObjectContainer;
...
//Default handler
void MsgProc(DWORD msgID,Object *ptrObject);
};
Something like this. The script class translates the script, and converts the object ID used in the script to a CObject pointer or perhaps 2 depending on the script function at hand. Then it sends a message to the MsgProc of the Object or you can send the message to a message router system which then passes it on to the object. The object then is responsible for performing the action required or it can use default processing as defined in the base class for Object.
Using messages takes away the hard-coding aspect and makes your system a lot more flexible. You can add messages to a queue, send messages from object to object, etc. With this system it is much easier to test, debug, and write demos for your project. The entire game engine comes to life. It is a very powerful thing to be able to write a script function and have it execute just as you wrote it in the actual game engine. Quite nice.
Shakti and myself are working on just such a system. Perhaps if you want experience with this type of thing, you can join us in bringing our game to life with the script. Scripts are encoded as word opcodes much like assembly language opcodes, except those are byte opcodes. If you want more info you will have to join the project. It would be good experience and we would let you use the script system and modify it for your needs later. This game is a single player game, but trust me man, you want to do single player before you even attempt to tackle an MMORPG. I think you will find that we have a lot to show you and you have a lot to learn. We didn't learn this overnight, and we are still learning. You won't learn it overnight, and you will always be learning as well.
So what do you say? Join or not?
And BTW the database for an MMORPG might be SQL, but in-game I'm sure they are using a custom created data system that is much faster. Now when you exit I'm sure they stream game state information out to SQL and back in when you load, but I doubt they do this in game. Speed is critical to syncing and thus giving everyone an enjoyable experience instead of a lag fest.