Rejack

JailBreak Voice Manager (v1.1)

Apr 1st, 2013 (edited)
1,064
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.74 KB | None | 0 0
  1. #include < amxmodx >
  2. #include < fakemeta >
  3.  
  4. enum _:Teams
  5. {
  6.     FM_TEAM_UNASSIGNED,
  7.     FM_TEAM_T,
  8.     FM_TEAM_CT,
  9.     FM_TEAM_SPECTATOR
  10. };
  11.  
  12. new const szPrefix[ ] = "AMXX";
  13.  
  14. new bool:Voice[ 33 ], pCvar[ 2 ];
  15.  
  16. public plugin_init()
  17. {
  18.     register_plugin( "JailBreak Voice Manager", "1.1", "Rejack" );
  19.    
  20.     register_clcmd( "say /voice", "CmdVoice" );
  21.    
  22.     register_forward( FM_Voice_SetClientListening, "FwdVoiceSetClientListening" );
  23.    
  24.     register_logevent( "evRoundStart", 2, "1=Round_Start" );
  25.    
  26.     pCvar[ 0 ] = register_cvar( "jbvoice_toggle", "1" );
  27.     pCvar[ 1 ] = register_cvar( "jbvoice_deadvoice", "1" );     // Dead players can talk to each other
  28. }
  29.  
  30. public CmdVoice( client )
  31. {
  32.     if ( !get_pcvar_num( pCvar[ 0 ] ) )
  33.         return 0;
  34.    
  35.     if ( !(get_user_flags( client ) & ADMIN_IMMUNITY) )
  36.         return ColorPrint( client, "You have no access to this command." );
  37.    
  38.     static szItem[ 128 ], Menu, Players[ 32 ], iNum, szTempid[ 10 ];
  39.    
  40.     formatex( szItem, charsmax( szItem ), "\r[%s]\w JailBreak Voice Manager", szPrefix );
  41.    
  42.     Menu = menu_create( szItem, "SubVoice" );
  43.    
  44.     get_players( Players, iNum, "ce", "TERRORIST" );
  45.    
  46.     for ( new i; i < iNum; i++ )
  47.     {
  48.         new iPlayer = Players[ i ];
  49.        
  50.         num_to_str( iPlayer, szTempid, charsmax( szTempid ) );
  51.        
  52.         formatex( szItem, charsmax( szItem ), "%s%s", szName( iPlayer ), Voice[ iPlayer ] ? " - \d[\r Voice \d]" : "" );
  53.        
  54.         menu_additem( Menu, szItem, szTempid );
  55.     }
  56.    
  57.     menu_display( client, Menu );
  58.    
  59.     return 1;
  60. }
  61.  
  62. public SubVoice( client, Menu, Item )
  63. {
  64.     if ( !get_pcvar_num( pCvar[ 0 ] ) )
  65.         return 0;
  66.    
  67.     if ( Item == MENU_EXIT )
  68.     {
  69.         menu_destroy( Menu );
  70.        
  71.         return 1;
  72.     }
  73.    
  74.     new Access, Callback, Name[ 64 ], Data[ 6 ];
  75.    
  76.     menu_item_getinfo( Menu, Item, Access, Data, charsmax( Data ), Name, charsmax( Name ),Callback );
  77.    
  78.     new iPlayer = str_to_num( Data );
  79.    
  80.     if ( fm_get_user_team( iPlayer ) != FM_TEAM_T )
  81.         return ColorPrint( client, "Invalid player was chosen." );
  82.    
  83.     ColorPrint( 0, "^4%s^1 %s^4 %s^1 the abillity to speak.", szName( client ), Voice[ iPlayer ] ? "took" : "gave", szName( iPlayer ) );
  84.    
  85.     Voice[ iPlayer ] = !Voice[ iPlayer ];
  86.    
  87.     menu_destroy( Menu );
  88.    
  89.     CmdVoice( client );
  90.    
  91.     return 1;
  92. }
  93.    
  94.  
  95. public FwdVoiceSetClientListening( Rec, Sender, bool:bListen )
  96. {
  97.     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 ] ||
  98.     get_pcvar_num( pCvar[ 1 ] ) != 0 && !is_user_alive( Sender ) && !is_user_alive( Rec ) || !is_user_connected( Sender ) || !is_user_connected( Rec ) )
  99.         return 1;
  100.    
  101.     engfunc( EngFunc_SetClientListening, Rec, Sender, 0 );
  102.    
  103.     return FMRES_SUPERCEDE;
  104. }
  105.  
  106. public evRoundStart( )
  107. {
  108.     if ( !get_pcvar_num( pCvar[ 0 ] ) )
  109.         return 0;
  110.    
  111.     for ( new i = 1; i < get_maxplayers(); i++ )
  112.     {
  113.         if ( !is_user_connected( i ) || !Voice[ i ] )
  114.             continue;
  115.        
  116.         Voice[ i ] = false;
  117.     }
  118.    
  119.     return 0;
  120. }
  121.  
  122. stock ColorPrint( const client, const szString[], any:... )
  123. {
  124.     new szMsg[ 191 ], Players[ 32 ], PNum = 1;
  125.    
  126.     static Len; Len = formatex( szMsg, charsmax( szMsg ), "^4[%s]^1 ", szPrefix );
  127.    
  128.     vformat( szMsg[ Len ], charsmax ( szMsg ) - Len, szString, 3 );
  129.    
  130.     if ( client )   Players[ 0 ] = client;
  131.    
  132.     else    get_players( Players, PNum, "ch" );
  133.    
  134.     for ( new i; i < PNum; i++ )
  135.     {
  136.         if ( is_user_connected( Players[ i ] ) )
  137.         {
  138.             message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ) ,_, Players[ i ] );
  139.            
  140.             write_byte( Players[ i ] );
  141.            
  142.             write_string( szMsg );
  143.            
  144.             message_end( );
  145.         }
  146.     }
  147.    
  148.     return 1;
  149. }
  150.  
  151. stock szName( const index )
  152. {
  153.     static g_szName[ 32 ];
  154.    
  155.     get_user_name( index, g_szName, charsmax( g_szName ) );
  156.    
  157.     return g_szName;
  158. }
  159.  
  160. stock fm_get_user_team( const index )
  161.     return get_pdata_int( index, 114 );
Advertisement
Add Comment
Please, Sign In to add comment