DWORD FindOffset(char* String, DWORD Pos, bool PointerFunc)
{
static char search[6] = "\x68\x00\x00\x00\x00";
DWORD Clear = FindPattern(CShell, 0xE86000, (BYTE*)String, String);
if (Clear)
{
*(DWORD*)(search+1) = Clear;
DWORD loc = FindPattern(CShell, 0xE86000, (BYTE*)search, "xxxxx");
if (loc)
{
return *(DWORD*)(loc+Pos)+PointerFunc*(loc+Pos+4);
}
}
return NULL;
}
DWORD WeaponMgr = FindOffset("ReloadAnimRatio", WeaponMgrPtr);
bool bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) {
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask)
return false;
return (*szMask) == NULL;
}
DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask) {
for(DWORD i=0; i<dwLen; i++)
if (bCompare((BYTE*)(dwAddress+i),bMask,szMask))
return (DWORD)(dwAddress+i);
return 0;
}