void VectorAngles(const float* forward, float* angles){
float tmp, yaw, pitch;
if(forward[2] == 0 && forward[0] == 0) // Problem Number 1
{
yaw = 0;
if(forward[2] > 0) // Problem Number 1
pitch = 90;
else
pitch = 270;
} else {
yaw = (atan2(forward[2], -forward[0]) * 180 / M_PI)-90;//Problem number 2
if(yaw < 0)
yaw += 360;
tmp = sqrt(forward[0] * forward[0] + forward[2] * forward[2]); // Problem Number 2
pitch = (atan2(forward[1], tmp) * 180 / M_PI ); // Problem Number 2
if(pitch < 0)
pitch += 360;
}
angles[0] = -pitch;
angles[1] = yaw;
angles[2] = 0;
}
inline void VectorAngles(const D3DXVECTOR3 forward, D3DXVECTOR2& angles){
float tmp;
if (forward[2] == 0 && forward[0] == 0)
{
angles[1] = 0;
angles[0] = -90;
}
else
{
angles[1] = AngleNormalize((atan2f(forward[2], -forward[0]) * 180 / M_PI) - 90);
tmp = sqrtf(forward[0] * forward[0] + forward[2] * forward[2]);
angles[0] = AngleNormalize(atan2f(-forward[1], tmp) * 180 / M_PI);
}
}
float AngleNormalize(FLOAT Angle){
while(Angle < -180) Angle += 360;
while(Angle > 180) Angle -= 360;
return Angle;
}
__forceinline float AngleNormalize(float x)
{
x = fmod(x + 180, 360);
if (x < 0)
x += 360;
return x - 180;
}
void GetAngleToTarget(D3DXVECTOR3 vTargetPos, D3DXVECTOR3 vCameraPos, D3DXVECTOR3& vAngles){
D3DXVECTOR3 vDelta;
vDelta.x = vTargetPos.x - vCameraPos.x;
vDelta.y = vTargetPos.y - vCameraPos.y;
vDelta.z = vTargetPos.z - vCameraPos.z;
VectorAngles((float*)&vDelta, (float*)&vAngles);
if(vAngles.x > 180.0f)
vAngles.x -= 360.0f;
else if(vAngles.x < -180.0f)
vAngles.x += 360.0f;
if(vAngles.y > 180.0f)
vAngles.y -= 360.0f;
else if(vAngles.y < -180.0f)
vAngles.y += 360.0f;
}
inline void GetAngleToTarget(D3DXVECTOR3 target, D3DXVECTOR3 camera, D3DXVECTOR2& angles){
D3DXVECTOR3 delta;
delta = target - camera;
VectorAngles(delta, angles);
}
bool cHacks::GetAimbotFOV(FLOAT Angle, D3DXVECTOR3 Camera, D3DXVECTOR3 Target){
Angle /= 2;
D3DXVECTOR3 newAngles(NULL, NULL, NULL);
D3DXVECTOR3 curAngles(NULL, NULL, NULL);
GetAngleToTarget(Target, Camera, newAngles);
newAngles[YAW] = AngleNormalize(newAngles[YAW]);
newAngles[PITCH] = AngleNormalize(newAngles[PITCH]);
curAngles[YAW] = AngleNormalize(D3DXToDegree(pPlayerManager->Yaw));
curAngles[PITCH] = AngleNormalize(D3DXToDegree(pPlayerManager->Pitch));
if( newAngles[YAW] >= (curAngles[YAW] - Angle) &&
newAngles[YAW] <= (curAngles[YAW] + Angle) &&
newAngles[PITCH] >= (curAngles[PITCH] - Angle) &&
newAngles[PITCH] <= (curAngles[PITCH] + Angle))
return TRUE;
return FALSE;
}
inline bool HackManager::GetFieldOfView(float angle, D3DXVECTOR3 camera, D3DXVECTOR3 target, D3DXVECTOR2& newAngles){
auto pmanager = GetPlayerManager();
if (!pmanager)
return false;
angle /= 2;
VectorAngles(target - camera, newAngles);
auto curAngles = D3DXVECTOR2(AngleNormalize(D3DXToDegree(pmanager->Pitch)),
AngleNormalize(D3DXToDegree(pmanager->Yaw)));
return (newAngles[1] >= (curAngles[1] - angle) &&
newAngles[1] <= (curAngles[1] + angle) &&
newAngles[0] >= (curAngles[0] - angle) &&
newAngles[0] <= (curAngles[0] + angle));
}
{ if(aimMode == 1) {
index = GetClosestPlayer(VisibleCheck, FOVIndex);
} else if(aimMode == 2) {
index = GetClosestCrosshair(VisibleCheck, FOVIndex);
}
}
if(index != -1) {
pPlayer = (GameClasses::PlayerInfo*)GetPlayerByIndex(ulThis, index,0);
D3DXVECTOR3 Position;
GetAngleToTarget((MyGetObjectMaxPos((int*)pPlayer->obj)), (MyGetObjectMaxPos((int*)pLocal->obj)), Position);
pPlayerManager->Yaw = D3DXToRadian(Position[YAW]);
pPlayerManager->Pitch = D3DXToRadian(Position[PITCH] + bone);
}

