Вопрос JiggleBones

че
Пользователь
Статус
Оффлайн
Регистрация
27 Фев 2021
Сообщения
479
Реакции[?]
64
Поинты[?]
16K
Объясните за JiggleBones что это и как он связан с хуком билдтрансформ
 
Забаненный
Статус
Оффлайн
Регистрация
22 Сен 2023
Сообщения
26
Реакции[?]
5
Поинты[?]
10K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
get good get legendware
Участник
Статус
Оффлайн
Регистрация
22 Сен 2020
Сообщения
437
Реакции[?]
201
Поинты[?]
48K
JiggleBones if not fixed proberly it will cause your hands and your attachements to jiggle and jitter, in order to fix it you need to set m_bJiggleBones() to false then setupbones

here'syour fav setupbones

C++:
bool C_LocalAnimations::SetupPlayerBones(matrix3x4_t* aMatrix, int nMask)
{
    // save globals
    std::tuple < float, float, float, float, float, int, int > m_Globals = std::make_tuple
    (
        // backup globals
        m_globals()->m_curtime,
        m_globals()->m_realtime,
        m_globals()->m_frametime,
        m_globals()->m_absoluteframetime,
        m_globals()->m_interpolation_amount,

        // backup frame count and tick count
        m_globals()->m_framecount,
        m_globals()->m_tickcount
    );

    // save player data
    std::tuple < int, int, int, int, int, bool > m_PlayerData = std::make_tuple
    (
        g_ctx.local()->m_nLastSkipFramecount(),
        g_ctx.local()->m_fEffects(),
        g_ctx.local()->m_nClientEffects(),
        g_ctx.local()->m_nOcclusionFrame(),
        g_ctx.local()->m_nOcclusionMask(),
        g_ctx.local()->m_bJiggleBones()
    );

    // backup animation layers
    std::array < AnimationLayer, 13 > m_Layers;
    std::memcpy(m_Layers.data(), g_ctx.local()->get_animlayers(), sizeof(AnimationLayer) * 13);

    /* set owners */
    for (int nLayer = 0; nLayer < 13; nLayer++)
    {
        AnimationLayer* m_Layer = &g_ctx.local()->get_animlayers()[nLayer];
        if (!m_Layer)
            continue;

        m_Layer->m_pOwner = g_ctx.local();
    }

    // get simulation time
    float flSimulationTime = TICKS_TO_TIME(g_ctx.get_command()->m_tickcount);

    // setup globals
    m_globals()->m_curtime = flSimulationTime;
    m_globals()->m_realtime = flSimulationTime;
    m_globals()->m_frametime = m_globals()->m_intervalpertick;
    m_globals()->m_absoluteframetime = m_globals()->m_intervalpertick;
    m_globals()->m_interpolation_amount = 0.0f;
    m_globals()->m_tickcount = g_ctx.get_command()->m_tickcount;

    // fix skipanimframe ( part 1 )
    m_globals()->m_framecount = INT_MAX;

    // invalidate bone cache
    g_ctx.local()->invalidate_bone_cache();

    // disable ugly lean animation
    g_ctx.local()->get_animlayers()[ANIMATION_LAYER_LEAN].m_flWeight = 0.0f;

    // disable bones jiggle
    g_ctx.local()->m_bJiggleBones() = false;

    // force client effects
    g_ctx.local()->m_nClientEffects() |= 2; // disable ik

    // force effects to disable interp
    g_ctx.local()->m_fEffects() |= EF_NOINTERP;

    // fix PVS occlusion
    g_ctx.local()->m_nOcclusionFrame() = -1;
    g_ctx.local()->m_nOcclusionMask() &= ~2;

    // fix skipanimframe ( part 2 )
    g_ctx.local()->m_nLastSkipFramecount() = 0;

    // setup bones
    g_ctx.globals.setuping_bones = true;
    auto res = g_ctx.local()->SetupBones(aMatrix, MAXSTUDIOBONES, nMask, 0.0f);
    g_ctx.globals.setuping_bones = false;

    // restore animation layers
    std::memcpy(g_ctx.local()->get_animlayers(), m_Layers.data(), sizeof(AnimationLayer) * 13);

    // restore player data
    g_ctx.local()->m_nLastSkipFramecount() = std::get < 0 >(m_PlayerData);
    g_ctx.local()->m_fEffects() = std::get < 1 >(m_PlayerData);
    g_ctx.local()->m_nClientEffects() = std::get < 2 >(m_PlayerData);
    g_ctx.local()->m_nOcclusionFrame() = std::get < 3 >(m_PlayerData);
    g_ctx.local()->m_nOcclusionMask() = std::get < 4 >(m_PlayerData);
    g_ctx.local()->m_bJiggleBones() = std::get < 5 >(m_PlayerData);

    // restore globals
    m_globals()->m_curtime = std::get < 0 >(m_Globals);
    m_globals()->m_realtime = std::get < 1 >(m_Globals);
    m_globals()->m_frametime = std::get < 2 >(m_Globals);
    m_globals()->m_absoluteframetime = std::get < 3 >(m_Globals);
    m_globals()->m_interpolation_amount = std::get < 4 >(m_Globals);

    // restore frame count and tick count
    m_globals()->m_framecount = std::get < 5 >(m_Globals);
    m_globals()->m_tickcount = std::get < 6 >(m_Globals);

    return res;
}
 
Забаненный
Статус
Оффлайн
Регистрация
22 Сен 2023
Сообщения
26
Реакции[?]
5
Поинты[?]
10K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Похожие темы
Ответы
11
Просмотры
876
Сверху Снизу