#pragma once #pragma pack(push, 4) #include "common.hpp" #include "fwddec.hpp" namespace rage { class fwEntity { public: char pad_0000[32]; //0x0000 class CBaseModelInfo* m_model_info; //0x0020 int8_t m_invisible; //0x0028 char pad_0029[7]; //0x0029 class CNavigation* m_navigation; //0x0030 char pad_0038[1]; //0x0038 int8_t m_entity_type; //0x0039 char pad_003A[150]; //0x003A class netObject* m_net_object; //0x00D0 char pad_00D8[176]; //0x00D8 uint32_t m_damage_bits; //0x0188 bool is_invincible() { return(m_damage_bits & (1 << 8)); } void enable_invincible() { m_damage_bits |= (1 << 8); } void disable_invincible() { m_damage_bits &= ~(1 << 8); } }; //Size: 0x018C static_assert(sizeof(fwEntity) == 0x18C, "fwEntity is not properly sized"); class CVehicle : public fwEntity { public: char pad_018C[2716]; //0x018C //class CPed* m_driver; //0x0C28 //class CPed* m_occupants[8]; //0x0C30 }; //Size: 0x018C class CNavigation { public: char pad_0000[32]; //0x0000 float m_heading; //0x0020 float m_heading2; //0x0024 char pad_0028[8]; //0x0028 vector3 m_rotation; //0x0030 char pad_003C[20]; //0x003C vector3 m_position; //0x0050 }; //Size: 0x005C class CPed : public fwEntity { public: char pad_018C[2972]; //0x018C class CVehicle* m_last_vehicle; //0x0D28 char pad_0D30[892]; //0x0D30 int8_t m_decal_index; //0x10AC int8_t m_decal_info; //0x10AD char pad_10AE[10]; //0x10AE class CPlayerInfo* m_player_info; //0x10B8 char pad_10C0[1072]; //0x10C0 class CVehicle* m_last_vehicle2; //0x14F0 }; //Size: 0x14F8 class CPlayerInfo { public: char pad_0000[52]; //0x0000 uint32_t m_internal_ip; //0x0034 uint16_t m_internal_port; //0x0038 char pad_003A[2]; //0x003A uint32_t m_relay_ip; //0x003C uint16_t m_relay_port; //0x0040 char pad_0042[2]; //0x0042 uint32_t m_external_ip; //0x0044 uint16_t m_external_port; //0x0048 char pad_004A[30]; //0x004A uint64_t m_rockstar_id; //0x0068 char pad_0070[12]; //0x0070 char m_name[20]; //0x007C char pad_0090[184]; //0x0090 float m_swim_speed; //0x0148 float m_run_speed; //0x014C char pad_0150[81]; //0x0150 bool m_is_rockstar_dev; //0x01A1 char pad_01A2[1]; //0x01A2 bool m_is_cheater; //0x01A3 char pad_01A4[11]; //0x01A4 bool m_is_online; //0x01AF char pad_01B0[24]; //0x01B0 class CPed* m_ped; //0x01C8 char pad_01D0[40]; //0x01D0 uint32_t m_frame_flags; //0x01F8 char pad_01FC[28]; //0x01FC uint32_t m_player_controls; //0x0218 char pad_021C[1524]; //0x021C bool m_is_wanted; //0x0810 char pad_0811[3]; //0x0811 int32_t m_wanted_level_display; //0x0814 int32_t m_wanted_level; //0x0818 }; //Size: 0x081C class CObject : public fwEntity { public: }; //Size: 0x018C class CBaseModelInfo { public: char pad_0000[24]; //0x0000 uint32_t m_model; //0x0018 }; //Size: 0x001C class CPedFactory { public: virtual ~CPedFactory() = default; class CPed* m_local_ped; //0x0008 }; //Size: 0x0010 class CObjectHandle { public: class CObject* m_object; //0x0000 int32_t m_handle; //0x0008 char pad_000C[4]; //0x000C }; //Size: 0x0010 static_assert(sizeof(CObjectHandle) == 0x10, "CObjectHandle is not properly sized"); class CObjectList { public: class CObjectHandle m_objects[2300]; //0x0000 }; //Size: 0x8FC0 class CObjectInterface { public: char pad_0000[344]; //0x0000 class CObjectList* m_object_list; //0x0158 int32_t m_max_objects; //0x0160 char pad_0164[4]; //0x0164 int32_t m_cur_objects; //0x0168 rage::CObject* get_object(const int& index) { if (index < m_max_objects) return m_object_list->m_objects[index].m_object; return nullptr; } }; //Size: 0x016C class CPedHandle { public: class CPed* m_ped; //0x0000 int32_t m_handle; //0x0008 char pad_000C[4]; //0x000C }; //Size: 0x0010 static_assert(sizeof(CPedHandle) == 0x10, "CPedHandle is not properly sized"); class CPedList { public: class CPedHandle m_peds[256]; //0x0000 }; //Size: 0x1000 class CPedInterface { public: char pad_0000[256]; //0x0000 class CPedList* m_ped_list; //0x0100 int32_t m_max_peds; //0x0108 char pad_010C[4]; //0x010C int32_t m_cur_peds; //0x0110 CPed* get_ped(const int& index) { if (index < m_max_peds) return m_ped_list->m_peds[index].m_ped; return nullptr; } }; //Size: 0x0114 class CVehicleHandle { public: class CVehicle* m_vehicle; //0x0000 int32_t m_handle; //0x0008 char pad_000C[4]; //0x000C }; //Size: 0x0010 static_assert(sizeof(CVehicleHandle) == 0x10, "CVehicleHandle is not properly sized"); class CVehicleList { public: class CVehicleHandle m_vehicles[300]; //0x0000 }; //Size: 0x12C0 class CVehicleInterface { public: char pad_0000[384]; //0x0000 class CVehicleList* m_vehicle_list; //0x0180 int32_t m_max_vehicles; //0x0188 char pad_018C[4]; //0x018C int32_t m_cur_vehicles; //0x0190 CVehicle* get_vehicle(const int& index) { if (index < m_max_vehicles) return m_vehicle_list->m_vehicles[index].m_vehicle; return nullptr; } }; //Size: 0x0194 class CReplayInterface { public: char pad_0000[16]; //0x0000 class CVehicleInterface* m_vehicle_interface; //0x0010 class CPedInterface* m_ped_interface; //0x0018 char pad_0020[8]; //0x0020 class CObjectInterface* m_object_interface; //0x0028 }; //Size: 0x0030 } #pragma pack(pop)