diff --git a/include/hacks/Backtrack.hpp b/include/hacks/Backtrack.hpp index a99ec8d1..d21816a0 100644 --- a/include/hacks/Backtrack.hpp +++ b/include/hacks/Backtrack.hpp @@ -7,6 +7,7 @@ #pragma once #include "common.hpp" +#include namespace hacks { @@ -40,7 +41,8 @@ struct CIncomingSequence int sequencenr; float curtime; }; -extern std::deque sequences; +typedef boost::circular_buffer circular_buf; +extern circular_buf sequences; extern CatVar latency; extern CatVar enable; extern BacktrackData headPositions[32][66]; diff --git a/include/reclasses/C_TFWeaponBaseMelee.hpp b/include/reclasses/C_TFWeaponBaseMelee.hpp index 82822bd1..91e9eea6 100644 --- a/include/reclasses/C_TFWeaponBaseMelee.hpp +++ b/include/reclasses/C_TFWeaponBaseMelee.hpp @@ -22,12 +22,13 @@ public: self, offsets::PlatformOffset(522, offsets::undefined, 522), 0)(self, trace); } - inline static float GetSwingRange(IClientEntity *self) + inline static float GetSwingRange(CachedEntity *self) { - typedef float (*fn_t)(IClientEntity *); - return vfunc( - self, offsets::PlatformOffset(520, offsets::undefined, 520), - 0)(self); + int ret = 48.0f; + if (self->m_iClassID == CL_CLASS(CTFSword) || + self->m_iClassID == CL_CLASS(CTFKatana)) + ret = 72.0f; + return ret; } }; } diff --git a/src/hacks/Aimbot.cpp b/src/hacks/Aimbot.cpp index faadc02c..681309ce 100644 --- a/src/hacks/Aimbot.cpp +++ b/src/hacks/Aimbot.cpp @@ -1047,7 +1047,7 @@ int ClosestHitbox(CachedEntity *target) // FIXME this will break multithreading if it will be ever implemented. When // implementing it, these should be made non-static int closest; - float closest_fov, fov; + float closest_fov, fov = 0.0f; closest = -1; closest_fov = 256; @@ -1186,7 +1186,7 @@ bool UpdateAimkey() float EffectiveTargetingRange() { if (GetWeaponMode() == weapon_melee) - return (float) re::C_TFWeaponBaseMelee::GetSwingRange(RAW_ENT(LOCAL_W)); + return (float) re::C_TFWeaponBaseMelee::GetSwingRange(LOCAL_W); if (g_pLocalPlayer->weapon()->m_iClassID == CL_CLASS(CTFFlameThrower)) return 185.0f; // Pyros only have so much untill their flames hit diff --git a/src/hacks/AntiBackstab.cpp b/src/hacks/AntiBackstab.cpp index a06bdd64..f278565f 100644 --- a/src/hacks/AntiBackstab.cpp +++ b/src/hacks/AntiBackstab.cpp @@ -21,7 +21,7 @@ static CatVar distance(CV_FLOAT, "antibackstab_distance", "200", "Distance", "Distance Until anti-backstab reacts"); static CatVar silent(CV_SWITCH, "antibackstab_silent", "1", "Silent", "Works silently without moving your view"); -static CatVar angle(CV_FLOAT, "antibackstab_angle", "150", "Detection Angle"); +static CatVar angle(CV_FLOAT, "antibackstab_angle", "90", "Detection Angle"); static CatVar sayno(CV_SWITCH, "antibackstab_nope", "0", "Nope!", "Memes"); void SayNope() @@ -100,35 +100,38 @@ void CreateMove() if (!enabled) return; - spy = ClosestSpy(); + spy = ClosestSpy(); + ConVar *pitchdown = g_ICvar->FindVar("cl_pitchdown"); + static int normal_val = pitchdown->GetInt(); if (spy) { - noaa = true; - const Vector &A = LOCAL_E->m_vecOrigin; - const Vector &B = spy->m_vecOrigin; - diff = (A - B); - yaw2 = acos(diff.x / diff.Length()) * 180.0f / PI; - if (diff.y < 0) - yaw2 = -yaw2; - if (yaw2 < -180) - yaw2 += 360; - if (yaw2 > 180) - yaw2 -= 360; - resultangle = -180 + yaw2; - if (resultangle < -180) - resultangle += 360; - g_pUserCmd->viewangles.y = resultangle; + noaa = true; + // const Vector &A = LOCAL_E->m_vecOrigin; + // const Vector &B = spy->m_vecOrigin; + // diff = (A - B); + // yaw2 = acos(diff.x / diff.Length()) * 180.0f / PI; + // if (diff.y < 0) + // yaw2 = -yaw2; + // if (yaw2 < -180) + // yaw2 += 360; + // if (yaw2 > 180) + // yaw2 -= 360; + // resultangle = -180 + yaw2; + // if (resultangle < -180) + // resultangle += 360; + // g_pUserCmd->viewangles.y = resultangle; + pitchdown->SetValue(180); + g_pUserCmd->viewangles.x = 140.0f; if (silent) - { - // This isn't a spy aimbot. - if (!(g_pUserCmd->buttons & IN_ATTACK)) - g_pLocalPlayer->bUseSilentAngles = true; - } + g_pLocalPlayer->bUseSilentAngles = true; if (sayno) SayNope(); } else + { + pitchdown->SetValue(normal_val); noaa = false; + } } void PaintTraverse() diff --git a/src/hacks/Backtrack.cpp b/src/hacks/Backtrack.cpp index 3ec70d9d..4f3d6dc7 100644 --- a/src/hacks/Backtrack.cpp +++ b/src/hacks/Backtrack.cpp @@ -7,6 +7,8 @@ #include "common.hpp" #include "Backtrack.hpp" +#include + namespace hacks { namespace shared @@ -22,7 +24,7 @@ CatVar latency(CV_FLOAT, "backtrack_latency", "0", "fake lantency", BacktrackData headPositions[32][66]; int lastincomingsequencenumber = 0; -std::deque sequences; +circular_buf sequences{ 2048 }; void UpdateIncomingSequences() { INetChannel *ch = (INetChannel *) g_IEngine->GetNetChannelInfo(); @@ -84,18 +86,28 @@ inline Vector angle_vector(Vector meme) return Vector(cp * cy, cp * sy, -sp); } //======================================================================= +bool installed = false; +int ticks = 12; void Init() { for (int i = 0; i < 32; i++) for (int j = 0; j < 66; j++) headPositions[i][j] = BacktrackData{ 0, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } }; + if (!installed) + { + latency.InstallChangeCallback( + [](IConVar *var, const char *pszOldValue, float flOldValue) { + ticks = max(min(int((float) latency) / 15, 65), 12); + }); + installed = true; + } } bool disabled = true; -int BestTick = 0; +int BestTick = 0; + void Run() { - int ticks = latency ? (float) latency / 15 : 12; if (!enable) { if (!disabled) @@ -111,7 +123,7 @@ void Run() if (CE_BAD(LOCAL_E)) return; - for (int i = 1; i <= g_IEngine->GetMaxClients(); i++) + for (int i = 1; i < g_IEngine->GetMaxClients(); i++) { CachedEntity *pEntity = ENTITY(i); @@ -133,21 +145,19 @@ void Run() Vector hitboxpos = pEntity->hitboxes.GetHitbox(0)->center; Vector min = pEntity->hitboxes.GetHitbox(0)->min; Vector max = pEntity->hitboxes.GetHitbox(0)->max; - headPositions[i][cmd->command_number % ticks] = + headPositions[i][cmd->command_number % ticks + 1] = BacktrackData{ cmd->tick_count, hitboxpos, min, max }; Vector ViewDir = angle_vector(cmd->viewangles); float FOVDistance = distance_point_to_line(hitboxpos, g_pLocalPlayer->v_Eye, ViewDir); - - if (bestFov > FOVDistance) + if (bestFov > FOVDistance && FOVDistance < 10.0f) { bestFov = FOVDistance; iBestTarget = i; } - if (iBestTarget != -1) { - int bestTick = 0; + int bestTick = 0; float tempFOV = 9999; float bestFOV = 30; Vector lowestDistTicks(180, 180, 0); @@ -158,7 +168,7 @@ void Run() tempFOV = distance_point_to_line( headPositions[iBestTarget][t].hitboxpos, g_pLocalPlayer->v_Eye, ViewDir); - if (bestFOV > tempFOV) + if (bestFOV > tempFOV && tempFOV < 10.0f) bestTick = t, bestFOV = tempFOV; } @@ -175,7 +185,6 @@ void Draw() return; if (!draw_bt) return; - int ticks = latency ? (float) latency / 15 : 12; for (int i = 0; i < 32; i++) for (int j = 0; j < ticks; j++) { diff --git a/src/hacks/Trigger.cpp b/src/hacks/Trigger.cpp index 8aab9393..c7246bda 100644 --- a/src/hacks/Trigger.cpp +++ b/src/hacks/Trigger.cpp @@ -351,53 +351,30 @@ bool IsTargetStateGood(CachedEntity *entity) // Check for null if (hb) { - for (int i = -1; i < 12; i++) + // Get the min and max for the hitbox + Vector minz(std::min(hb->min.x, hb->max.x), + std::min(hb->min.y, hb->max.y), + std::min(hb->min.z, hb->max.z)); + Vector maxz(std::max(hb->min.x, hb->max.x), + std::max(hb->min.y, hb->max.y), + std::max(hb->min.z, hb->max.z)); + + // Shrink the hitbox here + Vector size = maxz - minz; + Vector smod = size * 0.05f * (int) accuracy; + + // Save the changes to the vectors + minz += smod; + maxz -= smod; + + // Trace and test if it hits the smaller hitbox, if it fails + // we + // return false + Vector hit; + if (CheckLineBox(minz, maxz, g_pLocalPlayer->v_Eye, forward, + hit)) { - if (i > -1) - { - auto min = hacks::shared::backtrack::headPositions - [entity->m_IDX][i] - .min; - auto max = hacks::shared::backtrack::headPositions - [entity->m_IDX][i] - .max; - if (min.x && max.x) - { - hb->min = hacks::shared::backtrack::headPositions - [entity->m_IDX][i] - .min; - hb->max = hacks::shared::backtrack::headPositions - [entity->m_IDX][i] - .max; - } - else - break; - } - // Get the min and max for the hitbox - Vector minz(std::min(hb->min.x, hb->max.x), - std::min(hb->min.y, hb->max.y), - std::min(hb->min.z, hb->max.z)); - Vector maxz(std::max(hb->min.x, hb->max.x), - std::max(hb->min.y, hb->max.y), - std::max(hb->min.z, hb->max.z)); - - // Shrink the hitbox here - Vector size = maxz - minz; - Vector smod = size * 0.05f * (int) accuracy; - - // Save the changes to the vectors - minz += smod; - maxz -= smod; - - // Trace and test if it hits the smaller hitbox, if it fails - // we - // return false - Vector hit; - if (CheckLineBox(minz, maxz, g_pLocalPlayer->v_Eye, forward, - hit)) - { - return true; - } + return true; } } } @@ -660,7 +637,7 @@ float EffectiveTargetingRange() { if (GetWeaponMode() == weapon_melee) { - return re::C_TFWeaponBaseMelee::GetSwingRange(RAW_ENT(LOCAL_W)); + return re::C_TFWeaponBaseMelee::GetSwingRange(LOCAL_W); // Pyros only have so much untill their flames hit } else if (g_pLocalPlayer->weapon()->m_iClassID == CL_CLASS(CTFFlameThrower)) diff --git a/src/hooks/CreateMove.cpp b/src/hooks/CreateMove.cpp index 07536b5e..cc0c4275 100644 --- a/src/hooks/CreateMove.cpp +++ b/src/hooks/CreateMove.cpp @@ -486,6 +486,9 @@ DEFINE_HOOKED_METHOD(CreateMove, bool, void *this_, float input_sample_time, cmd->viewangles.y); cmd->forwardmove = cos(yaw) * speed; cmd->sidemove = sin(yaw) * speed; + if (hacks::tf2::antibackstab::noaa) + if (cmd->viewangles.x >= 90 && cmd->viewangles.x <= 270) + cmd->forwardmove = -cmd->forwardmove; } ret = false;