Code:
#define M_PI 3.14159265358979323846f
#define DegToRad(degree) ((degree) * (M_PI / 180.0f))
#define PITCH 0
#define YAW 1
#define ROLL 2
class cCharacterFX
{
public:
char unknown1[16];
__int32* Object; //0x0010
char unknown2[44];
__int32 IsPlayer; //0x0040
char unknown3[52];
BYTE Index; //0x0078
char unknown4[1240];
BYTE bIsDead; //0x0551
bool bVisPlayer; //0x0552
char unknown5[9];
__int32* hHitbox; //0x055C
char unknown6[92];
WORD wHealth; //0x05BC
WORD wArmor; //0x05BE
char unknown7[4];
__int32 Index2; //0x05C4
};//Size=0x05C8
void VectorAngles( const float* forward, float* angles )
{
float tmp, yaw, pitch;
if( forward[2] == 0 && forward[0] == 0 )
{
yaw = 0;
if( forward[2] > 0 )
pitch = 90;
else
pitch = 270;
}
else
{
yaw = ( atan2( forward[2], -forward[0] ) * 180 / M_PI )-90;
if( yaw < 0 )
yaw += 360;
tmp = sqrt( forward[0] * forward[0] + forward[2] * forward[2] );
pitch = ( atan2( forward[1], tmp) * 180 / M_PI );
if( pitch < 0 )
pitch += 360;
}
angles[0] = -pitch;
angles[1] = yaw;
angles[2] = 0;
}
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;
}
D3DXVECTOR3 ObjConv(int *obj)
{
return *(D3DXVECTOR3 *) (obj + 0x4);
}
int GetClosestPlayer(int AimAtTeam, int VisibleCheck, int AutoAim, int FOV)
{
float fNearest = (float) INT_MAX;
int iAimAt = -1;
float Distance;
float fDistPitch = 0;
float fDistYaw = 0;
GetPlayerByIndex = (lpGetPlayerByIndex) PlayerByIndex;
GetLocalPlayer = (lpGetLocalPlayer) LocalPlayer;
unsigned long ulThis = *(unsigned long *) ClientInfoMgr;
D3DXVECTOR3 Position;
cPlayerInfo* pPlayer;
cPlayerInfo* pLocal;
cPlayerMgr * pPlayerManager = *(cPlayerMgr **) PlayerManager;
cGameClientShell *pGameClientShell = *(cGameClientShell **)GCS;
for (int i = 0; i < 16; i++)
{
pPlayer = GetPlayerByIndex(ulThis, i, 0);
pLocal = GetLocalPlayer(ulThis);
cCharacterFX *PlayerFX = (cCharacterFX *)pGameClientShell->GetSFXMgr()->SFXList[0x18].List[i];
if(pPlayer != 0 && pLocal != 0 && pLocal->Object != 0 && pPlayer->Object != 0 && pPlayer->pIsDead == 0 && pPlayer->Index != pLocal->Index)
{
int A = pLocal->pTeam != pPlayer->pTeam;
if ( AimAtTeam )
{
A = pLocal->pTeam == pPlayer->pTeam;
}
if( VisibleCheck == 1 && !PlayerFX->bVisPlayer )
continue;
if ( FOV == 0 && !PlayerFX->bVisPlayer )
continue;
if( AutoAim == 1 && !PlayerFX->bVisPlayer )
{
mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
}
if(A)
{
GetAngleToTarget(ObjConv((int*)pPlayer->Object), ObjConv((int*)pLocal->Object), Position);
fDistPitch = pPlayerManager->Pitch - DegToRad(Position[0]);
fDistYaw = pPlayerManager->Yaw - DegToRad(Position[1]);
Distance = sqrt((fDistPitch * fDistPitch) + (fDistYaw * fDistYaw));
if (Distance < fNearest)
{
iAimAt = i;
fNearest = Distance;
}
}
}
}
return iAimAt;
}
void Lock( int &aimbot, int &AimKey, int &AimAtTeam, int &Bones, int &VisibleCheck, int &AutoAim, int &FOV)
{
if ( aimbot )
{
GetPlayerByIndex = (lpGetPlayerByIndex)PlayerByIndex;
unsigned long ulThis = *(unsigned long *)ClientInfoMgr;
GetLocalPlayer = (lpGetLocalPlayer)LocalPlayer;
if( GetAsyncKeyState( AimKey ) < 0 )
{
cPlayerMgr *pPlayerManager = *(cPlayerMgr **)PlayerManager;
int NextEnemyPlease = GetClosestPlayer(AimAtTeam, VisibleCheck, AutoAim, FOV);
if(NextEnemyPlease != -1)
{
cPlayerInfo *pLocal = GetLocalPlayer(ulThis);
cPlayerInfo *pPlayer = GetPlayerByIndex(ulThis, NextEnemyPlease, 0);
D3DXVECTOR3 PosEnemy = pPlayer->Object->Pos, MyCameraPos = pLocal->Object->Pos, AimAngle;
GetAngleToTarget( PosEnemy, MyCameraPos, AimAngle );
pPlayerManager->Yaw = DegToRad ( AimAngle[YAW] );
pPlayerManager->Pitch = DegToRad ( AimAngle[PITCH], Bones );
}
}
}
}