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); }
private void OnPlayerLeft(PlayerDisconnectedPacket packet) { var player = _playerManager.RemovePlayer(packet.Id); if (player != null) { Debug.Log($"Player disconnected: {player.Name}"); } }
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); }