public static void ClientDisconnectedEventHandler(UdpClient client) { NetWerewolfPlayer player = client.GetPlayer(); player.Status = PlayerStatus.Dead; ServerInstance.Send(2, player.PlayerID); // RemoteClientDisconnected(uint) ServerInstance.Send(5, 0u, $"{player.Name} has fallen..."); try { ConnectedPlayers.Remove(player); GameInfo.Players.Remove(player); } catch { } try { NetWerewolfPlayer nextHost = ConnectedPlayers.First(); if (nextHost != null && !nextHost.IsHost) { nextHost.IsHost = true; nextHost.PlayerClient.Send(199, true); ServerInstance.Send(5, 0, $"{nextHost.Name} is now the game master."); } } catch { } // No players left to be host }
public void RemovePlayerFromConnectedPlayers(string _playerID) { if (ConnectedPlayers.ContainsKey(_playerID)) { ConnectedPlayers.Remove(_playerID); NumConnectedPlayers--; } }
static void VerifyRoleHashesAndSendClientList(UdpClient sender, string playerName, string[] roleHashes) { // TODO: verify the role hashes if (roleHashes.Length < LoadedRoleHashes.Count) { NetBase.WriteDebug($"Received role hash list from {sender.EndPoint as IPEndPoint} \"{playerName}\" has less roles than the server, impossible to verify roles."); ConnectedPlayers.Remove(sender.GetPlayer()); sender.Disconnect(); return; } for (int i = 0; i < LoadedRoleHashes.Count; ++i) { string hash = LoadedRoleHashes[i]; if (!roleHashes.Contains(hash)) { NetBase.WriteDebug($"Client {sender.EndPoint as IPEndPoint} \"{playerName}\" missing hash {hash} corresponding to role {LoadedRoleTypes.Values.ElementAt(i).AssemblyQualifiedName}!"); ConnectedPlayers.Remove(sender.GetPlayer()); sender.Disconnect(); return; } else { NetBase.WriteDebug($"{sender.EndPoint as IPEndPoint}: {hash} {LoadedRoleTypes.Values.ElementAt(i).AssemblyQualifiedName} success!"); } } NetWerewolfPlayer playerRef = sender.GetPlayer(); playerRef.Name = playerName; playerRef.RoleListVerified = true; GameInfo.AddPlayerAndAssignId(playerRef); ServerInstance.Send(5, 0u, GenRandomJoinMessage(playerName)); if (GameInfo.Players.Count == 1) { playerRef.IsHost = true; sender.Send(199, true); //SetHost(UdpClient, bool) ServerInstance.Send(5, 0u, $"{playerRef.Name} is now the game master."); } sender.Send(200, playerRef.PlayerID, ConnectedPlayers.Select(p => p.PlayerID).ToArray(), ConnectedPlayers.Select(p => p.Name).ToArray()); // ReceivePlayerList(uint, uint[], string[]); foreach (string hash in ActiveRoleHashes) { sender.Send(190, hash, false); } ServerInstance.Send(1, playerRef.PlayerID, playerRef.Name); // UpdateClientInfo(uint, string) }
private static void Prefix(ref ZNet __instance, ref ZRpc rpc) { ZNetPeer peer = __instance.GetPeer(rpc); if (peer.m_characterID.IsNone() || !ZNet.instance.IsServer() || !__instance.IsConnected(peer.m_uid)) { return; } ConnectedPlayers.Remove(peer.m_uid); ValheimEventHandler.OnPlayerDisconnected(GetPlayerInfoFromPeer(peer)); }
/// <summary> /// Disconnects all players from the server /// </summary> private void DisconnectPlayer(IPlayer connectedUser) { try { Thread playerThread = ConnectedPlayers[connectedUser]; ConnectedPlayers.Remove(connectedUser); connectedUser.Disconnect(); connectedUser = null; playerThread.Abort(); } catch (Exception ex) { Log.Error(string.Format("Error when disconnecting players. {0}", ex.Message)); } }
static void RemoteClientDisconnected(UdpClient client, uint pid) { if (LocalPlayer.PlayerID == pid) { CloseClientInstance(); } if (ServerInstance == null) { ConnectedPlayers.Remove(ConnectedPlayers.Find(p => p.PlayerID == pid)); } // TODO: GameInfo removal (Maybe make dead if alive, and then remove once spectator?) UpdatePlayerList.Invoke(pid, true); }
public void OnClose(IWebSocketConnection socket) { // Remove disconnected player from manager. var player = ConnectedPlayers.Find(x => x.Socket == socket); if (player != null) { ConnectedPlayers.Remove(player); Logger.Log(this, "Player {0} disconnected", player.Data.Name); NotifyPlayerEvent(player, PlayerAction.Disconnected); if (PlayerDisconnected != null) { PlayerDisconnected(this, player); } } }
private void OnUserDisconnect(string nick) { var helpPlayer = ConnectedPlayers.First(player => player.Nick == nick); ConnectedPlayers.Remove(helpPlayer); AvailablePlayers.Remove(nick); if (ChatTabs.Count == 0) { return; } var chatTab = ChatTabs.First(item => item.Header == nick); if (chatTab != null) { ChatTabs.Remove(chatTab); } }
public void Unregister(string nick) { if (ConnectedPlayers[nick].IsPlaying) { var game = AllGames.First(pair => pair.Value.MyMatches.ContainsKey(nick)).Value; if (game != null) { var otherMatch = game.MyMatches.Select(pair => pair.Value).First(match => match.PlayerNick != nick); ConnectedPlayers[otherMatch.PlayerNick].Client.GameCancel(); ConnectedPlayers[otherMatch.PlayerNick].IsPlaying = false; SendMessageToAll(new TextMessage { SenderNick = otherMatch.PlayerNick, Type = MessageType.PlayerFinishedMessage }); AllGames.Remove(game.Id); } } ConnectedPlayers.Remove(nick); }
private void PlayerDisconnectCallback(CSteamID id) { ConnectedPlayers.Remove(id.m_SteamID); }
//Removes players from our list of connections private void removeDisconnectedUser(NetConnection conn) { ConnectedPlayers.Remove(ConnectedPlayers.Where(f => f.Connection.RemoteUniqueIdentifier == conn.RemoteUniqueIdentifier).FirstOrDefault()); }