Исходник Lbyt update prediction

Забаненный
Статус
Оффлайн
Регистрация
24 Мар 2017
Сообщения
699
Реакции[?]
205
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
из-за моих усилий в этой теме, пытаясь объяснить, как все это работает, я все еще видел некоторые темы по этому вопросу, поэтому я решил выпустить некоторый код. точка этого кода восстанавливает, как сервер будет вычислять, когда ваш lbyt будет обновляться. так как клиентский сторонний аниматор должен обновляться каждый клиентский фрейм, серверная анимация сервера запускается на сервере fames, также известном как «тики» и «не обрабатывается», когда удушается. вы обычно запускаете этот код где-то после createmove, так как это то, где происходит обработка сервера. код также предполагает, что ваше curtime в этот момент является tickbase * ipt. к
Credits @wtfrdum
Спиздил с юц
Код:
void Animations::UpdateServerAnimations( ) {
    bool allocate = ( m_serverAnimState == nullptr );
    bool change   = ( !allocate ) && ( local->GetRefEHandle( ) != m_ulEntHandle );
    bool reset    = ( !allocate && !change ) && ( local->m_flSpawnTime( ) != m_flSpawnTime );
 
    // player changed, free old animation state.
    if( change )
        g_pMemAlloc->Free( m_serverAnimState );
 
    // need to reset? (on respawn)
    if( reset ) {
        // reset animation state.
        ResetAnimationState( m_serverAnimState );
 
        // note new spawn time.
        m_flSpawnTime = local->m_flSpawnTime( );
    }
 
    // need to allocate or create new due to player change.
    if( allocate || change ) {
        // only works with games heap alloc.
        CCSGOPlayerAnimState* state = ( CCSGOPlayerAnimState* )g_pMemAlloc->Alloc( sizeof( CCSGOPlayerAnimState ) );
 
        if( state != nullptr )
            CreateAnimationState( state, local );
 
        // used to detect if we need to recreate / reset.
        m_ulEntHandle = local->GetRefEHandle( );
        m_flSpawnTime = local->m_flSpawnTime( );
 
        // note anim state for future use.
        m_serverAnimState = state;
    }
 
    // run the animstate code how the server would too.
    else if( !gClientState->m_nChokedCommands ) {
 
        // back up some data to not mess with game..
 
        UpdateAnimationState( m_serverAnimState, m_angRealAngle );
 
        // restore that data..
 
        // walking, delay next update by .22s.
        if( m_serverAnimState->m_flSpeed > 0.1f )
            m_flNextBodyUpdate = gpGlobals->curtime + 0.22f;
      
        // calculate delta.
        float delta = std::abs( Math::NormalizeAngle( m_angRealAngle - local->m_flLowerBodyYawTarget( ) ) );
 
        // standing, update every 1.1s.
        else if( delta > 35.f && gpGlobals->curtime > m_flNextBodyUpdate )
            m_flNextBodyUpdate = gpGlobals->curtime + 1.1f;
    }
}
 
void Animations::CreateAnimationState( CCSGOPlayerAnimState* state, Player* player ) {
    using CreateAnimState_t = void( __thiscall* )( CCSGOPlayerAnimState*, Player* );
 
    static auto CreateAnimState = ( CreateAnimState_t )0xca11ab1e;
    if( !CreateAnimState )
        return;
 
    CreateAnimState( state, player );
}
 
void Animations::UpdateAnimationState( CCSGOPlayerAnimState* state, QAngle ang ) {
    static auto UpdateAnimState = 0xca11ab1e;
    if( !UpdateAnimState )
        return;
 
    __asm {
        mov ecx, state
 
        movss xmm1, dword ptr[ ang + 4 ]
        movss xmm2, dword ptr[ ang ]
 
        call UpdateAnimState
    }
}
 
void Animations::ResetAnimationState( CCSGOPlayerAnimState* state ) {
    using ResetAnimState_t = void( __thiscall* )( CCSGOPlayerAnimState* );
 
    static auto ResetAnimState = ( ResetAnimState_t )0xca11ab1e;
    if( !ResetAnimState )
        return;
 
    ResetAnimState( state );
}
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
12 Май 2017
Сообщения
405
Реакции[?]
198
Поинты[?]
9K
Проще было сразу ссылку на юц оставить. Люди, остановитесь! Хватит пастить темы с юц, которые здесь никому не нужны. Все люди которым это нужно уже это на юц увидели сами, без вас...
 
Забаненный
Статус
Оффлайн
Регистрация
24 Мар 2017
Сообщения
699
Реакции[?]
205
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Проще было сразу ссылку на юц оставить. Люди, остановитесь! Хватит пастить темы с юц, которые здесь никому не нужны. Все люди которым это нужно уже это на юц увидели сами, без вас...
1.В поисковике ищет эту тему ро названию 2.Есть люди,которые не заходят на юц или не знают что это
 
Участник
Статус
Оффлайн
Регистрация
12 Май 2017
Сообщения
405
Реакции[?]
198
Поинты[?]
9K
1.В поисковике ищет эту тему ро названию 2.Есть люди,которые не заходят на юц или не знают что это
Люди которые знают как использовать этот код явно знают и про юц
 
Похожие темы
Ответы
94
Просмотры
8K
Сверху Снизу