Advertisement
Guest User

Untitled

a guest
Jun 19th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 KB | None | 0 0
  1. float fov_player(Vector ViewOffSet, Vector View, SDK::CBaseEntity* entity, int hitbox)
  2. {
  3. const float MaxDegrees = 180.0f;
  4. Vector Angles = View, Origin = ViewOffSet;
  5. Vector Delta(0, 0, 0), Forward(0, 0, 0);
  6. Vector AimPos = aimbot->get_hitbox_pos(entity, hitbox);
  7.  
  8. MATH::AngleVectors(Angles, &Forward);
  9. MATH::VectorSubtract(AimPos, Origin, Delta);
  10. MATH::NormalizeNum(Delta, Delta);
  11.  
  12. float DotProduct = Forward.Dot(Delta);
  13. return (acos(DotProduct) * (MaxDegrees / M_PI));
  14. }
  15.  
  16. int closest_to_crosshair()
  17. {
  18. int index = -1;
  19. float lowest_fov = INT_MAX;
  20.  
  21. SDK::CBaseEntity* local_player = INTERFACES::ClientEntityList->GetClientEntity(INTERFACES::Engine->GetLocalPlayer());
  22.  
  23. if (!local_player)
  24. return -1;
  25.  
  26. Vector local_position = local_player->GetVecOrigin() + local_player->GetViewOffset();
  27.  
  28. Vector angles;
  29. INTERFACES::Engine->GetViewAngles(angles);
  30.  
  31. for (int i = 1; i <= INTERFACES::Globals->maxclients; i++)
  32. {
  33. SDK::CBaseEntity *entity = INTERFACES::ClientEntityList->GetClientEntity(i);
  34.  
  35. if (!entity || entity->GetHealth() <= 0 || entity->GetTeam() == local_player->GetTeam() || entity->GetIsDormant() || entity == local_player)
  36. continue;
  37.  
  38. float fov = fov_player(local_position, angles, entity, 0);
  39.  
  40. if (fov < lowest_fov)
  41. {
  42. lowest_fov = fov;
  43. index = i;
  44. }
  45. }
  46.  
  47. return index;
  48. }
  49.  
  50. void autoDirection(SDK::CUserCmd* cmd)
  51. {
  52. auto local_player = INTERFACES::ClientEntityList->GetClientEntity(INTERFACES::Engine->GetLocalPlayer());
  53.  
  54. if (!local_player)
  55. return;
  56.  
  57. static float last_real;
  58. bool no_active = true;
  59. float bestrotation = 0.f;
  60. float highestthickness = 0.f;
  61. Vector besthead;
  62.  
  63. auto leyepos = local_player->GetVecOrigin() + local_player->GetViewOffset();
  64. auto headpos = aimbot->get_hitbox_pos(local_player, 0);
  65. auto origin = local_player->GetAbsOrigin();
  66.  
  67. auto checkWallThickness = [&](SDK::CBaseEntity* pPlayer, Vector newhead) -> float
  68. {
  69. Vector endpos1, endpos2;
  70. Vector eyepos = pPlayer->GetVecOrigin() + pPlayer->GetViewOffset();
  71.  
  72. SDK::Ray_t ray;
  73. ray.Init(newhead, eyepos);
  74.  
  75. SDK::CTraceFilterSkipTwoEntities filter(pPlayer, local_player);
  76.  
  77. SDK::trace_t trace1, trace2;
  78. INTERFACES::Trace->TraceRay(ray, MASK_SHOT_BRUSHONLY, &filter, &trace1);
  79.  
  80. if (trace1.DidHit())
  81. endpos1 = trace1.end;
  82. else
  83. return 0.f;
  84.  
  85. ray.Init(eyepos, newhead);
  86. INTERFACES::Trace->TraceRay(ray, MASK_SHOT_BRUSHONLY, &filter, &trace2);
  87.  
  88. if (trace2.DidHit())
  89. endpos2 = trace2.end;
  90.  
  91. float add = newhead.DistTo(eyepos) - leyepos.DistTo(eyepos) + 3.f;
  92. return endpos1.DistTo(endpos2) + add / 3;
  93. };
  94.  
  95. int index = closest_to_crosshair();
  96. auto entity = INTERFACES::ClientEntityList->GetClientEntity(index);
  97.  
  98. float step = (2 * M_PI) / 18.f;
  99. float radius = fabs(Vector(headpos - origin).Length2D());
  100.  
  101. if (index == -1)
  102. {
  103. no_active = true;
  104. }
  105. else
  106. {
  107. for (float rotation = 0; rotation < (M_PI * 2.0); rotation += step)
  108. {
  109. Vector newhead(radius * cos(rotation) + leyepos.x, radius * sin(rotation) + leyepos.y, leyepos.z);
  110.  
  111. float totalthickness = 0.f;
  112.  
  113. no_active = false;
  114.  
  115. totalthickness += checkWallThickness(entity, newhead);
  116.  
  117. if (totalthickness > highestthickness)
  118. {
  119. highestthickness = totalthickness;
  120. bestrotation = rotation;
  121. besthead = newhead;
  122. }
  123. }
  124. }
  125. if (no_active)
  126. cmd->viewangles.y += 180.f;
  127. else
  128. cmd->viewangles.y = RAD2DEG(bestrotation);
  129.  
  130. last_real = cmd->viewangles.y;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement