PHP Code:
/* Sublime AMXX Editor v2.2 */
#include <amxmodx>
#include <xs>
#include <engine>
#include <fakemeta>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Author"
new g_sprite, Float:g_fSpot[3];
public plugin_precache()
{
g_sprite = precache_model("sprites/laserbeam.spr");
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /test1", "check_bzs");
register_clcmd("say /test2", "check_spot");
}
public check_spot(id)
{
engfunc(EngFunc_SetOrigin, id, g_fSpot);
}
public check_bzs(id)
{
new Float:flMaxBS[3], Float:flMinBS[3], Float:fOrigin[3], Float:fVOFS[3];
pev(id, pev_origin, fOrigin);
pev(id, pev_view_ofs, fVOFS);
xs_vec_add(fOrigin, fVOFS, fOrigin);
CreateBoundingBoxAroundEntities(get_user_team(id) == 2 ? "info_player_deathmatch":"info_player_start", flMaxBS, flMinBS);
if ( SCAN_Zone_Visuality(fOrigin, flMaxBS, flMinBS) )
client_print(id, print_center, "I see buying zone!");
else
client_print(id, print_center, "I don't see buying zone!");
return PLUGIN_HANDLED;
}
CreateBoundingBoxAroundEntities(const szEntClassName[32], Float:flMaxBS[3], Float:flMinBS[3])
{
new ent = -1, Float:fEntMaxBS[3], Float:fEntMinBS[3];
// find the max/mins coords of the zone.
while( (ent = find_ent_by_class(ent, szEntClassName)) > 0)
{
pev(ent, pev_absmax, fEntMaxBS);
pev(ent, pev_absmin, fEntMinBS);
flMaxBS[0] = floatmax(fEntMaxBS[0], flMaxBS[0]);
flMaxBS[1] = floatmax(fEntMaxBS[1], flMaxBS[1]);
flMaxBS[2] = floatmax(fEntMaxBS[2], flMaxBS[2]);
flMinBS[0] = floatmin(fEntMinBS[0], flMinBS[0]);
flMinBS[1] = floatmin(fEntMinBS[1], flMinBS[1]);
flMinBS[2] = floatmin(fEntMinBS[2], flMinBS[2]);
}
return 0;
}
SCAN_Zone_Visuality(const Float:fvPOVOrigin[3], const Float:fMaxBS[3], const Float:fMinBS[3])
{
if(IsPointInsideZone(fvPOVOrigin, fMaxBS, fMinBS))
{
xs_vec_copy(fvPOVOrigin, g_fSpot);
client_print(0, print_chat, "POV INSIDE ZONE # %.2f %.2f %.2f", fvPOVOrigin[0], fvPOVOrigin[1], fvPOVOrigin[2]);
return 1;
}
new Float:fvPOVAngle[3], Float:fAngle[3], Float:fVector[3], Float:fMidPoint[3], Float:fLen, iTr2 = create_tr2();
xs_vec_add(fMaxBS, fMinBS, fMidPoint);
xs_vec_mul_scalar(fMidPoint, 0.5, fMidPoint);
xs_vec_sub(fMidPoint, fvPOVOrigin, fVector);
xs_vec_normalize(fVector, fVector);
vector_to_angle(fVector, fvPOVAngle);
new Float:fDistance = get_distance_f(fvPOVOrigin, fMidPoint);
for(new Float:fXShift = 60.0, Float:fYShift; fXShift >= -60.0; fXShift += -1.0)
{
xs_vec_copy(fvPOVAngle, fAngle);
fAngle[0] += fXShift;
for(fYShift = 60.0; fYShift >= -60.0; fYShift += -1.0)
{
fAngle[1] += fYShift;
angle_vector(fAngle, ANGLEVECTOR_FORWARD, fVector);
fLen = fDistance / floatmax( floatcos( xs_vec_angle(fMidPoint, fVector), degrees ), 1.0 );
xs_vec_mul_scalar(fVector, fLen, fVector);
xs_vec_add(fvPOVOrigin, fVector, fVector);
engfunc(EngFunc_TraceLine, fvPOVOrigin, fVector, IGNORE_MONSTERS|IGNORE_GLASS|IGNORE_GLASS, -1, iTr2);
get_tr2(iTr2, TR_EndPos, fVector);
if(IsPointInsideZone(fVector, fMaxBS, fMinBS))
{
//create_line(fvPOVOrigin, fVector, g_sprite)
xs_vec_copy(fVector, g_fSpot);
client_print(0, print_chat, "%.2f %.2f %.2f", fVector[0], fVector[1], fVector[2]);
free_tr2(iTr2);
return 1;
}
}
}
free_tr2(iTr2);
return 0;
}
bool:IsPointInsideZone(const Float:fPoint[3], const Float:fMaxBS[3], const Float:fMinBS[3])
{
if( (fMinBS[0] <= fPoint[0] <= fMaxBS[0]) &&
(fMinBS[1] <= fPoint[1] <= fMaxBS[1]) &&
(fMinBS[2] <= fPoint[2] <= fMaxBS[2]) )
{
return true;
}
return false;
}
create_line(const Float:fStart[3], const Float:fEnd[3], sprite)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMPOINTS)
engfunc(EngFunc_WriteCoord, fStart[0]);
engfunc(EngFunc_WriteCoord, fStart[1]);
engfunc(EngFunc_WriteCoord, fStart[2]);
engfunc(EngFunc_WriteCoord, fEnd[0]);
engfunc(EngFunc_WriteCoord, fEnd[1]);
engfunc(EngFunc_WriteCoord, fEnd[2]);
write_short(sprite)
write_byte(0) // starting frame
write_byte(10) // frame rate
write_byte(30); // life 3 seconds = 30
write_byte(10) // width in 0.1
write_byte(1) // noise in 0.01
write_byte(0) // red
write_byte(255) // green
write_byte(0) // blue
write_byte(255) // brightness
write_byte(1) // scroll speed in 0.1
message_end()
}