private void InstallHook() { if (_myHook != null) { return; } _myHook = new ActionRunCoroutine(ctx => MainLogic()); TreeHooks.Instance.InsertHook("Questbot_Main", 0, _myHook); BotEvents.OnBotStopped += BotEvents_OnBotStopped; BotEvents.Profile.OnNewProfileLoaded += Profile_OnNewProfileLoaded; QBCLog.Debug(this, "Installed hook"); }
private void RemoveHook() { if (_myHook == null) { return; } TreeHooks.Instance.RemoveHook("Questbot_Main", _myHook); _myHook = null; BotEvents.OnBotStopped -= BotEvents_OnBotStopped; BotEvents.Profile.OnNewProfileLoaded -= Profile_OnNewProfileLoaded; QBCLog.Debug(this, "Removed hook"); }
protected Composite CreateBehavior_Antistuck() { var prevPosition = WoWPoint.Empty; WoWPoint myLoc = WoWPoint.Empty; var moveDirection = WoWMovement.MovementDirection.None; return(new PrioritySelector( new Decorator( ctx => _stuckTimer.IsFinished, new Sequence( ctx => myLoc = WoWMovement.ActiveMover.Location, // checks if stuck new DecoratorContinue( ctx => myLoc.DistanceSqr(prevPosition) < 3 * 3, new Sequence( ctx => moveDirection = GetRandomMovementDirection(), new Action(ctx => QBCLog.Debug("Stuck. Movement Directions: {0}", moveDirection)), new Action(ctx => WoWMovement.Move(moveDirection)), new WaitContinue(2, ctx => false, new ActionAlwaysSucceed()), new Action(ctx => WoWMovement.MoveStop(moveDirection)))), new Action(ctx => prevPosition = myLoc), new Action(ctx => _stuckTimer.Reset()))))); }
private Composite CreateBehavior_Antistuck() { return(new PrioritySelector( new Decorator(context => _stuckTimer.IsFinished, new Sequence(context => _antiStuckMyLoc = WoWMovement.ActiveMover.Location, // Check if stuck... new DecoratorContinue(context => _antiStuckMyLoc.DistanceSqr(_antiStuckPrevPosition) < (3 * 3), new Sequence(context => _antiStuckPerformSimpleSequence = _antiStuckStuckSucceedTimer.IsFinished, new DecoratorContinue(context => Me.IsMounted() && !Me.IsFlying, new ActionRunCoroutine(context => CommonCoroutines.Dismount("Stuck"))), // Perform simple unstuck proceedure... new DecoratorContinue(context => _antiStuckPerformSimpleSequence, new Sequence( new Action(context => QBCLog.Debug("Stuck. Trying to jump")), new Action(context => { // ensure bot is moving forward when jumping (Wow will sometimes automatically // stop moving if running against a wall) if (ShouldPerformCTM) { WoWMovement.ClickToMove(Destination); } WoWMovement.Move(WoWMovement.MovementDirection.JumpAscend); }), new Sleep(1000), new Action(context => WoWMovement.MoveStop(WoWMovement.MovementDirection.JumpAscend)) )), // perform less simple unstuck proceedure new DecoratorContinue(context => !_antiStuckPerformSimpleSequence, new Sequence(context => _antiStuckMoveDirection = GetRandomMovementDirection(), new Action(context => QBCLog.Debug("Stuck. Movement Directions: {0}", _antiStuckMoveDirection)), new Action(context => WoWMovement.Move(_antiStuckMoveDirection)), new Sleep(2000), new Action(context => WoWMovement.MoveStop(_antiStuckMoveDirection)))), new Action(context => _antiStuckStuckSucceedTimer.Reset()))), new Action(context => _antiStuckPrevPosition = _antiStuckMyLoc), new Action(context => _stuckTimer.Reset()) )))); }