Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float fov_player(Vector ViewOffSet, Vector View, SDK::CBaseEntity* entity, int hitbox)
- {
- const float MaxDegrees = 180.0f;
- Vector Angles = View, Origin = ViewOffSet;
- Vector Delta(0, 0, 0), Forward(0, 0, 0);
- Vector AimPos = aimbot->get_hitbox_pos(entity, hitbox);
- MATH::AngleVectors(Angles, &Forward);
- MATH::VectorSubtract(AimPos, Origin, Delta);
- MATH::NormalizeNum(Delta, Delta);
- float DotProduct = Forward.Dot(Delta);
- return (acos(DotProduct) * (MaxDegrees / M_PI));
- }
- int closest_to_crosshair()
- {
- int index = -1;
- float lowest_fov = INT_MAX;
- SDK::CBaseEntity* local_player = INTERFACES::ClientEntityList->GetClientEntity(INTERFACES::Engine->GetLocalPlayer());
- if (!local_player)
- return -1;
- Vector local_position = local_player->GetVecOrigin() + local_player->GetViewOffset();
- Vector angles;
- INTERFACES::Engine->GetViewAngles(angles);
- for (int i = 1; i <= INTERFACES::Globals->maxclients; i++)
- {
- SDK::CBaseEntity *entity = INTERFACES::ClientEntityList->GetClientEntity(i);
- if (!entity || entity->GetHealth() <= 0 || entity->GetTeam() == local_player->GetTeam() || entity->GetIsDormant() || entity == local_player)
- continue;
- float fov = fov_player(local_position, angles, entity, 0);
- if (fov < lowest_fov)
- {
- lowest_fov = fov;
- index = i;
- }
- }
- return index;
- }
- void autoDirection(SDK::CUserCmd* cmd)
- {
- auto local_player = INTERFACES::ClientEntityList->GetClientEntity(INTERFACES::Engine->GetLocalPlayer());
- if (!local_player)
- return;
- static float last_real;
- bool no_active = true;
- float bestrotation = 0.f;
- float highestthickness = 0.f;
- Vector besthead;
- auto leyepos = local_player->GetVecOrigin() + local_player->GetViewOffset();
- auto headpos = aimbot->get_hitbox_pos(local_player, 0);
- auto origin = local_player->GetAbsOrigin();
- auto checkWallThickness = [&](SDK::CBaseEntity* pPlayer, Vector newhead) -> float
- {
- Vector endpos1, endpos2;
- Vector eyepos = pPlayer->GetVecOrigin() + pPlayer->GetViewOffset();
- SDK::Ray_t ray;
- ray.Init(newhead, eyepos);
- SDK::CTraceFilterSkipTwoEntities filter(pPlayer, local_player);
- SDK::trace_t trace1, trace2;
- INTERFACES::Trace->TraceRay(ray, MASK_SHOT_BRUSHONLY, &filter, &trace1);
- if (trace1.DidHit())
- endpos1 = trace1.end;
- else
- return 0.f;
- ray.Init(eyepos, newhead);
- INTERFACES::Trace->TraceRay(ray, MASK_SHOT_BRUSHONLY, &filter, &trace2);
- if (trace2.DidHit())
- endpos2 = trace2.end;
- float add = newhead.DistTo(eyepos) - leyepos.DistTo(eyepos) + 3.f;
- return endpos1.DistTo(endpos2) + add / 3;
- };
- int index = closest_to_crosshair();
- auto entity = INTERFACES::ClientEntityList->GetClientEntity(index);
- float step = (2 * M_PI) / 18.f;
- float radius = fabs(Vector(headpos - origin).Length2D());
- if (index == -1)
- {
- no_active = true;
- }
- else
- {
- for (float rotation = 0; rotation < (M_PI * 2.0); rotation += step)
- {
- Vector newhead(radius * cos(rotation) + leyepos.x, radius * sin(rotation) + leyepos.y, leyepos.z);
- float totalthickness = 0.f;
- no_active = false;
- totalthickness += checkWallThickness(entity, newhead);
- if (totalthickness > highestthickness)
- {
- highestthickness = totalthickness;
- bestrotation = rotation;
- besthead = newhead;
- }
- }
- }
- if (no_active)
- cmd->viewangles.y += 180.f;
- else
- cmd->viewangles.y = RAD2DEG(bestrotation);
- last_real = cmd->viewangles.y;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement