Check out:
Gameinterface.* (h & cpp)
Code:
// Normally, when the engine calls ClientPutInServer, it calls a global function in the game DLL
// by the same name. Use this to override the function that it calls. This is used for bots.
typedef CBasePlayer* (*ClientPutInServerOverrideFn)( edict_t *pEdict, const char *playername );
This is looking good. But I can't implement the IServerGameClients interface. I get a lot of errors.
Edit: I got the interface implemented. Now to see how I can use it

.