Exolent yours find below or above. Arkshines find right or left. But ok i guess i should have said that the picture was a plan view :) ...
PHP Code:
/* Plugin generated by AMXX-Studio */
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <amxmodx>
#include <fakemeta>
#include <xs>
////////////////////////////////////////////////////////////////////////////////////////////////////
#define PLUGIN "YadaYada"
#define VERSION "1.0 by Dr.G"
#define AUTHOR "AMXX DoD Team"
////////////////////////////////////////////////////////////////////////////////////////////////////
#define MAX_PLAYERS 32
////////////////////////////////////////////////////////////////////////////////////////////////////
#define Exolent 0
#define Arkshine 1
////////////////////////////////////////////////////////////////////////////////////////////////////
new beamSpr
////////////////////////////////////////////////////////////////////////////////////////////////////
new IsTesting[MAX_PLAYERS + 1]
////////////////////////////////////////////////////////////////////////////////////////////////////
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon","func_CurWeapon","be","1=1","3>0")
register_clcmd("say /test", "OnOff", ADMIN_KICK)
}
////////////////////////////////////////////////////////////////////////////////////////////////////
public plugin_precache()
{
beamSpr = precache_model("sprites/laserbeam.spr");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
public client_putinserver(id)
{
IsTesting[id] = 0
}
////////////////////////////////////////////////////////////////////////////////////////////////////
public OnOff(id)
{
if(IsTesting[id])
IsTesting[id] = 0
else if(!IsTesting[id])
IsTesting[id] = 1
client_print(id, print_center, "%s", IsTesting[id] !=1 ? "Offline" : "Online")
return PLUGIN_HANDLED
}
////////////////////////////////////////////////////////////////////////////////////////////////////
public func_CurWeapon(id)
{
if(!IsTesting[id])
return
if(pev(id,pev_button) & IN_ATTACK)
{
do_trace(id)
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
#if Exolent
public do_trace(index)
{
new Float:vTraceStart[3]
//new Float:start[3],
new Float:view_ofs[3]
pev(index, pev_origin, vTraceStart)
pev(index, pev_view_ofs, view_ofs)
xs_vec_add(vTraceStart, view_ofs, vTraceStart)
new Float:dest[3]
pev(index, pev_v_angle, dest)
engfunc(EngFunc_MakeVectors, dest)
global_get(glb_v_forward, dest)
xs_vec_mul_scalar(dest, 9999.0, dest)
xs_vec_add(vTraceStart, dest, dest)
engfunc(EngFunc_TraceLine, vTraceStart, dest, 0, index, 0)
new Float:vTraceEnd[3]
get_tr2(0, TR_vecEndPos, vTraceEnd)
/////////////////////////////////////////////////////////////////////////////
new Float:fDistance = get_distance_f(vTraceStart, vTraceEnd)
do_beam(index, vTraceStart, vTraceEnd)
new Float:fOffset = floatmax((fDistance / 6.0), 76.0)
new Float:fAngleFormedByPoint = floattan((fOffset / (fDistance / 2.0)), degrees)
new Float:vDirection[3]
xs_vec_sub(vTraceEnd, vTraceStart, vDirection)
new Float:vAngles[3]
vector_to_angle(vDirection, vAngles)
/*
// for left -> ignored one side for starters
fAngleFormedByPoint = vAngles[1] - fAngleFormedByPoint
while(fAngleFormedByPoint < -180.0)
{
fAngleFormedByPoint += 360.0;
}
// end left
*/
// for right
fAngleFormedByPoint = vAngles[1] + fAngleFormedByPoint
while(fAngleFormedByPoint > 180.0)
{
fAngleFormedByPoint -= 360.0
}
// end right
vAngles[1] = fAngleFormedByPoint
angle_vector(vAngles, ANGLEVECTOR_FORWARD, vDirection)
new Float:fHypotenuse = floatsqroot(floatpower(fOffset, 2.0) + floatpower(( fDistance / 2.0 ), 2.0))
xs_vec_mul_scalar(vDirection, fHypotenuse, vDirection)
new Float:vCalcOrigin[3]
xs_vec_add(vTraceStart, vDirection, vCalcOrigin)
do_beam(index, vTraceStart, vCalcOrigin)
}
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
#if Arkshine
public do_trace(index)
{
new Float:vTraceStart[3]
new Float:view_ofs[3]
pev(index, pev_origin, vTraceStart)
pev(index, pev_view_ofs, view_ofs)
xs_vec_add(vTraceStart, view_ofs, vTraceStart)
new Float:dest[3]
pev(index, pev_v_angle, dest)
engfunc(EngFunc_MakeVectors, dest)
global_get(glb_v_forward, dest)
xs_vec_mul_scalar(dest, 9999.0, dest)
xs_vec_add(vTraceStart, dest, dest)
engfunc(EngFunc_TraceLine, vTraceStart, dest, 0, index, 0)
new Float:vTraceEnd[3]
get_tr2(0, TR_vecEndPos, vTraceEnd)
/////////////////////////////////////////////////////////////////////////////
new Float:fDistance = get_distance_f(vTraceStart, vTraceEnd)
do_beam(index, vTraceStart, vTraceEnd)
new Float:fOffset = floatmax((fDistance / 6.0), 76.0)
new Float:vDirection[3]
xs_vec_sub( vTraceEnd, vTraceStart, vDirection )
xs_vec_normalize(vDirection, vDirection )
xs_vec_mul_scalar(vDirection, ( fDistance / 2.0 ), vDirection)
new Float:vCenter[3]
xs_vec_add(vTraceStart, vDirection, vCenter)
new Float:vAngles[3]
vector_to_angle(vDirection, vAngles)
angle_vector(vAngles, ANGLEVECTOR_RIGHT, vDirection)
// left
//xs_vec_mul_scalar(vDirection, -fOffset, vDirection)
// right
xs_vec_mul_scalar( vDirection, fOffset, vDirection )
new Float:vCalcOrigin[3]
xs_vec_add(vCenter, vDirection, vCalcOrigin)
do_beam(index, vTraceStart, vCalcOrigin)
}
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
public do_beam(index, Float:start[3], Float:end[3])
{
message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, index)
write_byte(TE_BEAMPOINTS)
write_coord(floatround(start[0]))
write_coord(floatround(start[1]))
write_coord(floatround(start[2]))
write_coord(floatround(end[0]))
write_coord(floatround(end[1]))
write_coord(floatround(end[2]))
write_short(beamSpr)
write_byte(0)
write_byte(0)
write_byte(50)
write_byte(10)
write_byte(0)
write_byte(0)
write_byte(255)
write_byte(0)
write_byte(200)
write_byte(0)
message_end()
}
////////////////////////////////////////////////////////////////////////////////////////////////////