Just started working on ArmA 3, this is what I have so far.. Still lacking object types and player id's.
CLIENTPTR is 0x1652C10
C++:
class CLIENTPTR;
class World;
class EntityPool;
class Entity;
struct WorldSpace;
struct EntityClass;
class ArmaString;
class CLIENTPTR
{
public:
World* worldPtr; //0x0000
};//Size=0x0004
class World
{
public:
char unk[2416]; // 0x000
float fMyHeading1; // 0x970
char unk0[12]; // 0x974
float fMyHeading1Neg; // 0x980
char unk1[4]; // 0x984
float fMyHeading2; // 0x988
float fLocalX; // 0x98C
float fLocalZ; // 0x990
float fLocalY; // 0x994
char unk2[460]; // 0x998
EntityPool* firstEntities; // 0xB64 very close to you
int nFirstPoolSize; // 0xB68
int nFirstPoolMaxSize; // 0xB6C
char unk3[156]; // 0xB70
EntityPool* secondEntities; // 0xC0C close to you
int nSecondPoolSize; // 0xC10
int nSecondPoolMaxSize; // 0xC14
char unk4[156]; // 0xC18
EntityPool* thirdEntities; // 0xCB4 average distance
int nThirdPoolSize; // 0xCB8
int nThirdPoolMaxSize; // 0xCBC
char unk5[156]; // 0xCC0
EntityPool* forthEntities; // 0xD5C further away from you
int nForthPoolSize; // 0xD60
int nForthPoolMaxSize; // 0xD64
char padding[3016]; // 0xC18 padding is off, useless anyhow
BYTE bScopedIn; // 0x17E0
};//Size=0x17E1
class EntityPool
{
public:
Entity* entities[256]; // 256 is just a wild random, iterate according to pool size, and prolly better of to increase the size
};
class Entity
{
public:
char unk0[0x130]; // 0x000
EntityClass entityClass; // 0x130
char unk1[44]; // 0x134
WorldSpace* worldSpace; // 0x160
};
struct WorldSpace
{
char unk0[4];
float fHeading1
char unk1[4];
float fHeading2;
char unk2[4];
float fHeading21;
char unk3[4];
float fHeading22;
char unk4[8];
float fXcoord;
float fZcoord;
float fYcoord;
};
struct EntityClass {
char unk0[0x2C];
ArmaString* className; // 0x2C
char unk1[4]; // 0x30
ArmaString* classSkinPath; // 0x34;
};
class ArmaString
{
public:
char unk0[4];
int len;
char string[128];
};
Last edited: