summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustSomePwner <crotchyalt@gmail.com>2018-09-19 15:01:26 +0200
committerJustSomePwner <crotchyalt@gmail.com>2018-09-19 15:01:26 +0200
commite56123a4331aacf8b43f74d1cae7977b93cc390b (patch)
treef15180f77cf04b225051c7e06e1afd63b721090c
parentd1cab43b8ffd1fd37633e4751818d14c840ecef9 (diff)
fix autowall
-rw-r--r--internal_rewrite/autowall.cpp34
-rw-r--r--internal_rewrite/autowall.hpp7
2 files changed, 17 insertions, 24 deletions
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