* Method thinkAttack.
* @param checkRange boolean
*/
protected void thinkAttack(boolean checkRange)
{
FakePlayer actor = getActor();
Player player = actor.getPlayer();
if (player == null)
{
setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
return;
}
if (actor.isActionsDisabled() || actor.isAttackingDisabled())
{
return;
}
Creature attack_target = getAttackTarget();
if ((attack_target == null) || (attack_target.isDead()))
{
setIntention(CtrlIntention.AI_INTENTION_FOLLOW);
return;
}
if (!checkRange)
{
clientStopMoving();
actor.doAttack(attack_target);
return;
}
int range = actor.getPhysicalAttackRange();
if (range < 10)
{
range = 10;
}
boolean canSee = GeoEngine.canSeeTarget(actor, attack_target, false);
if ((!canSee && (range > 200)) || (Math.abs(actor.getZ() - attack_target.getZ()) > 200))
{
setIntention(CtrlIntention.AI_INTENTION_FOLLOW);
return;
}
range = (int) (range + actor.getMinDistance(attack_target));
if (actor.isFakeDeath())
{
actor.breakFakeDeath();
}
if (actor.isInRangeZ(attack_target, range))
{
if (!canSee)
{
setIntention(CtrlIntention.AI_INTENTION_FOLLOW);
return;
}
clientStopMoving(false);
actor.doAttack(attack_target);
}
}