Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
new const Version[] = "0.1";
const MAX_PLAYERS = 32;
const OFFSET_LINUX = 5;
const m_flNextAttack = 83;
enum BlockInfo
{
BlockTime,
BlockDuration
}
new g_iBlockData[ MAX_PLAYERS + 1 ][ BlockInfo ];
public plugin_init()
{
register_plugin( "Block Attack" , Version , "bugsy" );
register_event( "CurWeapon" , "fw_EvCurWeapon" , "be" , "1=1" );
register_clcmd( "amx_block" , "BlockPlayer" , ADMIN_BAN , "<Name> <BlockTime>" );
}
public client_disconnect( id )
{
g_iBlockData[ id ][ BlockTime ] = 0;
g_iBlockData[ id ][ BlockDuration ] = 0;
}
public BlockPlayer( id , level , cid )
{
if ( cmd_access( id , level , cid , 3 ) )
{
new szName[ 33 ] , szNum[ 6 ] , iPlayer;
read_argv( 1 , szName , charsmax( szName ) );
read_argv( 2 , szNum , charsmax( szNum ) );
if ( ( iPlayer = cmd_target( id , szName , CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ONLY_ALIVE ) ) )
{
g_iBlockData[ iPlayer ][ BlockTime ] = get_systime();
g_iBlockData[ iPlayer ][ BlockDuration ] = str_to_num( szNum );
set_pdata_float( iPlayer , m_flNextAttack , str_to_float( szNum ) , OFFSET_LINUX );
}
}
return PLUGIN_HANDLED;
}
public fw_EvCurWeapon( id )
{
if ( g_iBlockData[ id ][ BlockDuration ] )
{
if ( ( get_systime() - g_iBlockData[ id ][ BlockTime ] ) < g_iBlockData[ id ][ BlockDuration ] )
{
set_pdata_float( id , m_flNextAttack , float( ( g_iBlockData[ id ][ BlockTime ] + g_iBlockData[ id ][ BlockDuration ] ) - get_systime() ) , OFFSET_LINUX );
}
else
{
g_iBlockData[ id ][ BlockTime ] = 0;
g_iBlockData[ id ][ BlockDuration ] = 0;
}
}
}