#include "Engine/Fivehax.h"
#include "windows.h"
#include <math.h>
#define PI 3.1415926535897932
#define CLIENT_PTR 0xDFCDD8
Fivehax memory;
void vFlyhack();
void vOffsets();
void vFly();
bool bFlyhack = false;
bool bGodmode = false;
bool bHover = false;
DWORD dArmaBase = 0;
struct playerData {
float headingOne;
float headingTwo;
float heading;
float heading2;
float xcoord;
float ycoord;
float zcoord;
float zhover;
DWORD dwHeadingOne;
DWORD dwHeadingTwo;
DWORD dwxcoord;
DWORD dwycoord;
DWORD dwzcoord;
DWORD dAllowDamage;
} player;
bool restore = false;
void vFlyhack()
{
static bool init = false;
if (!init)
{
dArmaBase = memory.GetDLLBase("arma2oa.exe");
init = true;
}
if (memory.Read<char>(dArmaBase+0x9F9FA4) == 0) // 9F9FA5 // 9F9FAD // we dont wanna crash while not in game
return;
if (!bFlyhack)
{
if (GetAsyncKeyState(VK_INSERT))
{
bFlyhack = true;
}
else if (restore)
{
memory.Write<char>(player.dAllowDamage, 1);
restore = false;
}
}
else if(bFlyhack)
{
if (GetAsyncKeyState(VK_INSERT))
{
vOffsets();
memory.Write<float>(player.dwzcoord, 0);
restore = true;
bFlyhack = false;
}
else
{
vOffsets();
memory.Write<char>(player.dAllowDamage, 0);
vFly();
}
}
}
DWORD dPlayerOffsets[] = {0x13A8, 0x4, 0x18};
void vOffsets()// and obtaining data
{
DWORD temp = memory.EvaluatePointer(CLIENT_PTR);
temp += dPlayerOffsets[0];
temp = memory.EvaluatePointer(temp);
temp += dPlayerOffsets[1];
temp = memory.EvaluatePointer(temp);
temp += dPlayerOffsets[2];
temp = memory.EvaluatePointer(temp);
player.dwHeadingOne = temp + 0x1C;
player.dwHeadingTwo = temp + 0x24;
player.dwxcoord = temp + 0x28;
player.dwzcoord = temp + 0x2C;
player.dwycoord = temp + 0x30;
player.headingOne = memory.Read<float>(player.dwHeadingOne);
player.headingTwo = memory.Read<float>(player.dwHeadingTwo);
player.heading = atan2((double)player.headingOne,(double)player.headingTwo);
player.heading2 = player.heading * (float)-1.0;
player.heading = player.heading * (float)-1.0 + (float)1.582;
player.xcoord = memory.Read<float>(player.dwxcoord);
player.ycoord = memory.Read<float>(player.dwycoord);
player.zcoord = memory.Read<float>(player.dwzcoord);
player.dAllowDamage = memory.EvaluatePointer(dArmaBase+0x9F43E4) + 0x213;
}
#define moveDistance 0.1
#define rotationconst 0.018//0.0001
float movx = 0;
float movy = 0;
void vFly()
{
if( GetAsyncKeyState(VK_UP) )
{
memory.Write<float>(player.dwzcoord, player.zcoord + 0.9);
bHover = false;
}
else if( GetAsyncKeyState(VK_DOWN) )
{
memory.Write<float>(player.dwzcoord, player.zcoord - 0.5);
bHover = false;
}
else
{
if (!bHover)
{
player.zhover = player.zcoord;
bHover = true;
}
else if (bHover)
memory.Write<float>(player.dwzcoord, player.zhover);
}
if( GetAsyncKeyState(VK_NUMPAD4) )
{
movx = moveDistance * (float)cos(player.heading2);
movy = moveDistance * (float)sin(player.heading2);
memory.Write<float>(player.dwxcoord, player.xcoord - movx);
memory.Write<float>(player.dwycoord, player.ycoord - movy);
}
if( GetAsyncKeyState(VK_NUMPAD6) )
{
movx = moveDistance * (float)cos(player.heading2);
movy = moveDistance * (float)sin(player.heading2);
memory.Write<float>(player.dwxcoord, player.xcoord + movx);
memory.Write<float>(player.dwycoord, player.ycoord + movy);
}
if( GetAsyncKeyState(VK_NUMPAD8) )
{
movx = moveDistance * (float)cos(player.heading);
movy = moveDistance * (float)sin(player.heading);
memory.Write<float>(player.dwxcoord, player.xcoord + movx);
memory.Write<float>(player.dwycoord, player.ycoord + movy);
}
if( GetAsyncKeyState(VK_NUMPAD2) )
{
movx = moveDistance * (float)cos(player.heading);
movy = moveDistance * (float)sin(player.heading);
memory.Write<float>(player.dwxcoord, player.xcoord - movx);
memory.Write<float>(player.dwycoord, player.ycoord - movy);
}
if(GetAsyncKeyState(VK_LEFT) )
{
if (player.headingOne >= 0 && player.headingTwo >= 0)
{
memory.Write<float>(player.dwHeadingOne, player.headingOne - rotationconst);
memory.Write<float>(player.dwHeadingTwo, player.headingTwo + rotationconst);
}
else if (player.headingOne > 0 && player.headingTwo < 0)
{
memory.Write<float>(player.dwHeadingOne, player.headingOne + rotationconst);
memory.Write<float>(player.dwHeadingTwo, player.headingTwo + rotationconst);
}
else if (player.headingOne < 0 && player.headingTwo < 0)
{
memory.Write<float>(player.dwHeadingOne, player.headingOne + rotationconst);
memory.Write<float>(player.dwHeadingTwo, player.headingTwo - rotationconst);
}
else if (player.headingOne <= 0 && player.headingTwo >= 0)
{
memory.Write<float>(player.dwHeadingOne, player.headingOne - rotationconst);
memory.Write<float>(player.dwHeadingTwo, player.headingTwo - rotationconst);
}
}
if(GetAsyncKeyState(VK_RIGHT) )
{
if (player.headingOne > 0 && player.headingTwo > 0)
{
memory.Write<float>(player.dwHeadingOne, player.headingOne + rotationconst);
memory.Write<float>(player.dwHeadingTwo, player.headingTwo - rotationconst);
}
else if (player.headingOne >= 0 && player.headingTwo <= 0)
{
memory.Write<float>(player.dwHeadingOne, player.headingOne - rotationconst);
memory.Write<float>(player.dwHeadingTwo, player.headingTwo - rotationconst);
}
else if (player.headingOne <= 0 && player.headingTwo <= 0)
{
memory.Write<float>(player.dwHeadingOne, player.headingOne - rotationconst);
memory.Write<float>(player.dwHeadingTwo, player.headingTwo + rotationconst);
}
else if (player.headingOne < 0 && player.headingTwo > 0)
{
memory.Write<float>(player.dwHeadingOne, player.headingOne + rotationconst);
memory.Write<float>(player.dwHeadingTwo, player.headingTwo + rotationconst);
}
}
}