ACR_CreatureBehavior.CreatureObject.TryToAttackMelee C# (CSharp) Method

TryToAttackMelee() public method

public TryToAttackMelee ( bool PrioritizeSoftTargets = false, bool DistributeAttacks = false ) : bool
PrioritizeSoftTargets bool
DistributeAttacks bool
return bool
        public bool TryToAttackMelee(bool PrioritizeSoftTargets = false, bool DistributeAttacks = false)
        {
            CreatureObject finalTarget = null;
            if (PrioritizeSoftTargets)
            {
                foreach (CreatureObject enemy in Party.EnemySoftTargets)
                {
                    if(Script.GetAttackTarget(enemy.ObjectId) != this.ObjectId && Script.GetDistanceBetween(enemy.ObjectId, this.ObjectId) < 5.0f)
                    {
                        finalTarget = enemy;
                        break;
                    }
                }
                if (finalTarget == null)
                {
                    foreach(CreatureObject enemy in Party.Enemies)
                    {
                        if (Script.GetAttackTarget(enemy.ObjectId) != this.ObjectId && Script.GetDistanceBetween(enemy.ObjectId, this.ObjectId) < 5.0f)
                        {
                            finalTarget = enemy;
                            break;
                        }
                    }
                }
            }
            if (DistributeAttacks && finalTarget == null)
            {
                int maxAttacking = 999;
                foreach (CreatureObject enemy in Party.EnemySoftTargets)
                {
                    int numberAttacking = 0;
                    foreach (CreatureObject ally in Party.PartyMembers)
                    {
                        if (Script.GetAttackTarget(ally.ObjectId) == enemy.ObjectId)
                        {
                            numberAttacking++;
                        }
                    }
                    if (numberAttacking == 0)
                    {
                        finalTarget = enemy;
                        break;
                    }
                    else if (numberAttacking < maxAttacking)
                    {
                        maxAttacking = numberAttacking;
                        finalTarget = enemy;
                    }
                }
            }
            if (finalTarget == null &&
                Script.GetIsObjectValid(Script.GetAttackTarget(this.ObjectId)) == CLRScriptBase.TRUE)
                    finalTarget = Server.ObjectManager.GetCreatureObject(Script.GetAttackTarget(this.ObjectId), false);
            if(finalTarget == null)
                finalTarget = Party.GetNearest(this, Party.Enemies);
            if(finalTarget == null)
                return false;

            _EquipWeapon();
            _AttackWrapper(finalTarget);
            return true;
        }