class CEntity
{
public:
ObjectInstance* hObj;//0x0000
int8_t characIdx; //0x0008
int8_t teamIdx; //0x0009
char szUserName[14]; //0x000A
CCharacFX* pCharacFX; //0x0018
int32_t iIndexOnScoreBoard; //0x0020
int32_t bIsBot; //0x0024
int32_t bHasC4; //0x0028
int32_t bIsHost; //0x002C
int64_t tRankType; //0x0030
int64_t iUserID; //0x0038
int32_t bIsObserver; //0x0040
unsigned int u32Health; //0x0044
unsigned __int8 u8Kill; //0x0048
unsigned __int8 u8Death; //0x0049
char pad_004A[2]; //0x004A
int8_t iCharacterType; //0x004C
char pad_004D[3219]; //0x004D
int32_t bIsACE; //0x0CE0
char pad_0CE4[948]; //0x0CE4
}; //Size: 0x1098
NetVars::get()->Expression.m_IntersectsegmentFunc = NetVarManager::get()->GetAddress(xorstr_(_T("m_IntersectsegmentFunc")), eCF, (BYTE*)"\x48\x89\x54\x24\x00\x48\x89\x4C\x24\x00\x48\x83\xEC\x28\x48\x8B\x05\x00\x00\x00\x00\x48\x8B\x00\x4C\x8B\x44\x24\x00\x48\x8B\x54\x24\x00\x48\x8B\x0D\x00\x00\x00\x00\xFF\x50\x18", "xxxx?xxxx?xxxxxxx????xxxxxxx?xxxx?xxx????xxx");
typedef bool(WINAPIV* tIntersectSegment)(IntersectQuery& iQuery, IntersectInfo* qInfo);
tIntersectSegment oIntersectSegment = 0;
struct IntersectInfo
{
D3DXVECTOR3 vImpactPos; //0x0000
};
struct IntersectQuery
{
D3DXVECTOR3 From; //0x0000
D3DXVECTOR3 To; //0x000C
};
bool IsVisible(D3DXVECTOR3 Start, D3DXVECTOR3 End)
{
static IntersectQuery iQuery;
static IntersectInfo iInfo;
RtlSecureZeroMemory(&iQuery, sizeof(iQuery));
iQuery.From = Start;
iQuery.To = End;
return !oIntersectSegment(iQuery, &iInfo);
}
oIntersectSegment = (tIntersectSegment)(0x1402B7C80);
typedef bool (*ObjectFilterFnCF) (int* hObj, void* pUserData);
struct IntersectInfoCF
{
D3DXVECTOR3 vImpactPos;
char _UnkSpace[16];
int* hObjImpact;
DWORD m_hPoly;
DWORD m_SurfaceFlags;
DWORD m_hNode;
}; IntersectInfoCF iInfo;
struct IntersectQueryCF
{
D3DXVECTOR3 From;
D3DXVECTOR3 To;
char _UnkSpace[12];
unsigned int Flags;
ObjectFilterFnCF FilterFn;
void* FilterIntersectParam;
ObjectFilterFnCF FilterIntersectFn;
void* FilterParam;
void* PolyFilterParam;
}; IntersectQueryCF iQuery;
typedef __int64(__fastcall* pfnIntersectSegment)(IntersectQueryCF& Query, IntersectInfoCF* pInfo);
pfnIntersectSegment oIntersectSegment;
bool IsVisible(D3DXVECTOR3 MePos, D3DXVECTOR3 EnemyPos)
{
memset(&iQuery, 0, sizeof(iQuery));
memset(&iInfo, 0, sizeof(iInfo));
if (oIntersectSegment != NULL)
{
iQuery.From = MePos;
iQuery.To = EnemyPos;
bool retorno = !oIntersectSegment(iQuery, &iInfo);
return retorno;
}
return false;
}
oIntersectSegment = (pfnIntersectSegment)(address::IntersectSegment);
#define PATT_INTERSECT "\x48\x89\x54\x24\x00\x48\x89\x4c\x24\x00\x48\x83\xec\x00\x48\x8b\x05\x00\x00\x00\x00\x48\x8b\x00\x4c\x8b\x44\x24\x00\x48\x8b\x54\x24\x00"
#define MASK_INTERSECT "xxxx?xxxx?xxx?xxx????xxxxxxx?xxxx?"
struct IntersectQuery
{
IntersectQuery()
{
m_Flags = NULL;
m_FilterFn = NULL;
}
D3DXVECTOR3 m_From;
D3DXVECTOR3 m_To;
D3DXVECTOR3 m_Direction;
unsigned int m_Flags;
ObjectFilterFn m_FilterFn;
void* m_pUserData;
ObjectFilterFn FilterIntersectFn;
void* FilterParam;
void* PolyFilterParam;
}; //Size: 0x0040
struct IntersectInfo
{
D3DXVECTOR3 m_Point;
D3DXVECTOR4 m_Plane;
ModelInstance* m_hObject;
uint64_t m_hPoly;
uint64_t m_SurfaceFlags;
uint64_t m_hNode;
}; //Size: 0x002C
typedef bool(WINAPIV* tIntersectSegment)(IntersectQuery& iQuery, IntersectInfo* qInfo);
tIntersectSegment oIntersectSegment = nullptr;
// here
IntersectQuery iQuery;
IntersectInfo iInfo;
bool IsVisible(D3DXVECTOR3 Start, D3DXVECTOR3 End)
{
//static IntersectQuery iQuery; // remove this and put this on outside thread like this
//static IntersectInfo iInfo;
RtlSecureZeroMemory(&iQuery, sizeof(iQuery));
iQuery.From = Start;
iQuery.To = End;
return !oIntersectSegment(iQuery, &iInfo);
}
const DWORD64 Intersect = 0x1402F6670; // E8 ? ? ? ? 84 C0 0F 84 ? ? ? ? E8 ? ? ? ? 48 85 C0 const DWORD64 getnodetransform = 0x1403FB940; // 4C 89 4C 24 ? 44 89 44 24 ? 48 89 54 24 ? 48 89 4C 24 ? 48 83 EC 38 48 83 7C 24 ? ? 74 11 48 8B 44 24 ? 0F B6 80 ? ? ? ? 83 F8 01 74 3B B9 ? ? ? ? E8 ? ? ? ? 83 3D ? ? ? ? ? 7C 21 4C 8D 0D ? ? ? ? 4C 8D 05 ? ? ? ? 48 8B 15 ? ? ? ? 48 8B 0D ? ? ? ? E8 ? ? ? ? B8 ? ? ? ? EB 35
struct _Transform
{
D3DXVECTOR3 Pos;
unsigned char spacer00[0x100];
};
IntersectQueryX iQuery;
IntersectInfoX iInfo;
typedef bool(*IntersectSegment)(const IntersectQueryX& Query, IntersectInfoX* pInfo);
IntersectSegment oIntersectSegment;
bool __cdecl pEngine::IsVisible2(D3DXVECTOR3 MePos, D3DXVECTOR3 TargetPos)
{
oIntersectSegment = (IntersectSegment)(defs::Intersect);
iQuery.From = MePos;
iQuery.To = TargetPos;
return !oIntersectSegment(iQuery, &iInfo);
}
D3DXVECTOR3 pEngine::GetBonePosition(cObject* obj, UINT Bone)
{
_Transform Trans;
oGetNodeTransform = (GetNodeTransform)(defs::getnodetransform);
oGetNodeTransform(0, obj, Bone, &Trans, true);
return (Trans.Pos);
}
if (VisibleCheckESP)
{ //visible check
if (gEngine->IsVisible2(gEngine->GetBonePosition(LocalPlayer->Object, 6), gEngine->GetBonePosition(TargetPlayer->Object, 6)))
{
ESP_Color = Green;
if (gEngine->IsTM(LocalPlayer, TargetPlayer))
ESP_Color = Colorteam;
}
}