From d1cab43b8ffd1fd37633e4751818d14c840ecef9 Mon Sep 17 00:00:00 2001 From: navewindre Date: Mon, 17 Sep 2018 20:09:00 +0200 Subject: d --- internal_rewrite/ragebot_resolver.cpp | 237 ++++++++++++++++------------------ 1 file changed, 108 insertions(+), 129 deletions(-) (limited to 'internal_rewrite/ragebot_resolver.cpp') diff --git a/internal_rewrite/ragebot_resolver.cpp b/internal_rewrite/ragebot_resolver.cpp index a35a55d..3bf3955 100644 --- a/internal_rewrite/ragebot_resolver.cpp +++ b/internal_rewrite/ragebot_resolver.cpp @@ -25,15 +25,19 @@ namespace features FLT_ANG_135, }; - - static const std::vector< float > possible_angles_adjust = { - FLT_ANG_FREESTANDING, + static const std::vector< float > possible_angles_normal = { FLT_ANG_MOVING_LBY_UP, - FLT_ANG_180, + FLT_ANG_180, FLT_ANG_135, - FLT_ANG_MINUS_135, - 110.f, - -70.f + FLT_ANG_MINUS_135 + }; + + static const std::vector< float > possible_angles_freestanding = { + 0.f, + 45.f, + 90.f, + 135.f, + 180.f, }; bool dbg_resolver( ) { @@ -122,20 +126,20 @@ namespace features 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 ); - if( std::abs( dmg_left - dmg_right ) < 50.f ) + if( std::abs( dmg_left - dmg_right ) < 25.f ) return false; float max_dmg = math::max( dmg_left, dmg_right ); ret_dir = dmg_left > dmg_right; cur_damage = max_dmg; - return max_dmg > 50.f; + return max_dmg > 25.f; }; float dist = ( ent->m_vecOrigin( ) - ent->get_hitbox_pos( 0 ) ).length2d( ); if( !test_dmg( dist + 1.f ) ) { - if( cur_damage < start_dmg * 2.f ) + if( cur_damage < start_dmg ) return -1; } @@ -159,51 +163,54 @@ namespace features reset( ); if( !( ent->m_fFlags( ) & FL_ONGROUND ) ) { - m_breaking = BREAKING_NONE; + m_state = R_NONE; return; } if( ent->get_anim_velocity( ).length2d( ) > 0.1f && !ent->is_fakewalking( ) ) { - m_breaking = BREAKING_NONE; + m_state = R_NONE; m_has_valid_lby = true; + m_last_moving_lby = ent->m_flLowerBodyYawTarget( ); return; } m_last_pos = ent->m_vecOrigin( ); m_was_invalid = false; - m_shots %= 100; - float lby = ent->m_flLowerBodyYawTarget( ); - if( lby != m_last_lby ) { - m_last_lby = lby; - m_last_update = ent->m_flSimulationTime( ); - m_breaking = BREAKING_NONE; + + int freestanding = g_cheat.m_ragebot.m_resolver->try_freestanding( ent ); + if( freestanding != -1 ) { + m_state = R_FREESTANDING; } + else + m_state = R_NORMAL; - if( ent->m_flSimulationTime( ) - m_last_update > TICK_INTERVAL( ) ) { - m_breaking = BREAKING; - } + if( m_last_freestanding != freestanding ) + m_angle_change = true; + m_last_freestanding = freestanding; m_has_valid_lby = true; } void c_ragebot::c_resolver::resolve_log_t::reset( ) { //assuming theyre STILL not moving this shouldnt change //however if they are, it will be reset to none anyway - m_breaking = BREAKING_NONE; + m_state = R_NONE; m_last_update = 0.f; m_last_lby = 0.f; m_missed_shots = 0; - m_shots = 0; - m_logged = false; - m_logged_shots = 0; + memset( m_shots, 0, sizeof( m_shots ) ); + memset( m_logged, 0, sizeof( m_logged ) ); + memset( m_logged_shots, 0, sizeof( m_logged ) ); } std::vector< float > c_ragebot::c_resolver::get_shot_vec( int ent ) { auto& data = m_data[ ent ]; - if( data.m_breaking ) - return possible_angles_adjust; + if( data.m_state == R_NORMAL ) + return possible_angles_normal; + if( data.m_state == R_FREESTANDING ) + return possible_angles_freestanding; return possible_angles_none; } @@ -212,12 +219,50 @@ namespace features auto& data = m_data[ ent_index ]; auto ent = g_csgo.m_entlist( )->GetClientEntity< >( ent_index ); - //if( data.m_logged && data.m_breaking ) { - // return data.m_logged_lby; - //} - auto vec = get_shot_vec( ent_index ); - return vec.at( shots % vec.size( ) ); + + float new_ang = vec.at( shots % vec.size( ) ); + float new_yaw = 0.f; + + float ang = math::vector_angles( ent->m_vecOrigin( ), g_ctx.m_last_origin ).y; + + if( data.m_state == R_FREESTANDING ) { + ang += ( data.m_last_freestanding == 1 ? 90.f : -90.f ); + + float sign = data.m_last_freestanding == 1 ? 1.f : -1.f; + + return ang + new_ang * sign; + } + + if( new_ang == FLT_ANG_LBY ) + new_yaw = ent->m_flLowerBodyYawTarget( ); + else if( new_ang == FLT_ANG_MOVING_LBY_UP ) { + if( !data.m_has_valid_lby && !g_settings.rage.pitch_resolver ) { + return get_shot_yaw( ++get_resolver_shots( ent_index ), ent_index ); + } + + auto delta = std::remainderf( data.m_last_moving_lby - data.m_last_lby, 360.f ); + bool breaking_lby = std::abs( delta ) > 35.f; + + new_yaw = breaking_lby ? data.m_last_moving_lby : data.m_last_lby; + } + else if( new_ang == FLT_ANG_180 ) { + new_yaw = ang - 180.f; + } + else if( new_ang == FLT_ANG_MINUS_90 ) { + new_yaw = ang - 90.f; + } + else if( new_ang == FLT_ANG_90 ) { + new_yaw = ang + 90.f; + } + else if( new_ang == FLT_ANG_135 ) + new_yaw = ang + 135.f; + else if( new_ang == FLT_ANG_MINUS_135 ) + new_yaw = ang - 135.f; + else + new_yaw = std::remainderf( ent->m_flLowerBodyYawTarget( ) + new_ang, 360.f ); + + return new_yaw; } void c_ragebot::c_resolver::aimbot( int ent_index, int hitbox, vec3_t angle, vec3_t position, vec3_t min, vec3_t max, float radius ) { @@ -233,7 +278,7 @@ namespace features return; } - if( !data.m_breaking ) { + if( !data.m_state ) { increment_shots( ent_index ); return; } @@ -252,7 +297,7 @@ namespace features new_shot.m_enemy_pos = position; new_shot.m_enemy_index = ent_index; new_shot.m_local_pos = g_ctx.m_local->get_eye_pos( ); - new_shot.m_resolver_shots = data.m_shots; + new_shot.m_resolver_shots = get_resolver_shots( ent_index ); new_shot.m_resolver_state = true; new_shot.m_hitbox.min = min; new_shot.m_hitbox.min = max; @@ -269,20 +314,21 @@ namespace features data.m_snapshot[ g_ctx.m_last_shot ] = data; - if( data.m_logged ) { - if( !--data.m_logged_shots ) { - data.m_logged = false; + if( data.m_logged[ data.m_state ] ) { + if( !--data.m_logged_shots[ data.m_state ] ) { + data.m_logged[ data.m_state ] = false; } } else { - int shots = data.m_shots; + int shots = get_resolver_shots( ent_index ); increment_shots( ent_index ); #if _DEBUG if( dbg_resolver( ) ) { char str[ 128 ]; - sprintf_s< 128 >( str, "[\3moneybot\1] incrementing shots from %d to %d", shots, data.m_shots ); + sprintf_s< 128 >( str, "[\3moneybot\1] incrementing shots from %d to %d" + "[\3moneybot\1] resolver state: %d\n", shots, get_resolver_shots( ent_index ), data.m_state ); g_csgo.m_clientmode( )->m_pChatElement->ChatPrintf( 0, 0, str ); } @@ -336,7 +382,7 @@ namespace features new_shot.m_enemy_pos = position; new_shot.m_enemy_index = ent_index; new_shot.m_local_pos = g_ctx.m_local->get_eye_pos( ); - new_shot.m_resolver_shots = data.m_shots; + new_shot.m_resolver_shots = get_resolver_shots( ent_index ); new_shot.m_resolver_state = true; new_shot.m_hitbox.min = min; new_shot.m_hitbox.min = max; @@ -350,26 +396,27 @@ namespace features g_ctx.m_has_incremented_shots = true; - if( data.m_logged ) { - if( !--data.m_logged_shots ) { - data.m_logged = false; + data.m_snapshot[ g_ctx.m_last_shot ] = data; + + if( data.m_logged[ data.m_state ] ) { + if( !--data.m_logged_shots[ data.m_state ] ) { + data.m_logged[ data.m_state ] = false; } } else { - int shots = data.m_shots; + int shots = get_resolver_shots( ent_index ); increment_shots( ent_index ); #if _DEBUG if( dbg_resolver( ) ) { char str[ 128 ]; - sprintf_s< 128 >( str, "[\3moneybot\1] incrementing shots from %d to %d", shots, data.m_shots ); + sprintf_s< 128 >( str, "[\3moneybot\1] incrementing shots from %d to %d" + "[\3moneybot\1] resolver state: %d\n", shots, get_resolver_shots( ent_index ), data.m_state ); g_csgo.m_clientmode( )->m_pChatElement->ChatPrintf( 0, 0, str ); } #endif } - - data.m_snapshot[ g_ctx.m_last_shot ] = data; } } } @@ -379,7 +426,7 @@ namespace features } void c_ragebot::c_resolver::increment_shots( int ent_index ) { - m_data[ ent_index ].m_shots++; + get_resolver_shots( ent_index )++; m_data[ ent_index ].m_missed_shots++; m_data[ ent_index ].m_angle_change = true; } @@ -391,11 +438,11 @@ namespace features auto& data = m_data[ ent_index ]; auto& snapshot = data.m_snapshot[ shots % 150 ]; - data.m_shots = snapshot.m_shots; + data.m_shots[ snapshot.m_state ] = snapshot.m_shots[ snapshot.m_state ]; - if( snapshot.m_logged ) { - data.m_logged = true; - data.m_logged_shots = snapshot.m_logged_shots; + if( snapshot.m_logged[ snapshot.m_state ] ) { + data.m_logged[ snapshot.m_state ] = true; + data.m_logged_shots[ snapshot.m_state ] = snapshot.m_logged_shots[ snapshot.m_state ]; } } @@ -416,17 +463,17 @@ namespace features auto rate = weapon->get_wpn_info( )->cycle_time; - data.m_shots = snapshot.m_shots; - data.m_logged = true; + data.m_shots[ snapshot.m_state ] = snapshot.m_shots[ snapshot.m_state ]; + data.m_logged[ snapshot.m_state ] = true; int latency_shots = ( nci->GetLatency( 0 ) + g_csgo.m_globals->m_frametime ) / rate + 1; - data.m_logged_shots = latency_shots; + data.m_logged_shots[ snapshot.m_state ] = latency_shots; #if _DEBUG if( dbg_resolver( ) ) { char str[ 128 ]; - sprintf_s< 128 >( str, "[\3moneybot\1] resolver: logging %d shots for %d with %d", data.m_logged_shots, ent_index, data.m_shots ); + sprintf_s< 128 >( str, "[\3moneybot\1] resolver: logging %d shots for %d with %d", data.m_logged_shots[ data.m_state ], ent_index, get_resolver_shots( ent_index ) ); g_csgo.m_clientmode( )->m_pChatElement->ChatPrintf( 0, 0, str ); } @@ -538,81 +585,13 @@ namespace features } int i = ent->ce( )->GetIndex( ); - auto& data = m_data[ i ]; - float start = ent->m_flLowerBodyYawTarget( ); - float new_yaw{ }; - float new_ang{ }; - int shots{ }; - - shots = data.m_shots; - new_ang = get_shot_yaw( shots, i ); - float ang; - if( g_ctx.run_frame( ) ) { - auto local_pos = g_ctx.m_local->m_vecOrigin( ); - auto enemy_pos = ent->m_vecOrigin( ); - - ang = math::vector_angles( enemy_pos, local_pos ).y; - } - else { - ang = start; - } - - float pitch = ent->m_angEyeAngles( ).x; - - if( g_settings.rage.pitch_resolver ) { - if( new_ang == FLT_ANG_MOVING_LBY_UP ) - ent->m_angEyeAngles( ).x = -89.f; - else - ent->m_angEyeAngles( ).x = 89.f; - } - - if( new_ang == FLT_ANG_LBY ) - new_yaw = ent->m_flLowerBodyYawTarget( ); - else if( new_ang == FLT_ANG_MOVING_LBY_UP ) { - if( !data.m_has_valid_lby && !g_settings.rage.pitch_resolver && ( ent->m_fFlags( ) & FL_ONGROUND ) ) { - data.m_shots++; - return brute_force( ent ); - } - - auto delta = std::remainderf( data.m_last_moving_lby - data.m_last_lby, 360.f ); - bool breaking_lby = std::abs( delta ) > 35.f; - - new_yaw = breaking_lby ? data.m_last_moving_lby : data.m_last_lby; - } - else if( new_ang == FLT_ANG_180 ) { - if( data.m_last_freestanding == -1 && ( ent->m_fFlags( ) & FL_ONGROUND ) ) { - data.m_shots++; - return brute_force( ent ); - } - - new_yaw = ang - 180.f; - } - else if( new_ang == FLT_ANG_FREESTANDING ) { - int freestanding = try_freestanding( ent ); - if( freestanding == -1 ) - new_yaw = ang + 180.f; - else - new_yaw = ang + ( freestanding ? 90.f : -90.f ); - - if( data.m_last_freestanding != freestanding ) - data.m_angle_change = true; + int s = get_resolver_shots( i ); + auto vec = get_shot_vec( i ); - data.m_last_freestanding = freestanding; - } - else if( new_ang == FLT_ANG_MINUS_90 ) { - new_yaw = ang - 90.f; - } - else if( new_ang == FLT_ANG_90 ) { - new_yaw = ang + 90.f; - } - else if( new_ang == FLT_ANG_135 ) - new_yaw = ang + 135.f; - else if( new_ang == FLT_ANG_MINUS_135 ) - new_yaw = ang - 135.f; - else - new_yaw = std::remainderf( start + new_ang, 360.f ); + if( vec.at( s % vec.size( ) ) == FLT_ANG_MOVING_LBY_UP && g_settings.rage.pitch_resolver ) + ent->m_angEyeAngles( ).x = -89.f; - new_yaw = std::remainderf( new_yaw, 360.f ); + float new_yaw = get_shot_yaw( get_resolver_shots( i ), i ); force_yaw( ent, new_yaw ); } -- cgit v1.2.3