• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Исходник How to paste server animations into supremacy // c+p ready

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
15 Окт 2019
Сообщения
45
Реакции
8
never seen before!! :roflanEbalo:

bone builder shouldnt matter for now i guess.

// total bones actually used.
#define MAXSTUDIOBONES 128

+ see files attached.

SetAngles && UpdateAnimations, still call in FRAME_RENDER_START:
Expand Collapse Copy
void Client::SetAngles() {
    if (!m_local || !m_processing)
        return;

    // set radar angles.
    if (m_input.get()->cam_is_third_person())
        m_prediction.get()->set_local_view_angles(m_radar);
}

void Client::UpdateAnimations() {
    if (!m_local || !m_processing)
        return;

    auto pLocal = m_local;
    auto pState = pLocal->m_PlayerAnimState();
    if (!pState || !pLocal || !g_ServerAnimations.m_pCmd)
        return;

    // backup pose parameters.
    std::memcpy(g_ServerAnimations.m_uVisualAnimations.m_pPoseParameters.data(), pLocal->m_flPoseParameter(), sizeof(float) * 20);

    // backup bone matrix.
    matrix3x4_t pBackupMatrix[MAXSTUDIOBONES];
    std::memcpy(pBackupMatrix, pLocal->m_BoneCache().Base(), pLocal->m_BoneCache().Count() * sizeof(matrix3x4_t));

    // backup abs angles.
    // ang_t angAbsAngles = pLocal->get_abs_angles();

    // backup animstate.
    c_animstate pStateBackup{};
    std::memcpy(&pStateBackup, pState, sizeof(c_animstate));

    // set abs angles to foot yaw.
    pLocal->SetAbsAngles(ang_t(0.f, g_ServerAnimations.m_uServerAnimations.m_flFootYaw, 0.f));

    // backup animation overlays.
    std::array<C_AnimationLayer, 13> pAnimOverlays;
    pLocal->GetAnimLayers(pAnimOverlays.data());

    // setup ground and flag stuff.
    static bool bOnGround = false;
    bool bWasOnGround = bOnGround;
    bOnGround = (pLocal->m_fFlags() & FL_ONGROUND);

    bool leftGroundThisFrame = bWasOnGround && !bOnGround;
    if (leftGroundThisFrame && (g_ServerAnimations.m_pCmd->m_buttons & IN_JUMP)) {
        auto v94 = &g_ServerAnimations.m_uVisualAnimations.m_pAnimOverlays[4];
        int v95 = pState->SelectSequenceFromActivityModifier(985);

        v94->m_sequence = v95;
        v94->m_playback_rate = pLocal->GetLayerSequenceCycleRate(v94, v95);
        v94->m_cycle = 0.0f;
        v94->m_weight = 0.0f;

        g_ServerAnimations.m_uVisualAnimations.m_pAnimOverlays[4] = *v94;
    }

    // apply overlays.
    pLocal->SetAnimLayers(g_ServerAnimations.m_uVisualAnimations.m_pAnimOverlays.data());

    // build visual bones.
    // c_bone_builder pVisualBones;
    // pVisualBones.store(pLocal, g_ServerAnimations.m_uVisualAnimations.m_pMatrix, 0x7FF00);
    // pVisualBones.setup();

    // setup bones.
    pLocal->SetupBones(g_ServerAnimations.m_uVisualAnimations.m_pMatrix, MAXSTUDIOBONES, 0x7FF00, g_cl.m_local->m_flSimulationTime());

    // restore overlays.
    pLocal->SetAnimLayers(pAnimOverlays.data());

    // remove origin from matrix.
    for (int i = 0; i < MAXSTUDIOBONES; ++i)
        for (int n = 0; n <= 2; ++n)
            g_ServerAnimations.m_uVisualAnimations.m_pMatrix[i].m_flMatVal[n][3] -= pLocal->get_abs_origin()[n];

    // restore abs angles.
    // pLocal->SetAbsAngles(angAbsAngles);

    // Restore animstate
    std::memcpy(pState, &pStateBackup, sizeof(c_animstate));

    // Restore bone matrix
    std::memcpy(pLocal->m_BoneCache().Base(), pBackupMatrix, pLocal->m_BoneCache().Count() * sizeof(matrix3x4_t));

    // Restore pose parameters
    std::memcpy(pLocal->m_flPoseParameter(), g_ServerAnimations.m_uVisualAnimations.m_pPoseParameters.data(), sizeof(float) * 20);
}

delete some vars from client.h and use these from server_animations:
Expand Collapse Copy
    ang_t  m_rotation;
    float  m_body;
    float  m_body_pred;
    float  m_speed;
    bool   m_ground;

