B.O.M.J
-
Автор темы
- #1
Каждую секунду ебет модель.
Я подумал что мой локал анимфикс хуевый(недопастер че с меня взять)
И тупо спастил с какого-то лв где он нормально работал, но все также, потом вообще взял с энрейджа и все тоже самое раз в тик оно модельку ебет
сейчас вот шо у меня
Я подумал что мой локал анимфикс хуевый(недопастер че с меня взять)
И тупо спастил с какого-то лв где он нормально работал, но все также, потом вообще взял с энрейджа и все тоже самое раз в тик оно модельку ебет
C++:
void C_Animations::update_local_animations(c_usercmd* cmd)
{
if (!g_local || i::clientstate->m_delta_tick < 0)
return;
static auto smoothstep_bounds = [](float edge0, float edge1, float x) -> float
{
x = math::clamp((x - edge0) / (edge1 - edge0), 0, 1);
return x * x * (3 - 2 * x);
};
static bool lock_viewangles = false;
static float m_flDurationInAir = 0;
static vec3_t target_angle = cmd->viewangles;
static vec3_t non_shot_target_angle = cmd->viewangles;
if (g::rage_data::m_ragebot_shot_nr == cmd->command_number)
{
lock_viewangles = true;
target_angle = cmd->viewangles;
}
if (!lock_viewangles)
target_angle = cmd->viewangles;
auto animstate = g_local->get_animstate();
if (!animstate || !g_local->is_alive() || g_local->is_dormant()) {
spawntime_local = 0;
return;
}
g_local->m_flThirdpersonRecoil() = g_local->m_aimPunchAngleScaled().x;
const auto current_flags = g_local->m_fFlags();
animlayer_t old_anim_layers[14];
memcpy(old_anim_layers, g_local->get_animoverlays(), 0x38 * g_local->animlayers_count());
if (g_local->m_flSpawnTime() != spawntime_local || animstate->m_player != g_local)
{
//reset animstate.
g_local->update_clientside_animation();
//collect fake state
//memset is done to make sure activity_modifiers wont mess anything up. credits @esoterik XD
g::local_data::fake_state = *g_local->get_animstate();
memset(&g::local_data::fake_state.m_activity_modifiers_server[0], 0, /*sizeof(char) * */20);
//fix shit
memcpy(g_local->get_animoverlays(), old_anim_layers, 0x38 * g_local->animlayers_count());
//ctx.last_time_layers_fixed = 0;
spawntime_local = g_local->m_flSpawnTime();
}
const auto old_absvel = g_local->m_vecAbsVelocity();
const auto old_render_angles = g_local->tp_angles();
const auto old_pose_params = g_local->m_flPoseParameter();
g_local->tp_angles() = target_angle;
animstate->m_move_weight = 0;
g_local->update_clientside_animation();
g_local->force_bone_rebuild();
g_local->setup_bones_ex();
g_local->get_animstate()->m_primary_cycle = old_anim_layers[6].m_cycle;
g_local->get_animstate()->m_move_weight = old_anim_layers[6].m_weight;
g_local->get_animstate()->m_strafe_change_cycle = old_anim_layers[7].m_cycle;
g_local->get_animstate()->m_strafe_sequence = old_anim_layers[7].m_sequence;
g_local->get_animstate()->m_strafe_change_weight = old_anim_layers[7].m_weight;
g_local->get_animstate()->m_acceleration_weight = old_anim_layers[12].m_weight;
if (g::send_packet == false) {
memcpy(g_local->get_animoverlays(), old_anim_layers, 0x38 * g_local->animlayers_count());
return;
}
if (!lock_viewangles)
non_shot_target_angle = cmd->viewangles;
//save off real data.
g::local_data::poses[angle_real] = g_local->m_flPoseParameter();
g::local_data::angles[angle_real] = g_local->get_animstate()->m_abs_yaw;
g::local_data::abs_origin[angle_real] = g_local->get_abs_origin();
memcpy(g::local_data::local_layers[angle_real], g_local->get_animoverlays(), 0x38 * g_local->animlayers_count());
//restore animation backup
g_local->m_flPoseParameter() = old_pose_params;
memcpy(g_local->get_animoverlays(), old_anim_layers, 0x38 * g_local->animlayers_count());
g_local->tp_angles() = target_angle;
const auto backup_state = *g_local->get_animstate();
g::local_data::fake_state.m_landing = false;
g::local_data::fake_state.m_last_update_frame = 0;
*g_local->get_animstate() = g::local_data::fake_state;
//g::local_data::is_updating_fake = true;
g_local->update_clientside_animation();
//g::local_data::is_updating_fake = false;
g::local_data::fake_state = *g_local->get_animstate();
*g_local->get_animstate() = backup_state;
//save off fake data.
g::local_data::poses[angle_fake] = g_local->m_flPoseParameter();
g::local_data::angles[angle_fake] = g::local_data::fake_state.m_abs_yaw;
g::local_data::abs_origin[angle_fake] = g_local->get_abs_origin();
memcpy(g::local_data::local_layers[angle_fake], g_local->get_animoverlays(), 0x38 * g_local->animlayers_count());
g::local_data::local_layers[angle_fake][12].m_weight = 0;
g::local_data::local_layers[angle_fake][3].m_weight = 0;
g_local->force_bone_rebuild();
memcpy(g_local->get_animoverlays(), g::local_data::local_layers[angle_fake], 0x38 * g_local->animlayers_count());
g_local->setup_bones_ex();
memcpy(g::local_data::fake_matrix, g_local->m_BoneCache().Base(), mininmum(128, g_local->bone_count()) * sizeof(matrix_t));
//restore animation backup
g_local->m_flPoseParameter() = old_pose_params;
memcpy(g_local->get_animoverlays(), old_anim_layers, 0x38 * g_local->animlayers_count());
//fix_anim_layers(animstate);
g_local->m_vecAbsVelocity() = old_absvel;
g_local->tp_angles() = old_render_angles;
g_local->m_iEFlags() &= ~efl_dirty_absangvelocity;
lock_viewangles = false;
}