summaryrefslogtreecommitdiff
path: root/cheat/tf2/aim.h
diff options
context:
space:
mode:
Diffstat (limited to 'cheat/tf2/aim.h')
-rw-r--r--cheat/tf2/aim.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/cheat/tf2/aim.h b/cheat/tf2/aim.h
new file mode 100644
index 0000000..82e4943
--- /dev/null
+++ b/cheat/tf2/aim.h
@@ -0,0 +1,75 @@
+#pragma once
+#include <deque>
+#include <chrono>
+
+#include "sdk.h"
+
+namespace features
+{
+ class c_legitbot {
+ public:
+ void operator()( float* x, float* y ) {
+ aimbot( x, y );
+ }
+
+ //call once per tick
+ void sample_angle_data( const vec3_t& angle );
+ void triggerbot( user_cmd_t* cmd );
+
+ private:
+ struct aim_record_t {
+ vec3_t m_viewangles;
+ float m_time;
+ };
+
+ struct lag_record_t {
+ int m_tickcount{ };
+ vec3_t m_position{ };
+ matrix3x4 m_matrix[ 128 ]{ };
+
+ bool is_valid( );
+ };
+ class c_lagcomp {
+ public:
+ friend class c_legitbot;
+ using lag_deque_t = std::deque< lag_record_t >;
+
+ lag_record_t* find_best_record( int ent_index );
+ vec3_t get_backtracked_position( int ent_index );
+ auto& get_records( int ent_index ) {
+ return m_data[ ent_index ];
+ }
+
+ void store( );
+ void operator()( user_cmd_t* cmd );
+
+ private:
+ bool backtrack_entity( int ent_index );
+ bool can_backtrack_entity( int ent_index );
+ void store_player( int ent_index );
+
+ lag_deque_t m_data[ 65 ];
+ user_cmd_t* m_cmd;
+ };
+
+ vec2_t angle_to_pixels( const vec3_t& angle );
+ vec3_t pixels_to_angle( const vec2_t& pixel );
+ void aimbot( float* x, float* y );
+ void assist( c_base_player* player, float* x, float* y );
+ void aim_at_target( c_base_player*, float*, float* );
+
+ bool update_settings( );
+ float get_avg_delta( );
+ int get_aim_target( float fov = 0.f );
+
+ private:
+ float m_deltatime{ };
+ float m_curtime{ };
+ bool m_aiming{ };
+
+ std::deque< aim_record_t > m_angle_samples;
+
+ public:
+ c_lagcomp m_lagcomp;
+ };
+} \ No newline at end of file