diff --git a/src/hacks/MiscAimbot.cpp b/src/hacks/MiscAimbot.cpp index 83beaf64..cd1ad268 100644 --- a/src/hacks/MiscAimbot.cpp +++ b/src/hacks/MiscAimbot.cpp @@ -51,6 +51,66 @@ std::pair FindBestEnt(bool teammate, bool Predict, } return { bestent, predicted }; } +static float slow_change_dist_y{}; +static float slow_change_dist_p{}; +void DoSlowAim(Vector &input_angle) +{ + + auto viewangles = current_user_cmd->viewangles; + + // Yaw + if (viewangles.y != input_angle.y) + { + + // Check if input angle and user angle are on opposing sides of yaw so + // we can correct for that + bool slow_opposing = false; + if ((input_angle.y < -90 && viewangles.y > 90) || + (input_angle.y > 90 && viewangles.y < -90)) + slow_opposing = true; + + // Direction + bool slow_dir = false; + if (slow_opposing) + { + if (input_angle.y > 90 && viewangles.y < -90) + slow_dir = true; + } + else if (viewangles.y > input_angle.y) + slow_dir = true; + + // Speed, check if opposing. We dont get a new distance due to the + // opposing sides making the distance spike, so just cheap out and reuse + // our last one. + if (!slow_opposing) + slow_change_dist_y = + std::abs(viewangles.y - input_angle.y) / 5; + + // Move in the direction of the input angle + if (slow_dir) + input_angle.y = viewangles.y - slow_change_dist_y; + else + input_angle.y = viewangles.y + slow_change_dist_y; + } + + // Pitch + if (viewangles.x != input_angle.x) + { + // Get speed + slow_change_dist_p = + std::abs(viewangles.x - input_angle.x) / 5; + + // Move in the direction of the input angle + if (viewangles.x > input_angle.x) + input_angle.x = viewangles.x - slow_change_dist_p; + else + input_angle.x = viewangles.x + slow_change_dist_p; + } + + // Clamp as we changed angles + fClampAngle(input_angle); +} + static HookedFunction SandwichAim(HookedFunctions_types::HF_CreateMove, "SandwichAim", 1, []() { if (!*enable) @@ -112,8 +172,7 @@ static HookedFunction VectorAngles(tr, angles); // Clamping is important fClampAngle(angles); + DoSlowAim(angles); current_user_cmd->viewangles = angles; - current_user_cmd->buttons |= IN_ATTACK2; - g_pLocalPlayer->bUseSilentAngles = true; } - }); \ No newline at end of file + }); diff --git a/src/hooks/CreateMove.cpp b/src/hooks/CreateMove.cpp index 4a7c8fb1..ed85ea5f 100644 --- a/src/hooks/CreateMove.cpp +++ b/src/hooks/CreateMove.cpp @@ -61,8 +61,8 @@ void RunEnginePrediction(IClientEntity *ent, CUserCmd *ucmd) (FinishMoveFn)(*(unsigned *) (predictionVtable + 20)); // CMoveData *pMoveData = (CMoveData*)(sharedobj::client->lmap->l_addr + // 0x1F69C0C); CMoveData movedata {}; - char *object = new char[165]; - CMoveData *pMoveData = (CMoveData *) object; + auto object = std::make_unique(165); + CMoveData *pMoveData = (CMoveData *) object.get(); // Backup float frameTime = g_GlobalVars->frametime; @@ -95,8 +95,6 @@ void RunEnginePrediction(IClientEntity *ent, CUserCmd *ucmd) g_IGameMovement->FinishTrackPredictionErrors( reinterpret_cast(ent)); - delete[] object; - // Reset User CMD NET_VAR(ent, 4188, CUserCmd *) = nullptr; diff --git a/src/prediction.cpp b/src/prediction.cpp index f9cf99b9..69e900e2 100644 --- a/src/prediction.cpp +++ b/src/prediction.cpp @@ -136,8 +136,8 @@ Vector EnginePrediction(CachedEntity *entity, float time) // CMoveData *pMoveData = (CMoveData*)(sharedobj::client->lmap->l_addr + // 0x1F69C0C); CMoveData movedata {}; - char *object = new char[165]; - CMoveData *pMoveData = (CMoveData *) object; + auto object = std::make_unique(165); + CMoveData *pMoveData = (CMoveData *) object.get(); float frameTime = g_GlobalVars->frametime; float curTime = g_GlobalVars->curtime; @@ -181,8 +181,6 @@ Vector EnginePrediction(CachedEntity *entity, float time) g_IGameMovement->FinishTrackPredictionErrors( reinterpret_cast(ent)); - delete[] object; - NET_VAR(entity, 4188, CUserCmd *) = original_cmd; g_GlobalVars->frametime = frameTime;