Exemplo n.º 1
0
        /// <summary>
        /// Update achievement criteria counter related to type.
        /// </summary>
        public void UpdateCriteriaCounter(CriteriaCounterType type, uint value)
        {
            if (!GameTableManager.AchievementXCriteriaCounterType.TryGetValue((byte)type, out ReadOnlyCollection <SaintCoinach.Xiv.Achievement> achievementEntries))
            {
                throw new ArgumentException($"Invalid CriteriaCounterType: {type}!");
            }

            if (!counterCriteria.ContainsKey(type))
            {
                counterCriteria[type] = new Criteria(value);
            }
            else
            {
                counterCriteria[type].IncrementValue(value);
            }

            foreach (SaintCoinach.Xiv.Achievement entry in achievementEntries)
            {
                if (HasAchievement((uint)entry.Key))
                {
                    continue;
                }

                if (GetAchievementCriteriaCounter(entry) >= GetAchievementCriteriaCounterMax(entry))
                {
                    CompleteAchievement(entry);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Get current amount of criteria progress for Achievement.
        /// </summary>
        private uint GetAchievementCriteriaCounter(SaintCoinach.Xiv.Achievement entry)
        {
            switch ((CriteriaType)entry.Type)
            {
            case CriteriaType.Counter:
                CriteriaCounterType type = (CriteriaCounterType)entry.GetCriteriaParameter(CriteriaParameter.CriteriaCounterTypeId);
                return(counterCriteria.ContainsKey(type) ? counterCriteria[type].Value : 0u);

            case CriteriaType.Level:
                return(owner.Character.GetClassInfo((uint)entry.GetCriteriaParameter(CriteriaParameter.JobClassId)).Level);

            /* TODO: handle these types when related systems are implemented
             * case CriteriaType.Achievement:
             * case CriteriaType.MateriaMelding:
             * case CriteriaType.HuntingLog:
             * case CriteriaType.Exploration:
             * case CriteriaType.QuestCompleteAny:
             * case CriteriaType.ChocoboRank:
             * case CriteriaType.PvPRank:
             * case CriteriaType.PvPMatch:
             * case CriteriaType.PvPMatchWin:
             * case CriteriaType.ReputationRank:
             * case CriteriaType.FrontlineCampaign:
             * case CriteriaType.FrontlineCampaignWin:
             * case CriteriaType.FrontlineCampaignWinAny:
             * case CriteriaType.AetherCurrent:
             * case CriteriaType.Minion:
             * case CriteriaType.VerminionChallenge:
             * case CriteriaType.AnimaWeapon:*/
            default:
            {
                    #if DEBUG
                Console.WriteLine($"Unhandled CriteriaType: {entry.Type}, unable to return valid criteria counter!");
                    #endif
                return(0);
            }
            }
        }