Re: How to create circle
thanks for replying, actually i did add the sqroot to the equation infact here's the full code...
PHP Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx> #include <amxmisc> #include <engine> #include <fakemeta>
#define PLUGIN "Health circle" #define VERSION "1.0" #define AUTHOR "Natsheh"
new g_sprite;
#define X 0 #define Y 1 #define Z 2
public plugin_precache() g_sprite = precache_model("sprites/laserbeam.spr");
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("amx_health_circle", "handler_command", ADMIN_KICK, "<rad> <width> <axis x> <axis y> <axis z>"); register_clcmd("amx_delete_health_circle", "handler_command2", ADMIN_KICK, "remove health circle nearby!"); register_think("health_circle", "brain_work"); }
public handler_command2(id, level, cid) { if(!cmd_access(id, level, cid, 1)) return 1; new ent = -1, target_circle = 0, Float:wanted_distance = 250.0, Float:fOrigin[3], Float:fOrigin2[3], Float:z; pev(id, pev_origin, fOrigin); while( (ent = find_ent_by_class(ent, "health_circle")) > 0 ) { pev(ent, pev_origin, fOrigin2); if( (z=get_distance_f(fOrigin, fOrigin2)) <= wanted_distance ) { target_circle = ent; wanted_distance = z; } } if(target_circle > 0) { set_entity_flags(target_circle, FL_KILLME, true); console_print(id, "The health circle nearby was removed!"); } else { console_print(id, "No health circles were found!"); } return 1; }
public handler_command(id, level, cid) { if(!cmd_access(id, level, cid, 2)) return 1; new szRadius[5], szWidth[5], szAngle_X[5], szAngle_Y[5], szAngle_Z[5]; read_argv(1, szRadius, charsmax(szRadius)); read_argv(2, szWidth, charsmax(szWidth)); read_argv(3, szAngle_X, charsmax(szAngle_X)); read_argv(4, szAngle_Y, charsmax(szAngle_Y)); read_argv(5, szAngle_Z, charsmax(szAngle_Z)); remove_quotes(szRadius); remove_quotes(szWidth); remove_quotes(szAngle_X); remove_quotes(szAngle_Y); remove_quotes(szAngle_Z); new ent = create_entity("info_target"); if(ent > 0) { entity_set_string(ent, EV_SZ_classname, "health_circle"); new Float:fAngles[3]; entity_get_vector(id, EV_VEC_origin, fAngles); entity_set_origin(ent, fAngles); entity_set_int(ent, EV_INT_iuser4, str_to_num(szWidth)); entity_set_float(ent, EV_FL_fuser4, floatstr(szRadius)); fAngles[0] = floatstr(szAngle_X); fAngles[1] = floatstr(szAngle_Y); fAngles[2] = floatstr(szAngle_Z); entity_set_vector(ent, EV_VEC_angles, fAngles); entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER); entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1); console_print(id, "Health circle has been created!"); } else { console_print(id, "Failed to create the health circle!"); } return 1; }
public brain_work(id) { static Float:fAngles[3], Float:fRadius[3], Float:fOrigin[3], Float:fWidth; pev(id, pev_angles, fAngles); pev(id, pev_origin, fOrigin) fWidth = float(pev(id, pev_iuser4)); pev(id, pev_fuser4, fRadius[X]); fRadius[Y] = 0.0; fRadius[Z] = 0.0; static g_aPlayers[32], Float:fPos[3], pnum, i, Float:z1, Float:x1, Float:c1; c1 = fRadius[X]; get_players(g_aPlayers, pnum, "ach"); for(i = 0; i < pnum; i++) { pev(g_aPlayers[i], pev_origin, fPos); fPos[X] = fRadius[X] * floatcos(fAngles[Y],degrees) - floatsin(fAngles[Y],degrees) * fRadius[Y]; fPos[Y] = fRadius[X] * floatsin(fAngles[Y],degrees) + floatcos(fAngles[Y],degrees) * fRadius[Y]; fPos[Z] = 0.0 xs_vec_copy(fPos, fRadius); fPos[X] = fRadius[X] * floatcos(fAngles[X],degrees) + fRadius[Y] * floatsin(fAngles[X],degrees); fPos[Y] = fRadius[Y]; fPos[Z] = -fRadius[X] * floatsin(fAngles[X],degrees) + fRadius[Z] * floatcos(fAngles[X],degrees); xs_vec_copy(fPos, fRadius); /*x1=floatsqroot(floatpower((fPos[X] - fOrigin[X]),2.0) + floatpower((fPos[Y] - fOrigin[Y]),2.0)); z1=floatsqroot(floatpower((fPos[X] - fOrigin[X]),2.0) + floatpower((fPos[Z] - fOrigin[Z]),2.0)); c1=floatsqroot(floatpower((fPos[Y] - fOrigin[Y]),2.0) + floatpower((fPos[Z] - fOrigin[Z]),2.0)); if(x1 < fRadius[X] && floatabs(fPos[Z] - fOrigin[Z]) <= fRadius[X] || z1 < fRadius[Y] && floatabs(fPos[Y] - fOrigin[Y]) <= fRadius[Y] || c1 < fRadius[X] && floatabs(fPos[X] - fOrigin[X]) <= fRadius[Z] ) { client_print(0, print_chat, "------> player in circle <---------- "); }*/ client_print(0, print_chat, "--------------------- "); client_print(0, print_chat, "Z1: %.1f X1: %.1f C1: %.1f ", floatsqroot(z1), floatsqroot(x1), floatsqroot(c1)); const iDivides = 32 static Float:AngleMulScalar; AngleMulScalar = (360.0 / iDivides); static Float:fTemp[3], Float:fAngle[3], i, Float:fVector1[3] = { 0.0, 0.0, 0.0 }, Float:fVector2[3] = { 0.0, 0.0, 0.0 }, Float:fStart1[3], Float:fStart2[3]; xs_vec_set(fAngle, 0.0, 0.0, 0.0); xs_vec_normalize(fRadius, fAngle); vector_to_angle(fAngle, fAngle); for(i = 0; i <= iDivides; i++) { if(i > 0) { xs_vec_copy(fVector1, fStart1); xs_vec_copy(fVector2, fStart2); } angle_vector(fAngle, ANGLEVECTOR_RIGHT, fTemp); xs_vec_mul_scalar(fTemp, floatabs(c1), fVector1); xs_vec_mul_scalar(fTemp, -floatabs(c1), fVector2); xs_vec_add(fOrigin, fVector1, fVector1); xs_vec_add(fOrigin, fVector2, fVector2); xs_vec_mul_scalar(fTemp, AngleMulScalar, fTemp); vector_to_angle(fTemp, fTemp); fAngle[X] += fTemp[X]; fAngle[Y] += fTemp[Y]; fAngle[Z] += fTemp[Z]; if(i > 0) { createline(fStart1, fVector1) createline(fStart2, fVector2) } } client_print(0, print_chat, "Rad %.1f | %.1f | %.1f", fRadius[0], fRadius[1], fRadius[2]); } entity_set_float(id, EV_FL_nextthink, get_gametime() + 1.0); }
|