Exemple #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);
        }