From b7375a7582db7ba2ee8a4dacfab226a3fd8fc514 Mon Sep 17 00:00:00 2001 From: navewindre Date: Mon, 24 Sep 2018 23:07:59 +0200 Subject: ? --- internal_rewrite/ragebot_antiaim.cpp | 70 +++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 9 deletions(-) (limited to 'internal_rewrite/ragebot_antiaim.cpp') 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; -- cgit v1.2.3