GhettoUpdateClientSideAnimationsEx and hooked UpdateClientSideAnimation:
Expand Collapse Copy
void Player::GhettoUpdateClientSideAnimationsEx() {
    if (!g_hooks.m_UpdateClientSideAnimation) {
        return;
    }

    const auto clientsideanimationBackup = this->m_bClientSideAnimation();

    this->m_bClientSideAnimation() = true; // disable CGlobalVarsBase::curtime interpolation
    g_cl.m_hltv_bypass = true; // disable velocity and duck amount interpolation.

    g_hooks.m_UpdateClientSideAnimation(this); // update anims.

    this->m_bClientSideAnimation() = clientsideanimationBackup;
    g_cl.m_hltv_bypass = false;
}

void Hooks::UpdateClientSideAnimation() {
    // cast thisptr to player ptr.
    Player* player = (Player*)this;
    if (!player || !player->IsPlayer() || player->IsDead())
        return g_hooks.m_UpdateClientSideAnimation(this);

    if (!m_updating_animations)
        return;

    g_hooks.m_UpdateClientSideAnimation(this);
}
 

Вложения

forgot to add, delete UpdateInformation and this how Client::EndMove should look like
EndMove:
Expand Collapse Copy
void Client::EndMove(CUserCmd* cmd) {
    // update time.
    m_anim_frame = m_globals.get()->m_curtime - m_anim_time;
    m_anim_time = m_globals.get()->m_curtime;

    // current angle will be animated.
    m_angle = m_cmd->m_view_angles;

    math::clamp(m_angle.x, -90.f, 90.f);
    m_angle.normalize();

    // write angles to model.
    m_prediction.get()->set_local_view_angles(m_angle);
    // if matchmaking mode, anti untrust clamp.
    m_cmd->m_view_angles.SanitizeAngle();

    if (g_aimbot.m_stop) {
        g_movement.AutoStop();
    }

    // fix our movement.
    g_movement.FixMove(cmd, m_strafe_angles);

    // fix animations after all movement related functions have been called.
    g_ServerAnimations.HandleAnimations(m_packet, cmd);
    etc....
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
shit
 
if (leftGroundThisFrame && (g_ServerAnimations.m_pCmd->m_buttons & IN_JUMP)) { auto v94 = &g_ServerAnimations.m_uVisualAnimations.m_pAnimOverlays[4]; int v95 = pState->SelectSequenceFromActivityModifier(985); v94->m_sequence = v95; v94->m_playback_rate = pLocal->GetLayerSequenceCycleRate(v94, v95); v94->m_cycle = 0.0f; v94->m_weight = 0.0f; g_ServerAnimations.m_uVisualAnimations.m_pAnimOverlays[4] = *v94; }
1748296317543.png


Жаль что ты даже этот парт зафейлил
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Посмотреть вложение 307305

Жаль что ты даже этот парт зафейлил
а, что именно в его парте не так?
посмотрев функцию void CCSGOPlayerAnimState::SetLayerSequence она ничем не отличается от того что есть у него(не считая отсутствия пару чеков но они не так уж и важны если честно)
конечно прикол с g_ServerAnimations.m_pCmd->m_buttons & IN_JUMP стоило бы переделать но это уже человеку решать на самом деле
все остальное совпадает 1:1
 
а, что именно в его парте не так?
посмотрев функцию void CCSGOPlayerAnimState::SetLayerSequence она ничем не отличается от того что есть у него(не считая отсутствия пару чеков но они не так уж и важны если честно)
конечно прикол с g_ServerAnimations.m_pCmd->m_buttons & IN_JUMP стоило бы переделать но это уже человеку решать на самом деле
все остальное совпадает 1:1
Любые чеки должны соблюдаться, даже малейшие, на счёт прикола с цмдхой, да, это очень тупо, соглашусь с тобой
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Любые чеки должны соблюдаться, даже малейшие, на счёт прикола с цмдхой, да, это очень тупо, соглашусь с тобой
в основном эти малейшие чеки используются чтоб не зафейлить установку sequence
также чуть ниже вызывается UpdateLayerOrderPreset но опять таки она не нужна
весь его парт правильный только нуждается в реворке бтв
 
Последнее редактирование:
в основном эти малейшие чеки используются чтоб не зафейлить установку sequence
также чуть ниже вызывается UpdateLayerOrderPreset но опять таки она не нужна
весь его парт правильный только нуждается в реворке бтв
Хорошо, пусть будет так, соглашусь с тобой
 
Назад
Сверху Снизу