Remember, Direct3D and OpenGL are only API's to the graphics driver. The best API is dependant on the driver. If the driver supports both API's, there would theoretically be no difference. But i always recommend, to write your engine to support both, then you are on the safe side that your game runs on almost every 3D accelerator. But if you don't have the time or resources, stick to Direct3D for games, as Direct3D is mostly supported by the most windows graphics drivers. Fx some Intel graphics cards have got bad support for OpenGL.
DirectPlay? Does that still exist? If it does, forget it. It is depraced, and it only supports up to 32 players.
If you have 20.000 players, i would recommend to write your own server. Then make use of an SQL server for the account data, inventory, player ip's etc. and then make the clients communicate with each other peer2peer. The SQL server then provides the client ip's, and then your client decides which other clients it should request movements and other events from.
If anyone else have got some corrections, feel free to correct me!