///<summary> ///Selects first Ability that is successful in precast and combat testing. ///</summary> private Skill AbilitySelector(ConditionCriteraTypes criteria = ConditionCriteraTypes.All, bool IgnoreOutOfRange = false) { Skill returnAbility = DefaultAttack; foreach (var item in SortedAbilities) { //Check precast conditions if (!item.CheckPreCastConditionMethod()) { continue; } //Check Combat Conditions! if (!item.CheckCombatConditionMethod(criteria)) { continue; } //Check if we can execute or if it requires movement if (IgnoreOutOfRange) { if (item.DestinationVector != Bot.Character.Data.Position) { continue; } } returnAbility = item; break; } //Setup Ability (sets vars according to current cache) Skill.SetupAbilityForUse(ref returnAbility); return(returnAbility); }
///<summary> ///Sets criteria based on object given. ///</summary> internal virtual Skill AbilitySelector(CacheUnit obj, bool IgnoreOutOfRange = false) { //Reset default attack can use CanUseDefaultAttack = !HotBar.HotbarPowers.Contains(DefaultAttack.Power) ? false : true; //Reset waiting for special! bWaitingForSpecial = false; ConditionCriteraTypes criterias = ConditionCriteraTypes.All; //Although the unit is a cluster exception.. we should verify it is not a clustered object. if (obj.IsClusterException && obj.BeingIgnoredDueToClusterLogic) { criterias = ConditionCriteraTypes.SingleTarget; } return(AbilitySelector(criterias, IgnoreOutOfRange)); }
internal List <Skill> ReturnAllUsableAbilities(CacheUnit obj, bool IgnoreOutOfRange = false) { //Reset default attack can use CanUseDefaultAttack = !Abilities.ContainsKey(DefaultAttack.Power) ? false : true; ConditionCriteraTypes criterias = ConditionCriteraTypes.All; //Although the unit is a cluster exception.. we should verify it is not a clustered object. if (obj.IsClusterException && obj.BeingIgnoredDueToClusterLogic) { criterias = ConditionCriteraTypes.SingleTarget; } List <Skill> UsableAbilities = new List <Skill>(); foreach (var item in SortedAbilities) { //Check precast conditions if (!item.CheckPreCastConditionMethod()) { continue; } //Check Combat Conditions! if (!item.CheckCombatConditionMethod(criterias)) { continue; } //Check if we can execute or if it requires movement if (IgnoreOutOfRange) { if (item.DestinationVector != Bot.Character.Data.Position) { continue; } } Skill ability = item; Skill.SetupAbilityForUse(ref ability); UsableAbilities.Add(ability); } return(UsableAbilities); }
///<summary> ///Check Combat ///</summary> public bool CheckCombatConditionMethod(ConditionCriteraTypes conditions = ConditionCriteraTypes.All, CacheUnit unit = null) { //Order in which tests are conducted.. //Units in Range (Not Cluster) //Clusters //Single Target //If all are null or any of them are successful, then we test Custom Conditions //Custom Condition //Reset Last Condition LastConditionPassed = ConditionCriteraTypes.None; bool TestCustomConditions = false; bool FailedCondition = false; if (conditions.HasFlag(ConditionCriteraTypes.Cluster) && ClusterConditions.Count > 0) { foreach (var condition in ClusterConditions) { FailedCondition = false; foreach (Func <bool> item in condition.Criteria.GetInvocationList()) { if (!item()) { FailedCondition = true; break; } } //Last Condition did not fail.. (Success!) if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.Cluster; LastClusterConditionSuccessful = condition; TestCustomConditions = true; break; } } } if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.SingleTarget) && SingleUnitCondition.Count > 0) { //We iterate each condition in the list and test the criteria. foreach (var condition in SingleUnitCondition) { FailedCondition = false; foreach (Func <CacheUnit, bool> item in condition.Criteria.GetInvocationList()) { if (!item(unit)) { FailedCondition = true; break; } } //Last Condition did not fail.. (Success!) if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.SingleTarget; TestCustomConditions = true; break; } } } //If TestCustomCondtion failed, and FailedCondition is true.. then we tested a combat condition. //If FailedCondition is false, then we never tested a condition. if (!TestCustomConditions && !TestCustomCombatConditions) { return(false); //&&FailedCondition } foreach (Func <CacheUnit, bool> item in FcriteriaCombat.GetInvocationList()) { if (!item(unit)) { return(false); } } return(true); }
///<summary> ///Selects first Ability that is successful in precast and combat testing. ///</summary> private Skill AbilitySelector(ConditionCriteraTypes criteria = ConditionCriteraTypes.All, bool IgnoreOutOfRange = false, CacheUnit unit = null) { Skill returnAbility = DefaultAttack; foreach (var item in SortedAbilities) { //Check precast conditions if (!item.CheckPreCastConditionMethod()) continue; //Check Combat Conditions! if (!item.CheckCombatConditionMethod(criteria, unit)) { continue; } //Check if we can execute or if it requires movement if (IgnoreOutOfRange) { if (item.DestinationVector != FunkyGame.Hero.Position) continue; } returnAbility = item; break; } //Setup Ability (sets vars according to current cache) Skill.SetupAbilityForUse(ref returnAbility, unit); return returnAbility; }
///<summary> ///Check Combat ///</summary> public bool CheckCombatConditionMethod(ConditionCriteraTypes conditions = ConditionCriteraTypes.All) { //Order in which tests are conducted.. //Units in Range (Not Cluster) //Clusters //Single Target //If all are null or any of them are successful, then we test Custom Conditions //Custom Condition //Reset Last Condition LastConditionPassed = ConditionCriteraTypes.None; bool TestCustomConditions = false; bool FailedCondition = false; if (conditions.HasFlag(ConditionCriteraTypes.ElitesInRange) && FElitesInRangeConditions != null) { foreach (Func <bool> item in FElitesInRangeConditions.GetInvocationList()) { if (!item()) { FailedCondition = true; break; } } if (!FailedCondition) { TestCustomConditions = true; LastConditionPassed = ConditionCriteraTypes.ElitesInRange; } } if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.UnitsInRange) && FUnitsInRangeConditions != null) { FailedCondition = false; foreach (Func <bool> item in FUnitsInRangeConditions.GetInvocationList()) { if (!item()) { FailedCondition = true; break; } } if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.UnitsInRange; TestCustomConditions = true; } } if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.Cluster) && FClusterConditions != null) { FailedCondition = false; if (!FClusterConditions.Invoke()) { FailedCondition = true; } if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.Cluster; TestCustomConditions = true; } } if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.SingleTarget) && FSingleTargetUnitCriteria != null) { FailedCondition = false; foreach (Func <bool> item in FSingleTargetUnitCriteria.GetInvocationList()) { if (!item()) { FailedCondition = true; break; } } if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.SingleTarget; TestCustomConditions = true; } } //If TestCustomCondtion failed, and FailedCondition is true.. then we tested a combat condition. //If FailedCondition is false, then we never tested a condition. if (!TestCustomConditions && !TestCustomCombatConditions) { return(false); //&&FailedCondition } foreach (Func <bool> item in FcriteriaCombat.GetInvocationList()) { if (!item()) { return(false); } } return(true); }
///<summary> ///Check Combat ///</summary> public bool CheckCombatConditionMethod(ConditionCriteraTypes conditions = ConditionCriteraTypes.All) { //Order in which tests are conducted.. //Units in Range (Not Cluster) //Clusters //Single Target //If all are null or any of them are successful, then we test Custom Conditions //Custom Condition //Reset Last Condition LastConditionPassed = ConditionCriteraTypes.None; bool TestCustomConditions = false; bool FailedCondition = false; if (conditions.HasFlag(ConditionCriteraTypes.ElitesInRange) && FElitesInRangeConditions != null) { foreach (Func<bool> item in FElitesInRangeConditions.GetInvocationList()) { if (!item()) { FailedCondition = true; break; } } if (!FailedCondition) { TestCustomConditions = true; LastConditionPassed = ConditionCriteraTypes.ElitesInRange; } } if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.UnitsInRange) && FUnitsInRangeConditions != null) { FailedCondition = false; foreach (Func<bool> item in FUnitsInRangeConditions.GetInvocationList()) { if (!item()) { FailedCondition = true; break; } } if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.UnitsInRange; TestCustomConditions = true; } } if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.Cluster) && FClusterConditions != null) { FailedCondition = false; if (!FClusterConditions.Invoke()) { FailedCondition = true; } if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.Cluster; TestCustomConditions = true; } } if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.SingleTarget) && FSingleTargetUnitCriteria != null) { FailedCondition = false; foreach (Func<bool> item in FSingleTargetUnitCriteria.GetInvocationList()) { if (!item()) { FailedCondition = true; break; } } if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.SingleTarget; TestCustomConditions = true; } } //If TestCustomCondtion failed, and FailedCondition is true.. then we tested a combat condition. //If FailedCondition is false, then we never tested a condition. if (!TestCustomConditions && !TestCustomCombatConditions) return false; //&&FailedCondition foreach (Func<bool> item in FcriteriaCombat.GetInvocationList()) if (!item()) return false; return true; }
///<summary> ///Check Combat ///</summary> public bool CheckCombatConditionMethod(ConditionCriteraTypes conditions = ConditionCriteraTypes.All, CacheUnit unit = null) { //Order in which tests are conducted.. //Units in Range (Not Cluster) //Clusters //Single Target //If all are null or any of them are successful, then we test Custom Conditions //Custom Condition //Reset Last Condition LastConditionPassed = ConditionCriteraTypes.None; bool TestCustomConditions = false; bool FailedCondition = false; if (conditions.HasFlag(ConditionCriteraTypes.Cluster) && ClusterConditions.Count > 0) { foreach (var condition in ClusterConditions) { FailedCondition = false; foreach (Func<bool> item in condition.Criteria.GetInvocationList()) { if (!item()) { FailedCondition = true; break; } } //Last Condition did not fail.. (Success!) if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.Cluster; LastClusterConditionSuccessful=condition; TestCustomConditions = true; break; } } } if ((!TestCustomConditions || FailedCondition) && conditions.HasFlag(ConditionCriteraTypes.SingleTarget) && SingleUnitCondition.Count > 0) { //We iterate each condition in the list and test the criteria. foreach (var condition in SingleUnitCondition) { FailedCondition = false; foreach (Func<CacheUnit,bool> item in condition.Criteria.GetInvocationList()) { if (!item(unit)) { FailedCondition = true; break; } } //Last Condition did not fail.. (Success!) if (!FailedCondition) { LastConditionPassed = ConditionCriteraTypes.SingleTarget; TestCustomConditions = true; break; } } } //If TestCustomCondtion failed, and FailedCondition is true.. then we tested a combat condition. //If FailedCondition is false, then we never tested a condition. if (!TestCustomConditions && !TestCustomCombatConditions) return false; //&&FailedCondition foreach (Func<CacheUnit, bool> item in FcriteriaCombat.GetInvocationList()) if (!item(unit)) return false; return true; }