Re: Get origin from ½ distance
Exolent yours find below or above. Arkshines find right or left. But ok i guess i should have said that the picture was a plan view :) ...
Anyways, Amazing! Thanks you both!
PHP Code:
/* Plugin generated by AMXX-Studio */
/////////////////////////////////////////////////////////////////////////////////////////////////// #include <amxmodx> #include <fakemeta> #include <xs> //////////////////////////////////////////////////////////////////////////////////////////////////// #define PLUGIN "YadaYada" #define VERSION "1.0 by Dr.G" #define AUTHOR "AMXX DoD Team" //////////////////////////////////////////////////////////////////////////////////////////////////// #define MAX_PLAYERS 32 //////////////////////////////////////////////////////////////////////////////////////////////////// #define Exolent 0 #define Arkshine 1 //////////////////////////////////////////////////////////////////////////////////////////////////// new beamSpr //////////////////////////////////////////////////////////////////////////////////////////////////// new IsTesting[MAX_PLAYERS + 1] //////////////////////////////////////////////////////////////////////////////////////////////////// public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("CurWeapon","func_CurWeapon","be","1=1","3>0") register_clcmd("say /test", "OnOff", ADMIN_KICK) } //////////////////////////////////////////////////////////////////////////////////////////////////// public plugin_precache() { beamSpr = precache_model("sprites/laserbeam.spr"); } //////////////////////////////////////////////////////////////////////////////////////////////////// public client_putinserver(id) { IsTesting[id] = 0 } //////////////////////////////////////////////////////////////////////////////////////////////////// public OnOff(id) { if(IsTesting[id]) IsTesting[id] = 0 else if(!IsTesting[id]) IsTesting[id] = 1 client_print(id, print_center, "%s", IsTesting[id] !=1 ? "Offline" : "Online") return PLUGIN_HANDLED } //////////////////////////////////////////////////////////////////////////////////////////////////// public func_CurWeapon(id) { if(!IsTesting[id]) return if(pev(id,pev_button) & IN_ATTACK) { do_trace(id) } } //////////////////////////////////////////////////////////////////////////////////////////////////// #if Exolent public do_trace(index) { new Float:vTraceStart[3] //new Float:start[3], new Float:view_ofs[3] pev(index, pev_origin, vTraceStart) pev(index, pev_view_ofs, view_ofs) xs_vec_add(vTraceStart, view_ofs, vTraceStart) new Float:dest[3] pev(index, pev_v_angle, dest) engfunc(EngFunc_MakeVectors, dest) global_get(glb_v_forward, dest) xs_vec_mul_scalar(dest, 9999.0, dest) xs_vec_add(vTraceStart, dest, dest) engfunc(EngFunc_TraceLine, vTraceStart, dest, 0, index, 0) new Float:vTraceEnd[3] get_tr2(0, TR_vecEndPos, vTraceEnd) ///////////////////////////////////////////////////////////////////////////// new Float:fDistance = get_distance_f(vTraceStart, vTraceEnd) do_beam(index, vTraceStart, vTraceEnd) new Float:fOffset = floatmax((fDistance / 6.0), 76.0) new Float:fAngleFormedByPoint = floattan((fOffset / (fDistance / 2.0)), degrees) new Float:vDirection[3] xs_vec_sub(vTraceEnd, vTraceStart, vDirection) new Float:vAngles[3] vector_to_angle(vDirection, vAngles) /* // for left -> ignored one side for starters fAngleFormedByPoint = vAngles[1] - fAngleFormedByPoint while(fAngleFormedByPoint < -180.0) { fAngleFormedByPoint += 360.0; } // end left */ // for right fAngleFormedByPoint = vAngles[1] + fAngleFormedByPoint while(fAngleFormedByPoint > 180.0) { fAngleFormedByPoint -= 360.0 } // end right vAngles[1] = fAngleFormedByPoint angle_vector(vAngles, ANGLEVECTOR_FORWARD, vDirection) new Float:fHypotenuse = floatsqroot(floatpower(fOffset, 2.0) + floatpower(( fDistance / 2.0 ), 2.0)) xs_vec_mul_scalar(vDirection, fHypotenuse, vDirection) new Float:vCalcOrigin[3] xs_vec_add(vTraceStart, vDirection, vCalcOrigin) do_beam(index, vTraceStart, vCalcOrigin) } #endif //////////////////////////////////////////////////////////////////////////////////////////////////// #if Arkshine public do_trace(index) { new Float:vTraceStart[3] new Float:view_ofs[3] pev(index, pev_origin, vTraceStart) pev(index, pev_view_ofs, view_ofs) xs_vec_add(vTraceStart, view_ofs, vTraceStart) new Float:dest[3] pev(index, pev_v_angle, dest) engfunc(EngFunc_MakeVectors, dest) global_get(glb_v_forward, dest) xs_vec_mul_scalar(dest, 9999.0, dest) xs_vec_add(vTraceStart, dest, dest) engfunc(EngFunc_TraceLine, vTraceStart, dest, 0, index, 0) new Float:vTraceEnd[3] get_tr2(0, TR_vecEndPos, vTraceEnd) ///////////////////////////////////////////////////////////////////////////// new Float:fDistance = get_distance_f(vTraceStart, vTraceEnd) do_beam(index, vTraceStart, vTraceEnd) new Float:fOffset = floatmax((fDistance / 6.0), 76.0) new Float:vDirection[3] xs_vec_sub( vTraceEnd, vTraceStart, vDirection ) xs_vec_normalize(vDirection, vDirection ) xs_vec_mul_scalar(vDirection, ( fDistance / 2.0 ), vDirection) new Float:vCenter[3] xs_vec_add(vTraceStart, vDirection, vCenter) new Float:vAngles[3] vector_to_angle(vDirection, vAngles) angle_vector(vAngles, ANGLEVECTOR_RIGHT, vDirection) // left //xs_vec_mul_scalar(vDirection, -fOffset, vDirection) // right xs_vec_mul_scalar( vDirection, fOffset, vDirection ) new Float:vCalcOrigin[3] xs_vec_add(vCenter, vDirection, vCalcOrigin) do_beam(index, vTraceStart, vCalcOrigin) } #endif //////////////////////////////////////////////////////////////////////////////////////////////////// public do_beam(index, Float:start[3], Float:end[3]) { message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, index) write_byte(TE_BEAMPOINTS) write_coord(floatround(start[0])) write_coord(floatround(start[1])) write_coord(floatround(start[2])) write_coord(floatround(end[0])) write_coord(floatround(end[1])) write_coord(floatround(end[2])) write_short(beamSpr) write_byte(0) write_byte(0) write_byte(50) write_byte(10) write_byte(0) write_byte(0) write_byte(255) write_byte(0) write_byte(200) write_byte(0) message_end() } ////////////////////////////////////////////////////////////////////////////////////////////////////
|