Another thing I would like to suggest is adding an extra check in SetAchievementData native in order to determine if after using this native client has earned the specific achievement or not. Otherwise it is necessary to use GetClientAchievementStatus too often to detarmine the status of any achievement and it costs extra resources to server. Adding such feature is up to you, though.