protected override bool CanRun(object context)
        {
            if (!AutoAngler.Instance.MySettings.Poolfishing || (AutoAngler.FishAtHotspot && StyxWoW.Me.Location.Distance(AutoAngler.CurrentPoint) <= 3))
            {
                return(true);
            }
            WoWGameObject pool = ObjectManager.GetObjectsOfType <WoWGameObject>()
                                 .OrderBy(o => o.Distance)
                                 .FirstOrDefault(o => o.SubType == WoWGameObjectType.FishingHole && !Blacklist.Contains(o.Guid) &&
                                                 // Check if we're fishing from specific pools
                                                 ((AutoAngler.PoolsToFish.Count > 0 && AutoAngler.PoolsToFish.Contains(o.Entry)) ||
                                                  AutoAngler.PoolsToFish.Count == 0) &&
                                                 // chaeck if pool is in a blackspot
                                                 !IsInBlackspot(o) &&
                                                 // check if player is near pool
                                                 NinjaCheck(o));

            WoWGameObject poiObj = BotPoi.Current != null && BotPoi.Current.Type == PoiType.Harvest
                                       ? (WoWGameObject)BotPoi.Current.AsObject
                                       : null;

            if (pool != null)
            {
                if (poiObj == null || poiObj.Entry != pool.Entry)
                {
                    BotPoi.Current = new BotPoi(pool, PoiType.Harvest);
                    AutoAngler.CycleToNextIfBehind(pool);
                }
                return(true);
            }
            return(false);
        }
        protected override RunStatus Run(object context)
        {
            if (LootAction.GetLoot())
            {
                return(RunStatus.Success);
            }
            //  dks can refresh water walking while flying around.
            if (AutoAngler.Instance.MySettings.UseWaterWalking &&
                StyxWoW.Me.Class == WoWClass.DeathKnight && !WaterWalking.IsActive)
            {
                WaterWalking.Cast();
            }
            if (AutoAngler.CurrentPoint == WoWPoint.Zero)
            {
                return(RunStatus.Failure);
            }
            if (AutoAngler.FishAtHotspot && StyxWoW.Me.Location.Distance(AutoAngler.CurrentPoint) <= 3)
            {
                return(RunStatus.Failure);
            }
            //float speed = StyxWoW.Me.MovementInfo.CurrentSpeed;
            //float modifier = _settings.Fly ? 5f : 2f;
            //float precision = speed > 7 ? (modifier*speed)/7f : modifier;
            float precision = StyxWoW.Me.IsFlying ? AutoAnglerSettings.Instance.PathPrecision : 3;

            if (StyxWoW.Me.Location.Distance(AutoAngler.CurrentPoint) <= precision)
            {
                AutoAngler.CycleToNextPoint();
            }
            if (_settings.Fly)
            {
                if (_me.IsSwimming)
                {
                    if (_me.GetMirrorTimerInfo(MirrorTimerType.Breath).CurrentTime > 0)
                    {
                        WoWMovement.Move(WoWMovement.MovementDirection.JumpAscend);
                    }
                    else if (_me.MovementInfo.IsAscending || _me.MovementInfo.JumpingOrShortFalling)
                    {
                        WoWMovement.MoveStop(WoWMovement.MovementDirection.JumpAscend);
                    }
                }
                if (!StyxWoW.Me.Mounted)
                {
                    Flightor.MountHelper.MountUp();
                }
                Flightor.MoveTo(AutoAngler.CurrentPoint);
            }
            else
            {
                if (!StyxWoW.Me.Mounted && Mount.ShouldMount(AutoAngler.CurrentPoint) && Mount.CanMount())
                {
                    Mount.MountUp(() => AutoAngler.CurrentPoint);
                }
                Navigator.MoveTo(AutoAngler.CurrentPoint);
            }
            return(RunStatus.Success);
        }