new g_Selected; new g_MaxPlayers; g_MaxPlayers = get_maxplayers(); public client_disconnect(id) { g_Selected &= ~( 1 << (id-1) ) ) } ResetSelected() { g_Selected = 0; } GetRandomPlayer() { new iPlayerBits; new i; //Make a bitsum of connected player indexes. //You can add additional checks here (bot,team,admin, etc). for ( i = 1 ; i <= g_MaxPlayers ; i++ ) if ( is_user_connected( i ) ) iPlayerBits |= ( 1 << ( i - 1 ) ); //No players are connected. if ( !iPlayerBits ) return 0; //Keep looping until there is no players that haven't been selected. while( iPlayerBits != g_Selected ) { //Get random player id i = ( random_num( 1 , g_MaxPlayers ) - 1 ); //If player is connected and has not yet been selected if ( ( iPlayerBits & ( 1 << i ) ) && !( g_Selected & ( 1 << i ) ) ) { //Set bit in g_Selected bit-field so they will be ignored on the next call g_Selected |= ( 1 << i ); return ( i + 1 ); } } //All players have already been selected. return 0; }