ModernUO/Projects/UOContent/Mobiles/BehaviorTreeAI/Actions/TargetActionNode.cs
2021-09-01 01:07:24 -04:00

59 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Server.Spells;
using Server.Targeting;
namespace Server.Mobiles.BehaviorTreeAI
{
public class TargetActionNode : ActionNode
{
public TargetActionNode(BehaviorTree tree) : base(tree)
{
}
public override Result Execute()
{
Target target = Tree.Mobile.Target;
if (target == null)
{
Tree.Mobile.DebugSay("Waiting for target...");
return Result.Running;
}
Mobile mobTarget = Tree.Mobile.Combatant;
if ((target.Flags & TargetFlags.Harmful) != 0 && mobTarget != null)
{
if (mobTarget.Deleted || !mobTarget.Alive)
{
Tree.Mobile.DebugSay("Canceling my target because my target is dead or does not exist");
target.Cancel(Tree.Mobile, TargetCancelType.Canceled);
return Result.Success;
}
if ((target.Range == -1 ||
Tree.Mobile.InRange(mobTarget, target.Range)) &&
Tree.Mobile.CanSee(mobTarget) &&
Tree.Mobile.InLOS(mobTarget)
)
{
Tree.Mobile.DebugSay("Targeting my combatant");
target.Invoke(Tree.Mobile, mobTarget);
return Result.Success;
}
}
else if ((target.Flags & TargetFlags.Beneficial) != 0)
{
Tree.Mobile.DebugSay("Targeting myself");
target.Invoke(Tree.Mobile, Tree.Mobile);
return Result.Success;
}
return Result.Failure;
}
}
}