protected override Composite CreateBehavior()
        {
            return(_root ?? (_root =
                                 new PrioritySelector(

                                     new Decorator(ret => Counter >= NumOfTimes || (Existing && CurrentObject == null),
                                                   new Action(ret => _isBehaviorDone = true)),

                                     new PrioritySelector(
                                         new Decorator(ret => (CurrentObject != null && lastunit != CurrentObject.Guid) || timer.Elapsed.Seconds > 100,
                                                       new Sequence(
                                                           new Action(ret => timer.Reset()),
                                                           new Action(ret => timer.Start()),
                                                           new Action(ret => lastunit = CurrentObject.Guid)
                                                           )
                                                       ),
                                         new Decorator(ret => CurrentObject != null && (!Navigator.CanNavigateFully(Me.Location, CurrentObject.Location) || timer.Elapsed.Seconds > 90),
                                                       new Sequence(
                                                           new Action(ret => { TreeRoot.StatusText = "Can't navigate to " + CurrentObject.Name; }),
                                                           new Action(ret => _npcBlacklist.Add(CurrentObject.Guid))
                                                           )
                                                       ),
                                         new Decorator(ret => CurrentObject != null && CurrentObject.Location.DistanceSqr(Me.Location) > Range * Range,
                                                       new Sequence(
                                                           new Action(ret => { TreeRoot.StatusText = timer.Elapsed.Seconds + " Moving to interact with - " + CurrentObject.Name; }),
                                                           new Action(ret => Navigator.MoveTo(CurrentObject.Location))
                                                           )
                                                       ),

                                         new Decorator(ret => CurrentObject != null && CurrentObject.Location.DistanceSqr(Me.Location) <= Range * Range,
                                                       new Sequence(
                                                           new Action(ret =>
            {
                TreeRoot.StatusText = "Interacting with - " + CurrentObject.Name;
                WoWMovement.MoveStop();
                Thread.Sleep(100);
                CurrentObject.Interact();
                _npcBlacklist.Add(CurrentObject.Guid);

                Thread.Sleep(2000);
                Counter++;
            }),

                                                           new DecoratorContinue(
                                                               ret => GossipOptions.Length > 0,
                                                               new Action(ret =>
            {
                foreach (var gos in GossipOptions)
                {
                    GossipFrame.Instance.SelectGossipOption(gos);
                    Thread.Sleep(1000);
                }
            })),

                                                           new DecoratorContinue(
                                                               ret => Loot && LootFrame.Instance.IsVisible,
                                                               new Action(ret => LootFrame.Instance.LootAll())),

                                                           new DecoratorContinue(
                                                               ret => BuyItemId != 0 && MerchantFrame.Instance.IsVisible,
                                                               new Action(ret =>
            {
                var items = MerchantFrame.Instance.GetAllMerchantItems();
                var item = items.FirstOrDefault(i => i.ItemId == BuyItemId && (i.BuyPrice * (ulong)BuyItemCount) <= Me.Copper && (i.NumAvailable >= BuyItemCount || i.NumAvailable == -1));

                if (item != null)
                {
                    MerchantFrame.Instance.BuyItem(item.Index, BuyItemCount);
                    Thread.Sleep(1500);
                }
            })),

                                                           new DecoratorContinue(
                                                               ret => BuySlot != -1 && BuyItemId == 0 && MerchantFrame.Instance.IsVisible,
                                                               new Action(ret =>
            {
                var item = MerchantFrame.Instance.GetMerchantItemByIndex(BuySlot);
                if (item != null && (item.BuyPrice * (ulong)BuyItemCount) <= Me.Copper && (item.NumAvailable >= BuyItemCount || item.NumAvailable == -1))
                {
                    MerchantFrame.Instance.BuyItem(BuySlot, BuyItemCount);
                    Thread.Sleep(1500);
                }
            })),
                                                           new DecoratorContinue(
                                                               ret => Me.CurrentTarget != null && Me.CurrentTarget == CurrentObject,
                                                               new Action(ret => Me.ClearTarget())),

                                                           new Action(ret => Thread.Sleep(WaitTime))

                                                           )),
                                         new Decorator(ret => !Path.Any(),
                                                       new Action(delegate
            {
                ParsePath();
            })
                                                       ),
                                         new Decorator(ret => Path.Peek().Distance(Me.Location) <= 5,
                                                       new Action(delegate
            {
                Path.Dequeue();
            })
                                                       ),
                                         new Decorator(ret => Me.GetSkill(Styx.SkillLine.Riding).CurrentValue != 0 && canmount && !Me.Mounted && !Me.IsCasting && Path.Peek().Distance(Me.Location) > 100,
                                                       new Action(delegate
            {
                TreeRoot.StatusText = "Mounting";
                WoWMovement.MoveStop();
                Thread.Sleep(100);
                Styx.Logic.Mount.MountUp();
            })
                                                       ),
                                         new Decorator(
                                             ret => Path.Peek().Distance(Me.Location) > 5,
                                             new Sequence(
                                                 new Action(ret => { TreeRoot.StatusText = "Moving towards - " + Path.Peek(); }),
                                                 new Action(ret => Navigator.MoveTo(Path.Peek())))),

                                         new Decorator(
                                             ret => !WaitForNpcs && CurrentObject == null,
                                             new Action(ret => _isBehaviorDone = true)),

                                         new Action(ret => TreeRoot.StatusText = "Waiting for object to spawn")

                                         ))));
        }