From 3e0d8199fec5b6979dc280533de69dded4260a0f Mon Sep 17 00:00:00 2001 From: navewindre Date: Sat, 6 Oct 2018 12:09:36 +0200 Subject: z\cxdtgs --- internal_rewrite/ragebot_resolver.cpp | 55 ++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 14 deletions(-) (limited to 'internal_rewrite/ragebot_resolver.cpp') diff --git a/internal_rewrite/ragebot_resolver.cpp b/internal_rewrite/ragebot_resolver.cpp index 509b577..1b29305 100644 --- a/internal_rewrite/ragebot_resolver.cpp +++ b/internal_rewrite/ragebot_resolver.cpp @@ -90,8 +90,6 @@ namespace features return -1.f; }; - float start_dmg = get_damage( local_pos, enemy_pos, g_ctx.m_local, ent ); - auto trace_ent_pos = [ & ]( vec3_t start, vec3_t end, c_base_player* ent ) { Ray_t ray; CGameTrace tr; @@ -108,9 +106,14 @@ namespace features return tr.endpos; }; - 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 ); + float local_dist = 75.f; + float enemy_dist = 75.f; + + float start_dmg = get_damage( enemy_pos, local_pos, g_ctx.m_local, ent ); + + 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 ); @@ -121,30 +124,53 @@ namespace features local_left = trace_ent_pos( local_pos, local_left, g_ctx.m_local ); local_right = trace_ent_pos( local_pos, local_right, g_ctx.m_local ); - float dmg_left = get_damage( local_left, enemy_left, ent, g_ctx.m_local ) - + get_damage( local_right, enemy_left, ent, g_ctx.m_local ); + float dmg_left = get_damage( local_left, enemy_left, g_ctx.m_local, ent ) + + get_damage( local_right, enemy_left, g_ctx.m_local, ent ); - float dmg_right = get_damage( local_left, enemy_right, ent, g_ctx.m_local ) - + get_damage( local_right, enemy_right, ent, g_ctx.m_local ); + float dmg_right = get_damage( local_left, enemy_right, g_ctx.m_local, ent ) + + get_damage( local_right, enemy_right, g_ctx.m_local, ent ); - 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 ); ret_dir = dmg_left > dmg_right; cur_damage = max_dmg; - return max_dmg > 25.f; + return max_dmg > delta; }; - float dist = ( ent->m_vecOrigin( ) - ent->get_hitbox_pos( 0 ) ).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; + + 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( dist + 1.f ) ) { + if( !test_dmg( enemy_radius + 1.f, radius + 1.f, 25.f ) ) { if( cur_damage < start_dmg * 2.f ) return -1; } - if( !test_dmg( 50.f ) ) + 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_enemy_dist, cur_dist, 125.f / i ) ) { + found = true; + break; + } else if( cur_damage > 125.f / i ) + break; + } + + if( !found ) return -1; return ret_dir; @@ -180,6 +206,7 @@ namespace features m_was_invalid = false; int freestanding = g_cheat.m_ragebot.m_resolver->try_freestanding( ent ); + if( freestanding != -1 ) { m_state = R_FREESTANDING; } -- cgit v1.2.3