Code:
#include "Classes.h"
#include "Files.h"
INT ESPNames, ESPDistances, ESPLines, ESPBoxes, HealthBars, TeleKill;
LPD3DXFONT WarningFont;
LPD3DXLINE pLine;
BOOL bFont;
class PointerTo;
class _Object;
class PlayerInfo;
class cCharacterFX;
class cGameClientShell;
class CILTDrawPrim;
typedef PlayerInfo *(__thiscall *lpGetPlayerByIndex)(unsigned long ulThis, INT Index, INT unk);
lpGetPlayerByIndex GetPlayerByIndex;
typedef PlayerInfo *(__thiscall *lpGetLocalPlayer)(unsigned long ulThis);
lpGetLocalPlayer GetLocalPlayer;
class PointerTo
{
public:
CHAR pad[4];
PlayerInfo *first;
__int32 Index;
};
class _Object
{
public:
CHAR Pad[4];
D3DXVECTOR3 origin;
};
class PlayerInfo
{
public :
char unknown0[4]; //0x0000
DWORD Index; //0x0004
char unknown1[12]; //0x0008
char pName[20]; //0x0014
char unknown2[4]; //0x0028
_Object* Object; //0x0028
__int32 pKills; //0x0030
__int32 pDeaths; //0x0034
char unknown3[44]; //0x0038
__int32 pHeadShots; //0x0064
char unknown4[12]; //0x0068
__int32 pTeam; //0x0074
char unknown5[4]; //0x0078
BYTE pIsDead; //0x007C
char unknown6[579]; //0x007D
PlayerInfo *pNext; //0x02C0
};//Size=0x02C4
class cCharacterFX
{
public :
char unknown0[16]; //0x0000
__int32 *Object; //0x0010
char unknown1[44]; //0x0014
__int32 IsPlayer; //0x0040
char unknown2[44]; //0x0044
BYTE Index; //0x0070
char unknown3[15]; //0x0071
float fPitch; //0x0080
float fYaw; //0x0084
char unknown4[1224]; //0x0088
BYTE unknown5; //0x0550
bool bIsDead; //0x0551
bool bSpawnSheild; //0x0552
BYTE unknown6; //0x0553
char unknown7[12]; //0x0554
__int32 *hHitbox; //0x0560
char unknown8[96]; //0x0564
WORD unknown9; //0x05C4
WORD wHealth; //0x05C6
WORD wArmor; //0x05C8
};//Size=0x05CA
class cClientInfo
{
public:
__int32 ControlePing; //0x0000
__int32 Indice; //0x0004
char indefinido001[8]; //0x0008
char Nomes[12]; //0x0010
char indefinido002[12]; //0x001C
__int32 Objetos; //0x0028
__int32 Matou; //0x002C
__int32 Morreu; //0x0030
char indefinido003[52]; //0x0034
__int32 AlgumaMissao; //0x0068
char indefinido004[4]; //0x006C
__int32 ID_Time; //0x0070
char indefinido005[4]; //0x0074
BYTE EstaMorto ; //0x0078
char indefinido006[319]; //0x0079
__int32 Pontuacao; //0x01B8
char indefinido007[80]; //0x01BC
__int32 PlacarMissao; //0x020C
BYTE MatouMissaoSera; //0x0210
char indefinido008[3]; //0x0211
__int32 HP_Extendida; //0x0214
__int32 MatouNPC; //0x0218
char indefinido009[148]; //0x021C
};//Size=0x02B0(688)
class cGameClientShell
{
public:
virtual void Function0();
virtual void Function1();
virtual void Function2();
virtual void Function3();
virtual void Function4();
virtual void Function5();
virtual void Function6();
virtual void Function7();
virtual void Function8();
virtual void Function9();
virtual void Function10();
virtual void Function11();
virtual void Function12();
virtual void Function13();
virtual void Function14();
virtual void Function15();
virtual void Function16();
virtual void Function17();
virtual void Function18();
virtual void Function19();
virtual void Function20();
virtual void Function21();
virtual void Function22();
virtual void Function23();
virtual void Function24();
virtual void Function25();
virtual void Function26();
virtual void Function27();
virtual void Function28();
virtual void Function29();
virtual void Function30();
virtual void Function31();
virtual void Function32();
virtual void Function33();
virtual void Function34();
virtual void Function35();
virtual void Function36();
virtual void Function37();
virtual void Function38();
virtual void Function39();
virtual void Function40();
virtual void Function41();
virtual void Function42();
virtual void Function43();
virtual void Function44();
virtual void Function45();
virtual void Function46();
virtual DWORD GetClientInfoMgr();
virtual DWORD GetInterfaceManager();
virtual DWORD GetPlayerManager();
virtual void Function50();
virtual void Function51();
virtual void Function52();
virtual void Function53();
virtual void Function54();
virtual void Function55();
virtual void Function56();
virtual void Function57();
virtual cSFXMgr* GetSFXMgr();
};
class CILTDrawPrim
{
public:
virtual VOID function0();
virtual VOID function1();
virtual VOID function2();
virtual VOID function3();
virtual VOID function4();
virtual VOID function5();
virtual VOID function6();
virtual VOID function7();
virtual VOID function8();
virtual VOID function9();
virtual VOID function10();
virtual VOID function11();
virtual VOID function12();
virtual VOID function13();
virtual VOID function14();
virtual VOID function15();
virtual VOID function16();
virtual VOID function17();
virtual VOID function18();
virtual VOID function19();
virtual VOID function20();
virtual VOID function21();
virtual VOID function22();
virtual VOID function23();
virtual VOID function24();
virtual VOID function25();
virtual VOID function26();
virtual VOID function27();
virtual VOID function28();
virtual VOID function29();
virtual VOID function30();
virtual VOID function31();
virtual VOID function32();
virtual VOID function33();
virtual VOID function34();
virtual VOID function35();
virtual VOID function36();
virtual VOID function37();
virtual VOID function38();
virtual VOID function39();
virtual VOID function40();
virtual VOID function41();
virtual VOID function42();
virtual VOID function43();
virtual VOID function44();
virtual VOID function45();
virtual VOID function46();
virtual VOID function47();
virtual VOID function48();
virtual VOID function49();
virtual HRESULT Project(FLOAT x, FLOAT y, FLOAT z, D3DXVECTOR3 *pProjectOut, D3DXVECTOR3 *pTransformOut);
CHAR unknown[17232];
D3DXMATRIX World;
D3DXMATRIX View;
D3DXMATRIX Projection;
};
VOID FillRGB(LPDIRECT3DDEVICE9 pDevice, INT x, INT y, INT w, INT h, D3DCOLOR color)
{
D3DRECT rec = { x, y, x + w, y + h };
pDevice->Clear(1, &rec, D3DCLEAR_TARGET, color, 0, 0);
}
VOID DrawBorder(LPDIRECT3DDEVICE9 pDevice, INT x, INT y, INT w, INT h, INT px, D3DCOLOR BorderColor)
{
FillRGB(pDevice, x, (y + h - px), w, px, BorderColor);
FillRGB(pDevice, x, y, px, h, BorderColor);
FillRGB(pDevice, x, y, w, px, BorderColor);
FillRGB(pDevice, x + w - px, y, px, h, BorderColor);
}
VOID DrawHealthBars(INT x, INT y, WORD health, LPDIRECT3DDEVICE9 pDevice)
{
DWORD dwColor;
if(health > 100)
health = 100;
if(health > 75)
dwColor = 0xFF00FF00;
else if(health > 40)
dwColor = 0xFFFF9B00;
else
dwColor = 0xFFFF0000;
DWORD dwDrawWidth = health / 4;
if(dwDrawWidth <= 2)
dwDrawWidth = 4;
Base.FillRGB(x - 1, y - 1, 27, 5, 0xFF000000, pDevice);
Base.FillRGB(x, y, dwDrawWidth, 3, dwColor, pDevice);
}
VOID DrawLine(LONG Xa, LONG Ya, LONG Xb, LONG Yb, DWORD dwWidth, D3DCOLOR Color)
{
D3DXVECTOR2 vLine[2];
pLine->SetAntialias(0);
pLine->SetWidth(dwWidth);
pLine->Begin();
vLine[0][0] = Xa;
vLine[0][1] = Ya;
vLine[1][0] = Xb;
vLine[1][1] = Yb;
pLine->Draw(vLine, 2, Color);
pLine->End();
}
VOID StartFont_Line(LPDIRECT3DDEVICE9 pDevice)
{
if(WarningFont) {
WarningFont->Release();
WarningFont = NULL;
pLine->Release();
pLine = NULL;
bFont = FALSE;
}
if(!bFont) {
D3DXCreateFont(pDevice, 14, 6, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &WarningFont);
D3DXCreateLine(pDevice, &pLine);
bFont = TRUE;
}
}
FLOAT FindDistance(D3DXVECTOR3 my, D3DXVECTOR3 other, PlayerInfo *pPlayer, PlayerInfo *pLocal)
{
return sqrt((pLocal->Object->origin.x-pPlayer->Object->origin.x) * (pLocal->Object->origin.x-pPlayer->Object->origin.x) +
(pLocal->Object->origin.y-pPlayer->Object->origin.y) * (pLocal->Object->origin.y-pPlayer->Object->origin.y) +
(pLocal->Object->origin.z-pPlayer->Object->origin.z) * (pLocal->Object->origin.z-pPlayer->Object->origin.z));
}
BOOL WorldToScreen(LPDIRECT3DDEVICE9 pDevice, PlayerInfo *pPlayer, D3DXVECTOR3 *pScreen)
{
D3DVIEWPORT9 oViewport;
D3DXVECTOR3 dvWorld(pPlayer->Object->origin.x, pPlayer->Object->origin.y, pPlayer->Object->origin.z);
pDevice->GetViewport(&oViewport);
CILTDrawPrim *pDrawPrim = *(CILTDrawPrim **)DrawPrimitive;
D3DXVec3Project(pScreen, &dvWorld, &oViewport, &pDrawPrim->Projection, &pDrawPrim->View, &pDrawPrim->World);
if(pScreen->z < 1) {
return TRUE;
}
return FALSE;
}
VOID WriteTextCenter(LPDIRECT3DDEVICE9 pDevice, INT x, INT y, DWORD color, CHAR *text)
{
RECT rect;
SetRect(&rect, x - 5, y, x - 5, y);
WarningFont->DrawText(NULL, text, -1, &rect, DT_NOCLIP | DT_CENTER, color);
}
VOID ESP(LPDIRECT3DDEVICE9 pDevice)
{
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
INT ScreenCenterX = GetSystemMetrics( 0 ) / 2-1;
INT ScreenCenterY = GetSystemMetrics( 1 ) / 2-1;
CHAR CName[50];
CHAR CDistance[50];
if((*(BYTE *)GameStatus == 1) && (ESPNames || ESPDistances || ESPLines || ESPBoxes)) {
GetPlayerByIndex = (lpGetPlayerByIndex)PlayerByIndex;
unsigned long ulThis = *(unsigned long *)ClientInfoMgr;
GetLocalPlayer = (lpGetLocalPlayer)LocalPlayer;
cGameClientShell *pGameClientShell = *(cGameClientShell **)GCS;
for(INT i = 0; i < 16; i++) {
PlayerInfo *pPlayer = GetPlayerByIndex(ulThis, i, 0);
PlayerInfo *pLocal = GetLocalPlayer(ulThis);
cCharacterFX *PlayerFX = (cCharacterFX *)pGameClientShell->GetSFXMgr()->SFXList[0x18].List[i];
if(pPlayer != 0 && pPlayer->Object != 0 && pPlayer->pIsDead == 0) {
D3DXVECTOR3 xDistance = pPlayer->Object->origin - pLocal->Object->origin;
D3DXVECTOR3 MyDistance = pLocal->Object->origin - pPlayer->Object->origin;
FLOAT xaDistance = D3DXVec3Length(&xDistance);
FLOAT MyaDistance = D3DXVec3Length(&MyDistance);
D3DXVECTOR3 Position;
if(WorldToScreen(pDevice, pPlayer, &Position)) {
if(pPlayer->pTeam != pLocal->pTeam) {
if(ESPNames) {
sprintf(CName, "%s", pPlayer->pName);
WriteTextCenter(pDevice, Position.x, Position.y, Red, CName);
}
if(ESPDistances) {
sprintf(CDistance, "%0.0f metros", ((FindDistance(pLocal->Object->origin, pPlayer->Object->origin, pPlayer, pLocal))/100));
WriteTextCenter(pDevice, Position.x, Position.y + 12, Red, CDistance);
}
if(ESPLines) {
DrawLine(ScreenCenterX, ScreenCenterY, Position.x, Position.y, 1, Red);
}
if(HealthBars){
DrawHealthBars(Position.x - 7, Position.y - 5, (int)PlayerFX->wHealth, pDevice);
}
if(ESPBoxes){
DrawBorder(pDevice, Position.x - (15000 / MyaDistance), //
Position.y - (35000 / MyaDistance),
50000 / MyaDistance / 6 * 2, // 50000 = tamanho da Borda
50000 / MyaDistance / 3 * 2,
2, Red);
}
}
if(pPlayer->pTeam == pLocal->pTeam) {
if(ESPNames) {
sprintf(CName, "%s", pPlayer->pName);
WriteTextCenter(pDevice, Position.x, Position.y, Blue, CName);
}
if(ESPDistances) {
sprintf(CDistance, "%0.0f metros", ((FindDistance(pLocal->Object->origin,pPlayer->Object->origin, pPlayer, pLocal))/100));
WriteTextCenter(pDevice, Position.x, Position.y + 12, Blue, CDistance);
}
if(ESPLines) {
DrawLine(ScreenCenterX, ScreenCenterY, Position.x, Position.y, 1, Blue);
}
if(HealthBars){
DrawHealthBars(Position.x - 7, Position.y - 5, (int)PlayerFX->wHealth, pDevice);
}
if(ESPBoxes){
DrawBorder(pDevice, Position.x - (15000 / MyaDistance), //
Position.y - (35000 / MyaDistance),
50000 / MyaDistance / 6 * 2, // 50000 = tamanho da Borda
50000 / MyaDistance / 3 * 2,
1, Red);
}
}
}
}
}
}
}