Improve autobackstab

This commit is contained in:
TotallyNotElite 2018-08-01 17:36:37 +02:00
parent 607a72878d
commit b2bc660e8f

View File

@ -7,14 +7,15 @@
#include "common.hpp" #include "common.hpp"
#include "hacks/Backtrack.hpp" #include "hacks/Backtrack.hpp"
#include "hacks/Aimbot.hpp"
namespace hacks::tf2::autobackstab namespace hacks::tf2::autobackstab
{ {
static CatVar enabled(CV_SWITCH, "autobackstab", "0", "Auto Backstab", static CatVar enabled(CV_SWITCH, "autobackstab", "0", "Auto Backstab",
"Does not depend on triggerbot!"); "Does not depend on triggerbot!");
static CatVar silent(CV_SWITCH, "autobackstab_silent", "1", "Silent"); static CatVar silent(CV_SWITCH, "autobackstab_silent", "1", "Silent");
void traceEntity(int *result_eindex, Vector *result_pos, QAngle angle,
void hitEntity(int *result_eindex, Vector *result_pos, QAngle angle) Vector loc)
{ {
Ray_t ray; Ray_t ray;
Vector forward; Vector forward;
@ -29,9 +30,9 @@ void hitEntity(int *result_eindex, Vector *result_pos, QAngle angle)
forward.x = cp * cy; forward.x = cp * cy;
forward.y = cp * sy; forward.y = cp * sy;
forward.z = -sp; forward.z = -sp;
forward = forward * 8192.0f + g_pLocalPlayer->v_Eye; forward = forward * 8192.0f + loc;
ray.Init(g_pLocalPlayer->v_Eye, forward); ray.Init(loc, forward);
g_ITrace->TraceRay(ray, 0x4200400B, &trace::filter_default, &trace); g_ITrace->TraceRay(ray, MASK_SHOT_HULL, &trace::filter_default, &trace);
if (result_pos) if (result_pos)
*result_pos = trace.endpos; *result_pos = trace.endpos;
if (result_eindex) if (result_eindex)
@ -44,18 +45,21 @@ void hitEntity(int *result_eindex, Vector *result_pos, QAngle angle)
} }
} }
bool canBackstab(CachedEntity *tar, Vector angle, Vector loc, Vector hitboxLoc)
bool canBackstab(CachedEntity *tar, Vector angle)
{ {
float meleeRange = re::C_TFWeaponBaseMelee::GetSwingRange(RAW_ENT(LOCAL_W));
Vector targetAngle = NET_VECTOR(RAW_ENT(tar), netvar.m_angEyeAngles); Vector targetAngle = NET_VECTOR(RAW_ENT(tar), netvar.m_angEyeAngles);
if (fabsf(angle.y - targetAngle.y) < 90) if (fabsf(angle.y - targetAngle.y) < 85)
{ {
int IDX; int IDX;
Vector hitLoc; Vector hitLoc;
hitEntity(&IDX, &hitLoc, QAngle(angle.x, angle.y, angle.z)); traceEntity(&IDX, &hitLoc, QAngle(angle.x, angle.y, angle.z), loc);
if (IDX == tar->m_IDX) if (IDX == tar->m_IDX)
{
if (loc.DistTo(hitboxLoc) < meleeRange)
return true; return true;
} }
}
return false; return false;
} }
@ -68,7 +72,6 @@ void CreateMove()
if (g_pLocalPlayer->weapon()->m_iClassID() != CL_CLASS(CTFKnife)) if (g_pLocalPlayer->weapon()->m_iClassID() != CL_CLASS(CTFKnife))
return; return;
// Get melee range of knife // Get melee range of knife
int meleeRange = re::C_TFWeaponBaseMelee::GetSwingRange(RAW_ENT(LOCAL_W));
CachedEntity *besttarget = nullptr; CachedEntity *besttarget = nullptr;
for (int i = 0; i < g_IEngine->GetMaxClients(); i++) for (int i = 0; i < g_IEngine->GetMaxClients(); i++)
{ {
@ -79,12 +82,12 @@ void CreateMove()
!target->m_bAlivePlayer() || target->m_Type() != ENTITY_PLAYER) !target->m_bAlivePlayer() || target->m_Type() != ENTITY_PLAYER)
continue; continue;
if (target->hitboxes.GetHitbox(spine_3)->center.DistTo( if (target->hitboxes.GetHitbox(spine_3)->center.DistTo(
g_pLocalPlayer->v_Eye) <= meleeRange) g_pLocalPlayer->v_Eye) <= 300.0f)
{ {
if (CE_GOOD(besttarget)) if (CE_GOOD(besttarget))
{ {
if (target->hitboxes.GetHitbox(spine_3)->center.DistTo( if (target->hitboxes.GetHitbox(spine_3)->center.DistTo(
g_pLocalPlayer->v_Eye) > g_pLocalPlayer->v_Eye) <
besttarget->hitboxes.GetHitbox(spine_3)->center.DistTo( besttarget->hitboxes.GetHitbox(spine_3)->center.DistTo(
g_pLocalPlayer->v_Eye)) g_pLocalPlayer->v_Eye))
besttarget = target; besttarget = target;
@ -97,8 +100,11 @@ void CreateMove()
} }
if (CE_GOOD(besttarget)) if (CE_GOOD(besttarget))
{ {
Vector hitboxLoc =
besttarget->hitboxes.GetHitbox(hacks::shared::aimbot::ClosestHitbox(besttarget))
->center;
Vector angle = NET_VECTOR(RAW_ENT(LOCAL_E), netvar.m_angEyeAngles); Vector angle = NET_VECTOR(RAW_ENT(LOCAL_E), netvar.m_angEyeAngles);
if (canBackstab(besttarget, angle)) if (canBackstab(besttarget, angle, g_pLocalPlayer->v_Eye, hitboxLoc))
{ {
g_pUserCmd->buttons |= IN_ATTACK; g_pUserCmd->buttons |= IN_ATTACK;
besttarget = nullptr; besttarget = nullptr;
@ -107,12 +113,19 @@ void CreateMove()
else else
{ {
for (float i = -180.0f; i < 180.0f; i += 5.0f) for (float i = -180.0f; i < 180.0f; i += 1.0f)
{ {
// Get angles
Vector tr = (hitboxLoc - g_pLocalPlayer->v_Eye);
Vector xAngle;
VectorAngles(tr, xAngle);
// Clamping is important
fClampAngle(xAngle);
angle.x = xAngle.x;
angle.y = i; angle.y = i;
if (canBackstab(besttarget, angle)) if (canBackstab(besttarget, angle, g_pLocalPlayer->v_Eye, hitboxLoc))
{ {
g_pUserCmd->viewangles.y = i; g_pUserCmd->viewangles = angle;
g_pUserCmd->buttons |= IN_ATTACK; g_pUserCmd->buttons |= IN_ATTACK;
besttarget = nullptr; besttarget = nullptr;
if (silent) if (silent)
@ -123,4 +136,4 @@ void CreateMove()
} }
} }
} }
} } // namespace hacks::tf2::autobackstab