public override void ProcessPacket(Guid sourcePlayerId, Packet packet, IProcessorContext context)
        {
            PlayerDisconnectedPacket playerDisconnectedPacket = (PlayerDisconnectedPacket)packet;
            ClientProcessorContext   processorContext         = (ClientProcessorContext)context;

            if (processorContext.Client.LocalPlayer.HasValue)
            {
                if (processorContext.Client.LocalPlayer.Value.Id != playerDisconnectedPacket.PlayerId)
                {
                    Player player = processorContext.Client.PlayerManager.GetPlayer(playerDisconnectedPacket.PlayerId);
                    string reason = DisconnectReasonUtils.ReasonToString(playerDisconnectedPacket.Reason);
                    MessageLog.Show($"Player {player.Name} left the game: {reason}", null, MessageLogFlags.MessageSoundNormal);
                }

                if (processorContext.Client.LocalPlayer.Value.Id == playerDisconnectedPacket.PlayerId)
                {
                    // The server has freed up resources associated with our player
                    // This may mean that we requested a disconnect
                    // or we're in for a big surprise
                    processorContext.Client.LocalPlayer = null;
                }
            }

            processorContext.Client.PlayerManager.OnPlayerRemoved(playerDisconnectedPacket.PlayerId);
        }
Exemplo n.º 2
0
        private void OnPlayerLeft(PlayerDisconnectedPacket packet)
        {
            var player = _playerManager.RemovePlayer(packet.Id);

            if (player != null)
            {
                Debug.Log($"Player disconnected: {player.Name}");
            }
        }
Exemplo n.º 3
0
        public bool DestroyPlayer(Guid playerId, DisconnectReason reason)
        {
            bool removed = connectedPlayers.Remove(playerId);

            Console.WriteLine($"Player destroyed: {playerId}");

            PlayerDisconnectedPacket playerDisconnectedPacket = new PlayerDisconnectedPacket(playerId, reason);

            server.SendPacketToAll(playerDisconnectedPacket);

            PlayerEventArgs playerEventArgs = new PlayerEventArgs(playerId);

            PlayerRemoved?.Invoke(this, playerEventArgs);
            return(removed);
        }