/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <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)); }
/// <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="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); }