/// <summary> /// Handles the outgoing player connection, either by disconnect or kick. /// </summary> /// <param name="player">The player.</param> public async Task HandleOutgoingPlayerConnection(string player) { Log.Write("Detected outgoing connection for " + player, _logClassType, _logPrefix); player = player.ToLowerInvariant(); // The outgoing player was actually in the game, and not a spectator var outgoingWasActive = _sst.ServerInfo.IsActivePlayer(player); // Get the outgoing player's team before he disconnected var outgoingTeam = _sst.ServerInfo.CurrentPlayers[player].Team; // Evaluate the player's no-show/sub status for pickup module, if active if (_sst.Mod.Pickup.Active) { await _sst.Mod.Pickup.Manager.EvalOutgoingPlayer(player, outgoingWasActive, outgoingTeam); _sst.Mod.Pickup.Manager.RemoveActivePickupPlayer(player); _sst.Mod.Pickup.Manager.RemoveEligibility(player); } // Remove player from our internal list RemovePlayer(player); // If player was/is currently being spectated, clear the internal tracker if (!string.IsNullOrEmpty(_sst.ServerInfo.PlayerFollowedForAccuracy) && _sst.ServerInfo.PlayerFollowedForAccuracy.Equals(player)) { _sst.ServerInfo.PlayerFollowedForAccuracy = string.Empty; } // If IRC module is active, send the message to the IRC channel if (_sst.Mod.Irc.Active && _sst.Mod.Irc.IsConnectedToIrc) { _sst.Mod.Irc.IrcManager.SendIrcMessage(_sst.Mod.Irc.IrcManager.IrcSettings.ircChannel, string.Format("{0} has left my QL server.", player)); } // Evaluate player's early quit situation if that module is active if (!_sst.Mod.EarlyQuit.Active) { return; } if (!outgoingWasActive) { return; } // Do not increase player's early quit count if already banned. var banDb = new DbBans(); if (banDb.UserAlreadyBanned(player)) { return; } var eqh = new EarlyQuitHandler(_sst); await eqh.EvalCountdownQuitter(player); await eqh.EvalInProgressQuitter(player); }
/// <summary> /// Initializes a new instance of the <see cref="EarlyQuitHandler"/> class. /// </summary> public EarlyQuitHandler(SynServerTool sst) { _sst = sst; _quitsDb = new DbQuits(); _usersDb = new DbUsers(); _bansDb = new DbBans(); GetConfigData(); }
/// <summary> /// Initializes a new instance of the <see cref="TimeBanCmd"/> class. /// </summary> /// <param name="sst">The main class.</param> public TimeBanCmd(SynServerTool sst) { _sst = sst; _userDb = new DbUsers(); _banDb = new DbBans(); }
/// <summary> /// Initializes a new instance of the <see cref="BanManager"/> class. /// </summary> /// <param name="sst">The main class.</param> public BanManager(SynServerTool sst) { _sst = sst; _banDb = new DbBans(); }