/// <summary> /// Progresses the user achievement. /// </summary> /// <param name="Session">The session.</param> /// <param name="AchievementGroup">The achievement group.</param> /// <param name="ProgressAmount">The progress amount.</param> /// <param name="FromZero">if set to <c>true</c> [from zero].</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> internal bool ProgressUserAchievement(GameClient Session, string AchievementGroup, int ProgressAmount, bool FromZero = false) { if (!this.Achievements.ContainsKey(AchievementGroup) || Session == null) { return(false); } Achievement achievement = null; achievement = this.Achievements[AchievementGroup]; UserAchievement userAchievement = Session.GetHabbo().GetAchievementData(AchievementGroup); if (userAchievement == null) { userAchievement = new UserAchievement(AchievementGroup, 0, 0); Session.GetHabbo().Achievements.Add(AchievementGroup, userAchievement); } int count = achievement.Levels.Count; if (userAchievement != null && userAchievement.Level == count) { return(false); } { int num = (userAchievement != null) ? (userAchievement.Level + 1) : 1; if (num > count) { num = count; } AchievementLevel targetLevelData = achievement.Levels[num]; int num2 = 0; if (FromZero) { num2 = ProgressAmount; } else { num2 = ((userAchievement != null) ? (userAchievement.Progress + ProgressAmount) : ProgressAmount); } int num3 = (userAchievement != null) ? userAchievement.Level : 0; int num4 = num3 + 1; if (num4 > count) { num4 = count; } if (num2 >= targetLevelData.Requirement) { num3++; num4++; int argE60 = num2 - targetLevelData.Requirement; num2 = 0; if (num == 1) { Session.GetHabbo().GetBadgeComponent().GiveBadge(string.Format("{0}{1}", AchievementGroup, num), true, Session, false); } else { Session.GetHabbo().GetBadgeComponent().RemoveBadge(Convert.ToString(string.Format("{0}{1}", AchievementGroup, num - 1)), Session); Session.GetHabbo().GetBadgeComponent().GiveBadge(string.Format("{0}{1}", AchievementGroup, num), true, Session, false); } if (num4 > count) { num4 = count; } Session.GetHabbo().ActivityPoints += targetLevelData.RewardPixels; Session.GetHabbo().NotifyNewPixels(targetLevelData.RewardPixels); Session.GetHabbo().UpdateActivityPointsBalance(); Session.SendMessage(AchievementUnlockedComposer.Compose(achievement, num, targetLevelData.RewardPoints, targetLevelData.RewardPixels)); using (IQueryAdapter queryReactor = Plus.GetDatabaseManager().GetQueryReactor()) { queryReactor.SetQuery(string.Concat(new object[] { "REPLACE INTO users_achievements VALUES (", Session.GetHabbo().Id, ", @group, ", num3, ", ", num2, ")" })); queryReactor.AddParameter("group", AchievementGroup); queryReactor.RunQuery(); } userAchievement.Level = num3; userAchievement.Progress = num2; Session.GetHabbo().AchievementPoints += targetLevelData.RewardPoints; Session.GetHabbo().NotifyNewPixels(targetLevelData.RewardPixels); Session.GetHabbo().ActivityPoints += targetLevelData.RewardPixels; Session.GetHabbo().UpdateActivityPointsBalance(); Session.SendMessage(AchievementScoreUpdateComposer.Compose(Session.GetHabbo().AchievementPoints)); AchievementLevel targetLevelData2 = achievement.Levels[num4]; Session.SendMessage(AchievementProgressComposer.Compose(achievement, num4, targetLevelData2, count, Session.GetHabbo().GetAchievementData(AchievementGroup))); Talent talent = null; if (Plus.GetGame().GetTalentManager().TryGetTalent(AchievementGroup, out talent)) { Plus.GetGame().GetTalentManager().CompleteUserTalent(Session, talent); } return(true); } userAchievement.Level = num3; userAchievement.Progress = num2; using (IQueryAdapter queryreactor2 = Plus.GetDatabaseManager().GetQueryReactor()) { queryreactor2.SetQuery(string.Concat(new object[] { "REPLACE INTO users_achievements VALUES (", Session.GetHabbo().Id, ", @group, ", num3, ", ", num2, ")" })); queryreactor2.AddParameter("group", AchievementGroup); queryreactor2.RunQuery(); } Session.SendMessage(AchievementProgressComposer.Compose(achievement, num, targetLevelData, count, Session.GetHabbo().GetAchievementData(AchievementGroup))); Session.GetMessageHandler().GetResponse().Init(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer")); Session.GetMessageHandler().GetResponse().AppendInteger(-1); Session.GetMessageHandler().GetResponse().AppendString(Session.GetHabbo().Look); Session.GetMessageHandler().GetResponse().AppendString(Session.GetHabbo().Gender.ToLower()); Session.GetMessageHandler().GetResponse().AppendString(Session.GetHabbo().Motto); Session.GetMessageHandler().GetResponse().AppendInteger(Session.GetHabbo().AchievementPoints); Session.GetMessageHandler().SendResponse(); return(false); } }
/// <summary> /// Completes the user talent. /// </summary> /// <param name="Session">The session.</param> /// <param name="Talent">The talent.</param> internal void CompleteUserTalent(GameClient Session, Talent Talent) { if (Session == null || Session.GetHabbo() == null || Session.GetHabbo().CurrentTalentLevel < Talent.Level || Session.GetHabbo().Talents.ContainsKey(Talent.Id)) { return; } if (!this.LevelIsCompleted(Session, Talent.Type, Talent.Level)) { return; } if (!string.IsNullOrEmpty(Talent.Prize) && Talent.PrizeBaseItem > 0u) { Item item = Plus.GetGame().GetItemManager().GetItem(Talent.PrizeBaseItem); Plus.GetGame().GetCatalog().DeliverItems(Session, item, 1, "", 0, 0, ""); } var value = new UserTalent(Talent.Id, 1); Session.GetHabbo().Talents.Add(Talent.Id, value); using (IQueryAdapter queryReactor = Plus.GetDatabaseManager().GetQueryReactor()) { queryReactor.RunFastQuery(string.Concat(new object[] { "REPLACE INTO users_talents VALUES (", Session.GetHabbo().Id, ", ", Talent.Id, ", ", 1, ");" })); } var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("TalentLevelUpMessageComposer")); serverMessage.AppendString(Talent.Type); serverMessage.AppendInteger(Talent.Level); serverMessage.AppendInteger(0); if (Talent.Type == "citizenship" && Talent.Level == 4) { serverMessage.AppendInteger(2); serverMessage.AppendString("HABBO_CLUB_VIP_7_DAYS"); serverMessage.AppendInteger(7); serverMessage.AppendString(Talent.Prize); serverMessage.AppendInteger(0); } else { serverMessage.AppendInteger(1); serverMessage.AppendString(Talent.Prize); serverMessage.AppendInteger(0); } Session.SendMessage(serverMessage); if (Talent.Type == "citizenship") { if (Talent.Level == 3) { Plus.GetGame().GetAchievementManager().ProgressUserAchievement(Session, "ACH_Citizenship", 1); } else if (Talent.Level == 4) { Session.GetHabbo().GetSubscriptionManager().AddSubscription(7); using (IQueryAdapter queryReactor = Plus.GetDatabaseManager().GetQueryReactor()) { queryReactor.RunFastQuery(string.Concat(new object[] { "UPDATE users SET talent_status = 'helper' WHERE id = ", Session.GetHabbo().Id, ";" })); } } } }