예제 #1
0
        /// <summary>
        /// Checks if <see cref="Player"/> meets supplied prerequisite.
        /// </summary>
        public bool Meets(Player player, uint prerequisiteId)
        {
            PrerequisiteEntry entry = GameTableManager.Instance.Prerequisite.GetEntry(prerequisiteId);

            if (entry == null)
            {
                throw new ArgumentException();
            }

            for (int i = 0; i < entry.PrerequisiteTypeId.Length; i++)
            {
                var type = (PrerequisiteType)entry.PrerequisiteTypeId[i];
                if (type == PrerequisiteType.None)
                {
                    continue;
                }

                PrerequisiteComparison comparison = (PrerequisiteComparison)entry.PrerequisiteComparisonId[i];
                if (!Meets(player, type, comparison, entry.Value[i], entry.ObjectId[i]))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #2
0
 private static bool PrerequisiteCheckLevel(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
 {
     switch (comparison)
     {
     default:
         log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Level}!");
         return(true);
     }
 }
        private bool Meets(Player player, PrerequisiteType type, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            if (!prerequisiteCheckHandlers.TryGetValue(type, out PrerequisiteCheckDelegate handler))
            {
                log.Warn($"Unhandled PrerequisiteType {type}!");
                return(false);
            }

            return(handler.Invoke(player, comparison, value, objectId));
        }
예제 #4
0
        private static bool PrerequisiteCheckQuest(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            case PrerequisiteComparison.Equal:     // Active or Completed
                return(player.QuestManager.GetQuestState((ushort)objectId) == null);

            default:
                log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Quest}!");
                return(false);
            }
        }
예제 #5
0
        private static bool PrerequisiteCheckPath(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            case PrerequisiteComparison.Equal:
                return(player.PathManager.IsPathActive((Path)value));

            default:
                log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Path}!");

                return(false);
            }
        }
예제 #6
0
        private static bool PrerequisiteCheckBaseFaction(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            case PrerequisiteComparison.Equal:
                return(player.Faction1 == (Faction)value);

            case PrerequisiteComparison.NotEqual:
                return(player.Faction1 != (Faction)value);

            default:
                return(false);
            }
        }
예제 #7
0
        private static bool PrerequisiteCheckRace(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            case PrerequisiteComparison.Equal:
                return(player.Race == (Race)value);

            case PrerequisiteComparison.NotEqual:
                return(player.Race != (Race)value);

            default:
                return(false);
            }
        }
예제 #8
0
        private static bool PrerequisiteCheckAchievement(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            case PrerequisiteComparison.NotEqual:
                return(!player.AchievementManager.HasCompletedAchievement((ushort)objectId));

            case PrerequisiteComparison.Equal:
                return(player.AchievementManager.HasCompletedAchievement((ushort)objectId));

            default:
                log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Achievement}!");
                return(false);
            }
        }
예제 #9
0
        private static bool PrerequisiteCheckClass(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            case PrerequisiteComparison.Equal:
                return(player.Class == (Class)value);

            case PrerequisiteComparison.NotEqual:
                return(player.Class != (Class)value);

            default:
                log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Class}!");
                return(true);
            }
        }
예제 #10
0
        private static bool PrerequisiteCheckRace(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            case PrerequisiteComparison.Equal:
                return(player.Race == (Race)value);

            case PrerequisiteComparison.NotEqual:
                return(player.Race != (Race)value);

            default:
                log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Race}!");
                return(false);
            }
        }
예제 #11
0
        private static bool PrerequisiteCheckSpellBaseId(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            case PrerequisiteComparison.NotEqual:
                return(player.SpellManager.GetSpell(objectId) == null);

            case PrerequisiteComparison.Equal:
                return(player.SpellManager.GetSpell(objectId) != null);

            default:
                log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Achievement}!");
                return(false);
            }
        }
        private bool MeetsEvaluateOr(Player player, uint prerequisiteId, PrerequisiteEntry entry)
        {
            for (int i = 0; i < entry.PrerequisiteTypeId.Length; i++)
            {
                var type = (PrerequisiteType)entry.PrerequisiteTypeId[i];
                if (type == PrerequisiteType.None)
                {
                    continue;
                }

                PrerequisiteComparison comparison = (PrerequisiteComparison)entry.PrerequisiteComparisonId[i];
                if (Meets(player, type, comparison, entry.Value[i], entry.ObjectId[i]))
                {
                    return(true);
                }
            }

            log.Trace($"Player {player.Name} failed prerequisite OR check ({prerequisiteId})");
            return(false);
        }
예제 #13
0
        private static bool PrerequisiteCheckVital(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
        {
            switch (comparison)
            {
            // TODO: Uncomment when Vitals are added ;)

            // case PrerequisiteComparison.Equal:
            //     return player.GetVitalValue((Vital)objectId) == value;
            // case PrerequisiteComparison.NotEqual:
            //     return player.GetVitalValue((Vital)objectId) != value;
            // case PrerequisiteComparison.GreaterThanOrEqual:
            //     return player.GetVitalValue((Vital)objectId) >= value;
            // case PrerequisiteComparison.GreaterThan:
            //     return player.GetVitalValue((Vital)objectId) > value;
            // case PrerequisiteComparison.LessThanOrEqual:
            //     return player.GetVitalValue((Vital)objectId) <= value;
            // case PrerequisiteComparison.LessThan:
            //     return player.GetVitalValue((Vital)objectId) < value;
            default:
                log.Warn($"Unhandled {comparison} for {PrerequisiteType.Vital}!");
                return(false);
            }
        }
예제 #14
0
 private static bool PrerequisiteCheckLevel(Player player, PrerequisiteComparison comparison, uint value, uint objectId)
 {
     // 24
     return(true);
 }