summaryrefslogtreecommitdiff
path: root/internal_rewrite/ragebot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'internal_rewrite/ragebot.cpp')
-rw-r--r--internal_rewrite/ragebot.cpp100
1 files changed, 67 insertions, 33 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 ];