public static ServerMessage Compose(Achievement Achievement, int Level, int PointReward, int PixelReward) { ServerMessage Message = new ServerMessage(OpcodesOut.ACHIEVEMENT_UNLOCKED); Message.AppendUInt32(Achievement.Id); // Achievement ID Message.AppendInt32(Level); // Achieved level Message.AppendInt32(144); // Unknown. Random useless number. Message.AppendStringWithBreak(Achievement.GroupName + Level); // Achieved name Message.AppendInt32(PointReward); // Point reward Message.AppendInt32(PixelReward); // Pixel reward Message.AppendInt32(0); // Unknown. Message.AppendInt32(10); // Unknown. Message.AppendInt32(21); // Unknown. (Extra reward?) Message.AppendStringWithBreak(Level > 1 ? Achievement.GroupName + (Level - 1) : string.Empty); Message.AppendStringWithBreak(Achievement.Category.ToString()); return Message; }
public static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { ServerMessage Message = new ServerMessage(OpcodesOut.ACHIEVEMENTS_PROGRESS_UPDATE); Message.AppendUInt32(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendStringWithBreak(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.PixelReward); // Pixel reward Message.AppendInt32(TargetLevelData.PointsReward); // Unknown(??) Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendStringWithBreak(Achievement.Category); // Category Message.AppendInt32(TotalLevels); // Total amount of levels return Message; }