summaryrefslogtreecommitdiff
path: root/internal_rewrite/ragebot_resolver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'internal_rewrite/ragebot_resolver.cpp')
-rw-r--r--internal_rewrite/ragebot_resolver.cpp237
1 files changed, 108 insertions, 129 deletions
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 );
}