/// <summary> /// Gets the achievement levels. /// </summary> /// <param name="achievements">The achievements.</param> /// <param name="dbClient">The database client.</param> internal static void GetAchievementLevels(out Dictionary <string, Achievement> achievements, IQueryAdapter dbClient) { achievements = new Dictionary <string, Achievement>(); dbClient.SetQuery("SELECT * FROM achievements_data"); DataTable table = dbClient.GetTable(); foreach (DataRow dataRow in table.Rows) { uint id = Convert.ToUInt32(dataRow["id"]); var category = (string)dataRow["category"]; var text = (string)dataRow["group_name"]; var level = (int)dataRow["level"]; var rewardPixels = (int)dataRow["reward_pixels"]; var rewardPoints = (int)dataRow["reward_points"]; var requirement = (int)dataRow["progress_needed"]; var level2 = new AchievementLevel(level, rewardPixels, rewardPoints, requirement); if (!achievements.ContainsKey(text)) { var achievement = new Achievement(id, text, category); achievement.AddLevel(level2); achievements.Add(text, achievement); } else { achievements[text].AddLevel(level2); } } }
public static void GetAchievementLevels(out Dictionary<string, Achievement> Achievements) { Achievements = new Dictionary<string, Achievement>(); using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("SELECT `id`,`category`,`group_name`,`level`,`reward_pixels`,`reward_points`,`progress_needed`,`game_id` FROM `achievements`"); DataTable dTable = dbClient.getTable(); if (dTable != null) { foreach (DataRow dRow in dTable.Rows) { int id = Convert.ToInt32(dRow["id"]); string category = Convert.ToString(dRow["category"]); string groupName = Convert.ToString(dRow["group_name"]); int level = Convert.ToInt32(dRow["level"]); int rewardPixels = Convert.ToInt32(dRow["reward_pixels"]); int rewardPoints = Convert.ToInt32(dRow["reward_points"]); int progressNeeded = Convert.ToInt32(dRow["progress_needed"]); AchievementLevel AchievementLevel = new AchievementLevel(level, rewardPixels, rewardPoints, progressNeeded); if (!Achievements.ContainsKey(groupName)) { Achievement Achievement = new Achievement(id, groupName, category, Convert.ToInt32(dRow["game_id"])); Achievement.AddLevel(AchievementLevel); Achievements.Add(groupName, Achievement); } else Achievements[groupName].AddLevel(AchievementLevel); } } } }
public AchievementProgressedComposer(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData,int TotalLevels, UserAchievement UserData) : base(ServerPacketHeader.AchievementProgressedMessageComposer) { base.WriteInteger(Achievement.Id); // Unknown (ID?) base.WriteInteger(TargetLevel); // Target level base.WriteString(Achievement.GroupName + TargetLevel); // Target name/desc/badge base.WriteInteger(1); // Progress req/target base.WriteInteger(TargetLevelData.Requirement); // Reward in Pixels base.WriteInteger(TargetLevelData.RewardPixels); // Reward Ach Score base.WriteInteger(0); // ? base.WriteInteger(UserData != null ? UserData.Progress : 0); // Current progress base.WriteBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) base.WriteString(Achievement.Category); // Category base.WriteString(string.Empty); base.WriteInteger(TotalLevels); // Total amount of levels base.WriteInteger(0); }
public async Task <Dictionary <string, Achievement> > GetAchievementLevelsAsync() { Dictionary <string, Achievement> achievements = new Dictionary <string, Achievement>(); using (IAsyncDbClient client = ConnectionProvider.GetConnection()) { using (IQuery query = client.CreateQuery("SELECT `id`,`category`,`group_name`,`level`,`reward_pixels`,`reward_points`,`progress_needed`,`game_id` FROM `achievements`")) { using (var reader = await query.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { uint id = reader.GetData <uint>("id"); string category = reader.GetData <string>("category"); string groupName = reader.GetData <string>("group_name"); int rewardPixels = reader.GetData <int>("reward_pixels"); int rewardPoints = reader.GetData <int>("reward_points"); int progressNeeded = reader.GetData <int>("progress_needed"); AchievementLevel level = new AchievementLevel(reader.GetData <int>("level"), rewardPixels, rewardPoints, progressNeeded); if (!achievements.ContainsKey(groupName)) { Achievement achievement = new Achievement((int)id, groupName, category, reader.GetData <int>("game_id")); achievement.AddLevel(level); achievements.Add(groupName, achievement); } else { achievements[groupName].AddLevel(level); } } } } } return(achievements); }
public static void GetAchievementLevels(out Dictionary <string, Achievement> Achievements) { Achievements = new Dictionary <string, Achievement>(); using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("SELECT `id`,`category`,`group_name`,`level`,`reward_pixels`,`reward_points`,`progress_needed`,`game_id` FROM `achievements`"); DataTable dTable = dbClient.GetTable(); if (dTable != null) { foreach (DataRow dRow in dTable.Rows) { int id = Convert.ToInt32(dRow["id"]); string category = Convert.ToString(dRow["category"]); string groupName = Convert.ToString(dRow["group_name"]); int level = Convert.ToInt32(dRow["level"]); int rewardPixels = Convert.ToInt32(dRow["reward_pixels"]); int rewardPoints = Convert.ToInt32(dRow["reward_points"]); int progressNeeded = Convert.ToInt32(dRow["progress_needed"]); AchievementLevel AchievementLevel = new AchievementLevel(level, rewardPixels, rewardPoints, progressNeeded); if (!Achievements.ContainsKey(groupName)) { Achievement Achievement = new Achievement(id, groupName, category, Convert.ToInt32(dRow["game_id"])); Achievement.AddLevel(AchievementLevel); Achievements.Add(groupName, Achievement); } else { Achievements[groupName].AddLevel(AchievementLevel); } } } } }
internal static void GetAchievementLevels(out Dictionary <string, Achievement> achievements) { achievements = new Dictionary <string, Achievement>(); using (var dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery( "SELECT `id`,`category`,`group_name`,`level`,`reward_pixels`,`reward_points`,`progress_needed`,`game_id` FROM `achievements`"); var dTable = dbClient.GetTable(); if (dTable == null) { return; } foreach (DataRow dRow in dTable.Rows) { var id = Convert.ToInt32(dRow["id"]); var category = Convert.ToString(dRow["category"]); var groupName = Convert.ToString(dRow["group_name"]); var level = Convert.ToInt32(dRow["level"]); var rewardPixels = Convert.ToInt32(dRow["reward_pixels"]); var rewardPoints = Convert.ToInt32(dRow["reward_points"]); var progressNeeded = Convert.ToInt32(dRow["progress_needed"]); var achievementLevel = new AchievementLevel(level, rewardPixels, rewardPoints, progressNeeded); if (!achievements.ContainsKey(groupName)) { var achievement = new Achievement(id, groupName, category, Convert.ToInt32(dRow["game_id"])); achievement.AddLevel(achievementLevel); achievements.Add(groupName, achievement); } else { achievements[groupName].AddLevel(achievementLevel); } } } }
public void AddLevel(AchievementLevel level) { Levels.Add(level.Level, level); }
public bool ProgressAchievement(GameClient Session, string AchievementGroup, int ProgressAmount, bool FromZero = false) { if (!_achievements.ContainsKey(AchievementGroup) || Session == null) { return(false); } Achievement AchievementData = null; AchievementData = _achievements[AchievementGroup]; UserAchievement UserData = Session.GetHabbo().GetAchievementData(AchievementGroup); if (UserData == null) { UserData = new UserAchievement(AchievementGroup, 0, 0); Session.GetHabbo().Achievements.TryAdd(AchievementGroup, UserData); } int TotalLevels = AchievementData.Levels.Count; if (UserData != null && UserData.Level == TotalLevels) { return(false); // done, no more. } int TargetLevel = (UserData != null ? UserData.Level + 1 : 1); if (TargetLevel > TotalLevels) { TargetLevel = TotalLevels; } AchievementLevel TargetLevelData = AchievementData.Levels[TargetLevel]; int NewProgress = 0; if (FromZero) { NewProgress = ProgressAmount; } else { NewProgress = (UserData != null ? UserData.Progress + ProgressAmount : ProgressAmount); } int NewLevel = (UserData != null ? UserData.Level : 0); int NewTarget = NewLevel + 1; if (NewTarget > TotalLevels) { NewTarget = TotalLevels; } if (NewProgress >= TargetLevelData.Requirement) { NewLevel++; NewTarget++; int ProgressRemainder = NewProgress - TargetLevelData.Requirement; NewProgress = 0; if (TargetLevel == 1) { Session.GetHabbo().GetBadgeComponent().GiveBadge(AchievementGroup + TargetLevel, true, Session); } else { Session.GetHabbo().GetBadgeComponent().RemoveBadge(Convert.ToString(AchievementGroup + (TargetLevel - 1))); Session.GetHabbo().GetBadgeComponent().GiveBadge(AchievementGroup + TargetLevel, true, Session); } if (NewTarget > TotalLevels) { NewTarget = TotalLevels; } Session.SendPacket(new AchievementUnlockedComposer(AchievementData, TargetLevel, TargetLevelData.RewardPoints, TargetLevelData.RewardPixels)); Session.GetHabbo().GetMessenger().BroadcastAchievement(Session.GetHabbo().Id, Users.Messenger.MessengerEventTypes.ACHIEVEMENT_UNLOCKED, AchievementGroup + TargetLevel); using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("REPLACE INTO `user_achievements` VALUES ('" + Session.GetHabbo().Id + "', @group, '" + NewLevel + "', '" + NewProgress + "')"); dbClient.AddParameter("group", AchievementGroup); dbClient.RunQuery(); } UserData.Level = NewLevel; UserData.Progress = NewProgress; Session.GetHabbo().Duckets += TargetLevelData.RewardPixels; Session.GetHabbo().GetStats().AchievementPoints += TargetLevelData.RewardPoints; Session.SendPacket(new HabboActivityPointNotificationComposer(Session.GetHabbo().Duckets, TargetLevelData.RewardPixels)); Session.SendPacket(new AchievementScoreComposer(Session.GetHabbo().GetStats().AchievementPoints)); AchievementLevel NewLevelData = AchievementData.Levels[NewTarget]; Session.SendPacket(new AchievementProgressedComposer(AchievementData, NewTarget, NewLevelData, TotalLevels, Session.GetHabbo().GetAchievementData(AchievementGroup))); return(true); } else { UserData.Level = NewLevel; UserData.Progress = NewProgress; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("REPLACE INTO `user_achievements` VALUES ('" + Session.GetHabbo().Id + "', @group, '" + NewLevel + "', '" + NewProgress + "')"); dbClient.AddParameter("group", AchievementGroup); dbClient.RunQuery(); } Session.SendPacket(new AchievementProgressedComposer(AchievementData, TargetLevel, TargetLevelData, TotalLevels, Session.GetHabbo().GetAchievementData(AchievementGroup))); } return(false); }
public void AddLevel(AchievementLevel Level) { Levels.Add(Level.Level, Level); }
public async void ProgressAchievement(GameClient session, string group, int progress, bool fromBeginning = false) { if (!Achievements.ContainsKey(group) || session == null) { return; } Achievement data = Achievements[group]; if (data == null) { return; } UserAchievement userData = session.Habbo.GetAchievementData(group); if (userData == null) { userData = new UserAchievement(group, 0, 0); session.Habbo.Achievements.TryAdd(group, userData); } int totalLevels = data.Levels.Count; if (userData.Level == totalLevels) { return; // done, no more. } int targetLevel = userData.Level + 1; if (targetLevel > totalLevels) { targetLevel = totalLevels; } AchievementLevel level = data.Levels[targetLevel]; int newProgress; if (fromBeginning) { newProgress = progress; } else { newProgress = userData.Progress + progress; } int newLevel = userData.Level; int newTarget = newLevel + 1; if (newTarget > totalLevels) { newTarget = totalLevels; } if (newProgress >= level.Requirement) { newLevel++; newTarget++; newProgress = 0; if (targetLevel == 1) { session.Habbo.GetBadgeComponent().GiveBadge(group + targetLevel, true, session); } else { session.Habbo.GetBadgeComponent().RemoveBadge(Convert.ToString(group + (targetLevel - 1))); session.Habbo.GetBadgeComponent().GiveBadge(group + targetLevel, true, session); } if (newTarget > totalLevels) { newTarget = totalLevels; } session.SendPacket(new AchievementUnlockedComposer(data, targetLevel, level.RewardPoints, level.RewardPixels)); session.Habbo.GetMessenger().BroadcastAchievement(session.Habbo.Id, Users.Messenger.MessengerEventTypes.AchievementUnlocked, group + targetLevel); await _dao.ProgressAchievement(session.Habbo.Id, group, newLevel, newProgress); userData.Level = newLevel; userData.Progress = newProgress; session.Habbo.Duckets += level.RewardPixels; session.Habbo.GetStats().AchievementPoints += level.RewardPoints; session.SendPacket(new HabboActivityPointNotificationComposer(session.Habbo.Duckets, level.RewardPixels)); session.SendPacket(new AchievementScoreComposer(session.Habbo.GetStats().AchievementPoints)); AchievementLevel newLevelData = data.Levels[newTarget]; session.SendPacket(new AchievementProgressedComposer(data, newTarget, newLevelData, totalLevels, session.Habbo.GetAchievementData(group))); return; } else { userData.Level = newLevel; userData.Progress = newProgress; await _dao.ProgressAchievement(session.Habbo.Id, group, newLevel, newProgress); session.SendPacket(new AchievementProgressedComposer(data, targetLevel, level, totalLevels, session.Habbo.GetAchievementData(group))); } return; }
/// <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); } }
public bool ProgressAchievement(GameClient session, string group, int progress, bool fromBeginning = false) { if (!_achievements.ContainsKey(group) || session == null) { return(false); } Achievement data = null; data = _achievements[group]; UserAchievement userData = session.GetHabbo().GetAchievementData(group); if (userData == null) { userData = new UserAchievement(group, 0, 0); session.GetHabbo().Achievements.TryAdd(group, userData); } int TotalLevels = data.Levels.Count; if (userData != null && userData.Level == TotalLevels) { return(false); // done, no more. } int TargetLevel = (userData != null ? userData.Level + 1 : 1); if (TargetLevel > TotalLevels) { TargetLevel = TotalLevels; } AchievementLevel TargetLevelData = data.Levels[TargetLevel]; int NewProgress = 0; if (fromBeginning) { NewProgress = progress; } else { NewProgress = (userData != null ? userData.Progress + progress : progress); } int NewLevel = (userData != null ? userData.Level : 0); int NewTarget = NewLevel + 1; if (NewTarget > TotalLevels) { NewTarget = TotalLevels; } if (NewProgress >= TargetLevelData.Requirement) { NewLevel++; NewTarget++; int ProgressRemainder = NewProgress - TargetLevelData.Requirement; NewProgress = 0; if (TargetLevel == 1) { session.GetHabbo().GetBadgeComponent().GiveBadge(group + TargetLevel, true, session); } else { session.GetHabbo().GetBadgeComponent().RemoveBadge(Convert.ToString(group + (TargetLevel - 1))); session.GetHabbo().GetBadgeComponent().GiveBadge(group + TargetLevel, true, session); } if (NewTarget > TotalLevels) { NewTarget = TotalLevels; } session.SendPacket(new AchievementUnlockedComposer(data, TargetLevel, TargetLevelData.RewardPoints, TargetLevelData.RewardPixels)); session.GetHabbo().GetMessenger().BroadcastAchievement(session.GetHabbo().Id, Users.Messenger.MessengerEventTypes.AchievementUnlocked, group + TargetLevel); using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("REPLACE INTO `user_achievements` VALUES ('" + session.GetHabbo().Id + "', @group, '" + NewLevel + "', '" + NewProgress + "')"); dbClient.AddParameter("group", group); dbClient.RunQuery(); } userData.Level = NewLevel; userData.Progress = NewProgress; session.GetHabbo().Duckets += TargetLevelData.RewardPixels; session.GetHabbo().GetStats().AchievementPoints += TargetLevelData.RewardPoints; session.SendPacket(new HabboActivityPointNotificationComposer(session.GetHabbo().Duckets, TargetLevelData.RewardPixels)); session.SendPacket(new AchievementScoreComposer(session.GetHabbo().GetStats().AchievementPoints)); AchievementLevel NewLevelData = data.Levels[NewTarget]; session.SendPacket(new AchievementProgressedComposer(data, NewTarget, NewLevelData, TotalLevels, session.GetHabbo().GetAchievementData(group))); return(true); } else { userData.Level = NewLevel; userData.Progress = NewProgress; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("REPLACE INTO `user_achievements` VALUES ('" + session.GetHabbo().Id + "', @group, '" + NewLevel + "', '" + NewProgress + "')"); dbClient.AddParameter("group", group); dbClient.RunQuery(); } session.SendPacket(new AchievementProgressedComposer(data, TargetLevel, TargetLevelData, TotalLevels, session.GetHabbo().GetAchievementData(group))); } return(false); }