/// <summary> /// Checks if the given achievement is completable. /// </summary> /// <param name="achievementEntry"></param> /// <returns></returns> public bool IsAchievementCompletable(AchievementEntry achievementEntry) { // Counter achievement were never meant to be completed. if (achievementEntry.Flags.HasFlag(AchievementFlags.Counter)) { return(false); } // The method will return false only if the achievement has RealmFirst flags // and already achieved by someone. if (!AchievementMgr.IsRealmFirst(achievementEntry.ID)) { return(false); } uint achievementForTestId = (achievementEntry.RefAchievement != 0) ? achievementEntry.RefAchievement : achievementEntry.ID; uint achievementForTestCount = achievementEntry.Count; List <AchievementCriteriaEntry> achievementCriteriaIds = achievementEntry.Criteria; if (achievementCriteriaIds.Count == 0) { return(false); } uint count = 0; // Default case bool completedAll = true; foreach (var achievementCriteriaEntry in achievementCriteriaIds) { if (IsCriteriaCompletable(achievementCriteriaEntry)) { ++count; } else { completedAll = false; } if (achievementForTestCount > 0 && achievementForTestCount <= count) { return(true); // TODO: Why return true here? } } // all criterias completed requirement return(completedAll && achievementForTestCount == 0); }
/// <summary>Checks if the given achievement is completable.</summary> /// <param name="achievementEntry"></param> /// <returns></returns> public bool IsAchievementCompletable(AchievementEntry achievementEntry) { if (achievementEntry.Flags.HasFlag((Enum)AchievementFlags.Counter) || !AchievementMgr.IsRealmFirst(achievementEntry.ID)) { return(false); } if (achievementEntry.RefAchievement == 0U) { int id = (int)achievementEntry.ID; } else { int refAchievement = (int)achievementEntry.RefAchievement; } uint count = achievementEntry.Count; List <AchievementCriteriaEntry> criteria = achievementEntry.Criteria; if (criteria.Count == 0) { return(false); } uint num = 0; bool flag = true; foreach (AchievementCriteriaEntry achievementCriteriaEntry in criteria) { if (this.IsCriteriaCompletable(achievementCriteriaEntry)) { ++num; } else { flag = false; } if (count > 0U && count <= num) { return(true); } } if (flag) { return(count == 0U); } return(false); }