示例#1
0
        /// <summary>
        /// Checks whether a certain skill is a prerequisite of this skill, and what level it needs.
        /// Find the highest level needed by searching entire prerequisite tree.
        /// </summary>
        /// <param name="thisSkill">This skill.</param>
        /// <param name="skill">Skill to check.</param>
        /// <param name="neededLevel">The level that is needed. Out parameter.</param>
        /// <param name="recurse">Pass <code>true</code> to check recursively.</param>
        /// <returns>
        /// 	<code>true</code> if it is a prerequisite, needed level in <var>neededLevel</var> out parameter.
        /// </returns>
        private static bool HasAsPrerequisite(this IStaticSkill thisSkill, IStaticSkill skill, ref Int64 neededLevel, bool recurse)
        {
            long thisID = thisSkill.ID;

            foreach (StaticSkillLevel prereq in thisSkill.Prerequisites)
            {
                if (prereq.Skill == skill)
                    neededLevel = Math.Max(prereq.Level, neededLevel);

                if (recurse && neededLevel < 5 && prereq.Skill.ID != thisID)
                    // check for neededLevel fixes recursive skill bug (e.g polaris )
                    prereq.Skill.HasAsPrerequisite(skill, ref neededLevel, true);
            }
            return neededLevel > 0;
        }
示例#2
0
        /// <summary>
        /// Checks whether a certain skill is a prerequisite of this skill, and what level it needs.
        /// Find the highest level needed by searching entire prerequisite tree.
        /// </summary>
        /// <param name="skill">Skill to check.</param>
        /// <param name="neededLevel">The level that is needed. Out parameter.</param>
        /// <param name="recurse">Pass <code>true</code> to check recursively.</param>
        /// <returns><code>true</code> if it is a prerequisite, needed level in <var>neededLevel</var> out parameter.</returns>
        private static bool HasAsPrerequisite(this IStaticSkill thisSkill, IStaticSkill skill, ref int neededLevel, bool recurse)
        {
            var thisID = thisSkill.ID;

            foreach (var prereq in thisSkill.Prerequisites)
            {
                if (prereq.Skill == skill)
                {
                    neededLevel = Math.Max(prereq.Level, neededLevel);
                }

                if (recurse && neededLevel < 5 && prereq.Skill.ID != thisID) // check for neededLevel fixes recursuve skill bug (e.g polaris )
                {
                    prereq.Skill.HasAsPrerequisite(skill, ref neededLevel, true);
                }
            }
            return(neededLevel > 0);
        }
示例#3
0
        /// <summary>
        /// Checks whether a certain skill is a prerequisite of this skill, and what level it needs.
        /// Find the highest level needed by searching entire prerequisite tree.
        /// </summary>
        /// <param name="skill">Skill to check.</param>
        /// <param name="neededLevel">The level that is needed. Out parameter.</param>
        /// <param name="recurse">Pass <code>true</code> to check recursively.</param>
        /// <returns><code>true</code> if it is a prerequisite, needed level in <var>neededLevel</var> out parameter.</returns>
        private static bool HasAsPrerequisite(this IStaticSkill thisSkill, IStaticSkill skill, ref int neededLevel, bool recurse)
        {
            var thisID = thisSkill.ID;

            foreach (var prereq in thisSkill.Prerequisites)
            {
                if (prereq.Skill == skill)
                {
                    neededLevel = Math.Max(prereq.Level, neededLevel);
                }

                if (recurse && neededLevel < 5 && prereq.Skill.ID != thisID) // check for neededLevel fixes recursuve skill bug (e.g polaris )
                {
                    prereq.Skill.HasAsPrerequisite(skill, ref neededLevel, true);
                }
            }
            return (neededLevel > 0);
        }
示例#4
0
        /// <summary>
        /// Gets the minimum level the given skill is required by other entries.
        /// </summary>
        /// <param name="skill"></param>
        /// <returns>The minimum required level, between 0 and 5.</returns>
        public Int64 GetMinimumLevel(IStaticSkill skill)
        {
            // Search the minimum level this skill is required by other entries
            Int64 minNeeded = 0;

            foreach (PlanEntry pe in Items)
            {
                Int64       required;
                StaticSkill tSkill = pe.Skill;

                if (!tSkill.HasAsPrerequisite(skill, out required) || tSkill == skill)
                {
                    continue;
                }

                // All 5 levels are needed, fail now
                if (required == 5)
                {
                    return(5);
                }
                minNeeded = Math.Max(minNeeded, required);
            }
            return(minNeeded);
        }
示例#5
0
 /// <summary>
 /// Checks whether a certain skill is a prerequisite of this skill, and what level it needs.
 /// The check is performed recursively through all prerequisites.
 /// </summary>
 /// <param name="skill">Skill to check.</param>
 /// <param name="neededLevel">The level that is needed. Out parameter.</param>
 /// <returns><code>true</code> if it is a prerequisite, needed level in <var>neededLevel</var> out parameter.</returns>
 public static bool HasAsPrerequisite(this IStaticSkill thisSkill, IStaticSkill skill, out int neededLevel)
 {
     neededLevel = 0;
     return(thisSkill.HasAsPrerequisite(skill, ref neededLevel, true));
 }
 /// <summary>
 /// Checks whether a certain skill is an immediate prerequisite of this skill,
 /// and the level needed
 /// </summary>
 /// <param name="thisSkill">This skill.</param>
 /// <param name="skill">Skill that may be an immediate prereq</param>
 /// <param name="neededLevel">needed level of skill</param>
 /// <returns>
 /// Skill gs is an immediate prereq of this skill
 /// </returns>
 public static bool HasAsImmediatePrereq(this IStaticSkill thisSkill, IStaticSkill skill, out long neededLevel)
 {
     neededLevel = 0;
     return(thisSkill.HasAsPrerequisite(skill, ref neededLevel, false));
 }
示例#7
0
 /// <summary>
 /// Checks whether a certain skill is a prerequisite of this skill, and what level it needs.
 /// The check is performed recursively through all prerequisites.
 /// </summary>
 /// <param name="skill">Skill to check.</param>
 /// <param name="neededLevel">The level that is needed. Out parameter.</param>
 /// <returns><code>true</code> if it is a prerequisite, needed level in <var>neededLevel</var> out parameter.</returns>
 public static bool HasAsPrerequisite(this IStaticSkill thisSkill, IStaticSkill skill, out int neededLevel)
 {
     neededLevel = 0;
     return thisSkill.HasAsPrerequisite(skill, ref neededLevel, true);
 }
示例#8
0
 /// <summary>
 /// Checks whether a certain skill is an immediate prerequisite of this skill,
 /// and the level needed
 /// </summary>
 /// <param name="skill">Skill that may be an immediate prereq</param>
 /// <param name="neededLevel">needed level of skill</param>
 /// <returns>Skill gs is an immediate prereq of this skill</returns>
 public static bool HasAsImmediatePrereq(this IStaticSkill thisSkill, IStaticSkill skill, out int neededLevel)
 {
     neededLevel = 0;
     return thisSkill.HasAsPrerequisite(skill, ref neededLevel, false);
 }