Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        private static void PlacePet(Session Session, ClientMessage Message)
        {
            RoomInstance Instance = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId);

            if (Instance == null || (!Instance.CheckUserRights(Session, true) && !Instance.Info.AllowPets))
            {
                return;
            }

            Pet Pet = Session.PetInventoryCache.GetPet(Message.PopWiredUInt32());

            if (Pet == null)
            {
                return;
            }

            Vector2 DesiredPosition = new Vector2(Message.PopWiredInt32(), Message.PopWiredInt32());

            if (!Instance.IsValidPosition(DesiredPosition))
            {
                return;
            }

            Bot BotDefinition = BotManager.GetHandlerDefinitionForPetType(Pet.Type);

            if (BotDefinition == null)
            {
                Session.SendData(NotificationMessageComposer.Compose("This pet cannot be placed right now. Please try again later."));
                return;
            }

            if (!Instance.CanPlacePet(Instance.CheckUserRights(Session, true)))
            {
                Session.SendData(RoomItemPlacementErrorComposer.Compose(RoomItemPlacementErrorCode.PetLimitReached));
                return;
            }

            Vector3 Position = new Vector3(DesiredPosition.X, DesiredPosition.Y, Instance.GetUserStepHeight(DesiredPosition));

            Pet.MoveToRoom(Instance.RoomId, Position);
            Instance.AddBotToRoom(BotManager.CreateNewInstance(BotDefinition, Instance.RoomId, Position, Pet));

            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
            {
                Pet.SynchronizeDatabase(MySqlClient);
            }

            Session.SendData(InventoryPetRemovedComposer.Compose(Pet.Id));
        }