Here's another version using that event which I didn't realize existed:
PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
new const Version[] = "0.1";
const No_Spectate_Flag = ADMIN_KICK;
new g_MsgFade;
public plugin_init()
{
register_plugin( "No Spec Player" , Version , "bugsy" );
register_event( "SpecHealth2" , "Event_SpecHealth2" , "bd" );
g_MsgFade = get_user_msgid( "ScreenFade" );
}
public Event_SpecHealth2( id )
{
new iPlayers[ 32 ] , iNum , iPlayer , szName[ 32 ] , iSpectated;
new iCanBeSpectated[ 32 ] , iCanBeSpectatedCount , taskData[ 2 ];
iSpectated = read_data( 2 );
if ( ( get_user_flags( iSpectated ) & No_Spectate_Flag ) && !( get_user_flags( id ) & No_Spectate_Flag ) )
{
get_players( iPlayers , iNum , "a" );
for ( new i = 0 ; i < iNum ; i++ )
{
iPlayer = iPlayers[ i ];
if ( !( get_user_flags( iPlayer ) & No_Spectate_Flag ) )
{
iCanBeSpectated[ iCanBeSpectatedCount++ ] = iPlayer;
}
}
if ( iCanBeSpectatedCount )
{
get_user_name( iSpectated , szName , charsmax( szName ) );
client_print( id , print_chat , "* %s cannot be spectated!" , szName );
taskData[ 0 ] = id;
taskData[ 1 ] = iCanBeSpectated[ random( iCanBeSpectatedCount ) ];
set_task( 0.1 , "SetSpec" , 123456 , taskData , sizeof( taskData ) );
}
else
{
BlackScreen( id );
}
}
}
public SetSpec( taskData[] )
{
set_pev( taskData[ 0 ] , pev_iuser2 , taskData[ 1 ] );
}
BlackScreen( id )
{
message_begin( MSG_ONE , g_MsgFade , {0,0,0} , id );
write_short( 4096 );
write_short( 4096 );
write_short( 4096 );
write_byte( 0 );
write_byte( 0 );
write_byte( 0 );
write_byte( 255 );
message_end();
}
__________________