In the more recent versions of UDK, Epic Games was nice enough to include some code detailing how they handle achievements. If you want to check it out, just open up UTAchievementsBase.uc and UTAchievements.uc. The base file is especially nice because it gives a ridiculously generous amount of info on how to set up the system, step by step.
The problem? Steam.
Actually, the problem is more generally the Online Subsystem that Epic has already set up. This system has roots all the way in the core of the engine and, through a giant tree of classes and enumerations, seems to handle everything from online player profiles to data sharing. However, it’s also extremely confusing; over half the functions are native, the files are spread all over the place, and most of the real info is housed in f%#$ing datastores. The word itself makes me shudder.
I’m sure Epic has good intentions, but they forget that most of the people using UDK are not multimillion-dollar companies holding contracts with (and therefore getting help from) other multimillion-dollar companies like Valve and Autodesk. And although the included achievements code sheds a great deal of light on the system, is it actually useful? The answer is a resounding NO. Unless, of course, you have Steam partner access.
If you want to add achievements for your game, your best bet is just to write your own system. Sure it’s a lot of work, but it’ll be more reliable (since you actually know for sure what it does) and versatile (you can adapt it to whatever network your game ends up on).
And if you get stuck, just come back here! More on this later, once I figure things out.