| madeitout |
08-18-2009 18:33 |
Is Inside
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.
here is my test code I made to try and make the stock
thank you
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() } }
|