diff options
| author | JustSomePwner <crotchyalt@gmail.com> | 2018-09-19 15:01:26 +0200 |
|---|---|---|
| committer | JustSomePwner <crotchyalt@gmail.com> | 2018-09-19 15:01:26 +0200 |
| commit | e56123a4331aacf8b43f74d1cae7977b93cc390b (patch) | |
| tree | f15180f77cf04b225051c7e06e1afd63b721090c | |
| parent | d1cab43b8ffd1fd37633e4751818d14c840ecef9 (diff) | |
fix autowall
| -rw-r--r-- | internal_rewrite/autowall.cpp | 34 | ||||
| -rw-r--r-- | internal_rewrite/autowall.hpp | 7 |
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 |
