private void OnPlayerDisconnected(uLink.NetworkPlayer player) { HookCalled("OnPlayerDisconnected"); // Print player disconnected in in-game chat var netUser = player.GetLocalData<NetUser>(); PrintToChat($"The player {netUser.displayName} has disconnected"); }
private void OnPlayerDisconnected(uLink.NetworkPlayer player) { // Delay removing player until OnPlayerDisconnect has fired in plugins var netUser = player.GetLocalData() as NetUser; if (netUser != null) { Interface.Oxide.NextTick(() => { if (playerData.ContainsKey(netUser)) playerData.Remove(netUser); }); } }
private void base_OnPlayerDisconnected(uLink.NetworkPlayer player) { // Delay removing player until OnPlayerDisconnect has fired in plugin if (player.GetLocalData() is NetUser) { NextTick(() => { foreach (var plugin_field in onlinePlayerFields) plugin_field.Call("Remove", player); }); } }
public static void OnUserDisconnected(uLink.NetworkPlayer player, ConnectionAcceptor CA) { try { if (CA != null) { if (player != null) { object localData = player.GetLocalData(); if (localData != null) { RustServerManagement RSM = RustServerManagement.Get(); if (localData is NetUser) { NetUser user = (NetUser)localData; PlayerClient playerClient = user.playerClient; List<PlayerClient> possibleClient = new List<PlayerClient>(); try { if (playerClient == null || playerClient.netUser == null || playerClient.netPlayer == null || playerClient.userName == null) possibleClient = Array.FindAll(AllPlayerClients.ToArray(), (PlayerClient pc) => pc.netUser == user || pc.userID == user.userID || pc.netPlayer == user.networkPlayer || pc.netPlayer == player).ToList(); if (possibleClient.Count() == 1) playerClient = possibleClient[0]; if (possibleClient.Count == 0 || playerClient == null || playerClient.netUser == null || playerClient.netPlayer == null || playerClient.userName == null) { possibleClient.Clear(); LockedList<PlayerClient> playerClients = PlayerClient.All; possibleClient = Array.FindAll(playerClients.ToArray(), (PlayerClient pc) => pc.netUser == user || pc.userID == user.userID || pc.netPlayer == user.networkPlayer || pc.netPlayer == player).ToList(); } if (possibleClient.Count() == 1) playerClient = possibleClient[0]; if (possibleClient.Count == 0 || playerClient == null || playerClient.netUser == null || playerClient.netPlayer == null || playerClient.userName == null) { possibleClient.Clear(); List<PlayerClient> playerClients = RSM._playerClientList; possibleClient = Array.FindAll(playerClients.ToArray(), (PlayerClient pc) => pc.netUser == user || pc.userID == user.userID || pc.netPlayer == user.networkPlayer || pc.netPlayer == player).ToList(); } if (possibleClient.Count() == 1) playerClient = possibleClient[0]; if (possibleClient.Count == 0 || playerClient == null || playerClient.netUser == null || playerClient.netPlayer == null || playerClient.userName == null) playerClient = null; if (playerClient == null) conLog.Error("Could not find a proper playerclient after many tries!"); } catch (Exception ex) { conLog.Error("Could not find a proper playerclient: " + ex.ToString()); } if (user != null && playerClient != null) { if (latestPM.ContainsKey(playerClient)) latestPM.Remove(playerClient); if (latestRequests.ContainsKey(playerClient)) latestRequests.Remove(playerClient); if (latestFactionRequests.ContainsKey(playerClient)) latestFactionRequests.Remove(playerClient); if (killList.Contains(playerClient)) killList.Remove(playerClient); if (isTeleporting.Contains(playerClient)) isTeleporting.Remove(playerClient); if (isAccepting.Contains(playerClient)) isAccepting.Remove(playerClient); if (wasHit.Contains(playerClient)) wasHit.Remove(playerClient); if (inSafeZone.ContainsKey(playerClient)) inSafeZone.Remove(playerClient); if (inWarZone.ContainsKey(playerClient)) inWarZone.Remove(playerClient); if (firstPoints.ContainsKey(playerClient)) firstPoints.Remove(playerClient); if (secondPoints.ContainsKey(playerClient)) secondPoints.Remove(playerClient); if (blockedRequestsPer.ContainsKey(playerClient.userID.ToString())) { if (blockedRequestsPer[playerClient.userID.ToString()].Count < 1) blockedRequestsPer.Remove(playerClient.userID.ToString()); } if (teleportRequests.ContainsKey(playerClient)) teleportRequests.Remove(playerClient); if (AllPlayerClients.Contains(playerClient)) AllPlayerClients.Remove(playerClient); string leaveMessage = ""; if (Vars.enableLeave && !Vars.kickQueue.Contains(playerClient.userID.ToString()) && playerClient.userName.Length > 0) { leaveMessage = Vars.leaveMessage.Replace("$USER$", Vars.filterFullNames(playerClient.userName, playerClient.userID.ToString())); Broadcast.broadcastJoinLeave(leaveMessage); Vars.conLog.Chat("<BROADCAST ALL> " + Vars.botName + ": " + leaveMessage); } user.connection.netUser = null; CA.m_Connections.Remove(user.connection); bool b = true; if (Vars.kickQueue.Contains(playerClient.userID.ToString()) || playerClient.userName.Length == 0) { if (Vars.kickQueue.Contains(playerClient.userID.ToString())) Vars.kickQueue.Remove(playerClient.userID.ToString()); b = false; } try { if (playerClient != null) { if (user == null) user = playerClient.netUser; if (user != null) { try { Controllable controllable = playerClient.controllable; if (controllable != null) { Character forCharacter = controllable.character; try { RSM.SaveAvatar(forCharacter); } catch (Exception exception) { conLog.Error("SA: " + exception); } if (forCharacter != null) { try { RSM.ShutdownAvatar(forCharacter); } catch (Exception exception) { conLog.Error("SDA: " + exception); } try { Character.DestroyCharacter(forCharacter); } catch (Exception exception) { conLog.Error("CDC: " + exception); } } } try { RSM._playerClientList.Remove(playerClient); } catch (Exception ex) { conLog.Error("COULD NOT REMOEVE PLAYERCLIENT FROM LIST: " + ex.ToString()); } } catch (Exception ex) { conLog.Error("ECFC: " + ex.ToString()); } } else conLog.Info("COULD NOT EARSE CHARACTERS FOR CLIENT!"); } if (player == null) player = playerClient.netPlayer; if (player != null) NetCull.DestroyPlayerObjects(player); else conLog.Info("COULD NOT DESTROY PLAYER OBJECTS!"); if (user == null) user = playerClient.netUser; if (user != null) CullGrid.ClearPlayerCulling(user); else conLog.Info("COULD NOT CLEAR PLAYER CULLING!"); if (player == null) player = playerClient.netPlayer; if (player != null) NetCull.RemoveRPCs(player); else conLog.Info("COULD NOT REMOVE RPCS!"); } catch (Exception exception) { conLog.Error("#1: " + exception.ToString()); conLog.Error("DO NOT IGNORE THE ERROR ABOVE. THESE THINGS SHOULD NOT BE FAILING. EVER."); } if (b) conLog.Info("Player " + user.displayName + " (" + user.userID + ") disconnected. Data unloaded."); Rust.Steam.Server.OnUserLeave(user.connection.UserID); try { user.Dispose(); } catch (Exception exception2) { conLog.Error("#2: " + exception2.ToString()); conLog.Error("DO NOT IGNORE THE ERROR ABOVE. THESE THINGS SHOULD NOT BE FAILING. EVER."); } } else { conLog.Error("So... A user disconnected but his/her NetUser/PlayerClient was null... Shit. Things will break due to this."); LockedList<PlayerClient> playerClients = PlayerClient.All; foreach (PlayerClient pc in playerClients) { if (!AllPlayerClients.Contains(pc)) { conLog.Error("Fixing the issue with the PlayerClient..."); try { if (latestPM.ContainsKey(playerClient)) latestPM.Remove(playerClient); if (latestRequests.ContainsKey(playerClient)) latestRequests.Remove(playerClient); if (latestFactionRequests.ContainsKey(playerClient)) latestFactionRequests.Remove(playerClient); if (killList.Contains(playerClient)) killList.Remove(playerClient); if (isTeleporting.Contains(playerClient)) isTeleporting.Remove(playerClient); if (isAccepting.Contains(playerClient)) isAccepting.Remove(playerClient); if (wasHit.Contains(playerClient)) wasHit.Remove(playerClient); if (inSafeZone.ContainsKey(playerClient)) inSafeZone.Remove(playerClient); if (inWarZone.ContainsKey(playerClient)) inWarZone.Remove(playerClient); if (firstPoints.ContainsKey(playerClient)) firstPoints.Remove(playerClient); if (secondPoints.ContainsKey(playerClient)) secondPoints.Remove(playerClient); if (blockedRequestsPer.ContainsKey(playerClient.userID.ToString())) { if (blockedRequestsPer[playerClient.userID.ToString()].Count < 1) blockedRequestsPer.Remove(playerClient.userID.ToString()); } if (teleportRequests.ContainsKey(playerClient)) teleportRequests.Remove(playerClient); if (AllPlayerClients.Contains(playerClient)) AllPlayerClients.Remove(playerClient); string leaveMessage = ""; if (Vars.enableLeave && !Vars.kickQueue.Contains(playerClient.userID.ToString()) && playerClient.userName.Length > 0) { leaveMessage = Vars.leaveMessage.Replace("$USER$", Vars.filterFullNames(playerClient.userName, playerClient.userID.ToString())); Broadcast.broadcastJoinLeave(leaveMessage); Vars.conLog.Chat("<BROADCAST ALL> " + Vars.botName + ": " + leaveMessage); } user.connection.netUser = null; CA.m_Connections.Remove(user.connection); bool b = true; if (Vars.kickQueue.Contains(playerClient.userID.ToString()) || playerClient.userName.Length == 0) { if (Vars.kickQueue.Contains(playerClient.userID.ToString())) Vars.kickQueue.Remove(playerClient.userID.ToString()); b = false; } try { if (playerClient != null) { RSM.EraseCharactersForClient(playerClient, true, user); } NetCull.DestroyPlayerObjects(player); CullGrid.ClearPlayerCulling(user); NetCull.RemoveRPCs(player); } catch (Exception exception) { conLog.Error("#3: " + exception.ToString()); conLog.Error("DO NOT IGNORE THE ERROR ABOVE. THESE THINGS SHOULD NOT BE FAILING. EVER."); } if (b) conLog.Info("Player " + user.displayName + " (" + user.userID + ") disconnected. Data unloaded."); Rust.Steam.Server.OnUserLeave(user.connection.UserID); try { user.Dispose(); } catch (Exception exception2) { conLog.Error("#4: " + exception2.ToString()); conLog.Error("DO NOT IGNORE THE ERROR ABOVE. THESE THINGS SHOULD NOT BE FAILING. EVER."); } } catch (Exception ex) { conLog.Error("Something went TERRIBLY TERRIBLY wrong. Contact MistaD ASAP. Send him this: " + ex.ToString()); } } } } } else if (localData is ClientConnection) { ClientConnection item = (ClientConnection)localData; CA.m_Connections.Remove(item); ConsoleSystem.Print("User Disconnected: (unconnected " + player.ipAddress + ")", false); } player.SetLocalData(null); Rust.Steam.Server.OnPlayerCountChanged(); } else conLog.Error("User attempted to disconnect but the localData was corrupted."); } else conLog.Error("User attempted to disconnect but the NetworkPlayer was corrupted."); } } catch (Exception ex) { Vars.conLog.Error("OUD: " + ex.ToString()); } }
public static NetUser GetUser(uLink.NetworkPlayer player) { object localData = player.GetLocalData(); return GetUser(localData); }
///////////////////////////////////////// // OnPlayerDisconnected(PlayerClient player) // Called when a user disconnects ///////////////////////////////////////// void OnPlayerDisconnected(uLink.NetworkPlayer netplayer) { PlayerClient player = ((NetUser)netplayer.GetLocalData()).playerClient; if (hasTag(player, "killsleepers")) TakeDamage.KillSelf(player.controllable.GetComponent<Character>()); }
private void OnPlayerDisconnected(uLink.NetworkPlayer netPlayer) { var netUser = netPlayer.GetLocalData() as NetUser; if (netUser == null) return; // Call covalence hook Interface.Call("OnUserDisconnected", covalence.PlayerManager.GetPlayer(netUser.userID.ToString()), "Unknown"); // Let covalence know covalence.PlayerManager.NotifyPlayerDisconnect(netUser); // Delay removing player until OnPlayerDisconnect has fired in plugins Interface.Oxide.NextTick(() => { if (playerData.ContainsKey(netUser)) playerData.Remove(netUser); }); }