From e56123a4331aacf8b43f74d1cae7977b93cc390b Mon Sep 17 00:00:00 2001 From: JustSomePwner Date: Wed, 19 Sep 2018 15:01:26 +0200 Subject: fix autowall --- internal_rewrite/autowall.cpp | 34 +++++++++++++--------------------- internal_rewrite/autowall.hpp | 7 ++++--- 2 files changed, 17 insertions(+), 24 deletions(-) (limited to 'internal_rewrite') diff --git a/internal_rewrite/autowall.cpp b/internal_rewrite/autowall.cpp index 5cff6b0..732bc26 100644 --- a/internal_rewrite/autowall.cpp +++ b/internal_rewrite/autowall.cpp @@ -236,45 +236,36 @@ namespace features 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; - } + while ( data.penetrate_count > 0 && data.current_damage > 1.0f ) + { + data.to_travel -= data.traveled; + vec3_t end = data.src + data.direction * data.to_travel; - 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 ); + data.traveled += data.to_travel * data.enter_trace.fraction; + data.current_damage *= std::pow( wep_data->range_modifier, data.traveled * 0.002f ); + 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 ) @@ -284,8 +275,7 @@ namespace features } 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 ) + if ( data.traveled > 3000.f || enter_surface->game.penetrationmodifier <= 0.1f ) data.penetrate_count = 0; if( !handle_bullet_penetration( wep_data, data ) ) @@ -316,7 +306,9 @@ namespace features data.src.z += 72.f; } - data.length_to_end = ( end - data.src ).length( ); + data.travel_range = ( end - data.src ).length( ); + data.traveled = 0.f; + data.to_travel = data.travel_range; vec3_t angles = math::vector_angles( data.src, end ); data.direction = math::angle_vectors( angles ); @@ -329,4 +321,4 @@ namespace features return 0.f; } -} +} \ No newline at end of file diff --git a/internal_rewrite/autowall.hpp b/internal_rewrite/autowall.hpp index 4d82574..5e433e0 100644 --- a/internal_rewrite/autowall.hpp +++ b/internal_rewrite/autowall.hpp @@ -8,11 +8,12 @@ struct fire_bullet_data_t { CGameTrace enter_trace; vec3_t direction; CTraceFilter filter; - float trace_length; - float trace_length_remaining; - float length_to_end; float current_damage; int penetrate_count; + + float travel_range{ }; + float traveled{ }; + float to_travel{ }; }; namespace features -- cgit v1.2.3