Code:
typedef unsigned int(__cdecl *GetMyIdx)(unsigned long L***);
GetMyIdx MyIndex;
struct _Transform
{
D3DXVECTOR3 Pos;
unsigned char spacer00[0x100];
};
void GetNodeTransform(cObject* obj,UINT Bone,_Transform* Trans)
{
if(!CShellBase)
return;
unsigned long LTModel = *(unsigned long*)(CShellBase+0x341758);
__asm
{
mov ecx,LTModel;
mov edx,dword ptr ds:[ecx];
mov edx,dword ptr ds:[edx+0x34];
push 1;
push Trans;
push Bone;
push obj;
call edx;
}
}
D3DXVECTOR3 GetBonePosition(cObject* obj,UINT Bone)
{
_Transform Trans;
GetNodeTransform(obj,Bone,&Trans);
return Trans.Pos;
}
enum
{
INTERSECTOBJECTS = (1<<0),
IGNORE_NONSOLID = (1<<1),
INTERSECT_HPOLY = (1<<2)
};
struct HPOLY
{
HPOLY() : m_nWorldIndex(0xFFFFFFFF), m_nPolyIndex(0xFFFFFFFF) {}
HPOLY(__int32 nWorldIndex, __int32 nPolyIndex) : m_nWorldIndex(nWorldIndex), m_nPolyIndex(nPolyIndex) {}
HPOLY(const HPOLY& hPoly) : m_nWorldIndex(hPoly.m_nWorldIndex), m_nPolyIndex(hPoly.m_nPolyIndex) {}
HPOLY &operator=(const HPOLY &hOther)
{
m_nWorldIndex = hOther.m_nWorldIndex;
m_nPolyIndex = hOther.m_nPolyIndex;
return *this;
}
bool operator==(const HPOLY &hOther) const
{
return (m_nWorldIndex == hOther.m_nWorldIndex) && (m_nPolyIndex == hOther.m_nPolyIndex);
}
bool operator!=(const HPOLY &hOther) const
{
return (m_nWorldIndex != hOther.m_nWorldIndex) || (m_nPolyIndex != hOther.m_nPolyIndex);
}
__int32 m_nPolyIndex, m_nWorldIndex;
};
typedef bool (*ObjectFilterFn)(cObject* hObj, void *pUserData);
typedef bool (*PolyFilterFn)(HPOLY hPoly, void *pUserData, const D3DXVECTOR3& vIntersectPoint);
struct LTPlane
{
D3DXVECTOR3 m_Normal;
float m_Dist;
LTPlane() {}
LTPlane
(
const D3DXVECTOR3& n, //unit normal
const D3DXVECTOR3& P //any point on plane
)
{
m_Normal = n;
}
void Init(const D3DXVECTOR3& n, const D3DXVECTOR3& P) {
m_Normal = n;
}
LTPlane(float x, float y, float z, float d) {
m_Dist = d;
}
LTPlane(const D3DXVECTOR3& n, float d) {
m_Normal = n;
m_Dist = d;
}
void Init(const D3DXVECTOR3& n, float d) {
m_Normal = n;
m_Dist = d;
}
const D3DXVECTOR3& Normal() const {
return m_Normal;
}
float Dist() const {
return m_Dist;
}
LTPlane operator-() const {
return LTPlane(-m_Normal, -m_Dist);
}
};
class IntersectQuery {
public:
IntersectQuery() {
m_Flags = 0;
m_FilterFn = 0;
m_PolyFilterFn = 0;
m_FilterActualIntersectFn = 0;
m_pActualIntersectUserData = NULL;
m_pUserData = NULL;
}
D3DXVECTOR3 m_From;
D3DXVECTOR3 m_To;
__int32 m_Flags;
ObjectFilterFn m_FilterFn;
ObjectFilterFn m_FilterActualIntersectFn;
PolyFilterFn m_PolyFilterFn;
void *m_pUserData;
void *m_pActualIntersectUserData;
};
struct IntersectInfo
{
D3DXVECTOR3 vImpactPos;
char spacer00[16];
cObject* hObjImpact;
unsigned long unk1;
unsigned long unk2;
unsigned long unk3;
};
typedef bool( WINAPIV *IntersectSegment )( IntersectQuery& Query, IntersectInfo *pInfo );
IntersectSegment pIntersectSegment;
struct CPlayer;
CPlayer* GetPlayerLoop(int index)
{
if(!CShellBase)
return 0;
unsigned long LTClientShell = *(unsigned long*)( CShellBase+0x344200 );
return (CPlayer*)(LTClientShell+(index*0x1C0)+0x1005C);
}
struct cObject
{
char pad0[4];
D3DXVECTOR3 Origin;
D3DXVECTOR3 Head;
};
struct UnkStruct
{
float Pitch;
float Yaw;
char spacer02[408];
bool IsDead;
char spacer03[5703];
unsigned char CurrentGun;
char Spacer04[3];
bool IsMutant;
};
struct CPlayer
{
char Spacer00[4];
cObject* Object;
char ClientID;
char Team;
char Name[12];
char Spacer01[2];
UnkStruct *unk;
int PlayerSlotTeam;
int unkstruct1;
bool Has_C4;
int State;
int Rank;
int unkstruct2;
int unkstruct3;
short Health;
short Kills;
};
bool FilterObjs(_Object* obj, void *pUser)
{
for(int i = 0; i < 16; i++)
{
CPlayer *Target = GetPlayerLoop(i);
if(obj == Target->Object)
return true;
}
return false;
}
bool ModifiedIntersectSegment(IntersectQuery* Query, IntersectInfo* Info)
{
if(/*RemoteKill On*/)
{
MyIndex = (GetMyIdx)(CShellBase+0x7770);
for(int i = 0; i < 16; i++)
{
CPlayer* Target = GetPlayerLoop(i);
CPlayer* MyPlayer = GetPlayerLoop(MyIndex(LTClientShell));
if( MyPlayer && MyPlayer->Object && Target->Object && Target->unk && !Target->unk->IsDead )
{
if(Target->Team != MyPlayer->Team)
{
D3DXVECTOR3 Pos = GetBonePosition(Target->Object,AimBone);
Query->m_From = Pos + D3DXVECTOR3( 0.0f, 50.0f, 0.0f );
Query->m_To = Pos - D3DXVECTOR3( 0.0f, 50.0f, 0.0f );
Query->m_Flags = ::INTERSECT_OBJECTS|::INTERSECT_HPOLY|::IGNORE_NONSOLID;
Query->m_FilterFn = FilterObjs;
bool Result = pIntersectSegment(*Query,Info);
if(Result)
{
Info->hObjImpact = Target->Object;
Info->vImpactPos = Pos;
}
return pIntersectSegment(*Query,Info);
}
}
}
}
return pIntersectSegment(*Query,Info);
}
LTPlayerClient = LTClientShell + 0x50
Writable Yaw/Pitch @ LTPlayerClient+0x10C/0x110
should be everything yall need for aimbot esp remote kill w/e really ill be posting more throughout the next couple days, have fun !
Credits:
~FALLEN~ / Cody <- Me
MINT <- My bro
Gellin <- great friend
^ Credit those people if you're going to use thanks