this->intersectseg = \x55\x8B\xEC\x8B\x45\x0C\x50\x8B\x4D\x08\x51\x8B\x15\x00\x00\x00\x00\x8B\x02\x8B\x0D\x00\x00\x00\x00\x8B\x50\x0C
bool __cdecl Engine::IsVisible(LTVector End)
{
using IntersectSegmentFn = bool(__cdecl *)(const CF_IntersectQuery& iQuery, CF_IntersectInfo *qInfo);
static CF_IntersectQuery iQuery;
static CF_IntersectInfo iInfo;
memset(&iQuery, 0, sizeof(iQuery));
iQuery.m_From = GetObjectMaxPos(CROSSFIRE_ENGINE::Instance()->pClientShellStub->CameraObject);
iQuery.m_To = End;
return !reinterpret_cast<IntersectSegmentFn>((uint32_t)this->intersectseg)(iQuery, &iInfo);
}
struct IntersectInfo
{
D3DXVECTOR3 vImpactPos; //0x0000
char unknown12[16];
int *hObjImpact; //0x001C
DWORD nSomething1; //0x0020
DWORD nSomething2; //0x0024
DWORD nSomething3; //0x0028
};
struct IntersectQuery
{
D3DXVECTOR3 Start; //0x0000
D3DXVECTOR3 End; //0x000C
char unknown24[12];
UINT Flags; //0x0024
ObjectFilterFn FilterFn; //0x0028
void *FilterIntersectParam; //0x002C
ObjectFilterFn FilterIntersectFn; //0x0030
void *FilterParam; //0x0034
void *PolyFilterParam; //0x0038
};