diff options
Diffstat (limited to 'internal_rewrite')
| -rw-r--r-- | internal_rewrite/ragebot.cpp | 100 | ||||
| -rw-r--r-- | internal_rewrite/ragebot_lagcomp.cpp | 25 | ||||
| -rw-r--r-- | internal_rewrite/settings.hpp | 12 | ||||
| -rw-r--r-- | internal_rewrite/ui.h | 20 | ||||
| -rw-r--r-- | internal_rewrite/ui_dropdown_item.h | 4 | ||||
| -rw-r--r-- | 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( ) );
|
