In other news I just moved into college, and am miles away from a computer with UDK on it (which really ticks me off). So in the hours of free time that I have with nothing but a stupid Mac to do research on, I have a lot of time to think of ways to start an online game service.
At the moment, the most commonplace solution seems to be a TCP/IP link using Unreal Engine’s built-in features: http://udn.epicgames.com/Three/TcpLink.html. One can use this solution to build a working database on an external server, like in this tutorial: http://www.alexander-fisher.com/?cat=8, entitled “TCPlink: Talking to an Online Database“.
However, there are obvious problems with this, the foremost being that you actually have to HAVE an online database set up to get this to work. I don’t know about you, but for me this would certainly be an expensive and time-consuming process. The other solution, using UDK’s built-in Steamworks, also requires sending money to Valve. Boo.
But one solution still remains. You see, you can automatically turn any PC running UDK into a server simply by going to Multiplayer –> Host Game, and opening the UDK backend ports. It would also help to open DefaultEngineUDK.ini and setting bEnableSteam=false in the [OnlineSubsystemSteamworks.OnlineSubsystemSteamworks] section to disable automatic Steam support. According to forums, this “turning UDK into a server” currently is only stable for LAN.
However, the implications are profound. Building off of the save system I described in an earlier post: https://willyg302.wordpress.com/2011/08/09/a-better-way-to-save-games/, one can simply label variables to be replicated in MyGame.uc that would also be saved in the gamestate (such as usernames and win/loss rankings). One could also create a second custom save object that would handle global data (to be used only by the server). For example, this save object would include a dynamic array holding all usernames of all players currently playing the game.
Thus, clients would draw data from their save states and replicate them in-game to the server. The server would save the data in its own save state, then replicate important info (such as # of current players) back to the client.
In principle it’s an easy system to implement, but there are many difficulties that must be dealt with before such a thing actually works. But it IS better than what UDK offers now…or at least will be, once I actually get to code it.