public void MoveTo(Vector2 ToPosition, bool IgnoreCanInitiate = false, bool IgnoreRedirections = false, bool DisableClipping = false) { Unidle(); if (!mInstance.IsValidPosition(ToPosition)) { return; } mEnableClipping = !DisableClipping; if (!ClippingEnabled) { IgnoreCanInitiate = true; } if (!IgnoreRedirections) { ToPosition = mInstance.GetRedirectedTarget(ToPosition); } if ((ToPosition.X == Position.X && ToPosition.Y == Position.Y) || mForcedLeave || (!IgnoreCanInitiate && !mInstance.CanInitiateMoveToPosition(ToPosition)) || (mWalkingBlocked && !DisableClipping)) { return; } lock (mMovementSyncRoot) { mMoveToAndInteract = 0; if (mPositionToSet != null) { mPosition.X = mPositionToSet.X; mPosition.Y = mPositionToSet.Y; mPosition.Z = mInstance.GetUserStepHeight(new Vector2(mPosition.X, mPosition.Y)); mPositionToSet = null; } mLeaveStepsTaken = 0; mIsLeavingRoom = false; StopMoving(); mPathfinder.MoveTo(ToPosition); } }