Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <crxranks>
new g_beamSpriteIndex
new cv_trace_color_r, cv_trace_color_g, cv_trace_color_b
public plugin_init()
{
register_plugin("Colored traces", "1.0", "Ainsley Harriott")
RegisterHam(Ham_TraceAttack, "player", "OnTraceAttackPost", 1)
RegisterHam(Ham_TraceAttack, "worldspawn", "OnTraceAttackPost", 1)
RegisterHam(Ham_TraceAttack, "func_wall", "OnTraceAttackPost", 1)
RegisterHam(Ham_TraceAttack, "func_wall_toggle", "OnTraceAttackPost", 1)
RegisterHam(Ham_TraceAttack, "func_door", "OnTraceAttackPost", 1)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "OnTraceAttackPost", 1)
RegisterHam(Ham_TraceAttack, "func_breakable", "OnTraceAttackPost", 1)
RegisterHam(Ham_TraceAttack, "func_button", "OnTraceAttackPost", 1)
cv_trace_color_r = register_cvar("trace_color_red", "255")
cv_trace_color_g = register_cvar("trace_color_green", "215")
cv_trace_color_b = register_cvar("trace_color_blue", "0")
}
public plugin_precache()
{
g_beamSpriteIndex = precache_model("sprites/laserbeam.spr")
}
public OnTraceAttackPost(index, attacker, Float:damage, Float:dir[3], tr, damagebits)
{
if (!(damagebits & DMG_BULLET))
{
return
}
if (!is_user_connected(attacker))
{
return
}
if (crxranks_get_user_level(attacker) < 33)
{
return
}
new Float:endPos[3]
get_tr2(tr, TR_vecEndPos, endPos)
new red = clamp(get_pcvar_num(cv_trace_color_r), 0, 255)
new green = clamp(get_pcvar_num(cv_trace_color_g), 0, 255)
new blue = clamp(get_pcvar_num(cv_trace_color_b), 0, 255)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(attacker | 0x1000)
write_coord_f(endPos[0])
write_coord_f(endPos[1])
write_coord_f(endPos[2])
write_short(g_beamSpriteIndex)
write_byte(0)
write_byte(0)
write_byte(2)
write_byte(10)
write_byte(0)
write_byte(red)
write_byte(green)
write_byte(blue)
write_byte(200)
write_byte(0)
message_end()
}