public Composite CreateBehavior_MoveToTarget(WoWObjectDelegate target) { return( new PrioritySelector(context => target(), // If we're not at target, move to it... new Decorator(wowObject => (((WoWObject)wowObject).Distance > ((WoWObject)wowObject).InteractRange), new Sequence( new Action(wowObject => { TreeRoot.StatusText = string.Format("Moving to {0} (distance: {1:0.0}) ", ((WoWObject)wowObject).SafeName, ((WoWObject)wowObject).Distance); }), CreateBehavior_InternalMoveTo(() => target().Location) )) )); }
public Composite CreateBehavior_MoveToTarget(WoWObjectDelegate target) { return ( new PrioritySelector(context => target(), // If we're not at target, move to it... new Decorator(wowObject => (((WoWObject)wowObject).Distance > ((WoWObject)wowObject).InteractRange), new Sequence( new DecoratorContinueThrottled(Delay_StatusUpdateThrottle, ret => true, new Action(wowObject => { TreeRoot.StatusText = string.Format("Moving to {0} (distance: {1:0.0}) ", ((WoWObject)wowObject).Name, ((WoWObject)wowObject).Distance); })), CreateBehavior_InternalMoveTo(() => target().Location) )) )); }
public Composite CreateBehavior_MoveNearTarget(WoWObjectDelegate target, DistanceDelegate minRange, DistanceDelegate maxRange) { return ( new PrioritySelector(context => target(), // If we're too far from target, move closer... new Decorator(wowObject => (((WoWObject)wowObject).Distance > maxRange()), new Sequence( new DecoratorThrottled(Delay_StatusUpdateThrottle, ret => true, new Action(wowObject => { TreeRoot.StatusText = string.Format("Moving to {0} (distance: {1:0.0}) ", ((WoWObject)wowObject).Name, ((WoWObject)wowObject).Distance); })), CreateBehavior_InternalMoveTo(() => target().Location) )), // If we're too close to target, back up... new Decorator(wowObject => (((WoWObject)wowObject).Distance < minRange()), new PrioritySelector( // If backing up, make sure we're facing the target... new Decorator(ret => Me.MovementInfo.MovingBackward, new Action(wowObject => WoWMovement.Face(((WoWObject)wowObject).Guid))), // Start backing up... new Action(wowObject => { TreeRoot.StatusText = "Too close to \"" + ((WoWObject)wowObject).Name + "\"--backing up"; WoWMovement.MoveStop(); WoWMovement.Face(((WoWObject)wowObject).Guid); WoWMovement.Move(WoWMovement.MovementDirection.Backwards); }) )), // We're between MinRange and MaxRange, stop movement and face the target... new Decorator(ret => Me.IsMoving, new Sequence( new Action(delegate { WoWMovement.MoveStop(); }), new Action(wowObject => WoWMovement.Face(((WoWObject)wowObject).Guid)), new WaitContinue(Delay_WowClientLagTime, ret => false, new ActionAlwaysSucceed()), new ActionAlwaysFail() // fall through to next element )) )); }
public Composite CreateBehavior_MoveToTarget(WoWObjectDelegate target) { return ( new PrioritySelector(context => target(), // If we 'pass by' the current hotspot on the way to the target, advance to next hotspot... // This prevents bot-like 'back tracking'. new Decorator(ret => (Me.Location.Distance(_hotSpots.Peek().Location) < (CollectionDistance / 2)), new Action(delegate { // Rotate to the next hotspot in the list... _hotSpots.Enqueue(_hotSpots.Peek()); _hotSpots.Dequeue(); return (RunStatus.Failure); // Fall through to next })), // If we're not at target, move to it... new Decorator(wowObject => (((WoWObject)wowObject).Distance > ((WoWObject)wowObject).InteractRange), new Sequence( new DecoratorContinueThrottled(Delay_StatusUpdateThrottle, ret => true, new Action(wowObject => { TreeRoot.StatusText = string.Format("Moving to {0} (distance: {1:0.0}) ", ((WoWObject)wowObject).Name, ((WoWObject)wowObject).Distance); })), CreateBehavior_InternalMoveTo(() => new WoWPointNamed(target().Location)) )), // Update status... new Action(wowObject => { TreeRoot.StatusText = string.Format("Moving to {0} (distance: {1:0.0}) ", ((WoWObject)wowObject).Name, ((WoWObject)wowObject).Distance); return (RunStatus.Failure); }) )); }