private static void Postfix(ref bool __result, int connection_id, int version, string player_name, string player_session_id, string player_id, string player_uid)
 {
     MPBanPlayers.JoiningPlayerIsBanned     = false;
     MPBanPlayers.JoiningPlayerIsAnnoyed    = false;
     MPBanPlayers.JoiningPlayerConnectionId = connection_id;
     MPBanPlayers.JoiningPlayerLobbyData    = null;
     if (__result)
     {
         // the player has been accepted by the game's matchmaking
         MPBanEntry candidate = new MPBanEntry(player_name, connection_id, player_id);
         bool       isCreator = false;
         if (!MPBanPlayers.MatchCreatorIsInGame && MPBanPlayers.PlayerWithPrivateMatchData != null && !String.IsNullOrEmpty(MPBanPlayers.PlayerWithPrivateMatchData.id) && !String.IsNullOrEmpty(candidate.id))
         {
             if (candidate.id == MPBanPlayers.PlayerWithPrivateMatchData.id)
             {
                 Debug.LogFormat("MPBanPlayers: Match creator entered the lobby: {0}", player_name);
                 isCreator = true;
                 MPBanPlayers.MatchCreatorIsInGame = true;
             }
         }
         // check if player is banned
         MPBanPlayers.JoiningPlayerIsBanned  = MPBanPlayers.IsBanned(candidate);
         MPBanPlayers.JoiningPlayerIsAnnoyed = MPBanPlayers.IsBanned(candidate, MPBanMode.Annoy);
         if (isCreator && MPBanPlayers.JoiningPlayerIsAnnoyed)
         {
             // annoyed players are treated as Banned for creating new matches
             MPBanPlayers.JoiningPlayerIsBanned = true;
         }
         if (MPBanPlayers.JoiningPlayerIsBanned)
         {
             // banned player entered the lobby
             // NOTE: we cannot just say __accept = false, because this causes all sorts of troubles later
             MPBanPlayers.KickPlayer(connection_id, player_name, true);
             if (isCreator)
             {
                 Debug.LogFormat("Creator for this match {0} is BANNED, ending match", candidate.name);
                 GameManager.m_gm.StartCoroutine(DelayedEndMatch());
             }
         }
         else
         {
             // unbanned player entered the lobby
             if (isCreator)
             {
                 bool haveModifiedState = MPBanPlayers.HasModifiedState() || MPChatCommand.HasModifiedState();
                 bool doReset           = true;
                 if (MPChatCommand.CheckPermission(candidate))
                 {
                     Debug.Log("MPBanPlayers: same game creator as last match, or with permissions");
                     doReset = false;
                 }
                 MPBanPlayers.MatchCreator = candidate;
                 if (doReset)
                 {
                     Debug.Log("MPBanPlayers: new game creator, resetting bans and permissions");
                     MPBanPlayers.Reset();
                     MPChatCommand.Reset();
                     if (haveModifiedState)
                     {
                         MPChatTools.SendTo(true, "cleared all bans and permissions", connection_id);
                     }
                 }
                 else
                 {
                     if (haveModifiedState)
                     {
                         MPChatTools.SendTo(true, "keeping bans and permissions from previous match", connection_id);
                     }
                 }
             }
         }
     }
 }
        // Execute KICK or BAN or KICKBAN or ANNOY or BLOCKCHAT command
        public bool DoKickBan(bool doKick, bool doBan, MPBanMode banMode)
        {
            string op;
            string banOp = banMode.ToString().ToUpper();

            if (doKick && doBan)
            {
                op = "KICK" + banOp;
            }
            else if (doKick)
            {
                op = "KICK";
            }
            else if (doBan)
            {
                op = banOp;
            }
            else
            {
                return(false);
            }

            Debug.LogFormat("{0} request for {1}", op, arg);
            if (!SelectPlayer(arg))
            {
                Debug.LogFormat("{0}: no player {1} found", op, arg);
                ReturnToSender(String.Format("{0}: player {1} not found", op, arg));
                return(false);
            }

            if (IsTrustedPlayer(selectedPlayerEntry))
            {
                ReturnToSender(String.Format("{0}: not on this server, dude!", op));
                return(false);
            }

            if (selectedPlayerConnectionId >= 0 && sender_conn == selectedPlayerConnectionId)
            {
                Debug.LogFormat("{0}: won't self-apply", op, arg);
                ReturnToSender(String.Format("{0}: won't self-apply", op, arg));
                return(false);
            }

            if (doBan)
            {
                MPBanPlayers.Ban(selectedPlayerEntry, banMode);
                if (banMode == MPBanMode.Annoy)
                {
                    // ANNOY also implies BLOCKCHAT
                    MPBanPlayers.Ban(selectedPlayerEntry, MPBanMode.BlockChat);
                }
                ReturnTo(String.Format("{0} player {1} by {2}", banOp, selectedPlayerEntry.name, senderEntry.name), -1, selectedPlayerConnectionId);
            }
            if (doKick)
            {
                ReturnTo(String.Format("KICK player {0} by {1}", selectedPlayerEntry.name, senderEntry.name), -1, selectedPlayerConnectionId);
                if (selectedPlayer != null)
                {
                    MPBanPlayers.KickPlayer(selectedPlayer);
                }
                else if (selectedPlayerLobbyData != null)
                {
                    MPBanPlayers.KickPlayer(selectedPlayerLobbyData);
                }
                else
                {
                    MPBanPlayers.KickPlayer(selectedPlayerConnectionId, selectedPlayerEntry.name);
                }
            }
            return(false);
        }