Here's a way you could do it. This will only return a player that has not yet been selected. You could modify the code to make it automatically reset selected players when all players have been selected. If you are unsure how to do this just ask.
PHP Code:
new g_Selected;
new g_MaxPlayers;
g_MaxPlayers = get_maxplayers();
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;
}
__________________