-
Автор темы
- #1
Форматирование (BB-код):
#include "animation_system.h"
#include "..\ragebot\aim.h"
void resolver::initialize(player_t* e, adjust_data* record, const float& goal_feet_yaw, const float& pitch)
{
player = e;
player_record = record;
original_goal_feet_yaw = math::normalize_yaw(goal_feet_yaw);
original_pitch = math::normalize_pitch(pitch);
}
void resolver::reset()
{
player = nullptr;
player_record = nullptr;
side = false;
was_first_bruteforce = false;
was_second_bruteforce = false;
original_goal_feet_yaw = 0.0f;
original_pitch = 0.0f;
}
bool resolver::low_delta()
{
auto record = player_record;
if (!g_ctx.local()->is_alive())
return false;
float angle_diff = math::angle_diff(player->m_angEyeAngles().y, player->get_animation_state()->m_flGoalFeetYaw);
Vector first = ZERO, second = ZERO, third = ZERO;
first = Vector(player->hitbox_position(HITBOX_HEAD).x, player->hitbox_position(HITBOX_HEAD).y + min(angle_diff, 35), player->hitbox_position(HITBOX_HEAD).z);
second = Vector(player->hitbox_position(HITBOX_HEAD).x, player->hitbox_position(HITBOX_HEAD).y, player->hitbox_position(HITBOX_HEAD).z);
third = Vector(player->hitbox_position(HITBOX_HEAD).x, player->hitbox_position(HITBOX_HEAD).y - min(angle_diff, 35), player->hitbox_position(HITBOX_HEAD).z);
Ray_t one, two, three;
trace_t tone, ttwo, ttree;
CTraceFilter fl;
fl.pSkip = player;
one.Init(g_ctx.local()->get_shoot_position(), first);
two.Init(g_ctx.local()->get_shoot_position(), second);
three.Init(g_ctx.local()->get_shoot_position(), third);
m_trace()->TraceRay(one, MASK_PLAYERSOLID, &fl, &tone);
m_trace()->TraceRay(two, MASK_PLAYERSOLID, &fl, &ttwo);
m_trace()->TraceRay(three, MASK_PLAYERSOLID, &fl, &ttree);
if (!tone.allsolid && !ttwo.allsolid && !ttree.allsolid && tone.fraction < 0.97 && ttwo.fraction < 0.97 && ttree.fraction < 0.97)
return true;
float lby = fabs(math::normalize_yaw(player->m_flLowerBodyYawTarget()));
if (lby < 35 && lby > -35)
return true;
return false;
}
void resolver::resolve_yaw()
{
player_info_t player_info;
if (!m_engine()->GetPlayerInfo(player->EntIndex(), &player_info))
return;
auto animstate = player->get_animation_state();
if (!animstate)
return;
auto choked = abs(TIME_TO_TICKS(player->m_flSimulationTime() - player->m_flOldSimulationTime()) - 1);
float lby_delta = math::normalize_yaw(player->m_angEyeAngles().y - animstate->m_flGoalFeetYaw);
float delta = lby_delta;
auto m_flGoalFeetYaw = player->get_animation_state()->m_flGoalFeetYaw;
static int side[63];
if (player_record->bot || choked < 1 && !animstate)
{
animstate->m_flGoalFeetYaw = math::normalize_yaw(player->m_angEyeAngles().y + original_goal_feet_yaw); // legit && clean check
}
if (player_info.fakeplayer || !g_ctx.local()->is_alive() || player->m_iTeamNum() == g_ctx.local()->m_iTeamNum())
{
player_record->side = RESOLVER_ORIGINAL;
return;
}
if (g_ctx.globals.missed_shots[player->EntIndex()] == 0)
{
if (side[player->EntIndex()] >= 1) {
//right
player_record->side = low_delta() ? RESOLVER_LOW_FIRST : RESOLVER_FIRST;
}
else if (side[player->EntIndex()] <= -1) {
//left
player_record->side = low_delta() ? RESOLVER_LOW_SECOND : RESOLVER_SECOND;
}
}
else if (g_ctx.globals.missed_shots[player->EntIndex()] == 1)
{
switch (g_ctx.globals.missed_shots[player->EntIndex()] % 1)
{
case 0:
animstate->m_flGoalFeetYaw = math::normalize_yaw(player->m_angEyeAngles().y + player->get_max_desync_delta());
break;
case 1:
animstate->m_flGoalFeetYaw = math::normalize_yaw(player->m_angEyeAngles().y - player->get_max_desync_delta());
break;
default:
break;
}
}
else if (g_ctx.globals.missed_shots[player->EntIndex()] == 2)
{
animstate->m_flGoalFeetYaw = math::normalize_yaw(player->m_angEyeAngles().y + player->get_max_desync_delta());
switch (g_ctx.globals.missed_shots[player->EntIndex()] % 2)
{
case 0:
animstate->m_flGoalFeetYaw = math::normalize_yaw(player->m_angEyeAngles().y - player->get_max_desync_delta());
break;
case 1:
animstate->m_flGoalFeetYaw = math::normalize_yaw(player->m_angEyeAngles().y + player->get_max_desync_delta());
break;
default:
break;
}
}
else if (g_ctx.globals.missed_shots[player->EntIndex()] == 3)
{
if (player_record->layers[3].m_flWeight == 0.0f && player_record->layers[3].m_flCycle == 0.0f && player_record->layers[6].m_flWeight == 1.0f)
{
// resolver estk sketo
if (animstate->m_velocity > 0.1f)
{ // anti paste.
switch (g_ctx.globals.missed_shots[player->EntIndex()] <= 2)
{
case 0:
animstate->m_flGoalFeetYaw = math::normalize_yaw(player->m_angEyeAngles().y - player->get_max_desync_delta());
break;
case 1:
animstate->m_flGoalFeetYaw = math::normalize_yaw(player->m_angEyeAngles().y + player->get_max_desync_delta());
break;
default:
break;
}
}
}
}
else if (g_ctx.globals.missed_shots[player->EntIndex()] == 4)
{
g_ctx.globals.missed_shots[player->EntIndex()] = 0;
}
}
float resolver::resolve_pitch()
{
if
(fabs(original_pitch) > 87.0f)
fake = true;
else if (!fake)
{
player_record->side = RESOLVER_ORIGINAL;
return original_pitch;
}
return original_pitch;
}