Ejemplo n.º 1
0
        ///<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);
        }
Ejemplo n.º 2
0
        ///<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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        ///<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);
        }
Ejemplo n.º 5
0
        ///<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;
        }
Ejemplo n.º 6
0
        ///<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);
        }
Ejemplo n.º 7
0
        ///<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;
        }
Ejemplo n.º 8
0
        ///<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;
        }