Improve autobackstab
This commit is contained in:
parent
607a72878d
commit
b2bc660e8f
@ -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
|
||||||
|
Reference in New Issue
Block a user