Welcome to hackvshack.net Forum!
Download Free HvH CS2/CS:GO Cheats, CFG, LUA/JS Scripts, and More!
Register

C++ Function gamesense extrapolation

iliiakalamec

Godlike HvHer
User ID:
64597
Messages:
1,077
Reactions:
9,417
Badges:
22
REP:
−52/7+
Level:
475
extrapolation:
Expand Collapse Copy
void lagcomp::extrapolate( C_CSPlayer* player, Vector& origin, Vector& velocity, int& flags )
{
    const Vector mins = player->GetCollideable()->OBBMins();
    const Vector maxs = player->GetCollideable()->OBBMaxs();

    Vector start = origin;
    Vector end = start + ( velocity * interfaces::globals()->interval_per_tick );

    Ray_t ray;
    ray.Init( start, end, mins, maxs );

    trace_t trace;
    CTraceFilterWorldOnly filter{};

    interfaces::engine_trace()->TraceRay( ray, CONTENTS_SOLID, &filter, &trace );

    if ( trace.fraction != 1.f )
    {
        for ( auto i = 0; i < 2; i++ )
        {
            if ( velocity.Length() == 0.f )
                break;

            velocity -= trace.plane.normal * velocity.Dot( trace.plane.normal );

            const float adjust = velocity.Dot( trace.plane.normal );
            if ( adjust < 0.f )
                velocity -= trace.plane.normal * adjust;

            start = trace.endpos;
            end = start + ( velocity * ( interfaces::globals()->interval_per_tick * ( 1.f - trace.fraction ) ) );

            ray.Init( start, end, mins, maxs );
            interfaces::engine_trace()->TraceRay( ray, CONTENTS_SOLID, &filter, &trace );

            if ( trace.fraction == 1.f )
                break;
        }
    }

    start = end = origin = trace.endpos;

    end.z -= 2.f;

    ray.Init( start, end, mins, maxs );
    interfaces::engine_trace()->TraceRay( ray, CONTENTS_SOLID, &filter, &trace );

    if ( trace.fraction == 1.f && trace.plane.normal.z < 0.7f )
        flags &= ~FL_ONGROUND;

    else
        flags |= FL_ONGROUND;
}
better extrapolation:
Expand Collapse Copy
void LagCompensation::PlayerMove( LagRecord* record ) {
    vec3_t                start, end, normal;
    CGameTrace            trace;
    CTraceFilterWorldOnly filter;

    start = record->m_pred_origin;

    end = start + ( record->m_pred_velocity * g_csgo.m_globals->m_interval );

    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 ) {
        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;
        }
    }

    start = end = record->m_pred_origin = trace.m_endpos;

    end.z -= 2.f;

    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 && trace.m_plane.m_normal.z < 0.7f )
        record->m_pred_flags &= ~FL_ONGROUND;

    else
        record->m_pred_flags |= FL_ONGROUND;

    if ( record->m_pred_flags & FL_ONGROUND )
        record->m_layers[ 4 ].m_cycle = record->m_layers[ 4 ].m_weight = 0.f;
}

note: this is reversed extrapolation, not src free/etc.
 
Last edited:
  • Like
Reactions: Plisskien
extrapolation:
Expand Collapse Copy
void lagcomp::extrapolate( C_CSPlayer* player, Vector& origin, Vector& velocity, int& flags )
{
    const Vector mins = player->GetCollideable()->OBBMins();
    const Vector maxs = player->GetCollideable()->OBBMaxs();

    Vector start = origin;
    Vector end = start + ( velocity * interfaces::globals()->interval_per_tick );

    Ray_t ray;
    ray.Init( start, end, mins, maxs );

    trace_t trace;
    CTraceFilterWorldOnly filter{};

    interfaces::engine_trace()->TraceRay( ray, CONTENTS_SOLID, &filter, &trace );

    if ( trace.fraction != 1.f )
    {
        for ( auto i = 0; i < 2; i++ )
        {
            if ( velocity.Length() == 0.f )
                break;

            velocity -= trace.plane.normal * velocity.Dot( trace.plane.normal );

            const float adjust = velocity.Dot( trace.plane.normal );
            if ( adjust < 0.f )
                velocity -= trace.plane.normal * adjust;

            start = trace.endpos;
            end = start + ( velocity * ( interfaces::globals()->interval_per_tick * ( 1.f - trace.fraction ) ) );

            ray.Init( start, end, mins, maxs );
            interfaces::engine_trace()->TraceRay( ray, CONTENTS_SOLID, &filter, &trace );

            if ( trace.fraction == 1.f )
                break;
        }
    }

    start = end = origin = trace.endpos;

    end.z -= 2.f;

    ray.Init( start, end, mins, maxs );
    interfaces::engine_trace()->TraceRay( ray, CONTENTS_SOLID, &filter, &trace );

    if ( trace.fraction == 1.f && trace.plane.normal.z < 0.7f )
        flags &= ~FL_ONGROUND;

    else
        flags |= FL_ONGROUND;
}
better extrapolation:
Expand Collapse Copy
void LagCompensation::PlayerMove( LagRecord* record ) {
    vec3_t                start, end, normal;
    CGameTrace            trace;
    CTraceFilterWorldOnly filter;

    start = record->m_pred_origin;

    end = start + ( record->m_pred_velocity * g_csgo.m_globals->m_interval );

    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 ) {
        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;
        }
    }

    start = end = record->m_pred_origin = trace.m_endpos;

    end.z -= 2.f;

    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 && trace.m_plane.m_normal.z < 0.7f )
        record->m_pred_flags &= ~FL_ONGROUND;

    else
        record->m_pred_flags |= FL_ONGROUND;

    if ( record->m_pred_flags & FL_ONGROUND )
        record->m_layers[ 4 ].m_cycle = record->m_layers[ 4 ].m_weight = 0.f;
}
pizdec
 
  • Like
Reactions: _hvh_

Similar threads

Who has read this thread (Total: 0) in last 1 hours View details