Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>
#pragma semicolon 0
#define VERSION "1.0"
#define CMD_ACCESS ADMIN_RCON
new g_pCvar;
new bool:g_bKfDist[ 33 ] = false;
public plugin_init() {
register_plugin("Knife Distance", VERSION, "-")
g_pCvar = register_cvar("kf_dist", "1.0");
register_clcmd( "amx_knife_name", "ClientCommand_KfDist", CMD_ACCESS, "< part of nickname > < 0 / 1 > - disable / enable knife distance" );
register_forward(FM_TraceLine, "fwTraceline")
register_forward(FM_TraceHull, "fwTracehull", 1)
}
public client_authorized( iClient )
g_bKfDist[ iClient ] = false;
public client_disconnect( iClient )
g_bKfDist[ iClient ] = false;
public fwTraceline(Float:fStart[3], Float:fEnd[3], conditions, id, ptr){
return vTrace(id, ptr,fStart,fEnd,conditions)
}
public fwTracehull(Float:fStart[3], Float:fEnd[3], conditions, hull, id, ptr){
return vTrace(id, ptr,fStart,fEnd,conditions,true,hull)
}
vTrace(id, ptr,Float:fStart[3],Float:fEnd[3],iNoMonsters,bool:hull = false,iHull = 0){
if( !get_pcvar_num( g_pCvar ) || !is_user_alive( id ) || ( get_user_weapon( id ) != CSW_KNIFE ) )
xs_vec_sub(fEnd,fStart,fEnd)
xs_vec_mul_scalar(fEnd,get_pcvar_float(g_pCvar),fEnd);
xs_vec_add(fEnd,fStart,fEnd);
hull ? engfunc(EngFunc_TraceHull,fStart,fEnd,iNoMonsters,iHull,id,ptr) : engfunc(EngFunc_TraceLine,fStart,fEnd,iNoMonsters, id,ptr)
}
return FMRES_IGNORED;
}
public ClientCommand_KfDist( iClient, iLevel, iCid )
{
if( !get_pcvar_num( g_pCvar ) )
return PLUGIN_HANDLED;
new szTarget[ 32 ], szState[ 2 ], szTargetNickname[ 32 ];
new iTarget;
read_argv( 1, szTarget, charsmax( szTarget ) );
read_argv( 2, szState, charsmax( szState ) );
iTarget = cmd_target( iClient, szTarget, 0 );
if( !iTarget )
return PLUGIN_HANDLED;
get_user_name( iTarget, szTargetNickname, charsmax( szTargetNickname ) );
if( szState[ 0 ] == '1' )
{
console_print( iClient, "Knife Distance enabled on: %s", szTargetNickname );
g_bKfDist[ iTarget ] = true;
}
else
{
console_print( iClient, "Knife Distance disabled on: %s", szTargetNickname );
g_bKfDist[ iTarget ] = false;
}
return PLUGIN_HANDLED;
}