summaryrefslogtreecommitdiff
path: root/internal_rewrite
diff options
context:
space:
mode:
authornavewindre <boneyaard@gmail.com>2018-09-14 21:46:28 +0200
committernavewindre <boneyaard@gmail.com>2018-09-14 21:46:28 +0200
commit559a0f5669f537e21f3d39780e6e3d77591ff8c1 (patch)
tree8a94df7f4fd12333e9a9bdb0d7086e7a70ef9e97 /internal_rewrite
parentb4748901d34d26bee517dea9655d2c0362c627f0 (diff)
a
Diffstat (limited to 'internal_rewrite')
-rw-r--r--internal_rewrite/autowall.cpp527
-rw-r--r--internal_rewrite/ragebot_antiaim.cpp2
-rw-r--r--internal_rewrite/settings.hpp1
-rw-r--r--internal_rewrite/ui.h6
-rw-r--r--internal_rewrite/ui_form.h2
-rw-r--r--internal_rewrite/visual_player.cpp27
6 files changed, 284 insertions, 281 deletions
diff --git a/internal_rewrite/autowall.cpp b/internal_rewrite/autowall.cpp
index b4d4337..5cff6b0 100644
--- a/internal_rewrite/autowall.cpp
+++ b/internal_rewrite/autowall.cpp
@@ -1,130 +1,131 @@
-#include <algorithm>
-
-#include "autowall.hpp"
-#include "settings.hpp"
-#include "context.hpp"
-#include "math.hpp"
-
-namespace features
-{
- bool c_autowall::is_armored( c_base_player* ent, int armor_value, int hitgroup ) {
- if ( armor_value <= 0 ) return false;
-
- switch( hitgroup ) {
- case HITGROUP_GENERIC:
- case HITGROUP_CHEST:
- case HITGROUP_STOMACH:
- case HITGROUP_LEFTARM:
- case HITGROUP_RIGHTARM:
- return true;
- case HITGROUP_HEAD:
- return ent->m_bHasHelmet( );
- }
-
- return false;
- }
-
- void c_autowall::trace_line( const vec3_t& start, const vec3_t& end, unsigned mask, void* ignore, CGameTrace* tr ) {
- CTraceFilter filter;
- Ray_t ray;
-
- filter.pSkip = ignore;
- ray.Init( start, end );
-
- g_csgo.m_trace( )->TraceRay( ray, mask, &filter, tr );
- }
-
- void c_autowall::scale_damage( c_base_player* ent, int hitgroup, float weapon_armor_ratio, float& damage ) {
- float multiplier;
- float armor_ratio;
- float new_damage;
- int armor;
-
- auto get_hitgroup_mul = []( int hitgroup ) {
- switch ( hitgroup ) {
- case HITGROUP_HEAD:
- return 4.f;
- case HITGROUP_STOMACH:
- return 1.25f;
- case HITGROUP_LEFTLEG:
- case HITGROUP_RIGHTLEG:
- return 0.75f;
- }
-
- return 1.0f;
- };
-
- multiplier = get_hitgroup_mul( hitgroup );
- damage *= multiplier;
- armor = ent->m_ArmorValue( );
-
- if( is_armored( ent, armor, hitgroup ) ) {
- armor_ratio = weapon_armor_ratio * 0.5f;
- new_damage = damage * armor_ratio;
- if( hitgroup != HITGROUP_HEAD && damage - damage * armor_ratio * 0.5f > armor ) {
- new_damage = damage - armor * 2.0f;
- }
-
- damage = new_damage;
- }
- }
-
- bool c_autowall::is_breakable( IClientEntity* ent ) {
-#ifdef is_breakable_ptr
- static auto is_breakable_ptr = g_header.patterns.is_breakable;
-#else
- static auto is_breakable_ptr = pattern::first_code_match( g_csgo.m_chl.dll( ), xors( "55 8B EC 51 56 8B F1 85 F6 74 68 83 BE" ) );
-#endif
-
- if ( !ent || ent->GetIndex( ) == 0 )
- return false;
-
- auto is_breakable_fn = reinterpret_cast< bool( __thiscall* )( void* ) >( is_breakable_ptr );
-
- bool breakable = is_breakable_fn( ent );
-
- if ( !breakable)
- {
- auto ent_class = ent->GetClientClass( );
-
- if ( !ent_class )
- return false;
-
- auto nazwa = ent_class->m_name;
-
- // s/o 2 estrosterik
- if ( *reinterpret_cast<uint32_t*>( nazwa ) == 0x65724243 && *reinterpret_cast<uint32_t*>( nazwa + 0x7 ) == 0x53656C62 )
- return true;
- }
-
- return breakable;
- }
-
- bool c_autowall::trace_to_exit( vec3_t start, vec3_t& dir, vec3_t& out_end, CGameTrace& tr, CGameTrace* exit_trace ) {
+#include <algorithm>
+
+#include "autowall.hpp"
+#include "settings.hpp"
+#include "context.hpp"
+#include "math.hpp"
+
+namespace features
+{
+ bool c_autowall::is_armored( c_base_player* ent, int armor_value, int hitgroup ) {
+ if ( armor_value <= 0 ) return false;
+
+ switch( hitgroup ) {
+ case HITGROUP_GENERIC:
+ case HITGROUP_CHEST:
+ case HITGROUP_STOMACH:
+ case HITGROUP_LEFTARM:
+ case HITGROUP_RIGHTARM:
+ return true;
+ case HITGROUP_HEAD:
+ return ent->m_bHasHelmet( );
+ }
+
+ return false;
+ }
+
+ void c_autowall::trace_line( const vec3_t& start, const vec3_t& end, unsigned mask, void* ignore, CGameTrace* tr ) {
+ CTraceFilter filter;
+ Ray_t ray;
+
+ filter.pSkip = ignore;
+ ray.Init( start, end );
+
+ g_csgo.m_trace( )->TraceRay( ray, mask, &filter, tr );
+ }
+
+ void c_autowall::scale_damage( c_base_player* ent, int hitgroup, float weapon_armor_ratio, float& damage ) {
+ float multiplier;
+ float armor_ratio;
+ float new_damage;
+ int armor;
+
+ auto get_hitgroup_mul = []( int hitgroup ) {
+ switch ( hitgroup ) {
+ case HITGROUP_HEAD:
+ return 4.f;
+ case HITGROUP_STOMACH:
+ return 1.25f;
+ case HITGROUP_LEFTLEG:
+ case HITGROUP_RIGHTLEG:
+ return 0.75f;
+ }
+
+ return 1.0f;
+ };
+
+ multiplier = get_hitgroup_mul( hitgroup );
+ damage *= multiplier;
+ armor = ent->m_ArmorValue( );
+
+ if( is_armored( ent, armor, hitgroup ) ) {
+ armor_ratio = weapon_armor_ratio * 0.5f;
+ new_damage = damage * armor_ratio;
+ if( hitgroup != HITGROUP_HEAD && damage - damage * armor_ratio * 0.5f > armor ) {
+ new_damage = damage - armor * 2.0f;
+ }
+
+ damage = new_damage;
+ }
+ }
+
+ bool c_autowall::is_breakable( IClientEntity* ent ) {
+#ifdef is_breakable_ptr
+ static auto is_breakable_ptr = g_header.patterns.is_breakable;
+#else
+ static auto is_breakable_ptr = pattern::first_code_match( g_csgo.m_chl.dll( ), xors( "55 8B EC 51 56 8B F1 85 F6 74 68 83 BE" ) );
+#endif
+
+ if( !ent || ent->GetIndex( ) == 0 )
+ return false;
+
+ auto is_breakable_fn = reinterpret_cast< bool( __thiscall* )( void* ) >( is_breakable_ptr );
+
+ bool breakable = is_breakable_fn( ent );
+
+ if( !breakable )
+ {
+ auto ent_class = ent->GetClientClass( );
+
+ if( !ent_class )
+ return false;
+
+ // s/o 2 poiak
+ auto nazwa = ent_class->m_name;
+
+ // s/o 2 estrosterik
+ if( *reinterpret_cast< uint32_t* >( nazwa ) == 0x65724243 && *reinterpret_cast< uint32_t* >( nazwa + 0x7 ) == 0x53656C62 )
+ return true;
+ }
+
+ return breakable;
+ }
+
+ bool c_autowall::trace_to_exit( vec3_t start, vec3_t& dir, vec3_t& out_end, CGameTrace& tr, CGameTrace* exit_trace ) {
float dist = 0.f;
int old_contents = 0;
- Ray_t ray;
-
+ Ray_t ray;
+
while ( dist <= 90.f )
{
- dist += 4.0f;
-
- out_end = start + ( dir * dist );
-
+ dist += 4.0f;
+
+ out_end = start + ( dir * dist );
+
if ( !old_contents )
old_contents = g_csgo.m_trace( )->GetPointContents( out_end, MASK_SHOT_HULL | CONTENTS_HITBOX );
- int contents = g_csgo.m_trace( )->GetPointContents( out_end, MASK_SHOT_HULL | CONTENTS_HITBOX );
+ int contents = g_csgo.m_trace( )->GetPointContents( out_end, MASK_SHOT_HULL | CONTENTS_HITBOX );
if ( contents & MASK_SHOT_HULL && ( !( contents & CONTENTS_HITBOX ) || old_contents == contents ) )
continue;
-
- vec3_t end = out_end - ( dir * 4.0f );
- ray.Init( out_end, end );
-
- g_csgo.m_trace( )->TraceRay( ray, MASK_SHOT_HULL | CONTENTS_HITBOX, nullptr, exit_trace );
-
+
+ vec3_t end = out_end - ( dir * 4.0f );
+ ray.Init( out_end, end );
+
+ g_csgo.m_trace( )->TraceRay( ray, MASK_SHOT_HULL | CONTENTS_HITBOX, nullptr, exit_trace );
+
if ( exit_trace->startsolid && exit_trace->surface.flags & SURF_HITBOX )
{
CTraceFilter filter;
@@ -133,7 +134,7 @@ namespace features
ray.Init( out_end, start );
g_csgo.m_trace( )->TraceRay( ray, MASK_SHOT_HULL, &filter, exit_trace );
-
+
if ( exit_trace->DidHit( ) && !exit_trace->startsolid )
{
out_end = exit_trace->endpos;
@@ -141,8 +142,8 @@ namespace features
}
continue;
- }
-
+ }
+
if ( exit_trace->DidHit( ) && !exit_trace->startsolid )
{
if ( is_breakable( tr.m_pEnt ) && is_breakable( exit_trace->m_pEnt ) )
@@ -155,8 +156,8 @@ namespace features
}
continue;
- }
-
+ }
+
if ( !exit_trace->DidHit( ) || exit_trace->startsolid )
{
if ( tr.m_pEnt && tr.m_pEnt != g_csgo.m_entlist( )->GetClientEntity<IClientEntity>( 0 ) && is_breakable( exit_trace->m_pEnt ) )
@@ -165,167 +166,167 @@ namespace features
exit_trace->endpos = out_end + dir;
return true;
}
- }
- }
-
- return false;
- }
-
- bool c_autowall::handle_bullet_penetration( weapon_info_t* wpn_data, fire_bullet_data_t& data ) {
-
- vec3_t pen_end;
- CGameTrace exit_trace;
-
- if ( !trace_to_exit( data.enter_trace.endpos, data.direction, pen_end, data.enter_trace, &exit_trace ) )
- {
- if ( !( g_csgo.m_trace( )->GetPointContents( pen_end, MASK_SHOT_HULL ) & MASK_SHOT_HULL ) )
- return false;
- }
+ }
+ }
+
+ return false;
+ }
+
+ bool c_autowall::handle_bullet_penetration( weapon_info_t* wpn_data, fire_bullet_data_t& data ) {
+
+ vec3_t pen_end;
+ CGameTrace exit_trace;
+
+ if( !trace_to_exit( data.enter_trace.endpos, data.direction, pen_end, data.enter_trace, &exit_trace ) )
+ {
+ if( !( g_csgo.m_trace( )->GetPointContents( pen_end, MASK_SHOT_HULL ) & MASK_SHOT_HULL ) )
+ return false;
+ }
bool is_light_surf = ( data.enter_trace.contents >> 7 ) & 1;
- bool is_solid_surf = ( data.enter_trace.contents >> 3 ) & 1;
+ bool is_solid_surf = ( data.enter_trace.contents >> 3 ) & 1;
auto exit_surface = g_csgo.m_phys_props( )->GetSurfaceData( exit_trace.surface.surfaceProps );
- auto enter_surface = g_csgo.m_phys_props( )->GetSurfaceData( data.enter_trace.surface.surfaceProps );
-
- if ( !exit_surface || !enter_surface )
- return false;
+ auto enter_surface = g_csgo.m_phys_props( )->GetSurfaceData( data.enter_trace.surface.surfaceProps );
+
+ if( !exit_surface || !enter_surface )
+ return false;
+
+ int exit_material = exit_surface->game.material, enter_material = enter_surface->game.material;
- int exit_material = exit_surface->game.material, enter_material = enter_surface->game.material;
-
auto damage_mod = 0.16f;
- auto pen_mod = ( enter_surface->game.penetrationmodifier + exit_surface->game.penetrationmodifier ) * 0.5f;
+ auto pen_mod = ( enter_surface->game.penetrationmodifier + exit_surface->game.penetrationmodifier ) * 0.5f;
- constexpr uint32_t grate = 71, wood = 85, plastic = 76, glass = 89, cardboard = 87;
-
- if ( enter_material == grate /* metal vents */ || enter_material == glass /* windows */ )
+ constexpr uint32_t grate = 71, wood = 85, plastic = 76, glass = 89, cardboard = 87;
+
+ if( enter_material == grate /* metal vents */ || enter_material == glass /* windows */ )
{
pen_mod = 3.0f;
damage_mod = 0.05f;
}
- else if ( is_light_surf || is_solid_surf )
+ else if( is_light_surf || is_solid_surf )
{
pen_mod = 1.0f;
damage_mod = 0.16f;
- }
+ }
- if ( enter_material == exit_material )
+ if( enter_material == exit_material )
{
- if ( exit_material == cardboard || exit_material == wood )
+ if( exit_material == cardboard || exit_material == wood )
pen_mod = 3.0f;
- else if ( exit_material == plastic )
+ else if( exit_material == plastic )
pen_mod = 2.0f;
- }
-
- float thickness = exit_trace.endpos.dist_to( data.enter_trace.endpos );
-
+ }
+
+ float thickness = exit_trace.endpos.dist_to( data.enter_trace.endpos );
+
auto modifier = math::max( 0.f, 1.0f / pen_mod );
- auto modified_penetration = ( ( modifier * 3.0f ) * math::max( 0.f, ( 3.0f / wpn_data->penetration ) * 1.25f ) + ( data.current_damage * damage_mod ) ) + ( ( ( thickness * thickness ) * modifier ) / 24.f );
-
- data.current_damage -= math::max( 0.f, modified_penetration );
-
- if ( data.current_damage <= 0.f )
- return false;
-
- data.src = exit_trace.endpos;
- data.penetrate_count--;
-
- return true;
- }
-
- bool c_autowall::fire_bullet( c_base_player* shooter, c_base_player* target, weapon_info_t* wep_data, fire_bullet_data_t& data, bool ent_check, bool scale ) {
- data.penetrate_count = 4;
- data.trace_length = 0.f;
-
- if( !wep_data )
- return false;
-
- data.current_damage = ( float )( wep_data->damage );
-
- while( data.penetrate_count > 0 && data.current_damage > 1.0f ) {
- if ( !ent_check ) {
- data.trace_length_remaining = data.length_to_end - data.trace_length;
- }
- else {
- data.trace_length_remaining = wep_data->range - data.trace_length;
- }
-
- vec3_t end = data.src + data.direction * data.trace_length_remaining;
- trace_line( data.src, end, MASK_SHOT | CONTENTS_GRATE, shooter, &data.enter_trace );
-
- util::clip_trace_to_player( target->ce( ), data.src, end + data.direction * 40.f, MASK_SHOT | CONTENTS_GRATE, &data.filter, &data.enter_trace );
-
- if( data.enter_trace.fraction == 1.0f ) {
- if( !ent_check ) {
- data.trace_length += data.enter_trace.fraction * data.trace_length_remaining;
- data.current_damage *= std::pow( wep_data->range_modifier, data.trace_length * 0.002f );
-
- if( scale )
- scale_damage( target, HITGROUP_HEAD, wep_data->armor_ratio, data.current_damage );
- return true;
- }
-
- break;
- }
-
-
- if( data.enter_trace.hitgroup <= HITGROUP_RIGHTLEG && data.enter_trace.hitgroup >= HITGROUP_HEAD
- && data.enter_trace.m_pEnt == target->ce( ) ) {
- data.trace_length += data.enter_trace.fraction * data.trace_length_remaining;
- data.current_damage *= std::pow( wep_data->range_modifier, data.trace_length * 0.002f );
-
- auto enemy = ( c_base_player* )( data.enter_trace.m_pEnt );
-
- if( scale )
- scale_damage( enemy, data.enter_trace.hitgroup, wep_data->armor_ratio, data.current_damage );
-
- return true;
- }
-
+ auto modified_penetration = ( ( modifier * 3.0f ) * math::max( 0.f, ( 3.0f / wpn_data->penetration ) * 1.25f ) + ( data.current_damage * damage_mod ) ) + ( ( ( thickness * thickness ) * modifier ) / 24.f );
+
+ data.current_damage -= math::max( 0.f, modified_penetration );
+
+ if( data.current_damage <= 0.f )
+ return false;
+
+ data.src = exit_trace.endpos;
+ data.penetrate_count--;
+
+ return true;
+ }
+
+ bool c_autowall::fire_bullet( c_base_player* shooter, c_base_player* target, weapon_info_t* wep_data, fire_bullet_data_t& data, bool ent_check, bool scale ) {
+ data.penetrate_count = 4;
+ data.trace_length = 0.f;
+
+ if( !wep_data )
+ return false;
+
+ data.current_damage = ( float )( wep_data->damage );
+
+ while( data.penetrate_count > 0 && data.current_damage > 1.0f ) {
+ if ( !ent_check ) {
+ data.trace_length_remaining = data.length_to_end - data.trace_length;
+ }
+ else {
+ data.trace_length_remaining = wep_data->range - data.trace_length;
+ }
+
+ vec3_t end = data.src + data.direction * data.trace_length_remaining;
+ trace_line( data.src, end, MASK_SHOT | CONTENTS_GRATE, shooter, &data.enter_trace );
+
+ util::clip_trace_to_player( target->ce( ), data.src, end + data.direction * 40.f, MASK_SHOT | CONTENTS_GRATE, &data.filter, &data.enter_trace );
+
+ if( data.enter_trace.fraction == 1.0f ) {
+ if( !ent_check ) {
+ data.trace_length += data.enter_trace.fraction * data.trace_length_remaining;
+ data.current_damage *= std::pow( wep_data->range_modifier, data.trace_length * 0.002f );
+
+ if( scale )
+ scale_damage( target, HITGROUP_HEAD, wep_data->armor_ratio, data.current_damage );
+ return true;
+ }
+
+ break;
+ }
+
+
+ if( data.enter_trace.hitgroup <= HITGROUP_RIGHTLEG && data.enter_trace.hitgroup >= HITGROUP_HEAD
+ && data.enter_trace.m_pEnt == target->ce( ) ) {
+ data.trace_length += data.enter_trace.fraction * data.trace_length_remaining;
+ data.current_damage *= std::pow( wep_data->range_modifier, data.trace_length * 0.002f );
+
+ auto enemy = ( c_base_player* )( data.enter_trace.m_pEnt );
+
+ if( scale )
+ scale_damage( enemy, data.enter_trace.hitgroup, wep_data->armor_ratio, data.current_damage );
+
+ return true;
+ }
+
auto enter_surface = g_csgo.m_phys_props( )->GetSurfaceData( data.enter_trace.surface.surfaceProps );
if ( data.trace_length > 3000.f || enter_surface->game.penetrationmodifier <= 0.1f )
- data.penetrate_count = 0;
-
- if( !handle_bullet_penetration( wep_data, data ) )
- break;
- }
-
- return false;
- }
-
- float c_autowall::run( c_base_player* shooter, c_base_player* target, const vec3_t& end, bool ent_check ) {
- if( !shooter || !target ) {
- return 0.f;
- }
-
- auto wep = shooter->get_weapon( );
- if( !wep ) {
- return 0.f;
- }
-
- fire_bullet_data_t data;
- data.filter.pSkip = shooter;
-
- if( shooter == g_ctx.m_local ) {
- data.src = shooter->get_eye_pos( );
- }
- else {
- data.src = shooter->m_vecOrigin( );
- data.src.z += 72.f;
- }
-
- data.length_to_end = ( end - data.src ).length( );
-
- vec3_t angles = math::vector_angles( data.src, end );
- data.direction = math::angle_vectors( angles );
-
- data.direction.normalize_vector( );
-
- if( fire_bullet( shooter, target, wep->get_wpn_info( ), data, ent_check ) ) {
- return data.current_damage;
- }
-
- return 0.f;
- }
-}
+ data.penetrate_count = 0;
+
+ if( !handle_bullet_penetration( wep_data, data ) )
+ break;
+ }
+
+ return false;
+ }
+
+ float c_autowall::run( c_base_player* shooter, c_base_player* target, const vec3_t& end, bool ent_check ) {
+ if( !shooter || !target ) {
+ return 0.f;
+ }
+
+ auto wep = shooter->get_weapon( );
+ if( !wep ) {
+ return 0.f;
+ }
+
+ fire_bullet_data_t data;
+ data.filter.pSkip = shooter;
+
+ if( shooter == g_ctx.m_local ) {
+ data.src = shooter->get_eye_pos( );
+ }
+ else {
+ data.src = shooter->m_vecOrigin( );
+ data.src.z += 72.f;
+ }
+
+ data.length_to_end = ( end - data.src ).length( );
+
+ vec3_t angles = math::vector_angles( data.src, end );
+ data.direction = math::angle_vectors( angles );
+
+ data.direction.normalize_vector( );
+
+ if( fire_bullet( shooter, target, wep->get_wpn_info( ), data, ent_check ) ) {
+ return std::max( data.current_damage, 0.f );
+ }
+
+ return 0.f;
+ }
+}
diff --git a/internal_rewrite/ragebot_antiaim.cpp b/internal_rewrite/ragebot_antiaim.cpp
index a80ecda..1a269d2 100644
--- a/internal_rewrite/ragebot_antiaim.cpp
+++ b/internal_rewrite/ragebot_antiaim.cpp
@@ -256,7 +256,7 @@ namespace features
if( fix_forward_move )
m_cmd->m_forwardmove *= -1.f;
- if( g_ctx.m_local->m_nMoveType( ) != MOVETYPE_LADDER ) {
+ if( g_ctx.m_local->m_nMoveType( ) != MOVETYPE_LADDER && g_settings.rage.fix_legs( ) ) {
if( m_cmd->m_forwardmove ) {
m_cmd->m_buttons &= ~( m_cmd->m_forwardmove < 0 ? IN_FORWARD : IN_BACK );
m_cmd->m_buttons |= ( m_cmd->m_forwardmove > 0 ? IN_FORWARD : IN_BACK );
diff --git a/internal_rewrite/settings.hpp b/internal_rewrite/settings.hpp
index f963c7a..8586f78 100644
--- a/internal_rewrite/settings.hpp
+++ b/internal_rewrite/settings.hpp
@@ -273,6 +273,7 @@ namespace data
con_var< int > edge_dtc_moving{ &holder_, fnv( "rage_edge_dtc_moving" ), 100 };
con_var< int > edge_dtc_priority{ &holder_, fnv( "rage_edge_dtc_priority" ), 0 };
con_var< bool > edge_break_lby{ &holder_, fnv( "rage_edge_break_lby" ) };
+ con_var< bool > fix_legs{ &holder_, true };
con_var< bool > break_lby{ &holder_, fnv( "rage_break_lby" ), 0 };
con_var< int > lby_delta{ &holder_, fnv( "rage_lby_delta" ), 180 };
diff --git a/internal_rewrite/ui.h b/internal_rewrite/ui.h
index 5a8855c..247a0d5 100644
--- a/internal_rewrite/ui.h
+++ b/internal_rewrite/ui.h
@@ -369,13 +369,15 @@ namespace ui
auto left_column = std::make_shared< ui::base_item >( 0, 0, 0, 0 );
auto right_column = std::make_shared< ui::base_item >( 220, -5, 0, 0 );
- auto main_form = std::make_shared< ui::c_form >( 0, 0, 215, 110, xors( "main" ), 110 ); {
+ auto main_form = std::make_shared< ui::c_form >( 0, 0, 215, 131, xors( "main" ), 131 ); {
main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "enabled" ), &g_settings.rage.anti_aim ) );
main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "at players" ), &g_settings.rage.at_players ) );
main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "dormant check" ), &g_settings.rage.dormant_check ) );
main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "angle step" ), &g_settings.rage.angle_step ) );
main_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 140, 0, 45, &g_settings.rage.angle_step_degrees ) )->set_cond(
[ ]( ) { return g_settings.rage.angle_step( ); } );
+
+ main_form->add_item( std::make_shared< ui::c_checkbox >( 0, 0, xors( "fix leg movement" ), &g_settings.rage.fix_legs ) );
}
auto pitch_form = std::make_shared< ui::c_form >( 0, 0, 215, 60, xors( "pitch" ) ); {
@@ -384,7 +386,7 @@ namespace ui
[ ]( ) { return g_settings.rage.pitch == 1 || g_settings.rage.pitch == 4 || g_settings.rage.pitch == 5; } );
}
- auto yaw_form = std::make_shared< ui::c_form >( 0, 0, 215, 211, xors( "yaw" ), 211 ); {
+ auto yaw_form = std::make_shared< ui::c_form >( 0, 0, 215, 190, xors( "yaw" ), 190 ); {
yaw_form->add_item( std::make_shared< ui::c_dropdown< > >( 0, 0, 140, xors( "real yaw" ), &g_settings.rage.real_yaw, &dropdowns::antiaim_yaw ) );
yaw_form->add_item( std::make_shared< ui::c_slider< int > >( 0, 0, 140, -180, 180, &g_settings.rage.real_yaw_add( ) ) )->set_cond(
[ ]( ) { return !!g_settings.rage.real_yaw( ); } );
diff --git a/internal_rewrite/ui_form.h b/internal_rewrite/ui_form.h
index e9841e4..9dbe68e 100644
--- a/internal_rewrite/ui_form.h
+++ b/internal_rewrite/ui_form.h
@@ -105,7 +105,7 @@ namespace ui
scroll_state > 0 ? m_scroll_offset += 13 : m_scroll_offset -= 13;
}
}
- m_scroll_offset = std::clamp( m_scroll_offset, -( get_total_item_height( ) - m_height + 3 ), 0 );
+ m_scroll_offset = std::min< int >( std::max< int >( m_scroll_offset, -( get_total_item_height( ) - m_height + 3 ) ), 0 );
}
else {
m_scroll_offset = 0;
diff --git a/internal_rewrite/visual_player.cpp b/internal_rewrite/visual_player.cpp
index ae3d52c..8c824e9 100644
--- a/internal_rewrite/visual_player.cpp
+++ b/internal_rewrite/visual_player.cpp
@@ -142,17 +142,21 @@ namespace features
}
vec2_t origin = util::screen_transform( stored_origin );
-
- vec3_t origin_zoffset = stored_origin;
- origin_zoffset.z += 10;
+ if( max_corner.y > 1 && max_corner.x > 1 && min_corner.y < screen_h && min_corner.x < screen_w ) {
+ vec3_t origin_zoffset = stored_origin;
+ origin_zoffset.z += 10;
- vec2_t delta = util::screen_transform( origin_zoffset ) - origin;
+ vec2_t delta = util::screen_transform( origin_zoffset ) - origin;
- min_corner.x += delta.y;
- max_corner.x -= delta.y;
+ min_corner.x += delta.y;
+ max_corner.x -= delta.y;
- min_corner.y += delta.y;
- max_corner.y -= delta.y;
+ min_corner.y += delta.y;
+ max_corner.y -= delta.y;
+ }
+ else {
+ return { -100, -100, 0, 0 };
+ }
int x = ( int )min_corner.x;
int w = ( int )( max_corner.x - min_corner.x );
@@ -160,7 +164,7 @@ namespace features
int y = ( int )min_corner.y;
int h = ( int )( max_corner.y - min_corner.y );
- return { x - ( int )origin.x, y - ( int )origin.y, w, h };
+ return { x, y, w, h };
}
void c_visuals::out_of_fov( c_base_player* ent, const vec3_t& pos, clr_t col ) {
@@ -414,11 +418,6 @@ namespace features
col.a( ) *= anim;
}
- auto w2s_cur_origin = util::screen_transform( m_stored_pos[ i ] );
-
- box.x += w2s_cur_origin.x;
- box.y += w2s_cur_origin.y;
-
if( box.x > screen_w || box.x + box.w < 0 ||
box.y > screen_h || box.y + box.h < 0 ) {
if( g_settings.visuals.out_of_pov ) {