From 620f39df29fed446ab007e03c7b071f635379f1f Mon Sep 17 00:00:00 2001 From: navewindre Date: Sun, 9 Sep 2018 13:52:54 +0200 Subject: a --- internal_rewrite/ragebot.cpp | 100 ++++++++++++++++++--------- internal_rewrite/ragebot_lagcomp.cpp | 25 +++---- internal_rewrite/settings.hpp | 12 +++- internal_rewrite/ui.h | 20 ++++-- internal_rewrite/ui_dropdown_item.h | 4 +- internal_rewrite/visual_player.cpp | 128 +++++++++++++++++++++++++++++++++++ 6 files changed, 232 insertions(+), 57 deletions(-) diff --git a/internal_rewrite/ragebot.cpp b/internal_rewrite/ragebot.cpp index a5d2762..54b74d9 100644 --- a/internal_rewrite/ragebot.cpp +++ b/internal_rewrite/ragebot.cpp @@ -74,21 +74,37 @@ namespace features vec3_t c_ragebot::multipoint( c_base_player* ent, int hitbox, float* out_dmg ) { auto should_multipoint = [ ]( int hitbox, bool moving ) -> bool { + auto& setting = g_settings.rage.multipoint; + switch( hitbox ) { case HITBOX_HEAD: + return setting.head; case HITBOX_PELVIS: - return g_settings.rage.multipoint >= 1; case HITBOX_BODY: + return setting.stomach; + //case HITBOX_CHEST: case HITBOX_UPPER_CHEST: case HITBOX_THORAX: - if( util::is_low_fps( ) && g_settings.rage.preserve_fps ) - return false; - return g_settings.rage.multipoint >= 2; - case HITBOX_LEFT_THIGH: + return setting.chest; case HITBOX_RIGHT_THIGH: - if( util::is_low_fps( ) && g_settings.rage.preserve_fps ) + case HITBOX_LEFT_THIGH: + if( moving && g_settings.rage.ignore_limbs_moving ) + return false; + + if( g_settings.rage.preserve_fps && util::is_low_fps( ) ) + return false; + + return setting.thighs; + + case HITBOX_LEFT_CALF: + case HITBOX_RIGHT_CALF: + if( moving && g_settings.rage.ignore_limbs_moving ) return false; - return g_settings.rage.multipoint >= 3 && !moving; + + if( g_settings.rage.preserve_fps && util::is_low_fps( ) ) + return false; + + return setting.calves; default: return false; } @@ -142,37 +158,55 @@ namespace features static int point_index[ 65 ][ HITBOX_MAX ]; - std::array< vec3_t, 8 > points = { - vec3_t{ min.x, min.y, min.z }, - vec3_t{ min.x, max.y, min.z }, - vec3_t{ max.x, max.y, min.z }, - vec3_t{ max.x, min.y, min.z }, - vec3_t{ max.x, max.y, max.z }, - vec3_t{ min.x, max.y, max.z }, - vec3_t{ min.x, min.y, max.z }, - vec3_t{ max.x, min.y, max.z } - }; - - vec3_t lt{ }, - rt{ }, - lb{ }, - rb{ }; - - vec3_t lt_ang{ FLT_MAX, FLT_MAX, 0.f }, - rt_ang{ FLT_MAX, -FLT_MAX, 0.f }, - lb_ang{ -FLT_MAX, FLT_MAX, 0.f }, - rb_ang{ -FLT_MAX, -FLT_MAX, 0.f }; - - vec3_t transformed_center = math::vector_transform( vec3_t( min + max ) * 0.5f, bone_matrix[ box->bone ] ); - vec3_t center_ang = math::vector_angles( g_ctx.m_local->get_eye_pos( ), transformed_center ); + std::vector< vec3_t > points; + + if( g_settings.rage.multipoint_enable( ) == 1 || + hitbox == HITBOX_LEFT_CALF || hitbox == HITBOX_RIGHT_CALF || + hitbox == HITBOX_LEFT_THIGH || hitbox == HITBOX_RIGHT_THIGH ) { + points.push_back( vec3_t{ min.x, min.y, center.z } ); + points.push_back( vec3_t{ max.x, min.y, center.z } ); + points.push_back( vec3_t{ min.x, max.y, center.z } ); + points.push_back( vec3_t{ max.x, max.y, center.z } ); + } + else if( g_settings.rage.multipoint_enable( ) == 2 ) { + points.push_back( vec3_t{ max.x, max.y, max.z } ); + points.push_back( vec3_t{ min.x, max.y, max.z } ); + points.push_back( vec3_t{ max.x, min.y, max.z } ); + points.push_back( vec3_t{ min.x, min.y, max.z } ); + + points.push_back( vec3_t{ max.x, max.y, min.z } ); + points.push_back( vec3_t{ min.x, max.y, min.z } ); + points.push_back( vec3_t{ max.x, min.y, min.z } ); + points.push_back( vec3_t{ min.x, min.y, min.z } ); + } + else if( g_settings.rage.multipoint_enable( ) == 3 ) { + points.push_back( vec3_t{ min.x, min.y, center.z } ); + points.push_back( vec3_t{ max.x, min.y, center.z } ); + points.push_back( vec3_t{ min.x, max.y, center.z } ); + points.push_back( vec3_t{ max.x, max.y, center.z } ); + + points.push_back( vec3_t{ max.x, max.y, max.z } ); + points.push_back( vec3_t{ min.x, max.y, max.z } ); + points.push_back( vec3_t{ max.x, min.y, max.z } ); + points.push_back( vec3_t{ min.x, min.y, max.z } ); + + points.push_back( vec3_t{ max.x, max.y, min.z } ); + points.push_back( vec3_t{ min.x, max.y, min.z } ); + points.push_back( vec3_t{ max.x, min.y, min.z } ); + points.push_back( vec3_t{ min.x, min.y, min.z } ); + } float min_dmg = get_min_dmg( ent ); - auto& point_idx = point_index[ ent->ce( )->GetIndex( ) ][ hitbox ]; - int count = std::max< int >( ( int )( g_csgo.m_globals->m_frametime / TICK_INTERVAL( ) ), 1 ); + float percentage = g_settings.rage.multipoint_scale( ) * 0.01f; + int mul = ( int )( g_csgo.m_globals->m_frametime / TICK_INTERVAL( ) ); + + int count = math::min< int >( math::max< int >( mul * points.size( ) * percentage, + points.size( ) * percentage, + 1 ), points.size( ) ); - for( int i{ }; i < std::min( count, 9 ); ++i ) { + for( int i{ }; i < count; ++i ) { point_idx %= points.size( ); vec3_t point = points[ point_idx ]; diff --git a/internal_rewrite/ragebot_lagcomp.cpp b/internal_rewrite/ragebot_lagcomp.cpp index 7b65e38..a047cec 100644 --- a/internal_rewrite/ragebot_lagcomp.cpp +++ b/internal_rewrite/ragebot_lagcomp.cpp @@ -373,7 +373,9 @@ namespace features ent->calc_anim_velocity( true ); ent->fix_animations( true ); ent->do_ent_interpolation( true ); + stored_lby[ i ] = ent->m_flLowerBodyYawTarget( ); m_last_simtime[ i ] = ent->m_flSimulationTime( ); + m_flick_time[ i ] = FLT_MAX; } else if( g_ctx.m_stage == FRAME_RENDER_START ) { ent->m_bClientSideAnimation( ) = false; @@ -417,36 +419,27 @@ namespace features } else if( is_moving && !was_dormant[ i ] && g_settings.rage.resolver ) { - m_first_update[ i ] = false; + m_first_update[ i ] = true; ent->m_angEyeAngles( ).y = lby; update_anims( i ); lag_record_t new_record( ent ); m_data_lby[ i ].push_front( new_record ); + stored_lby[ i ] = lby; } else if( ( lby != stored_lby[ i ] ) && !was_dormant[ i ] && g_settings.rage.resolver ) { - if( !m_first_update[ i ] ) { - stored_lby[ i ] = lby; - ent->m_angEyeAngles( ).y = lby; + stored_lby[ i ] = lby; + ent->m_angEyeAngles( ).y = lby; - update_anims( i ); - lag_record_t new_record( ent ); + update_anims( i ); + lag_record_t new_record( ent ); + if( !m_first_update ) { m_data_lby[ i ].push_front( new_record ); m_flick_time[ i ] = ent->m_flOldSimulationTime( ) + TICK_INTERVAL( ); } - else { - ent->fix_animations( false, yaw_change ); - - lag_record_t new_record( ent ); - new_record.m_sim_record = true; - - new_record.m_shots = g_cheat.m_ragebot.m_resolver->get_shots( i ); - - m_data_normal[ i ].push_front( new_record ); - } m_first_update[ i ] = false; } diff --git a/internal_rewrite/settings.hpp b/internal_rewrite/settings.hpp index 1ac1608..f963c7a 100644 --- a/internal_rewrite/settings.hpp +++ b/internal_rewrite/settings.hpp @@ -193,6 +193,17 @@ namespace data con_var< bool > chest{ &holder_, fnv( "rage_hitscan_chest" ), false }; } hitscan; + con_var< int > multipoint_enable{ &holder_, fnv( "rage_multipoint" ), false }; + con_var< int > multipoint_scale{ &holder_, fnv( "rage_multipoint_scale" ), 10 }; + + struct { + con_var< bool > head{ &holder_, fnv( "rage_multipoint_head" ), true }; + con_var< bool > stomach{ &holder_, fnv( "rage_multipoint_stomach" ), true }; + con_var< bool > chest{ &holder_, fnv( "rage_multipoint_chest" ), false }; + con_var< bool > thighs{ &holder_, fnv( "rage_multipoint_thighs" ), false }; + con_var< bool > calves{ &holder_, fnv( "rage_multipoint_calves" ), false }; + } multipoint; + con_var< bool > ignore_limbs_moving{ &holder_, fnv( "rage_ignore_limbs_moving" ), false }; con_var< int > silent{ &holder_, fnv( "rage_silent" ), false }; @@ -206,7 +217,6 @@ namespace data con_var< clr_t > bt_col{ &holder_, fnv( "rage_bt_color" ), clr_t( 150, 150, 150, 20 ) }; con_var< int > fakelag_resolver{ &holder_, fnv( "rage_fakelag_resolver" ) }; con_var< bool > preserve_fps{ &holder_, fnv( "rage_preserve_fps" ), false }; - con_var< int > multipoint{ &holder_, fnv( "rage_multipoint" ), false }; con_var< bool > compensate_spread{ &holder_, fnv( "rage_compensate_spread" ) }; con_var< int > selection_type{ &holder_, fnv( "rage_selection_type" ) }; diff --git a/internal_rewrite/ui.h b/internal_rewrite/ui.h index 122232e..5a8855c 100644 --- a/internal_rewrite/ui.h +++ b/internal_rewrite/ui.h @@ -198,7 +198,17 @@ namespace ui main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "ignore limbs when moving" ), &g_settings.rage.ignore_limbs_moving ) )->set_cond( [ ]( ) { return g_settings.rage.hitbox == -1; } ); - main_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "multipoint" ), &g_settings.rage.multipoint, &dropdowns::multipoint_types ) ); + main_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 120, xors( "multipoint" ), &g_settings.rage.multipoint_enable, &dropdowns::multipoint_types ) ); + main_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 10, 100, &g_settings.rage.multipoint_scale( ) ) ); + auto multipoint_form = main_form->add_item( std::make_shared< ui::c_form >( 0, 5, 119, 0, xors( "multipoint" ), 0, true ) ); + multipoint_form->set_cond( [ ]( ) { return g_settings.rage.multipoint_enable( ); } ); + + multipoint_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "head" ), &g_settings.rage.multipoint.head ) ); + multipoint_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "chest" ), &g_settings.rage.multipoint.chest ) ); + multipoint_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "stomach" ), &g_settings.rage.multipoint.stomach ) ); + multipoint_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "thighs" ), &g_settings.rage.multipoint.thighs ) ); + multipoint_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "calves" ), &g_settings.rage.multipoint.calves ) ); + main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "preserve fps" ), &g_settings.rage.preserve_fps ) ); } @@ -239,7 +249,7 @@ namespace ui general_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, &g_settings.rage.general.m_spread_limit_min ) )->set_cond( [ ]( ) { return !g_settings.rage.compensate_spread && g_settings.rage.general.m_spread_limit; } ); general_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 1.f, xors( "hitbox scale" ), &g_settings.rage.general.m_hitbox_scale ) )->set_cond( - [ ]( ) { return g_settings.rage.multipoint( ); } ); + [ ]( ) { return g_settings.rage.multipoint_enable( ); } ); general_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, xors( "hitchance" ), &g_settings.rage.general.m_hitchance ) )->set_cond( [ ]( ) { return !g_settings.rage.compensate_spread; } ); @@ -268,7 +278,7 @@ namespace ui pistols_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, &g_settings.rage.heavy_pistols.m_spread_limit_min ) )->set_cond( [ ]( ) { return !g_settings.rage.compensate_spread && g_settings.rage.heavy_pistols.m_spread_limit; } ); pistols_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 1.f, xors( "hitbox scale" ), &g_settings.rage.heavy_pistols.m_hitbox_scale ) )->set_cond( - [ ]( ) { return g_settings.rage.multipoint( ); } ); + [ ]( ) { return g_settings.rage.multipoint_enable( ); } ); pistols_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, xors( "hitchance" ), &g_settings.rage.heavy_pistols.m_hitchance ) )->set_cond( [ ]( ) { return !g_settings.rage.compensate_spread; } ); pistols_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, xors( "min damage" ), &g_settings.rage.heavy_pistols.m_damage ) ); @@ -296,7 +306,7 @@ namespace ui snipers_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, &g_settings.rage.snipers.m_spread_limit_min ) )->set_cond( [ ]( ) { return !g_settings.rage.compensate_spread && g_settings.rage.snipers.m_spread_limit; } ); snipers_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 1.f, xors( "hitbox scale" ), &g_settings.rage.snipers.m_hitbox_scale ) )->set_cond( - [ ]( ) { return g_settings.rage.multipoint( ); } ); + [ ]( ) { return g_settings.rage.multipoint_enable( ); } ); snipers_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, xors( "hitchance" ), &g_settings.rage.snipers.m_hitchance ) )->set_cond( [ ]( ) { return !g_settings.rage.compensate_spread; } ); snipers_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, xors( "min damage" ), &g_settings.rage.snipers.m_damage ) ); @@ -324,7 +334,7 @@ namespace ui auto_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, &g_settings.rage.auto_snipers.m_spread_limit_min ) )->set_cond( [ ]( ) { return !g_settings.rage.compensate_spread && g_settings.rage.auto_snipers.m_spread_limit; } ); auto_form->add_item( std::make_shared< ui::c_slider< float > >( 0, 0, 120, 0.f, 1.f, xors( "hitbox scale" ), &g_settings.rage.auto_snipers.m_hitbox_scale ) )->set_cond( - [ ]( ) { return g_settings.rage.multipoint( ); } ); + [ ]( ) { return g_settings.rage.multipoint_enable( ); } ); auto_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, xors( "hitchance" ), &g_settings.rage.auto_snipers.m_hitchance ) )->set_cond( [ ]( ) { return !g_settings.rage.compensate_spread; } ); auto_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 120, 0, 100, xors( "min damage" ), &g_settings.rage.auto_snipers.m_damage ) ); diff --git a/internal_rewrite/ui_dropdown_item.h b/internal_rewrite/ui_dropdown_item.h index f998254..aa3d41e 100644 --- a/internal_rewrite/ui_dropdown_item.h +++ b/internal_rewrite/ui_dropdown_item.h @@ -158,8 +158,8 @@ namespace ui static std::vector< dropdown_item_t< > > multipoint_types = { { xors( "off" ), 0 }, - { xors( "minimal" ), 1 }, - { xors( "vitals" ), 2 }, + { xors( "center" ), 1 }, + { xors( "edges" ), 2 }, { xors( "full" ), 3 } }; diff --git a/internal_rewrite/visual_player.cpp b/internal_rewrite/visual_player.cpp index 1594c88..2e94530 100644 --- a/internal_rewrite/visual_player.cpp +++ b/internal_rewrite/visual_player.cpp @@ -594,7 +594,135 @@ namespace features } } + #ifdef _DEBUG + static con_var< bool > dbg_multipoint{ &data::holder_, fnv( "dbg_multipoint" ), false }; + if( dbg_multipoint( ) ) { + auto should_multipoint = [ ]( int hitbox, bool moving ) -> bool { + auto& setting = g_settings.rage.multipoint; + + switch( hitbox ) { + case HITBOX_HEAD: + return setting.head; + case HITBOX_PELVIS: + case HITBOX_BODY: + return setting.stomach; + //case HITBOX_CHEST: + case HITBOX_UPPER_CHEST: + case HITBOX_THORAX: + return setting.chest; + case HITBOX_RIGHT_THIGH: + case HITBOX_LEFT_THIGH: + if( moving && g_settings.rage.ignore_limbs_moving ) + return false; + + if( g_settings.rage.preserve_fps && util::is_low_fps( ) ) + return false; + + return setting.thighs; + + case HITBOX_LEFT_CALF: + case HITBOX_RIGHT_CALF: + if( moving && g_settings.rage.ignore_limbs_moving ) + return false; + + if( g_settings.rage.preserve_fps && util::is_low_fps( ) ) + return false; + + return setting.calves; + default: + return false; + } + }; + + bool moving = ent->m_vecVelocity( ).length2d( ) > 0.1f && !ent->is_fakewalking( ); + + matrix3x4 bone_matrix[ 128 ]; + ent->ce( )->SetupBones( bone_matrix, 128, BONE_USED_BY_HITBOX, 0.f ); + + for( int hitbox = 0; hitbox < HITBOX_MAX; ++hitbox ) { + if( should_multipoint( hitbox, moving ) ) { + const auto model = ent->ce( )->GetModel( ); + if( !model ) continue; + + auto hdr = g_csgo.m_model_info( )->GetStudiomodel( model ); + if( !hdr ) continue; + + auto set = hdr->pHitboxSet( ent->m_nHitboxSet( ) ); + if( !set ) continue; + + //literally 20000 iq, the best multipoint + //im an actual fucking retard jesus christ + auto box = set->pHitbox( hitbox ); + if( !box ) continue; + + vec3_t center = ( box->bbmax + box->bbmin ) * 0.5f; + + float dist = box->m_flRadius; + + if( box->m_flRadius == -1.f ) + dist = center.dist_to( box->bbmin ) * 0.85f; + vec3_t min_dir = math::angle_vectors( math::vector_angles( center, box->bbmin ) ); + vec3_t min = center + min_dir * dist * g_settings.rage.active->m_hitbox_scale * 1.1f; + + if( box->m_flRadius == -1.f ) + dist = center.dist_to( box->bbmax ) * 0.85f; + vec3_t max_dir = math::angle_vectors( math::vector_angles( center, box->bbmax ) ); + vec3_t max = center + max_dir * dist * g_settings.rage.active->m_hitbox_scale * 1.1f; + + std::vector< vec3_t > points; + + points.push_back( center ); + + if( g_settings.rage.multipoint_enable( ) == 1 || + hitbox == HITBOX_LEFT_CALF || hitbox == HITBOX_RIGHT_CALF || + hitbox == HITBOX_LEFT_THIGH || hitbox == HITBOX_RIGHT_THIGH ) { + points.push_back( vec3_t{ min.x, min.y, center.z } ); + points.push_back( vec3_t{ max.x, min.y, center.z } ); + points.push_back( vec3_t{ min.x, max.y, center.z } ); + points.push_back( vec3_t{ max.x, max.y, center.z } ); + } + else if( g_settings.rage.multipoint_enable( ) == 2 ) { + points.push_back( vec3_t{ max.x, max.y, max.z } ); + points.push_back( vec3_t{ min.x, max.y, max.z } ); + points.push_back( vec3_t{ max.x, min.y, max.z } ); + points.push_back( vec3_t{ min.x, min.y, max.z } ); + + points.push_back( vec3_t{ max.x, max.y, min.z } ); + points.push_back( vec3_t{ min.x, max.y, min.z } ); + points.push_back( vec3_t{ max.x, min.y, min.z } ); + points.push_back( vec3_t{ min.x, min.y, min.z } ); + } + else if( g_settings.rage.multipoint_enable( ) == 3 ) { + points.push_back( vec3_t{ min.x, min.y, center.z } ); + points.push_back( vec3_t{ max.x, min.y, center.z } ); + points.push_back( vec3_t{ min.x, max.y, center.z } ); + points.push_back( vec3_t{ max.x, max.y, center.z } ); + + points.push_back( vec3_t{ max.x, max.y, max.z } ); + points.push_back( vec3_t{ min.x, max.y, max.z } ); + points.push_back( vec3_t{ max.x, min.y, max.z } ); + points.push_back( vec3_t{ min.x, min.y, max.z } ); + + points.push_back( vec3_t{ max.x, max.y, min.z } ); + points.push_back( vec3_t{ min.x, max.y, min.z } ); + points.push_back( vec3_t{ max.x, min.y, min.z } ); + points.push_back( vec3_t{ min.x, min.y, min.z } ); + } + + for( size_t i1 = 0; i1 < points.size( ); i1++ ) { + auto& it = points.at( i1 ); + + auto trans = math::vector_transform( it, bone_matrix[ box->bone ] ); + auto w2s_box = util::screen_transform( trans ); + + draw_circle( ( int )w2s_box.x, ( int )w2s_box.y, 3, esp_blue( ), 16 ); + } + } + } + } + + static con_var< bool > dbg_bt{ &data::holder_, fnv( "dbg_bt" ), false }; if( dbg_bt( ) && i == g_cheat.m_ragebot.get_shot_target( ) ) { auto hdr = g_csgo.m_model_info( )->GetStudiomodel( ent->ce( )->GetModel( ) ); -- cgit v1.2.3