| meTaLiCroSS |
07-12-2010 12:25 |
Re: get_user_aiming
PHP Code:
static cell AMX_NATIVE_CALL get_user_aiming(AMX *amx, cell *params) { int index = params[1]; if (index < 1 || index > gpGlobals->maxClients) { LogError(amx, AMX_ERR_NATIVE, "Invalid player id %d", index); return 0; } CPlayer* pPlayer = GET_PLAYER_POINTER_I(index); cell *cpId = get_amxaddr(amx, params[2]); cell *cpBody = get_amxaddr(amx, params[3]); REAL pfloat = 0.0f;
if (pPlayer->ingame) { edict_t* edict = pPlayer->pEdict; Vector v_forward; Vector v_src = edict->v.origin + edict->v.view_ofs;
ANGLEVECTORS(edict->v.v_angle, v_forward, NULL, NULL); TraceResult trEnd; Vector v_dest = v_src + v_forward * static_cast<float>(params[4]); TRACE_LINE(v_src, v_dest, 0, edict, &trEnd); *cpId = FNullEnt(trEnd.pHit) ? 0 : ENTINDEX(trEnd.pHit); *cpBody = trEnd.iHitgroup; if (trEnd.flFraction < 1.0) { pfloat = (trEnd.vecEndPos - v_src).Length(); } } else { *cpId = 0; *cpBody = 0; } return amx_ftoc(pfloat); }
A convertion to amxx by me :crab::crab::crab:
PHP Code:
Float:eng_get_user_aiming(id, &target, &body, Float:dist = 9999.0) { if(id < 1 || id > get_maxplayers()) { log_error(AMX_ERR_NATIVE, "Invalid player id %d", id); return 0; } new flFloat = 0.0 if(is_user_connected(id)) { new Float:flVecSrc[3], Float:flViewOfs[3] entity_get_vector(id, EV_VEC_origin, flVecSrc) entity_get_vector(id, EV_VEC_view_ofs, flViewOfs) flVecSrc[0] += flViewOfs[0] flVecSrc[1] += flViewOfs[1] flVecSrc[2] += flViewOfs[2] new Float:flAngles[3], Float:flForward[3] entity_get_vector(id, EV_VEC_v_angle, flAngles) angle_vector(flAngles, ANGLEVECTOR_FORWARD, flForward) new Float:flVecDest[3] flVecDest[0] = flVecSrc[0] + (flForward[0] * dist) flVecDest[1] = flVecSrc[1] + (flForward[1] * dist) flVecDest[2] = flVecSrc[2] + (flForward[2] * dist) new Float:flVecEnd[3] trace_line(id, flVecSrc, flVecDest, flVecEnd) id = traceresult(TR_Hit) ? 0 : traceresult(TR_Hit) body = traceresult(TR_Hitgroup) new Float:flFraction traceresult(TR_Fraction, flFraction) if(flFraction < 1.0) flFloat = get_distance_f(flVecSrc, flVecEnd) } else { target = 0 body = 0 } return flFloat }
|