diff --git a/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Features/CMisc/CMisc.cpp b/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Features/CMisc/CMisc.cpp index 6305d52..94eb8b7 100644 --- a/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Features/CMisc/CMisc.cpp +++ b/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Features/CMisc/CMisc.cpp @@ -477,6 +477,8 @@ auto CMisc::OnCreateMove( CCSGOInput* pInput , CUserCmd* pUserCmd ) -> void } } + RunMovement( pInput , pUserCmd ); + if ( Settings::Misc::FOVChanger ) { auto* pLocalPawn = GetCL_Players()->GetLocalPlayerPawn(); @@ -489,6 +491,144 @@ auto CMisc::OnCreateMove( CCSGOInput* pInput , CUserCmd* pUserCmd ) -> void } } +auto CMisc::RunMovement( CCSGOInput* pInput , CUserCmd* pUserCmd ) -> void +{ + auto* pLocalPawn = GetCL_Players()->GetLocalPlayerPawn(); + + if ( !pLocalPawn || !pLocalPawn->IsAlive() ) + { + m_bWasOnGround = false; + return; + } + + const auto flFlags = pLocalPawn->m_fFlags(); + + constexpr uint32 FL_ONGROUND = 1u; + + const bool bOnGround = ( flFlags & FL_ONGROUND ) != 0; + + if ( Settings::Misc::AutoStrafe ) + RunAutoStrafe( pInput , pUserCmd , pLocalPawn , bOnGround ); + + if ( Settings::Misc::JumpBug ) + { + if ( !bOnGround && pLocalPawn->m_flFallVelocity() > 430.f ) + GetCL_Bypass()->SetJump( pUserCmd , true ); + } + + if ( Settings::Misc::EdgeJump ) + { + if ( m_bWasOnGround && !bOnGround ) + { + if ( pUserCmd->button_states.buttonstate1 & ( IN_FORWARD | IN_BACK | IN_MOVELEFT | IN_MOVERIGHT ) ) + GetCL_Bypass()->SetJump( pUserCmd , true ); + } + } + + if ( Settings::Misc::LongJump ) + { + if ( !bOnGround ) + pUserCmd->button_states.buttonstate1 |= IN_DUCK; + } + + if ( Settings::Misc::FastStop ) + { + if ( bOnGround ) + { + if ( !( pUserCmd->button_states.buttonstate1 & ( IN_FORWARD | IN_BACK | IN_MOVELEFT | IN_MOVERIGHT ) ) ) + { + const Vector3 Velocity = pLocalPawn->m_vecVelocity(); + + const float flSpeed = Velocity.Length2D(); + + if ( flSpeed > 5.f ) + { + constexpr float k_Pi = 3.14159265358979f; + + const float flVelYaw = std::atan2f( Velocity.m_y , Velocity.m_x ) * ( 180.f / k_Pi ); + + auto* pViewAngles = CCSGOInput_GetViewAngles( pInput , 0 ); + + if ( pViewAngles ) + { + float flDelta = flVelYaw - pViewAngles->m_y; + + while ( flDelta > 180.f ) + flDelta -= 360.f; + + while ( flDelta < -180.f ) + flDelta += 360.f; + + if ( flDelta > -45.f && flDelta <= 45.f ) + pUserCmd->button_states.buttonstate1 |= IN_BACK; + else if ( flDelta > 45.f && flDelta <= 135.f ) + pUserCmd->button_states.buttonstate1 |= IN_MOVELEFT; + else if ( flDelta > 135.f || flDelta <= -135.f ) + pUserCmd->button_states.buttonstate1 |= IN_FORWARD; + else + pUserCmd->button_states.buttonstate1 |= IN_MOVERIGHT; + } + } + } + } + } + + if ( Settings::Misc::SlowWalk ) + pUserCmd->button_states.buttonstate1 |= IN_SPEED; + + m_bWasOnGround = bOnGround; +} + +auto CMisc::RunAutoStrafe( CCSGOInput* pInput , CUserCmd* pUserCmd , C_CSPlayerPawn* pLocalPawn , bool bOnGround ) -> void +{ + if ( bOnGround ) + return; + + if ( pUserCmd->button_states.buttonstate1 & ( IN_FORWARD | IN_BACK ) ) + return; + + const Vector3 Velocity = pLocalPawn->m_vecVelocity(); + + const float flSpeed = Velocity.Length2D(); + + if ( flSpeed < 0.1f ) + return; + + constexpr float k_Pi = 3.14159265358979f; + + const float flVelYaw = std::atan2f( Velocity.m_y , Velocity.m_x ) * ( 180.f / k_Pi ); + + auto* pViewAngles = CCSGOInput_GetViewAngles( pInput , 0 ); + + if ( !pViewAngles ) + return; + + float flDelta = flVelYaw - pViewAngles->m_y; + + while ( flDelta > 180.f ) + flDelta -= 360.f; + + while ( flDelta < -180.f ) + flDelta += 360.f; + + constexpr float k_TurnSpeed = 5.f; + + QAngle NewAngles = *pViewAngles; + + if ( flDelta > 0.f ) + { + NewAngles.m_y += k_TurnSpeed; + pUserCmd->button_states.buttonstate1 |= IN_MOVERIGHT; + } + else + { + NewAngles.m_y -= k_TurnSpeed; + pUserCmd->button_states.buttonstate1 |= IN_MOVELEFT; + } + + GetCL_Bypass()->SetViewAngles( &NewAngles , pInput , pUserCmd ); +} + auto CMisc::RunTriggerbot( CCSGOInput* pInput , CUserCmd* pUserCmd ) -> void { auto Reset = [ & ]() diff --git a/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Features/CMisc/CMisc.hpp b/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Features/CMisc/CMisc.hpp index 9077943..6b6074e 100644 --- a/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Features/CMisc/CMisc.hpp +++ b/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Features/CMisc/CMisc.hpp @@ -37,6 +37,9 @@ private: auto CalculateHitchance( CCSGOInput* pInput , C_CSPlayerPawn* pTarget , const QAngle& ViewAngles , const int Samples ) -> float; auto CalculateSeedDirection( CCSGOInput* pInput , CUserCmd* pUserCmd , Vector3* vOutDirection ) -> bool; + auto RunMovement( CCSGOInput* pInput , CUserCmd* pUserCmd ) -> void; + auto RunAutoStrafe( CCSGOInput* pInput , CUserCmd* pUserCmd , C_CSPlayerPawn* pLocalPawn , bool bOnGround ) -> void; + private: std::chrono::steady_clock::time_point m_HitTime{}; std::chrono::steady_clock::time_point m_HitSoundTime{}; @@ -50,6 +53,8 @@ private: std::atomic_bool m_bTargetInCrosshair = false; std::atomic_bool m_bTriggerFiring = false; + + bool m_bWasOnGround = false; }; auto GetMisc() -> CMisc*; diff --git a/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/GUI/CAndromedaMenu.cpp b/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/GUI/CAndromedaMenu.cpp index b76d836..8c5c4d6 100644 --- a/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/GUI/CAndromedaMenu.cpp +++ b/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/GUI/CAndromedaMenu.cpp @@ -332,6 +332,12 @@ auto CAndromedaMenu::RenderMiscPanel() -> void ImGui::SeparatorText( "Movement" ); Checkbox( "Bunnyhop" , Settings::Misc::Bunnyhop ); + Checkbox( "Auto-Strafe" , Settings::Misc::AutoStrafe ); + Checkbox( "JumpBug" , Settings::Misc::JumpBug ); + Checkbox( "EdgeJump" , Settings::Misc::EdgeJump ); + Checkbox( "Fast-Stop" , Settings::Misc::FastStop ); + Checkbox( "LongJump" , Settings::Misc::LongJump ); + Checkbox( "Slow Walk" , Settings::Misc::SlowWalk ); Checkbox( "No Flash" , Settings::Misc::NoFlash ); ImGui::SeparatorText( "Camera" ); diff --git a/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Settings/Settings.hpp b/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Settings/Settings.hpp index c38da72..3f8a45b 100644 --- a/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Settings/Settings.hpp +++ b/Andromeda-CS2-Base/Andromeda-CS2-Base/AndromedaClient/Settings/Settings.hpp @@ -44,6 +44,12 @@ namespace Settings namespace Misc { inline auto Bunnyhop = false; + inline auto AutoStrafe = false; + inline auto JumpBug = false; + inline auto EdgeJump = false; + inline auto FastStop = false; + inline auto LongJump = false; + inline auto SlowWalk = false; inline auto NoFlash = false; inline auto FOVChanger = false; inline auto FOV = 90; diff --git a/Andromeda-CS2-Base/Andromeda-CS2-Base/CS2/SDK/Types/CEntityData.hpp b/Andromeda-CS2-Base/Andromeda-CS2-Base/CS2/SDK/Types/CEntityData.hpp index 051fd56..7989a91 100644 --- a/Andromeda-CS2-Base/Andromeda-CS2-Base/CS2/SDK/Types/CEntityData.hpp +++ b/Andromeda-CS2-Base/Andromeda-CS2-Base/CS2/SDK/Types/CEntityData.hpp @@ -242,6 +242,7 @@ public: SCHEMA_OFFSET( "C_BaseEntity" , "m_iTeamNum" , m_iTeamNum , uint8 ); SCHEMA_OFFSET( "C_BaseEntity" , "m_fFlags" , m_fFlags , uint32 ); SCHEMA_OFFSET( "C_BaseEntity" , "m_MoveType" , m_MoveType , MoveType_t ); + SCHEMA_OFFSET( "C_BaseEntity" , "m_vecVelocity" , m_vecVelocity , Vector3 ); SCHEMA_OFFSET( "C_BaseEntity" , "m_hOwnerEntity" , m_hOwnerEntity , CHandle ); SCHEMA_OFFSET( "C_BaseEntity" , "m_nSubclassID" , m_nSubclassID , CUtlStringToken ); }; @@ -425,6 +426,8 @@ public: SCHEMA_OFFSET( "C_BasePlayerPawn" , "m_pObserverServices" , m_pObserverServices , CPlayer_ObserverServices* ); SCHEMA_OFFSET( "C_BasePlayerPawn" , "m_pCameraServices" , m_pCameraServices , CCSPlayerBase_CameraServices* ); SCHEMA_OFFSET( "C_BasePlayerPawn" , "m_vOldOrigin" , m_vOldOrigin , Vector3 ); + SCHEMA_OFFSET( "C_BasePlayerPawn" , "m_flFallVelocity" , m_flFallVelocity , float32 ); + SCHEMA_OFFSET( "C_BasePlayerPawn" , "m_bDucked" , m_bDucked , bool ); SCHEMA_OFFSET( "C_BasePlayerPawn" , "m_hController" , m_hController , CHandle ); // CCSPlayerController };