I made this a while ago.
Whenever you hold your +use key. You will draw the X, Y and Z axis in front of you which extends out 50 units to either side. If an axis does not stretch out 50 units then it will create a spark to tell you that there is something blocking the traceline from the center of the axis.
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <xs>
new BeamSprite;
public plugin_init( )
{
register_plugin( "Trace Normal", "1.0", "Mazza" );
register_forward( FM_CmdStart, "Forward_CmdStart" );
}
public plugin_precache()
{
BeamSprite = precache_model("sprites/zbeam1.spr");
}
public Forward_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id))
return;
static iButton; iButton = get_uc( uc_handle, UC_Buttons );
static oldButton ; oldButton = pev(id, pev_oldbuttons);
if( (iButton & IN_USE) && (oldButton & IN_USE))
{
new Float:fAim[3],Float:fAngles[3],Float:fOrigin[3], Float: fAimOrigin[3], iOrigin[3];
get_user_origin(id, iOrigin, 1);
IVecFVec(iOrigin, fOrigin);
// pev(id,pev_origin,fOrigin)
velocity_by_aim(id, 300, fAim)
vector_to_angle(fAim,fAngles)
fAimOrigin[0] = fOrigin[0] + fAim[0]
fAimOrigin[1] = fOrigin[1] + fAim[1]
fAimOrigin[2] = fOrigin[2] + fAim[2]
new count;
static Float: vTarget[6][3];
for(count = 0; count < 6 ; count++)
{
xs_vec_copy(fAimOrigin, vTarget[count]);
}
new Float: fConstant = 50.0;
for(count = 0 ; count < 6 ; count++)
{
switch(count)
{
case 0:
vTarget[count][0] -= fConstant;
case 1:
vTarget[count][0] += fConstant;
case 2:
vTarget[count][1] -= fConstant;
case 3:
vTarget[count][1] += fConstant;
case 4:
vTarget[count][2] -= fConstant;
case 5:
vTarget[count][2] += fConstant;
}
}
for(count = 0 ; count < 6 ; count++)
{
if(point_contents(vTarget[count]) != CONTENTS_EMPTY)
client_print(id, print_center, "Collision Detected");
engfunc(EngFunc_TraceLine, fAimOrigin, vTarget[count], IGNORE_MONSTERS, id, 0)
static Float:flFraction
get_tr2(0, TR_flFraction, flFraction)
if( flFraction != 1.0 )
{
flFraction *= fConstant
switch(count)
{
case 0:
vTarget[count][0] = fAimOrigin[0] - flFraction;
case 1:
vTarget[count][0] = fAimOrigin[0] + flFraction;
case 2:
vTarget[count][1] = fAimOrigin[1] - flFraction;
case 3:
vTarget[count][1] = fAimOrigin[1] + flFraction;
case 4:
vTarget[count][2] = fAimOrigin[2] - flFraction;
case 5:
vTarget[count][2] = fAimOrigin[2] + flFraction;
}
UTIL_DrawSparks(vTarget[count]);
}
}
for(count = 0 ; count < 6 ; count++)
{
new iColorRGB[3];
switch(count)
{
case 0, 1:
iColorRGB[0] = 200;
case 2, 3:
iColorRGB[1] = 200;
case 4, 5:
iColorRGB[2] = 200;
}
UTIL_DrawLine(fAimOrigin, vTarget[count], iColorRGB[0], iColorRGB[1], iColorRGB[2], 1);
static Float: mins[3]; xs_vec_set(mins, -fConstant, -fConstant, -fConstant);
static Float: maxs[3]; xs_vec_set(maxs, fConstant, fConstant, fConstant);
xs_vec_add(mins, fAimOrigin, mins);
xs_vec_add(maxs, fAimOrigin, maxs);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BOX)
engfunc(EngFunc_WriteCoord, mins[0])
engfunc(EngFunc_WriteCoord, mins[1])
engfunc(EngFunc_WriteCoord, mins[2])
engfunc(EngFunc_WriteCoord, maxs[0])
engfunc(EngFunc_WriteCoord, maxs[1])
engfunc(EngFunc_WriteCoord, maxs[2])
write_short(1)
write_byte(200)
write_byte(200)
write_byte(200)
message_end()
}
}
}
stock UTIL_DrawLine(Float: startOrigin[3], Float: endOrigin[3], red, green, blue, life)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMPOINTS)
engfunc(EngFunc_WriteCoord, startOrigin[0])
engfunc(EngFunc_WriteCoord, startOrigin[1])
engfunc(EngFunc_WriteCoord, startOrigin[2])
engfunc(EngFunc_WriteCoord, endOrigin[0])
engfunc(EngFunc_WriteCoord, endOrigin[1])
engfunc(EngFunc_WriteCoord, endOrigin[2])
write_short(BeamSprite)
write_byte(1)
write_byte(5)
write_byte(life)
write_byte(20)
write_byte(0)
write_byte(red)
write_byte(green)
write_byte(blue)
write_byte(200)
write_byte(200)
message_end()
}
stock UTIL_DrawSparks(Float: fOrigin[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SPARKS)
engfunc(EngFunc_WriteCoord, fOrigin[0])
engfunc(EngFunc_WriteCoord, fOrigin[1])
engfunc(EngFunc_WriteCoord, fOrigin[2])
message_end()
}
Hopefully the script above will provide the help you need to fix your issue.