Code:
#include <Windows.h>
void message(char*string) //our function to make an ingame messagebox
{
DWORD myCSHELL = (DWORD)GetModuleHandleA("CShell.dll");//Get Handle of CrossFire!
if(myCSHELL!=NULL)//Check if handle is not NULL (0)!
{
_asm //101195E7 68 EC1B2F10 PUSH CShell.102F1BEC ; ASCII "vertex lock failed"
{
PUSH string;
PUSH 0;
PUSH 0x70;
PUSH 0x1C;
MOV ESI,myCSHELL;
ADD ESI,0x07D5A0;
CALL ESI;
ADD ESP,0x10;
POP string;
}
}
}
void main() //hack thread to be created!
{
DWORD myCSHELL = (DWORD)GetModuleHandle("CShell.dll");//Get Handle of CrossFire!
DWORD myWCLASS = *(DWORD*)(myCSHELL+0xA68F90);//10136889 68 34562F10 PUSH CShell.102F5634 ; ASCII "WeaponClass"
DWORD myWALLC = *(DWORD*)(myCSHELL+0xA68F7C);//1013114E 68 B8472F10 PUSH CShell.102F47B8 ; ASCII "EdgeShotEnabled"
if(!myCSHELL|| !myWCLASS)//check if myCSHELL or myWCLASS is not true!
{
MessageBox(NULL,"Something is wrong!","ERROR!",NULL);//myCSHELL or myWCLASS was not true!
}
if(myCSHELL && myWCLASS)//if myCSHELL and myWCLASS (conditional!)
{
message("");//call ingame message box (success!)
//system("start http://www.youtube.com/");
}
if(myWCLASS)//if myWCLASS (conditional!)
{
for(int i=0 ; i<560 ; i++)//559 weapons???
{
DWORD myWEAPON=*(DWORD*)(myWCLASS+(4*i));//index x four bytes
if(myWEAPON!=NULL)//if myWEAPON is not NULL (0)!
{
if(myWEAPON && (i==5))
{
*(float*)(myWEAPON+0xA28)=3.0f;//10134F5C 68 984B2F10 PUSH CShell.102F4B98 ; ASCII "KnifeNormalAniRate"
*(float*)(myWEAPON+(0xA28+0x4))=3.0f;//array..+4 Bytes!
*(float*)(myWEAPON+(0xA28+0x8))=3.0f;//array..+8 Bytes!
*(float*)(myWEAPON+(0xA28+0xC))=3.0f;//array..+C Bytes!
*(float*)(myWEAPON+(0xA28+0x10))=3.0f;//array..+10 Bytes!
*(float*)(myWEAPON+(0xA28+0x14))=3.0f;//array..+14 Bytes!
*(float*)(myWEAPON+(0xA28+0x18))=3.0f;//array..+18 Bytes!
*(float*)(myWEAPON+(0xA28+0x1C))=3.0f;//array..+1C Bytes!
*(float*)(myWEAPON+(0xA28+0x20))=3.0f;//array..+20 Bytes!
*(float*)(myWEAPON+(0xA28+0x24))=3.0f;//array..+24 Bytes!
*(float*)(myWEAPON+(0xA28+0x28))=3.0f;//array..+28 Bytes!
*(float*)(myWEAPON+(0xA28+0x2C))=3.0f;//array..+2C Bytes!
*(float*)(myWEAPON+(0xA28+0x30))=3.0f;//array..+30 Bytes!
*(float*)(myWEAPON+(0xA28+0x34))=3.0f;//array..+34 Bytes!
*(float*)(myWEAPON+(0xA28+0x38))=3.0f;//array..+38 Bytes!
*(float*)(myWEAPON+(0xA28+0x3C))=3.0f;//array..+3C Bytes!
*(float*)(myWEAPON+(0xA28+0x40))=3.0f;//array..+40 Bytes!
*(float*)(myWEAPON+(0xA28+0x44))=3.0f;//array..+44 Bytes!
*(float*)(myWEAPON+(0xA28+0x48))=3.0f;//array..+48 Bytes!
*(float*)(myWEAPON+(0xA28+0x4C))=3.0f;//array..+4C Bytes!
*(float*)(myWEAPON+(0xA28+0x50))=3.0f;//array..+50 Bytes!
}
if(myWEAPON && (i==25))
{
*(float*)(myWEAPON+0x7F8)=120.0f;
*(float*)(myWEAPON+0x269C)=100.0f; //10134B98 68 4C4C2F10 PUSH CShell.102F4C4C ; ASCII "ReloadAnimRatio"
*(float*)(myWEAPON+0x26A0)=100.0f; //10134B0F 68 5C4C2F10 PUSH CShell.102F4C5C ; ASCII "ChangeWeaponAnimRatio"
*(float*)(myWEAPON+0x2668)=100.0f; //10134A5B 68 744C2F10 PUSH CShell.102F4C74 ; ASCII "WallShotDamageRatio"
*(BYTE*)(myWEAPON+0x828)=5;
for(int x=0; x<9; x++)
{
*(float*)(myWEAPON + (0x1928 + (4*x) ) ) = 0;
*(float*)(myWEAPON + ((0x1928+0x4) + (4*x) ) ) = 0;
*(float*)(myWEAPON + ((0x1928+0x8) + (4*x) ) ) = 0;
*(float*)(myWEAPON + ((0x1928+0xC68) + (4*x) ) ) = 0;
*(float*)(myWEAPON + ((0x1928+0xBF8) + (4*x) ) ) = 0;
*(float*)(myWEAPON + ((0x1928+0xC68) + (4*x) ) ) = 0;
*(float*)(myWEAPON + ((0x1928+0xC6C) + (4*x) ) ) = 0;
*(float*)(myWEAPON + ((0x1928+0xC64) + (4*x) ) ) = 0;
*(float*)(myWEAPON + ((0x1928+0xD7C) + (4*x) ) ) = 0;
}
//memcpy((DWORD*)(myWCLASS+25*4),(DWORD*)(myWCLASS+559*4),1.5);//copying ACR -> M16, 4 Bytes
}
}
}
}/*
if(myWALLC)
{
for(int i=0 ; i<63 ; i++)
{
DWORD myWALL=*(DWORD*)(myWALLC+(i*0x4F4));
if(myWALL!=NULL)
{
*(bool*)(myWALL+0x000)=true;
*(bool*)(myWALL+0x000)=true;
*(bool*)(myWALL+0x000)=true;
}
}
}*/
}
BOOL WINAPI DllMain(HINSTANCE myINSTANCE, DWORD myREASON, LPVOID Reserved)//our entry point!
{
if(myREASON == DLL_PROCESS_ATTACH)//if the dll attaches to the process (conditional)!
{
DisableThreadLibraryCalls(myINSTANCE);//Disable Thread Library Calls!
CreateThread(NULL,NULL, (LPTHREAD_START_ROUTINE)main,NULL,NULL,NULL);//Create our thread!
}
return true;//return to calling function!
}