Jump to content
Sign in to follow this  
KATE

source Real Animation Fix

Recommended Posts

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

pastebin:

 

Share this post


Link to post
Share on other sites

Excuse me Mr. i am only a beginner in Pasting and working with Sources.
My Question is how will the Animfix realy help me if i add it will something change directly?

Share this post


Link to post
Share on other sites

cool

Edited by spectrumhvh
e

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

Chat

Chat

Please enter your display name

×