- Статус
- Оффлайн
- Регистрация
- 26 Янв 2020
- Сообщения
- 378
- Реакции
- 157
Ресольвер был сделан на основе дампов в2 и моих начинающих знаний. СТОГО НЕ СУДИТЬ.
C++:
void resolver::resolve_yaw()
{
player_info_t player_info;
AnimationLayer m_server_anim_layers[15];
AnimationLayer m_previous_anim_layers[15];
AnimationLayer m_resolver_anim_layers[3][15];
int m_side;
int m_way;
auto speed_2d = player->m_vecVelocity().Length2D();
if (!m_engine()->GetPlayerInfo(player->EntIndex(), &player_info))
return;
if (player->m_fFlags() & FL_ONGROUND)
{
if (speed_2d <= 0.1)
{
if (m_server_anim_layers[ANIMATION_LAYER_ADJUST].m_flWeight == 0.0
&& m_server_anim_layers[ANIMATION_LAYER_ADJUST].m_flCycle == 0.0)
{
m_way = 1;
m_side = 2 * (math::AngleDiff(player->get_animation_state()->m_flEyeYaw, player->get_animation_state()->m_flGoalFeetYaw) <= 0.0) - 1;
}
}
else if (!(m_server_anim_layers[ANIMATION_LAYER_LEAN].m_flWeight * 1000.0) && (m_server_anim_layers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flWeight * 1000.0) == (m_previous_anim_layers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flWeight * 1000.0))
{
auto m_first_delta = fabsf(m_server_anim_layers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - m_resolver_anim_layers[ANIMATION_LAYER_AIMMATRIX][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);
auto m_second_delta = fabsf(m_server_anim_layers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - m_resolver_anim_layers[ANIMATION_LAYER_WEAPON_ACTION_RECROUCH][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);
auto m_third_delta = fabsf(m_server_anim_layers[ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate - m_resolver_anim_layers[ANIMATION_LAYER_WEAPON_ACTION][ANIMATION_LAYER_MOVEMENT_MOVE].m_flPlaybackRate);
if (m_first_delta < m_second_delta || m_third_delta <= m_second_delta || (m_second_delta * 1000.0))
{
if (m_first_delta >= m_third_delta && m_second_delta > m_third_delta && !(m_third_delta * 1000.0))
{
m_way = 1;
m_side = 1;
}
}
else
{
m_way = 1;
m_side = -1;
}
}
}
if (m_way == 1)
{
if (!player->IsDormant())
{
if (m_side <= 0)
player->get_animation_state()->m_flGoalFeetYaw = player->m_angEyeAngles().y - player->get_max_desync_delta();
else
player->get_animation_state()->m_flGoalFeetYaw = player->m_angEyeAngles().y + player->get_max_desync_delta();
player->update_clientside_animation();
for (; player->get_animation_state()->m_flGoalFeetYaw > 180.0f; player->get_animation_state()->m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw - 360)
;
for (; player->get_animation_state()->m_flGoalFeetYaw < -180.0f; player->get_animation_state()->m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw + 360)
;
*(float*)(uintptr_t(player->get_animation_state()) + 0x80) = player->get_animation_state()->m_flGoalFeetYaw;
}
else
{
if (m_side >= 0)
player->get_animation_state()->m_flGoalFeetYaw = player->m_angEyeAngles().y + player->get_max_desync_delta();
else
player->get_animation_state()->m_flGoalFeetYaw = player->m_angEyeAngles().y - player->get_max_desync_delta();
player->update_clientside_animation();
for (; player->get_animation_state()->m_flGoalFeetYaw > 180.0f; player->get_animation_state()->m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw - 360)
;
for (; player->get_animation_state()->m_flGoalFeetYaw < -180.0f; player->get_animation_state()->m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw + 360)
;
*(float*)(uintptr_t(player->get_animation_state()) + 0x80) = player->get_animation_state()->m_flGoalFeetYaw;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (m_way == 1 && speed_2d > 0.1)
{
if (!player->IsDormant())
{
if (m_side <= 0)
player->get_animation_state()->m_flGoalFeetYaw = player->m_angEyeAngles().y - 30.0;
else
player->get_animation_state()->m_flGoalFeetYaw = player->m_angEyeAngles().y + 30.0;
player->update_clientside_animation();
for (; player->get_animation_state()->m_flGoalFeetYaw > 180.0f; player->get_animation_state()->m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw - 360)
;
for (; player->get_animation_state()->m_flGoalFeetYaw < -180.0f; player->get_animation_state()->m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw + 360)
;
*(float*)(uintptr_t(player->get_animation_state()) + 0x80) = player->get_animation_state()->m_flGoalFeetYaw;
}
else
{
if (m_side >= 0)
player->get_animation_state()->m_flGoalFeetYaw = player->m_angEyeAngles().y + 30.0;
else
player->get_animation_state()->m_flGoalFeetYaw = player->m_angEyeAngles().y - 30.0;
player->update_clientside_animation();
for (; player->get_animation_state()->m_flGoalFeetYaw > 180.0f; player->get_animation_state()->m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw - 360)
;
for (; player->get_animation_state()->m_flGoalFeetYaw < -180.0f; player->get_animation_state()->m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw + 360)
;
*(float*)(uintptr_t(player->get_animation_state()) + 0x80) = player->get_animation_state()->m_flGoalFeetYaw;
}
}
}
