
void PrintText(char pString [], int x, int y, D3DCOLOR col, ID3DXFont *font)
{
RECT FontRect = { x, y, x + 500, y + 30 };
font->DrawText(NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}
bool WorldToScreen(LPDIRECT3DDEVICE9 pDevice, CONST D3DXVECTOR3 &vWorld, D3DXVECTOR3 *pScreen)
{
CILTDrawPrim *pDrawPrimitive = *(CILTDrawPrim **)DrawPrimitivo;
D3DVIEWPORT9 D3DViewport = {0};
D3DXMATRIX matrixProjection, matrixView, matrixWorld;
pDevice->GetTransform(D3DTS_VIEW, &matrixView);
pDevice->GetTransform(D3DTS_PROJECTION, &matrixProjection);
pDevice->GetTransform(D3DTS_WORLD, &matrixWorld);
pDevice->GetViewport(&D3DViewport);
D3DXVec3Project(pScreen, &vWorld, &D3DViewport, &pDrawPrimitive->Projection, &pDrawPrimitive->View, &pDrawPrimitive->World);
return(pScreen->z < 1.0f);
}
FLOAT GetDistance(D3DXVECTOR3 Local, D3DXVECTOR3 Target)
{
FLOAT fResult[3];
SubtractVector(Target, Local, fResult);
return (sqrt((fResult[0] * fResult[0]) + (fResult[1] * fResult[1]) + (fResult[2] * fResult[2])) / 100);
}
VOID cBase::DrawLine(INT x1, INT y1, INT x2, INT y2, D3DCOLOR color, LPDIRECT3DDEVICE9 pDevice)
{
struct Vertex
{
FLOAT x, y, z, rhw;
DWORD dwColor;
FLOAT u, v;
} V[2] = {
{(FLOAT)(x1), (FLOAT)(y1), 0.0f, 1.0f, color, 0.0f, 0.0f},
{(FLOAT)(x2), (FLOAT)(y2), 0.0f, 1.0f, color, 0.0f, 0.0f},
};
pDevice->DrawPrimitiveUP(D3DPT_LINESTRIP, 2, V, sizeof(Vertex));
}
void DrawLine(LONG Xa, LONG Ya, LONG Xb, LONG Yb, DWORD dwWidth, D3DCOLOR Color)
{
D3DXVECTOR2 vLine[2];
Directx.pLine->SetAntialias(0);
Directx.pLine->SetWidth(dwWidth);
Directx.pLine->Begin();
vLine[0][0] = Xa;
vLine[0][1] = Ya;
vLine[1][0] = Xb;
vLine[1][1] = Yb;
Directx.pLine->Draw(vLine, 2, Color);
Directx.pLine->End();
}
VOID ESP(INT Names, INT Lines, INT Distances, INT Boxes, INT Warning, LPDIRECT3DDEVICE9 pDevice)
{
pDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
INT CenterX = (GetSystemMetrics(0) / 2) - 1;
INT CenterY = (GetSystemMetrics(1) / 2) - 1;
CHAR CName[50];
CHAR CDistance[50];
if((*(BYTE *)GameStatus == 1) && (Names || Lines || Distances || Boxes || Warning))
{
GetPlayerByIndex = (lpGetPlayerByIndex)PlayerByIndex;
unsigned long ulThis = *(unsigned long *)ClientInfoMgr;
GetLocalPlayer = (lpGetLocalPlayer)LocalPlayer;
cGameClientShell *pGameClientShell = *(cGameClientShell **)GCS;
for(INT i = 0; i < 24; i++)
{
cPlayerInfo *pLocal = GetLocalPlayer(ulThis);
cPlayerInfo *pPlayer = GetPlayerByIndex(ulThis, i, 0);
cCharacterFX *PlayerFX = (cCharacterFX *)pGameClientShell->GetSFXMgr()->SFXList[0x18].List[i];
if (pPlayer != 0 && pPlayer->Object != 0 && pPlayer->pIsDead == 0)
{
sprintf(CName, "%s", pPlayer->pName);
D3DXVECTOR3 vPos, vFootScreen, vScreen;
vPos.x = pPlayer->Object->Pos.x;
vPos.y = pPlayer->Object->yBound2;
vPos.z = pPlayer->Object->Pos.z;
if(WorldToScreen(pDevice, vPos, &vScreen))
{
if(pPlayer->pTeam != pLocal->pTeam)
{
if(Names)
{
PrintText(CName, vScreen.x - 16, vScreen.y - 22, Red, Directx.pFont);
}
if(Lines)
{
Base.DrawLine(CenterX, CenterY, vScreen.x, vScreen.y, Red, pDevice);
}
if(Distances)
{
sprintf(CDistance, "%0.2f metros", GetDistance(pLocal->Object->Pos, pPlayer->Object->Pos));
Directx.Texto(vScreen.x, vScreen.y +15, Cyan, Directx.pFont, CDistance);
}
}
if(pPlayer->pTeam == pLocal->pTeam /*&& pLocal->Index != PlayerFX->Index*/)
{
if(Names == 2)
{
PrintText(CName, vScreen.x - 16, vScreen.y - 22, Blue, Directx.pFont);
}
if(Lines == 2)
{
Base.DrawLine(CenterX, CenterY, vScreen.x, vScreen.y, Blue, pDevice);
}
if(Distances == 2)
{
sprintf(CDistance, "%0.2f metros", GetDistance(pLocal->Object->Pos, pPlayer->Object->Pos));
Directx.Texto(vScreen.x, vScreen.y +15, Cyan, Directx.pFont, CDistance);
}
}
}
}
}
}
}
#endif
VOID DrawLine(LONG Xa, LONG Ya, LONG Xb, LONG Yb, DWORD dwWidth, D3DCOLOR Color)
{
D3DXVECTOR2 vLine[2];
Directx.pLine->SetAntialias(0);
Directx.pLine->SetWidth(dwWidth);
Directx.pLine->Begin();
vLine[0][0] = Xa;
vLine[0][1] = Ya;
vLine[1][0] = Xb;
vLine[1][1] = Yb;
Directx.pLine->Draw(vLine, 2, Color);
Directx.pLine->End();
}
VOID ESP(INT Names, INT Lines, INT Distances, INT Boxes, LPDIRECT3DDEVICE9 pDevice)
{
pDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
CHAR CName[50], CDistance[50];
if ((*(BYTE *) GameStatus == 1) && (Names || Lines || Distances || Boxes))
{
GetPlayerByIndex = (lpGetPlayerByIndex) PlayerByIndex;
unsigned long ulThis = *(unsigned long *) ClientInfoMgr;
GetLocalPlayer = (lpGetLocalPlayer) LocalPlayer;
cGameClientShell *pGameClientShell = *(cGameClientShell **) GCS;
for (INT i = 0; i < 24; i++)
{
PlayerInfo *pLocal = GetLocalPlayer(ulThis);
PlayerInfo *pPlayer = GetPlayerByIndex(ulThis, i, 0);
cCharacterFX *PlayerFX = (cCharacterFX *) pGameClientShell->GetSFXMgr()->SFXList[0x18].List[i];
if (pPlayer != 0 && pPlayer->Object != 0 && pPlayer->pIsDead == 0 && pLocal->pIsDead == 0)
{
D3DXVECTOR3 vPos, vFootScreen, vScreen;
vPos.x = pPlayer->Object->Pos.x;
vPos.y = pPlayer->Object->yBound2;
vPos.z = pPlayer->Object->Pos.z;
if (WorldToScreen(pDevice, vPos, &vScreen))
{
if (pPlayer->pTeam != pLocal->pTeam)
{
if (Names)
{
sprintf(CName, "%s", pPlayer->pName);
Directx.Texto(vScreen.x, vScreen.y, Red, TCenter, Directx.pFont, CName);
}
if (Lines)
{
DrawLine(GetSystemMetrics(0) / 2, GetSystemMetrics(1), vScreen.x, vScreen.y, NULL, Red);
}
if (Distances)
{
sprintf(CDistance, "%0.0f M", GetDistance(pLocal->Object->Pos, pPlayer->Object->Pos));
Directx.Texto(vScreen.x, vScreen.y + 23, Red, TCenter, Directx.pFont, CDistance);
}
if (Boxes)
{
vPos.x = pPlayer->Object->Pos.x;
vPos.y = pPlayer->Object->yBound1;
vPos.z = pPlayer->Object->Pos.z;
if (WorldToScreen(pDevice, vPos, &vFootScreen))
{
INT BoxDist = INT(0.2f * (vFootScreen.y - vScreen.y));
#pragma warning(push)
D3DRECT rectBoxes[10] =
{
{ vScreen.x - BoxDist, vScreen.y, vScreen.x - BoxDist + 1, vFootScreen.y },
{ vScreen.x - BoxDist, vFootScreen.y, vScreen.x + BoxDist + 1, vFootScreen.y + 1 },
{ vScreen.x + BoxDist, vScreen.y, vScreen.x + BoxDist + 1, vFootScreen.y },
{ vScreen.x - BoxDist, vScreen.y, vScreen.x + BoxDist, vScreen.y + 1 }
};
#pragma warning(pop)
pDevice->Clear(10, rectBoxes, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, Blue, 1.0f, 0);
}
}
}
if (pPlayer->pTeam == pLocal->pTeam && pPlayer->index != pLocal->index)
{
if (Names)
{
sprintf(CName, "%s", pPlayer->pName);
Directx.Texto(vScreen.x, vScreen.y, Yellow, TCenter, Directx.pFont, CName);
}
if (Lines)
{
DrawLine(GetSystemMetrics(0) / 2, GetSystemMetrics(1), vScreen.x, vScreen.y, NULL, White);
}
if (Distances)
{
sprintf(CDistance, "%0.0f M", GetDistance(pLocal->Object->Pos, pPlayer->Object->Pos));
Directx.Texto(vScreen.x, vScreen.y + 23, Red, TCenter, Directx.pFont, CDistance);
}
if (Boxes)
{
vPos.x = pPlayer->Object->Pos.x;
vPos.y = pPlayer->Object->yBound1;
vPos.z = pPlayer->Object->Pos.z;
if (WorldToScreen(pDevice, vPos, &vFootScreen))
{
INT BoxDist = INT(0.2f * (vFootScreen.y - vScreen.y));
#pragma warning(push)
D3DRECT rectBoxes[10] =
{
{ vScreen.x - BoxDist, vScreen.y, vScreen.x - BoxDist + 2, vFootScreen.y },
{ vScreen.x - BoxDist, vFootScreen.y, vScreen.x + BoxDist + 2, vFootScreen.y + 1 },
{ vScreen.x + BoxDist, vScreen.y, vScreen.x + BoxDist + 2, vFootScreen.y },
{ vScreen.x - BoxDist, vScreen.y, vScreen.x + BoxDist, vScreen.y + 1 }
};
#pragma warning(pop)
pDevice->Clear(10, rectBoxes, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, Yellow, 1.0f, 0);
}
}
}
}
}
}
}
}
pDevice->DrawPrimitiveUP( D3DPT_LINELIST, 1, qV, sizeof( D3DTLVERTEX ) );
pDevice->DrawPrimitiveUP(D3DPT_LINESTRIP, 2, V, sizeof(Vertex));
#ifndef _ESP_H_
#define _ESP_H_
#define M_PI 3.14159265358979323846f
#define DegToRad(degree) ((degree) * (M_PI / 180.0f))
#define PITCH 0
#define YAW 1
#define ROLL 2
#define SubtractVector(v1, v2, v3) ((v3[0] = v1[0] - v2[0]), (v3[1] = v1[1] - v2[1]), (v3[2] = v1[2] - v2[2]))
class cPlayerMgr;
class cPlayerInfo;
class CILTDrawPrim;
class cCharacterFX;
class cGameClientShell;
class cClientWeaponMgr;
typedef cPlayerInfo *(__thiscall *lpGetLocalPlayer)(unsigned long ulThis);
lpGetLocalPlayer GetLocalPlayer;
typedef cPlayerInfo *(__thiscall *lpGetPlayerByIndex)(unsigned long ulThis, INT index, INT unk);
lpGetPlayerByIndex GetPlayerByIndex;
class cSFXList
{
public:
DWORD unknown1; //0x0000
DWORD* List; //0x0004
DWORD unknown2; //0x0008
__int32 Num; //0x000C
};//Size=0x0010
class cSFXMgr
{
public:
cSFXList SFXList[0x3D]; //0x0000
};//Size=0x00F4
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 void Function47();
virtual void Function48();
virtual void Function49();
virtual void Function50();
virtual void Function51();
virtual void Function52();
virtual void Function53();
virtual void Function54();
virtual void Function55();
virtual void Function56();
virtual DWORD GetClientInfoMgr();
virtual DWORD GetInterfaceManager();
virtual DWORD GetPlayerManager();
virtual void Function60();
virtual void Function61();
virtual void Function62();
virtual void Function63();
virtual void Function64();
virtual void Function65();
virtual cSFXMgr* GetSFXMgr();
};
struct __Object
{
public:
DWORD Unknown;
float xBound1;
float yBound1;
float zBound1;
float xBound2;
float yBound2;
float zBound2;
char unknown0[172];
D3DXVECTOR3 Pos;
D3DXMATRIX Rot; //0x00D4
char unknown1[180];
D3DXMATRIX Vel; //0x00D4
char unknown2[4];
D3DXVECTOR3 origin;
};
class cPlayerInfo
{
public:
__int32 pPing; //0x0000
__int32 Index; //0x0004
__int32 ID; //0x0008
char unknown2[8]; //0x000C
char pName[20]; //0x0014
char unknown3[4]; //0x0028
__Object *Object; //0x002C
__int32 Kills; //0x0030
__int32 Deaths; //0x0034
char unknown4[44]; //0x0038
__int32 HeadShots; //0x0064
char unknown5[12]; //0x0068
__int32 pTeam; //0x0074
char unknown6[4]; //0x0078
BYTE pIsDead; //0x007C
char unknown7[655]; //0x007D
cPlayerInfo* PlayerPrev; //0x0300
cPlayerInfo* PlayerNext; //0x0304
};
class cPlayerMgr
{
public:
char _0x0000[24];
cClientWeaponMgr * WeaponMgr; //0x0018
char _0x001C[16];
__int32 playerFlags; //0x002C
char _0x0030[24];
float Pitch; //0x0048
float Yaw; //0x004C
float Roll; //0x0050
char _0x0054[236];
__int32 * CameraObject; //0x0140
char _0x0144[60];
};//Size=0x0180
class CILTDrawPrim
{
public:
char unknown1[16184]; //0x0000
D3DVIEWPORT9 ViewPort; //0x3F38
D3DXMATRIX World; //0x3F50
D3DXMATRIX View; //0x3F90
D3DXMATRIX Projection; //0x3FD0
};
class cCharacterFX//
{
public:
char _0x0000[16];
__int32 * Object; //0x0010
char _0x0014[44];
__int32 IsPlayer; //0x0040
char _0x0044[1293];
BYTE bIsDead; //0x0551
BYTE bSpawnSheild; //0x0552
char _0x0553[41];
__int32 hHitbox; //0x057C
char _0x0580[60];
WORD wHealth; //0x05BC
WORD wArmor; //0x05BE
char _0x05C0[44];
__int32 Index; //0x05EC
char _0x05F0[2640];
};//Size=0x1040