示例#1
0
        private void CompleteAchievement(SaintCoinach.Xiv.Achievement entry)
        {
            Debug.Assert(entry != null);

            completedAchievements.Add(new Achievement((uint)entry.Key));
            latestAchievements.Enqueue((ushort)entry.Key);

            // TODO: handle rewards properly
            if (entry.Item != null)
            {
                owner.Inventory.NewItem((uint)entry.Item.Key);
            }

            if (entry.Title != null)
            {
            }

            if (owner.InWorld)
            {
                owner.Session.Send(new ServerActorAction2
                {
                    Action     = ActorAction.AchievementComplete,
                    Parameter1 = (uint)entry.Key
                });

                owner.SendMessageToVisible(new ServerActorAction2
                {
                    Action     = ActorAction.AchievementCompleteChat,
                    Parameter1 = (uint)entry.Key
                });
            }
        }
示例#2
0
        private bool CanUpdateCriteria(SaintCoinach.Xiv.Achievement entry, params int[] parameters)
        {
            Debug.Assert(entry != null);
            switch ((CriteriaType)entry.Type)
            {
            case CriteriaType.Achievement:
                if (parameters.Length < 1)
                {
                    return(false);
                }
                return(entry.Data.Contains(parameters[0]));

            case CriteriaType.Level:
            {
                if (parameters.Length < 1)
                {
                    return(false);
                }
                if (entry.GetCriteriaParameter(CriteriaParameter.JobClassId) != parameters[0])
                {
                    return(false);
                }
                return(entry.GetCriteriaParameter(CriteriaParameter.ClassLevel) < owner.Character.GetClassInfo((uint)parameters[0]).Level);
            }

            /* TODO: handle these types when related systems are implemented
             * 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 AchievementCriteriaType: {entry.Type} in CanUpdateCriteria!");
                    #endif
                return(false);
            }
            }
        }
示例#3
0
        /// <summary>
        /// Get amount of criteria required to complete Achievement.
        /// </summary>
        private static int GetAchievementCriteriaCounterMax(SaintCoinach.Xiv.Achievement entry)
        {
            switch ((CriteriaType)entry.Type)
            {
            case CriteriaType.Achievement:
            case CriteriaType.QuestCompleteAny:
                return(entry.Data.Count(p => p != 0));

            case CriteriaType.MateriaMelding:
            case CriteriaType.ChocoboRank:
            case CriteriaType.PvPMatch:
            case CriteriaType.PvPMatchWin:
            case CriteriaType.FrontlineCampaign:
            case CriteriaType.FrontlineCampaignWinAny:
            case CriteriaType.VerminionChallenge:
                return(entry.Data[0]);

            case CriteriaType.Counter:
            case CriteriaType.Level:
            case CriteriaType.PvPRank:
            case CriteriaType.ReputationRank:
            case CriteriaType.FrontlineCampaignWin:
            case CriteriaType.Minion:
                return(entry.Data[1]);

            case CriteriaType.HuntingLog:
            case CriteriaType.Exploration:
            case CriteriaType.AetherCurrent:
            case CriteriaType.AnimaWeapon:
                return(1);

            default:
            {
                    #if DEBUG
                Console.WriteLine($"Unhandled CriteriaType: {entry.Type}, unable to return valid max criteria counter!");
                    #endif
                return(int.MaxValue);
            }
            }
        }
示例#4
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);
            }
            }
        }
示例#5
0
 public static int GetCriteriaParameter(this SaintCoinach.Xiv.Achievement entry, CriteriaParameter parameter)
 {
     return(entry.Data[(int)parameter]);
 }