Well, I'm trying to add Bypass 28_3 in my menu, to use NoRecoil, etc ... but when I log into the server, the error report, when I modify something, give report error on the login screen.
Address of Crossfire Elite BR
Code:
#define dw_pWeaponMgr 0x18DEC0C
//0x323270 = Bypass 28_3
MakeCall.h
Code:
bool isReady = false;
typedef struct
{
BYTE Data[0x3000];
} WeaponMgrCopy;
WeaponMgrCopy* Weapons[2000];
void backup(DWORD CShell,DWORD WeaponMgr)
{
DWORD pWeaponMgr = *(DWORD*)(CShell+WeaponMgr );
for(int i=0;i<=2000;i++)
{
DWORD Weapon = (*(DWORD*)(pWeaponMgr + (4*i)));
if (Weapon != NULL)
{
Weapons[i] = new WeaponMgrCopy;
memcpy(Weapons[i], (void*)(Weapon), 0x3000);
}
}
}
WeaponMgrCopy* bypass (int GunIndexNR)
{
return Weapons[GunIndexNR];
}
void MakeCall(BYTE* paddress, DWORD yourfunction, DWORD dwlen)
{
DWORD dwOldProtect, dwBkup, dwRelAddr;
VirtualProtect(paddress, dwlen, PAGE_EXECUTE_READWRITE, &dwOldProtect);
dwRelAddr = (DWORD) (yourfunction - (DWORD) paddress) - 5;
*paddress = 0xE8;
*((DWORD*) (paddress + 0x1)) = dwRelAddr;
for(DWORD x = 0x5; x < dwlen; x++) *(paddress + x) = 0x90;
VirtualProtect(paddress, dwlen, dwOldProtect, &dwBkup);
return;
}
Function
Code:
void ClientError()
{
DWORD CShell = (DWORD)GetModuleHandleA("CShell.dll");
DWORD WeaponMgr = *(DWORD*)(CShell + dw_pWeaponMgr);
if (isReady == false)
{
backup(CShell,WeaponMgr);
if (*(BYTE*)(CShell+0x323270))
{
MakeCall((BYTE*)(CShell+0x323270), (DWORD)bypass, 5);
isReady = true;
{
if(WeaponMgr!=0)
{
for(int i=0 ; i<2000 ; i++)
{
DWORD Weapon = *(DWORD*)(WeaponMgr +(4*i));
if (Weapon)
{
*(float*)(Weapon + 0x1058) = 15;
*(float*)(Weapon + 0x105C) = 15;
}
}
}
}
}
}
}
Please, someone see if it's correct!