hello.
since 2012 i see alot of people using the 28_3 bypass, and i think most people dont even know how it works.
well i gonna explain you guys why it works and how it works!
tl;dr: most game weapon/character values are static in the game, they can read from a file in the disk and parse these values, then check for modifications and kick you from the game, that is the "client error".
Code:
/* the function that check for weapons have 2 params, the first one is the local player current weapon id, and the second one seems to be an struct that store some information about the check itself. */
result = a1; //a1 = cur weapon id
if ( a1 != -1 )
{
result = GetWeaponByID(a1);
v3 = (float *)result;
if ( result )
{
v4 = *(unsigned __int8 *)(result + 3848);
/* bunch of offsets which seems to be junk anyway */
*(_WORD *)(*(_DWORD *)a2 + 36) = CRC16(0, &v5, 0x27);
result = (unsigned __int16)CRC16(0, v3, 0x5124); //here the game does an crc16 from the current weapon structure.
*(_DWORD *)(*(_DWORD *)a2 + 40) = (unsigned __int16)result; //and pass the result to a2 which is the struct that hold some shit about the check like i said earlier.
}
}
return result;
}
why some people bypass 28_3 and recieve 28_4 right after?
well, that happens because, maybe you just jumped the whole check itself, the server request the info about the weapon struct and mismatch from the server, you get kicked with 28_4. The same happens if you dont copy the whole weapon struct correctly too.
for current CrossFire NA version the bypass should be:
Code:
typedef struct
{
BYTE Data[0x5124];
} WEAPON;
make sure to loop thought all weapon, the highest weapon index should be: 3071
it's easy to bypass all client errors, you just need to do what the game is doing!