I am trying to get a stock that will return 1 if an ent is inside a 3d insemetrical box. I tried a few different ways including the is_inside function in the chr_engine but it doesnt seem to allow z origins. The 3d box isn't a set origin and moves around the map and has various sizes.
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
new sprite, Float:origin1[3], Float:origin2[3], Float:origin3[3], Float:origin4[3], Float:origin5[3], Float:origin6[3], Float:origin7[3], Float:origin8[3];
public plugin_init()
{
register_forward(FM_PlayerPreThink, "ee")
register_event("ResetHUD", "ff", "b");
set_task(4.0, "dd", _, _, _, "b", _);
set_task(3.9, "gg", _, _, _, "b", _);
set_task(3.8, "hh", _, _, _, "b", _);
}
public plugin_precache()
sprite = precache_model("sprites/lgtning.spr");
public ee(id)
client_print(id, print_center, "%d", is_inside(id));
stock is_inside(id)
{
static Float:origin[3];
pev(id, pev_origin, origin);
if (origin[0] == 1.0)
return 1;
return 0;
}
public ff(id)
set_task(0.1, "ll", id);
public ll(id)
{
new Float:origin[3];
pev(id, pev_origin, origin);
origin1[0] = origin[0] - 100.0, origin1[1] = origin[1] - 50.0, origin1[2] = origin[2];
origin2[0] = origin[0] + 100.0, origin2[1] = origin[1] - 50.0, origin2[2] = origin[2] + 50.0;
origin3[0] = origin[0] - 100.0, origin3[1] = origin[1] - 50.0, origin3[2] = origin[2] + 100.0;
origin4[0] = origin[0] + 100.0, origin4[1] = origin[1] - 50.0, origin4[2] = origin[2] + 150.0;
origin5[0] = origin[0] - 050.0, origin5[1] = origin[1] + 50.0, origin5[2] = origin[2];
origin6[0] = origin[0] + 150.0, origin6[1] = origin[1] + 50.0, origin6[2] = origin[2] + 50.0;
origin7[0] = origin[0] - 050.0, origin7[1] = origin[1] + 50.0, origin7[2] = origin[2] + 100.0;
origin8[0] = origin[0] + 150.0, origin8[1] = origin[1] + 50.0, origin8[2] = origin[2] + 150.0;
}
public dd()
{
new Float:temp[3], Float:temp2[3];
for (new i = 0; i < 4; i++)
{
if (i==0) temp = origin1, temp2 = origin2;
else if (i==1) temp = origin2, temp2 = origin4;
else if (i==2) temp = origin3, temp2 = origin4;
else temp = origin3, temp2 = origin1;
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(0)
write_coord(floatround(temp[0]))
write_coord(floatround(temp[1]))
write_coord(floatround(temp[2]))
write_coord(floatround(temp2[0]))
write_coord(floatround(temp2[1]))
write_coord(floatround(temp2[2]))
write_short(sprite)
write_byte(1)
write_byte(1)
write_byte(50)
write_byte(15)
write_byte(0)
write_byte((i == 1) ? 255 : 0)
write_byte(255)
write_byte((i == 2) ? 255 : 0)
write_byte(210)
write_byte(0)
message_end()
}
}
public gg()
{
new Float:temp[3], Float:temp2[3];
for (new i = 0; i < 4; i++)
{
if (i==0) temp = origin5, temp2 = origin6;
else if (i==1) temp = origin6, temp2 = origin8;
else if (i==2) temp = origin7, temp2 = origin8;
else temp = origin7, temp2 = origin5;
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(0)
write_coord(floatround(temp[0]))
write_coord(floatround(temp[1]))
write_coord(floatround(temp[2]))
write_coord(floatround(temp2[0]))
write_coord(floatround(temp2[1]))
write_coord(floatround(temp2[2]))
write_short(sprite)
write_byte(1)
write_byte(1)
write_byte(50)
write_byte(15)
write_byte(0)
write_byte((i == 1) ? 255 : 0)
write_byte(255)
write_byte((i == 2) ? 255 : 0)
write_byte(210)
write_byte(0)
message_end()
}
}
public hh()
{
new Float:temp[3], Float:temp2[3];
for (new i = 0; i < 4; i++)
{
if (i==0) temp = origin1, temp2 = origin5;
else if (i==1) temp = origin2, temp2 = origin6;
else if (i==2) temp = origin3, temp2 = origin7;
else temp = origin4, temp2 = origin8;
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(0)
write_coord(floatround(temp[0]))
write_coord(floatround(temp[1]))
write_coord(floatround(temp[2]))
write_coord(floatround(temp2[0]))
write_coord(floatround(temp2[1]))
write_coord(floatround(temp2[2]))
write_short(sprite)
write_byte(1)
write_byte(1)
write_byte(50)
write_byte(15)
write_byte(0)
write_byte((i == 1) ? 255 : 0)
write_byte(255)
write_byte((i == 2) ? 255 : 0)
write_byte(210)
write_byte(0)
message_end()
}
}