示例#1
0
        public void OnPlayerMoved(IWorldClient client, PlayerMovedPacket packet)
        {
            if (client.Player.IsDead)
            {
                _logger.LogError($"Player {client.Player.Object.Name} is dead, he cannot move with keyboard.");
                return;
            }

            // TODO: Check if player is flying

            client.Player.Follow.Reset();
            client.Player.Battle.Reset();
            client.Player.Object.Position            = packet.BeginPosition + packet.DestinationPosition;
            client.Player.Object.Angle               = packet.Angle;
            client.Player.Object.MovingFlags         = (ObjectState)packet.State;
            client.Player.Object.MotionFlags         = (StateFlags)packet.StateFlag;
            client.Player.Moves.IsMovingWithKeyboard = client.Player.Object.MovingFlags.HasFlag(ObjectState.OBJSTA_FMOVE) ||
                                                       client.Player.Object.MovingFlags.HasFlag(ObjectState.OBJSTA_BMOVE);
            client.Player.Moves.DestinationPosition = packet.BeginPosition + packet.DestinationPosition;

            _moverPacketFactory.SendMoverMoved(client.Player,
                                               packet.BeginPosition,
                                               packet.DestinationPosition,
                                               client.Player.Object.Angle,
                                               (uint)client.Player.Object.MovingFlags,
                                               (uint)client.Player.Object.MotionFlags,
                                               packet.Motion,
                                               packet.MotionEx,
                                               packet.Loop,
                                               packet.MotionOption,
                                               packet.TickCount);
        }
示例#2
0
        public static void OnPlayerMoved(WorldClient client, INetPacketStream packet)
        {
            var playerMovedPacket = new PlayerMovedPacket(packet);

            if (client.Player.Health.IsDead)
            {
                Logger.LogError($"Player {client.Player.Object.Name} is dead, he cannot move with keyboard.");
                return;
            }

            // Cancel current item usage action and SFX
            client.Player.NotifySystem <SpecialEffectSystem>(new SpecialEffectBaseMotionEventArgs(StateModeBaseMotion.BASEMOTION_OFF));
            client.Player.Delayer.CancelAction(client.Player.Inventory.ItemInUseActionId);
            client.Player.Inventory.ItemInUseActionId = Guid.Empty;

            // TODO: Check if player is flying

            client.Player.Follow.Reset();
            client.Player.Battle.Reset();
            client.Player.Object.Position            = playerMovedPacket.BeginPosition + playerMovedPacket.DestinationPosition;
            client.Player.Object.Angle               = playerMovedPacket.Angle;
            client.Player.Object.MovingFlags         = (ObjectState)playerMovedPacket.State;
            client.Player.Object.MotionFlags         = (StateFlags)playerMovedPacket.StateFlag;
            client.Player.Moves.IsMovingWithKeyboard = client.Player.Object.MovingFlags.HasFlag(ObjectState.OBJSTA_FMOVE) ||
                                                       client.Player.Object.MovingFlags.HasFlag(ObjectState.OBJSTA_BMOVE);
            client.Player.Moves.DestinationPosition = playerMovedPacket.BeginPosition + playerMovedPacket.DestinationPosition;

            WorldPacketFactory.SendMoverMoved(client.Player,
                                              playerMovedPacket.BeginPosition,
                                              playerMovedPacket.DestinationPosition,
                                              client.Player.Object.Angle,
                                              (uint)client.Player.Object.MovingFlags,
                                              (uint)client.Player.Object.MotionFlags,
                                              playerMovedPacket.Motion,
                                              playerMovedPacket.MotionEx,
                                              playerMovedPacket.Loop,
                                              playerMovedPacket.MotionOption,
                                              playerMovedPacket.TickCount);
        }