diff options
| author | navewindre <boneyaard@gmail.com> | 2018-09-24 23:07:59 +0200 |
|---|---|---|
| committer | navewindre <boneyaard@gmail.com> | 2018-09-24 23:07:59 +0200 |
| commit | b7375a7582db7ba2ee8a4dacfab226a3fd8fc514 (patch) | |
| tree | 93274596a51169dd44e532a2b624bb5b75424853 /internal_rewrite/ragebot_antiaim.cpp | |
| parent | ed07a29b5f14696247eed5ffcd9e8441742719b2 (diff) | |
?
Diffstat (limited to 'internal_rewrite/ragebot_antiaim.cpp')
| -rw-r--r-- | internal_rewrite/ragebot_antiaim.cpp | 70 |
1 files changed, 61 insertions, 9 deletions
diff --git a/internal_rewrite/ragebot_antiaim.cpp b/internal_rewrite/ragebot_antiaim.cpp index 145e714..91aac42 100644 --- a/internal_rewrite/ragebot_antiaim.cpp +++ b/internal_rewrite/ragebot_antiaim.cpp @@ -388,6 +388,33 @@ namespace features return tr.endpos;
}
+ float get_min_dist( vec3_t origin ) {
+ const float max_dist = 150.f;
+ float dist = 0.f;
+ float ret = FLT_MAX;
+
+ CTraceFilterWorldAndPropsOnly filter;
+ CGameTrace tr;
+ Ray_t ray;
+
+ for( size_t f = 0.f; f < 360.f; f += 45.f ) {
+ vec3_t rotated = math::get_rotated_pos( origin, f, max_dist );
+
+ ray.Init( origin, rotated );
+
+ g_csgo.m_trace( )->TraceRay( ray, MASK_SOLID, &filter, &tr );
+ dist = tr.endpos.dist_to( origin );
+
+ if( dist <= 75.f )
+ return 75.f;
+
+ if( dist < ret )
+ ret = dist;
+ }
+
+ return ret;
+ }
+
bool c_ragebot::c_antiaim::run_freestanding( int player ) {
if( !g_settings.rage.edge_detection )
return false;
@@ -421,13 +448,14 @@ namespace features local_pos = g_ctx.m_local->get_eye_pos( );
aim_angle = math::vector_angles( enemy_pos, local_pos );
- float dist = ( float )( g_settings.rage.freestanding_distance( ) );
+ float local_dist = get_min_dist( local_pos );
+ float enemy_dist = get_min_dist( enemy_pos );
float start_dmg = get_damage( enemy_pos, local_pos, ent, g_ctx.m_local );
- auto test_dmg = [ & ]( float dist ) {
- vec3_t enemy_left = math::get_rotated_pos( enemy_pos, aim_angle.y - 90.f, dist );
- vec3_t enemy_right = math::get_rotated_pos( enemy_pos, aim_angle.y + 90.f, dist );
+ auto test_dmg = [ & ]( float dist, float enemy_dist, float delta = 50.f ) {
+ vec3_t enemy_left = math::get_rotated_pos( enemy_pos, aim_angle.y - 90.f, enemy_dist );
+ vec3_t enemy_right = math::get_rotated_pos( enemy_pos, aim_angle.y + 90.f, enemy_dist );
enemy_left = trace_ent_pos( enemy_pos, enemy_left, ent );
enemy_right = trace_ent_pos( enemy_pos, enemy_right, ent );
@@ -444,24 +472,48 @@ namespace features float dmg_right = get_damage( enemy_left, local_right, ent, g_ctx.m_local )
+ get_damage( enemy_right, local_right, ent, g_ctx.m_local );
- if( std::abs( dmg_left - dmg_right ) < 25.f )
+ if( std::abs( dmg_left - dmg_right ) < delta )
return false;
float max_dmg = math::max( dmg_left, dmg_right );
direction = dmg_left > dmg_right;
cur_damage = max_dmg;
- return max_dmg > 25.f;
+ return max_dmg > delta;
};
- float radius = ( g_ctx.m_local->get_hitbox_pos( 0 ) - g_ctx.m_local->m_vecOrigin( ) ).length2d( );
+ float radius = std::floorf( ( g_ctx.m_local->get_hitbox_pos( 0 ) - g_ctx.m_local->get_hitbox_pos( HITBOX_PELVIS ) ).length2d( ) );
+ radius = radius >= 15.f ? 20.f : 10.f;
- if( !test_dmg( radius + 1.f ) ) {
+ float enemy_radius = std::floorf( ( ent->get_hitbox_pos( 0 ) - ent->get_hitbox_pos( HITBOX_PELVIS ) ).length2d( ) );
+ enemy_radius = enemy_radius >= 15.f ? 20.f : 10.f;
+
+ if( !test_dmg( radius + 1.f, enemy_radius + 1.f, 25.f ) ) {
if( cur_damage < start_dmg * 2.f )
return false;
}
- if( !test_dmg( dist ) )
+ bool found = false;
+
+ for( size_t i = 5; i > 0; --i ) {
+ float cur_dist = local_dist / i;
+ float cur_enemy_dist = enemy_dist / i;
+
+ if( cur_dist < radius )
+ continue;
+
+ if( cur_enemy_dist < enemy_radius )
+ continue;
+
+ if( test_dmg( cur_dist, cur_enemy_dist, 125.f / i ) ) {
+ found = true;
+ break;
+ }
+ else if( cur_damage > 125.f / i )
+ break;
+ }
+
+ if( !found )
return false;
m_direction = direction;
|
