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;
}