who are you dot idk
-
Автор темы
- #1
- 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;
- }