/// <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"); foreach (DataRow dataRow in dbClient.GetTable().Rows) { string achievementName = dataRow["achievement_name"].ToString(); AchievementLevel level = new AchievementLevel((uint) dataRow["achievement_level"], (uint) dataRow["reward_pixels"], (uint) dataRow["reward_points"], (uint) dataRow["progress_needed"]); if (!achievements.ContainsKey(achievementName)) achievements.Add(achievementName, new Achievement((uint) dataRow["id"], achievementName, dataRow["achievement_category"].ToString())); if (!achievements[achievementName].CheckLevel(level)) achievements[achievementName].AddLevel(level); else YupiWriterManager.WriteLine( "Was Found a Duplicated Level for: " + achievementName + ", Level: " + level.Level, "Yupi.Achievements", ConsoleColor.Cyan); } }
/// <summary> /// Composes the specified achievement. /// </summary> /// <param name="achievement">The achievement.</param> /// <param name="targetLevel">The target level.</param> /// <param name="targetLevelData">The target level data.</param> /// <param name="totalLevels">The total levels.</param> /// <param name="userData">The user data.</param> /// <returns>ServerMessage.</returns> internal static ServerMessage Compose(Achievement achievement, uint targetLevel, AchievementLevel targetLevelData, uint totalLevels, UserAchievement userData) { ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AchievementProgressMessageComposer")); serverMessage.AppendInteger(achievement.Id); serverMessage.AppendInteger(targetLevel); serverMessage.AppendString($"{achievement.GroupName}{targetLevel}"); serverMessage.AppendInteger(targetLevelData.Requirement); serverMessage.AppendInteger(targetLevelData.Requirement); serverMessage.AppendInteger(targetLevelData.RewardPixels); serverMessage.AppendInteger(0); serverMessage.AppendInteger(userData.Progress); serverMessage.AppendBool(userData.Level >= totalLevels); serverMessage.AppendString(achievement.Category); serverMessage.AppendString(string.Empty); serverMessage.AppendInteger(totalLevels); serverMessage.AppendInteger(0); return serverMessage; }
internal bool CheckLevel(AchievementLevel level) => Levels.ContainsKey(level.Level);
/// <summary> /// Adds the level. /// </summary> /// <param name="level">The level.</param> internal void AddLevel(AchievementLevel level) => Levels.Add(level.Level, level);