Исходник Real Animation Fix

bash

Меценат

bash

Меценат
Не в сети
5 Авг 2019
173
138
  • bash

  • Чтобы работало нужны правильные setup bones fix.

    C++:
    void c_animations::local::correct_client_anims() {
        if (!cheat::local || !cheat::local->alive())
            return;
     
        sdk::c_animstate* animstate = cheat::local->animstate();
     
        if (!animstate)
            return;
     
        // Backing up current values for restoring later.
        float old_curtime = cheat::globals->curtime, old_frametime = cheat::globals->frametime;
     
        // Resimulate recent commands to refresh the data for animstate.
        cheat::prediction->run_command(cheat::vars::local_cmd);
     
        // Syncing our predicted current time with the server.
        cheat::globals->curtime = cheat::globals->realtime * cheat::local->anim_layer(0).m_flWeight;
     
        // Fixes local player legs on moving
        if (cheat::local->OnGround()) {
            cheat::local->anim_layer(6).m_flWeight = 0.f;
            cheat::local->poseparam(ePoses::MOVE_YAW ) = 1.f / cheat::local->simulationtime();
        }
        // Fixes the client fucking up frametime under certain conditions.
        cheat::globals->frametime = ((cheat::globals->curtime % 2.f) == 0.f) ?
            (cheat::local->poseparam(ePoses::BODY_YAW ) * cheat::globals->tick_interval) :
            (cheat::local->tickbase() * cheat::globals->tick_interval);
     
        float corrected_abs_yaw = animstate->old_absyaw;
     
        // Always negate the old position.
        if (corrected_abs_yaw > 0.f)
            corrected_abs_yaw *= -1.f;
     
        // The clients abs yaw is desynced when the yaw is at a certain position at a certain time.
        // We correct it by negating the old value which is negated when required, to mimic server functionality.
        if ((cheat::local->eye_angles().yaw >= -45.f && cheat::local->eye_angles().yaw <= 45.f) && ((cheat::globals->curtime % 2.f) == 0.f))
            cheat::local->set_abs_angles(sdk::angle_t(0.f, animstate->abs_yaw - corrected_abs_yaw, 0.f));
     
        // Rebuilding bones with corrected values, we'll need to do this twice.
        // Once here, and once after updating bones. This is to maintain correct shootpos.
        sdk::c_matrix3x4 temp_matrix[126];
        local->setup_bones(cheat::globals->curtime, 0x00000100, temp_matrix, sizeof(ccsgo_player_animstate));
     
        // Forcing the client to update anims under all circumstances.
        animstate->last_update_framecount = 0.f;
     
        // Update clientside anims.
        cheat::local->client_anims = true;
        cheat::local->update_client_anims();
        cheat::local->client_anims = false;
     
        // Explained above.
        local->setup_bones(cheat::globals->curtime, 0x00000100, temp_matrix, 126);
     
        // Restore values to not mess with the game.
        cheat::globals->curtime = old_curtime;
        cheat::globals->frametime = old_frametime;
    }

    RAW Paste Data

    Код:
    void c_animations::local::correct_client_anims() {
        if (!cheat::local || !cheat::local->alive())
            return;
     
        sdk::c_animstate* animstate = cheat::local->animstate();
     
        if (!animstate)
            return;
     
        // Backing up current values for restoring later.
        float old_curtime = cheat::globals->curtime, old_frametime = cheat::globals->frametime;
     
        // Resimulate recent commands to refresh the data for animstate.
        cheat::prediction->run_command(cheat::vars::local_cmd);
     
        // Syncing our predicted current time with the server.
        cheat::globals->curtime = cheat::globals->realtime * cheat::local->anim_layer(0).m_flWeight;
     
        // Fixes local player legs on moving
        if (cheat::local->OnGround()) {
            cheat::local->anim_layer(6).m_flWeight = 0.f;
            cheat::local->poseparam(ePoses::MOVE_YAW ) = 1.f / cheat::local->simulationtime();
        }
        // Fixes the client fucking up frametime under certain conditions.
        cheat::globals->frametime = ((cheat::globals->curtime % 2.f) == 0.f) ?
            (cheat::local->poseparam(ePoses::BODY_YAW ) * cheat::globals->tick_interval) :
            (cheat::local->tickbase() * cheat::globals->tick_interval);
     
        float corrected_abs_yaw = animstate->old_absyaw;
     
        // Always negate the old position.
        if (corrected_abs_yaw > 0.f)
            corrected_abs_yaw *= -1.f;
     
        // The clients abs yaw is desynced when the yaw is at a certain position at a certain time.
        // We correct it by negating the old value which is negated when required, to mimic server functionality.
        if ((cheat::local->eye_angles().yaw >= -45.f && cheat::local->eye_angles().yaw <= 45.f) && ((cheat::globals->curtime % 2.f) == 0.f))
            cheat::local->set_abs_angles(sdk::angle_t(0.f, animstate->abs_yaw - corrected_abs_yaw, 0.f));
     
        // Rebuilding bones with corrected values, we'll need to do this twice.
        // Once here, and once after updating bones. This is to maintain correct shootpos.
        sdk::c_matrix3x4 temp_matrix[126];
        local->setup_bones(cheat::globals->curtime, 0x00000100, temp_matrix, sizeof(ccsgo_player_animstate));
     
        // Forcing the client to update anims under all circumstances.
        animstate->last_update_framecount = 0.f;
     
        // Update clientside anims.
        cheat::local->client_anims = true;
        cheat::local->update_client_anims();
        cheat::local->client_anims = false;
     
        // Explained above.
        local->setup_bones(cheat::globals->curtime, 0x00000100, temp_matrix, 126);
     
        // Restore values to not mess with the game.
        cheat::globals->curtime = old_curtime;
        cheat::globals->frametime = old_frametime;
    }
     
    Последнее редактирование модератором:
    • Мне нравится
    Реакции: MrRobot