Code:
#include < amxmodx >
#include < fakemeta >
enum _:Teams
{
FM_TEAM_UNASSIGNED,
FM_TEAM_T,
FM_TEAM_CT,
FM_TEAM_SPECTATOR
};
new const szPrefix[ ] = "JB";
new bool:Voice[ 33 ], pCvar[ 2 ];
public plugin_init()
{
register_plugin( "Voice menu", "1.1", "Barlap" );
register_clcmd( "say /vmanager", "CmdVoice" );
register_forward( FM_Voice_SetClientListening, "FwdVoiceSetClientListening" );
register_logevent( "evRoundStart", 2, "1=Round_Start" );
pCvar[ 0 ] = register_cvar( "vmanager_toggle", "1" );
pCvar[ 1 ] = register_cvar( "vmanager_deadvoice", "1" ); // Dead players can talk to each other
}
public CmdVoice( client )
{
if ( !get_pcvar_num( pCvar[ 0 ] ) )
return 0;
if ( !(get_user_flags( client ) & ADMIN_IMMUNITY) )
return ColorPrint( client, "You have no access to this command." );
static szItem[ 128 ], Menu, Players[ 32 ], iNum, szTempid[ 10 ];
formatex( szItem, charsmax( szItem ), "\r[%s]\w Voice Menu", szPrefix );
Menu = menu_create( szItem, "SubVoice" );
get_players( Players, iNum, "ce", "TERRORIST" );
for ( new i; i < iNum; i++ )
{
new iPlayer = Players[ i ];
num_to_str( iPlayer, szTempid, charsmax( szTempid ) );
formatex( szItem, charsmax( szItem ), "%s%s", szName( iPlayer ), Voice[ iPlayer ] ? " - \d[\r Voice \d]" : "" );
menu_additem( Menu, szItem, szTempid );
}
menu_display( client, Menu );
return 1;
}
public SubVoice( client, Menu, Item )
{
if ( !get_pcvar_num( pCvar[ 0 ] ) )
return 0;
if ( Item == MENU_EXIT )
{
menu_destroy( Menu );
return 1;
}
new Access, Callback, Name[ 64 ], Data[ 6 ];
menu_item_getinfo( Menu, Item, Access, Data, charsmax( Data ), Name, charsmax( Name ),Callback );
new iPlayer = str_to_num( Data );
if ( fm_get_user_team( iPlayer ) != FM_TEAM_T )
return ColorPrint( client, "Invalid player was chosen." );
ColorPrint( 0, "^4%s^1 %s^4 %s^1 the abillity to speak.", szName( client ), Voice[ iPlayer ] ? "took" : "gave", szName( iPlayer ) );
Voice[ iPlayer ] = !Voice[ iPlayer ];
menu_destroy( Menu );
CmdVoice( client );
return 1;
}
public FwdVoiceSetClientListening( Rec, Sender, bool:bListen )
{
if ( !get_pcvar_num( pCvar[ 0 ] ) || get_user_flags( Sender ) & ADMIN_BAN || fm_get_user_team( Sender ) == FM_TEAM_CT && is_user_alive( Sender ) || Voice[ Sender ] ||
get_pcvar_num( pCvar[ 1 ] ) != 0 && !is_user_alive( Sender ) && !is_user_alive( Rec ) || !is_user_connected( Sender ) || !is_user_connected( Rec ) )
return 1;
engfunc( EngFunc_SetClientListening, Rec, Sender, 0 );
return FMRES_SUPERCEDE;
}
public evRoundStart( )
{
if ( !get_pcvar_num( pCvar[ 0 ] ) )
return 0;
for ( new i = 1; i < get_maxplayers(); i++ )
{
if ( !is_user_connected( i ) || !Voice[ i ] )
continue;
Voice[ i ] = false;
}
return 0;
}
stock ColorPrint( const client, const szString[], any:... )
{
new szMsg[ 191 ], Players[ 32 ], PNum = 1;
static Len; Len = formatex( szMsg, charsmax( szMsg ), "^4[%s]^1 ", szPrefix );
vformat( szMsg[ Len ], charsmax ( szMsg ) - Len, szString, 3 );
if ( client ) Players[ 0 ] = client;
else get_players( Players, PNum, "ch" );
for ( new i; i < PNum; i++ )
{
if ( is_user_connected( Players[ i ] ) )
{
message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ) ,_, Players[ i ] );
write_byte( Players[ i ] );
write_string( szMsg );
message_end( );
}
}
return 1;
}
stock szName( const index )
{
static g_szName[ 32 ];
get_user_name( index, g_szName, charsmax( g_szName ) );
return g_szName;
}
stock fm_get_user_team( const index )
return get_pdata_int( index, 114 );