-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
void LagCompensation::PlayerMove( LagRecord* record ) {
vec3_t start, end, normal;
CGameTrace trace;
CTraceFilterWorldOnly filter;
// define trace start.
start = record->m_pred_origin;
// move trace end one tick into the future using predicted velocity.
end = start + ( record->m_pred_velocity * g_csgo.m_globals->m_interval );
// trace.
g_csgo.m_engine_trace->TraceRay( Ray( start, end, record->m_mins, record->m_maxs ), CONTENTS_SOLID, &filter, &trace );
// we hit shit
// we need to fix hit.
if ( trace.m_fraction != 1.f ) {
// fix sliding on planes.
for ( int i{}; i < 2; ++i ) {
if ( record->m_pred_velocity.length( ) == 0.f )
break;
record->m_pred_velocity -= trace.m_plane.m_normal * record->m_pred_velocity.dot( trace.m_plane.m_normal );
float adjust = record->m_pred_velocity.dot( trace.m_plane.m_normal );
if ( adjust < 0.f )
record->m_pred_velocity -= ( trace.m_plane.m_normal * adjust );
start = trace.m_endpos;
end = start + ( record->m_pred_velocity * ( g_csgo.m_globals->m_interval * ( 1.f - trace.m_fraction ) ) );
g_csgo.m_engine_trace->TraceRay( Ray( start, end, record->m_mins, record->m_maxs ), CONTENTS_SOLID, &filter, &trace );
if ( trace.m_fraction == 1.f )
break;
}
}
// set new final origin.
start = end = record->m_pred_origin = trace.m_endpos;
// move endpos 2 units down.
// this way we can check if we are in/on the ground.
end.z -= 2.f;
// trace.
g_csgo.m_engine_trace->TraceRay( Ray( start, end, record->m_mins, record->m_maxs ), CONTENTS_SOLID, &filter, &trace );
// strip onground flag.
if ( trace.m_fraction == 1.f && trace.m_plane.m_normal.z < 0.7f )
record->m_pred_flags &= ~FL_ONGROUND;
// add back onground flag if we are onground.
else
record->m_pred_flags |= FL_ONGROUND;
/*
if ( ( LOBYTE( v216.m[ 0 ][ 1 ] ) & 1 ) != 0 && ( v308 & 1 ) == 0 )
{
if ( v327 )
*( v327 + 289 ) = 1;
v144 = *( ( anim_layers ^ *anim_layers_xor ) + player );
v144[ 4 ].m_cycle = 0.0;
v144[ 4 ].m_weight = 0.0;
if ( v282 && ( v308 & 6 ) == 6 )
v311 = v311 + 9.0;
}
*/
// s/o estk ^_^
if ( record->m_pred_flags & FL_ONGROUND )
record->m_layers[ 4 ].m_cycle = record->m_layers[ 4 ].m_weight = 0.f;
}