Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
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);
        }