Hey, you remember if you completed an achievement, the message was very buggy? Well.. I have a fix.
Replace whole UnlockAchievement void with this:
Tested,worked 100%Code:public void UnlockAchievement(GameClient Session, uint AchievementId, int Level) { // Get the achievement Achievement Achievement = Achievements[AchievementId]; // Make sure the achievement is valid and has not already been unlocked if (Achievement == null || UserHasAchievement(Session, Achievement.Id, Level) || Level < 1 || Level > Achievement.Levels) { return; } // Calculate the pixel value for this achievement int Value = CalculateAchievementValue(Achievement.PixelBase, Achievement.PixelMultiplier, Level); // Remove any previous badges for this achievement (old levels) lock (((Session.GetHabbo().GetBadgeComponent().BadgeList))) { List<string> BadgesToRemove = new List<string>(); foreach (Badge Badge in Session.GetHabbo().GetBadgeComponent().BadgeList) { if (Badge.Code.StartsWith(Achievement.BadgeCode)) { BadgesToRemove.Add(Badge.Code); } } foreach (string Badge in BadgesToRemove) { Session.GetHabbo().GetBadgeComponent().RemoveBadge(Badge); } } // Give the user the new badge Session.GetHabbo().GetBadgeComponent().GiveBadge(FormatBadgeCode(Achievement.BadgeCode, Level, Achievement.DynamicBadgeLevel), true); // Update or set the achievement level for the user if (Session.GetHabbo().Achievements.ContainsKey(Achievement.Id)) { Session.GetHabbo().Achievements[Achievement.Id] = Level; using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.ExecuteQuery("UPDATE user_achievements SET achievement_level = '" + Level + "' WHERE user_id = '" + Session.GetHabbo().Id + "' AND achievement_id = '" + Achievement.Id + "' LIMIT 1"); } } else { Session.GetHabbo().Achievements.Add(Achievement.Id, Level); using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.ExecuteQuery("INSERT INTO user_achievements (user_id,achievement_id,achievement_level) VALUES ('" + Session.GetHabbo().Id + "','" + Achievement.Id + "','" + Level + "')"); } } // Notify the user of the achievement gain Session.GetMessageHandler().GetResponse().Init(437); Session.GetMessageHandler().GetResponse().AppendUInt(Achievement.Id); Session.GetMessageHandler().GetResponse().AppendInt32(Level); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(FormatBadgeCode(Achievement.BadgeCode, Level, Achievement.DynamicBadgeLevel)); Session.GetMessageHandler().GetResponse().AppendInt32(10); // pixels or achievement points Session.GetMessageHandler().GetResponse().AppendInt32(10); // pixels or achievement points if (Level > 1) { Session.GetMessageHandler().GetResponse().AppendStringWithBreak(FormatBadgeCode(Achievement.BadgeCode, (Level - 1), Achievement.DynamicBadgeLevel)); } else { Session.GetMessageHandler().GetResponse().AppendStringWithBreak(""); } Session.GetMessageHandler().SendResponse(); // Give the user the pixels he deserves Session.GetHabbo().ActivityPoints += Value; Session.GetHabbo().UpdateActivityPointsBalance(true, Value); // [13-12-2009 17:03:34 from 62.50.35.181:30000] // FvXXDRB // [13-12-2009 17:03:34 from 62.50.35.181:30000] // FuQBIACH_Motto1 // FuPBJACH_RoomEntry2ACH_RoomEntry1 }
Now it'll say:
Beloning(DUTCH): 10 Hartjes/Pixels
Achievement points: 10
:) You can replace the 10's with a mysql query or another number.
5% Credits to me for this code and 95% to Meth0d for uberemu.







