Re: CT AFK Slayer
By request, removed HUD and changed to chat prints for only the player getting moved to spec and/or slayed. Untested.
PHP Code:
#include <amxmodx> #include <cstrike> #include <fakemeta> #include <hamsandwich>
new const Version[] = "0.7";
#define MAX_PLAYERS 32
const ButtonBits = ( IN_FORWARD | IN_BACK | IN_MOVELEFT | IN_MOVERIGHT | IN_JUMP | IN_DUCK | IN_USE | IN_ATTACK | IN_ATTACK2 | IN_SCORE );
enum PlayerData { Float:DistanceTraveled, LastMoveTime, LastPositionChange, SlayCount }
new g_pdData[ MAX_PLAYERS + 1 ][ PlayerData ] , Float:g_fLastOrigin[ MAX_PLAYERS + 1 ][ 3 ]; new g_iSysTime , bool:g_bInRound; new g_pSlayTime , g_pSlayMode , g_pSpecSlays , g_pVerboseMode , g_pDistanceThreshold , g_pFreezeTime;
public plugin_init() { register_plugin( "AFK Slay" , Version , "bugsy" );
g_pSlayTime = register_cvar( "as_slaytime" , "30" ); g_pSlayMode = register_cvar( "as_slaymode" , "2" ); g_pSpecSlays = register_cvar( "as_spectatorslays" , "5" ); g_pVerboseMode = register_cvar( "as_verbosemode" , "1" ); g_pDistanceThreshold = register_cvar( "as_distancethreshold" , "100000" ); g_pFreezeTime = get_cvar_pointer( "mp_freezetime" ); RegisterHam( Ham_Spawn , "player" , "HamSpawn_Post" , true ); register_forward( FM_CmdStart , "CmdStart" ); register_logevent( "RoundStart" , 2 , "1=Round_Start" ); register_logevent( "RoundEnd" , 2 , "1=Round_End" ); set_task( 1.0 , "CheckAFK" , .flags="b" ); }
public client_connect( id ) { g_pdData[ id ][ SlayCount ] = 0; }
public HamSpawn_Post( iPlayer ) { if ( is_user_alive( iPlayer ) ) { pev( iPlayer , pev_origin , g_fLastOrigin[ iPlayer ] ); g_pdData[ iPlayer ][ DistanceTraveled ] = 0.0; g_pdData[ iPlayer ][ LastMoveTime ] = g_iSysTime + ( g_bInRound ? 0 : get_pcvar_num( g_pFreezeTime ) ); g_pdData[ iPlayer ][ LastPositionChange ] = g_pdData[ iPlayer ][ LastMoveTime ]; } }
public RoundStart() { g_bInRound = true; }
public RoundEnd() { g_bInRound = false; }
public CmdStart( id , handle , seed ) { static Float:fOrigin[ 3 ]; if ( g_bInRound && ( get_uc( handle , UC_Buttons ) & ButtonBits ) ) { if ( g_fLastOrigin[ id ][ 0 ] ) { pev( id , pev_origin , fOrigin ); if ( ( g_fLastOrigin[ id ][ 0 ] != fOrigin[ 0 ] ) || ( g_fLastOrigin[ id ][ 1 ] != fOrigin[ 1 ] ) ) { g_pdData[ id ][ LastPositionChange ] = get_systime(); } g_pdData[ id ][ DistanceTraveled ] += get_distance_f( g_fLastOrigin[ id ] , fOrigin ); } g_pdData[ id ][ LastMoveTime ] = g_iSysTime; g_pdData[ id ][ SlayCount ] = 0; } }
public CheckAFK() { new iPlayers[ 32 ] , iNum , iPlayer , szName[32 ] , iVerbose , iSlayTime; iVerbose = get_pcvar_num( g_pVerboseMode ); g_iSysTime = get_systime(); iSlayTime = get_pcvar_num( g_pSlayTime ); switch ( get_pcvar_num( g_pSlayMode ) ) { case 1: get_players( iPlayers , iNum , "ae" , "TERRORIST" ); case 2: get_players( iPlayers , iNum , "ae" , "CT" ); default: get_players( iPlayers , iNum , "a" ); } for ( new i = 0 ; i < iNum ; i++ ) { iPlayer = iPlayers[ i ]; pev( iPlayer , pev_origin , g_fLastOrigin[ iPlayer ] ); if ( g_pdData[ iPlayer ][ LastMoveTime ] ) { if ( ( ( g_iSysTime - g_pdData[ iPlayer ][ LastMoveTime ] ) >= iSlayTime ) || ( ( g_pdData[ iPlayer ][ DistanceTraveled ] < get_pcvar_num( g_pDistanceThreshold ) ) && ( g_iSysTime - g_pdData[ iPlayer ][ LastPositionChange ] ) >= iSlayTime ) ) { user_kill( iPlayer ); if ( iVerbose ) get_user_name( iPlayer , szName , charsmax( szName ) ); if ( ++g_pdData[ iPlayer ][ SlayCount ] >= get_pcvar_num( g_pSpecSlays ) ) { cs_set_user_team( iPlayer , CS_TEAM_SPECTATOR ); if ( iVerbose ) client_print_color( iPlayer , 0 , "^4[Fusion - Deathrun] ^1Moved to Spectator for being AFK." ); } else { if ( iVerbose ) client_print_color( iPlayer , 0 , "^4[Fusion - Deathrun] ^1Slayed for being AFK." ); } } } } }
|