PHP Code:
/* Sublime AMXX Editor v2.2 */
#include <amxmodx>
#include <amxmisc>
#include <xs>
#include <engine>
#include <fakemeta>
#define PLUGIN "[CHECK ENTITIES]"
#define VERSION "1.0"
#define AUTHOR "Natsheh"
new g_sprite_index;
public plugin_precache()
{
g_sprite_index = precache_model("sprites/laserbeam.spr");
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /checkents", "clcmd_checkents");
register_clcmd("entity_data", "clcmd_entdata", .info="<Type> <Action> <SearchBy>");
}
public clcmd_entdata(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
{
return PLUGIN_HANDLED;
}
new ent, szAction[16], szEntityType[32], szSearchBy[8];
read_argv(1, szEntityType, 31);
read_argv(2, szAction, 15);
read_argv(3, szSearchBy, 7);
remove_quotes(szAction);
remove_quotes(szEntityType);
remove_quotes(szSearchBy);
switch( szSearchBy[0] )
{
case 'N', 'n': ent = find_ent_by_tname(-1, szEntityType);
case 'T', 't': ent = find_ent_by_target(-1, szEntityType);
default: ent = find_ent_by_class(-1, szEntityType);
}
if( ent )
{
new szClass[32], szFlags[32], Float:fHealth, Float:flDamage, Float:flSpeed, Float:fMaxSpeed;
pev(ent, pev_classname, szClass, 31);
get_flags(pev(ent, pev_flags), szFlags, 31)
pev(ent, pev_health, fHealth);
pev(ent, pev_dmg, flDamage);
pev(ent, pev_speed, flSpeed);
pev(ent, pev_maxspeed, fMaxSpeed);
set_hudmessage(.red = 200, .green = 100, .blue = 0, .x = 0.25, .y = 0.35, .holdtime = 10.0, .fadeintime = 0.1, .fadeouttime = 0.1, .channel=4);
show_hudmessage(id, "@%d Classname: %s^n\
Owner: %d^n\
Movetype: %d^n\
Solidity: %d^n\
Health: %.2f^n\
Damage: %.2f^n\
Speed: %.2f^n\
MaxSpeed: %.2f^n\
Flags: %s", ent, szClass, pev(ent, pev_owner), pev(ent, pev_movetype), pev(ent, pev_solid), fHealth, flDamage, flSpeed, fMaxSpeed, szFlags);
if(equali(szAction, "remove"))
{
remove_entity(ent);
client_print_color(id, id, "The entity was ^3removed!");
}
else if(equali(szAction, "removeall", 9))
{
remove_entity_name(szClass);
client_print_color(id, id, "All the entities were ^3removed!");
}
else
{
client_print_color(id, id, "^4Entity was found!");
}
}
else
{
client_print_color(id, id, "^3Entity was not found!");
}
return PLUGIN_HANDLED;
}
public clcmd_checkents(id)
{
remove_task(id);
set_task(2.0, "task_check_nearby_ents", id, _, _, "b");
}
public client_disconnected(id)
{
remove_task(id);
}
public task_check_nearby_ents(id)
{
static pEnt[MAX_PLAYERS+1] = {0, 0, ...}, ent, Float:fOrigin[3], Float:fEntityOrigin[3];
pev(id, pev_origin, fOrigin);
while( ((ent = pEnt[id] = find_ent_in_sphere(pEnt[id], fOrigin, 200.0)) > 0)
)
{
get_brush_entity_origin(ent, fEntityOrigin);
if(!is_in_viewcone(id, fEntityOrigin, .use3d = 0))
{
continue;
}
new szClass[32], szFlags[32], Float:fHealth, Float:flDamage, Float:flSpeed, Float:fMaxSpeed;
pev(ent, pev_classname, szClass, 31);
get_flags(pev(ent, pev_flags), szFlags, 31)
pev(ent, pev_health, fHealth);
pev(ent, pev_dmg, flDamage);
pev(ent, pev_speed, flSpeed);
pev(ent, pev_maxspeed, fMaxSpeed);
set_hudmessage(.red = 200, .green = 100, .blue = 0, .x = 0.25, .y = 0.35, .holdtime = 2.0, .fadeintime = 0.1, .fadeouttime = 0.1, .channel=4);
show_hudmessage(id, "@%d Classname: %s^n\
Owner: %d^n\
Movetype: %d^n\
Solidity: %d^n\
Health: %.2f^n\
Damage: %.2f^n\
Speed: %.2f^n\
MaxSpeed: %.2f^n\
Flags: %s", ent, szClass, pev(ent, pev_owner), pev(ent, pev_movetype), pev(ent, pev_solid), fHealth, flDamage, flSpeed, fMaxSpeed, szFlags);
static iOrder[][][3] =
{
{ { 0, 0, 1 }, { 0, 0, -1 } }, // Inner line
{ { 1, 1, 1 }, { 1, 1, -1 } }, // 4 square lines SIDES
{ { -1, -1, 1 }, { -1, -1, -1 } },
{ { -1, 1, 1 }, { -1, 1, -1 } },
{ { 1, -1, 1 }, { 1, -1, -1 } },
{ { 1, 1, 1 }, { -1, 1, 1 } }, // 4 square lines TOP
{ { 1, 1, 1 }, { 1, -1, 1 } },
{ { -1, -1, 1 }, { -1, 1, 1 } },
{ { -1, -1, 1 }, { 1, -1, 1 } },
{ { 1, 1, -1 }, { -1, 1, -1 } }, // 4 square lines BOTTOM
{ { 1, 1, -1 }, { 1, -1, -1 } },
{ { -1, -1, -1 }, { -1, 1, -1 } },
{ { -1, -1, -1 }, { 1, -1, -1 } },
{ { 1, 1, 1 }, { -1, 1, -1 } }, // front cross
{ { 1, 1, -1 }, { -1, 1, 1 } },
{ { 1, -1, 1 }, { -1, -1, -1 } }, // back cross
{ { 1, -1, -1 }, { -1, -1, 1 } },
{ { 1, 1, 1 }, { 1, -1, -1 } }, // right cross
{ { 1, 1, -1 }, { 1, -1, 1 } },
{ { -1, 1, 1 }, { -1, -1, -1 } }, // left cross
{ { -1, 1, -1 }, { -1, -1, 1 } },
{ { 1, 1, 1 }, { -1, -1, 1 } }, // up cross
{ { 1, -1, 1 }, { -1, 1, 1 } },
{ { 1, 1, -1 }, { -1, -1, -1 } }, // down cross
{ { 1, -1, -1 }, { -1, 1, -1 } }
};
new Float:fMaxs[3], Float:fMins[3];
pev(ent, pev_absmax, fMaxs);
pev(ent, pev_absmin, fMins);
get_brush_entity_origin(ent, fOrigin);
xs_vec_sub(fMaxs, fOrigin, fMaxs);
xs_vec_sub(fMins, fOrigin, fMins);
const sizeofOrder = sizeof iOrder;
for( new i = 0, d, Float:fStart[3], Float:fEnd[3]; i < sizeofOrder; i++ )
{
for( d = 0; d < 3; d++ )
{
switch( iOrder[i][0][d] )
{
case -1: fStart[d] = fOrigin[d] + fMins[d];
case 0: fStart[d] = fOrigin[d];
case 1: fStart[d] = fOrigin[d] + fMaxs[d];
}
switch( iOrder[i][1][d] )
{
case -1: fEnd[d] = fOrigin[d] + fMins[d];
case 0: fEnd[d] = fOrigin[d];
case 1: fEnd[d] = fOrigin[d] + fMaxs[d];
}
}
// Traces...
beam_bet_2origin(fStart, fEnd, 20);
}
break;
}
}
beam_bet_2origin(Float:fOrigin1[3], Float:fOrigin2[3], const len=5)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, _, 0);
write_byte(TE_BEAMPOINTS);
engfunc(EngFunc_WriteCoord, fOrigin1[0]);
engfunc(EngFunc_WriteCoord, fOrigin1[1]);
engfunc(EngFunc_WriteCoord, fOrigin1[2]);
engfunc(EngFunc_WriteCoord, fOrigin2[0]);
engfunc(EngFunc_WriteCoord, fOrigin2[1]);
engfunc(EngFunc_WriteCoord, fOrigin2[2]);
write_short(g_sprite_index) ;
write_byte(0) ;
write_byte(10) ;
write_byte(len);
write_byte(5) ;
write_byte(0) ;
write_byte(0);
write_byte(255);
write_byte(0);
write_byte(255);
write_byte(0);
message_end();
}