From 89d2428864b51cc2d1c34aa2cb3e5ad0429f6274 Mon Sep 17 00:00:00 2001 From: Yimura <24669514+Yimura@users.noreply.github.com> Date: Tue, 8 Nov 2022 22:11:50 +0100 Subject: [PATCH] Script VM classes (#60) * feat(Script): Ported BBv2 script classes * fix: Change hard tab indents to 4 width space indents --- .devcontainer/devcontainer.json | 32 +- CMakeLists.txt | 20 +- base/CNavigation.hpp | 16 +- base/HashTable.hpp | 22 +- base/datBase.hpp | 8 +- base/fwExtensibleBase.hpp | 28 +- base/fwExtensionContainer.hpp | 10 +- base/fwRefAwareBase.hpp | 4 +- base/fwRefAwareBaseImpl.hpp | 10 +- base/pgBase.hpp | 14 +- base/phArchetype.hpp | 42 ++- base/phBoundCapsule.hpp | 16 +- base/phBoundComposite.hpp | 30 +- camera/CCameraAngles.hpp | 6 +- camera/CCameraManagerAngles.hpp | 2 +- camera/CGameCameraAngles.hpp | 4 +- datanodes/object/CObjectCreationDataNode.hpp | 58 ++-- .../player/CPlayerAppearanceDataNode.hpp | 166 ++++----- datanodes/player/CPlayerGameStateDataNode.hpp | 268 +++++++-------- .../proximity_migrateable/CSectorDataNode.hpp | 8 +- entities/CAttackers.hpp | 10 +- enums/eExplosionTag.hpp | 170 +++++----- misc/CTunables.hpp | 16 +- network/CNetComplaintMgr.hpp | 94 +++--- network/Network.hpp | 266 +++++++-------- network/netObject.hpp | 210 ++++++------ network/snSession.hpp | 316 +++++++++--------- ped/CPed.hpp | 58 ++-- ped/CPedBoneInfo.hpp | 36 +- ped/CPedFactory.hpp | 4 +- ped/CPedModelInfo.hpp | 70 ++-- ped/CPedOxygenInfo.hpp | 4 +- ped/CPedWeaponManager.hpp | 14 +- player/CNonPhysicalPlayerData.hpp | 6 +- player/CPlayerAngles.hpp | 22 +- player/CPlayerInfo.hpp | 96 +++--- rage/atSingleton.hpp | 28 +- rage/joaat.hpp | 28 +- rage/rlMetric.hpp | 22 +- rage/rlSessionByGamerTaskResult.hpp | 12 +- rage/sysMemAllocator.hpp | 25 ++ script/GtaThread.hpp | 0 script/dataList.hpp | 22 ++ script/scrNativeHandler.hpp | 60 ++++ script/scrNativeRegistration.hpp | 43 +++ script/scrNativeRegistrationTable.hpp | 16 + script/scrProgram.hpp | 100 ++++++ script/scrProgramTable.hpp | 41 +++ script/scrProgramTableEntry.hpp | 17 + script/scrThread.hpp | 31 ++ script/scrThreadContext.hpp | 34 ++ script/scriptHandler.hpp | 81 +++++ script/scriptHandlerMgr.hpp | 61 ++++ script/scriptHandlerNetComponent.hpp | 16 + script/scriptId.hpp | 14 + script/scriptIdBase.hpp | 57 ++++ script/scriptResource.hpp | 10 + script/tlsContext.hpp | 17 + security/Obf32.hpp | 26 +- socialclub/FriendInfo.hpp | 18 +- socialclub/FriendRegistry.hpp | 14 +- vehicle/CHandlingData.hpp | 142 ++++---- vehicle/CVehicleModelInfo.hpp | 182 +++++----- weapon/CItemInfo.hpp | 10 +- 64 files changed, 1963 insertions(+), 1320 deletions(-) create mode 100644 rage/sysMemAllocator.hpp create mode 100644 script/GtaThread.hpp create mode 100644 script/dataList.hpp create mode 100644 script/scrNativeHandler.hpp create mode 100644 script/scrNativeRegistration.hpp create mode 100644 script/scrNativeRegistrationTable.hpp create mode 100644 script/scrProgram.hpp create mode 100644 script/scrProgramTable.hpp create mode 100644 script/scrProgramTableEntry.hpp create mode 100644 script/scrThread.hpp create mode 100644 script/scrThreadContext.hpp create mode 100644 script/scriptHandler.hpp create mode 100644 script/scriptHandlerMgr.hpp create mode 100644 script/scriptHandlerNetComponent.hpp create mode 100644 script/scriptId.hpp create mode 100644 script/scriptIdBase.hpp create mode 100644 script/scriptResource.hpp create mode 100644 script/tlsContext.hpp diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index dd5a09e..eca9b92 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,20 +1,20 @@ { - "name": "C++", - "build": { - "dockerfile": "Dockerfile", - "args": { } - }, + "name": "C++", + "build": { + "dockerfile": "Dockerfile", + "args": { } + }, - "workspaceMount": "source=${localWorkspaceFolder},target=/app,type=bind,consistency=delegated", - "workspaceFolder": "/app", + "workspaceMount": "source=${localWorkspaceFolder},target=/app,type=bind,consistency=delegated", + "workspaceFolder": "/app", - "runArgs": ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined", "--network=host"], - "settings": {}, - "extensions": [ - "ms-vscode.cpptools", - "ms-vscode.cmake-tools", - "ms-vscode.cpptools-extension-pack", - "WakaTime.vscode-wakatime" - ], - //"remoteUser": "vscode", + "runArgs": ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined", "--network=host"], + "settings": {}, + "extensions": [ + "ms-vscode.cpptools", + "ms-vscode.cmake-tools", + "ms-vscode.cpptools-extension-pack", + "WakaTime.vscode-wakatime" + ], + //"remoteUser": "vscode", } diff --git a/CMakeLists.txt b/CMakeLists.txt index d0f94e3..a9ebbae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,21 +17,21 @@ file(GLOB_RECURSE HEADERS "*.hpp") message(STATUS "") foreach(HEADER ${HEADERS}) - get_filename_component(FILENAME ${HEADER} NAME) - check_include_file_cxx("${HEADER}" ${FILENAME}_OK) + get_filename_component(FILENAME ${HEADER} NAME) + check_include_file_cxx("${HEADER}" ${FILENAME}_OK) - if(${FILENAME}_OK) - message(STATUS "${FILENAME} OK!") - else() - set(OK FALSE) - message(SEND_ERROR "${FILENAME} failed to compile!") - endif() + if(${FILENAME}_OK) + message(STATUS "${FILENAME} OK!") + else() + set(OK FALSE) + message(SEND_ERROR "${FILENAME} failed to compile!") + endif() endforeach() message(STATUS "") if(NOT OK) - file(READ "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeError.log" LOG) - message(STATUS ${LOG}) + file(READ "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeError.log" LOG) + message(STATUS ${LOG}) endif() diff --git a/base/CNavigation.hpp b/base/CNavigation.hpp index 5df9b61..62b3abf 100644 --- a/base/CNavigation.hpp +++ b/base/CNavigation.hpp @@ -7,15 +7,15 @@ class CNavigation { public: - char pad_0000[16]; //0x0000 - class rage::phArchetypeDamp* m_damp; //0x0010 - char pad_0018[8]; //0x0018 - rage::fmatrix44 m_transformation_matrix; + char pad_0000[16]; //0x0000 + class rage::phArchetypeDamp* m_damp; //0x0010 + char pad_0018[8]; //0x0018 + rage::fmatrix44 m_transformation_matrix; - rage::fvector3* get_position() - { - return reinterpret_cast(&m_transformation_matrix.rows[3]); - } + rage::fvector3* get_position() + { + return reinterpret_cast(&m_transformation_matrix.rows[3]); + } }; //Size: 0x0060 static_assert(sizeof(CNavigation) == 0x60); #pragma pack(pop) diff --git a/base/HashTable.hpp b/base/HashTable.hpp index 9bcd00d..93d9016 100644 --- a/base/HashTable.hpp +++ b/base/HashTable.hpp @@ -5,10 +5,10 @@ class HashNode { public: - int32_t m_hash; //0x0000 - uint16_t m_idx; //0x0004 - char pad_0006[2]; //0x0006 - HashNode* m_next; //0x0008 + int32_t m_hash; //0x0000 + uint16_t m_idx; //0x0004 + char pad_0006[2]; //0x0006 + HashNode* m_next; //0x0008 }; //Size: 0x0010 static_assert(sizeof(HashNode) == 0x10); @@ -16,13 +16,13 @@ template class HashTable { public: - T* m_data; //0x0000 - uint16_t m_size; //0x0008 - char pad_000A[14]; //0x000A - uint64_t m_item_size; //0x0018 - char pad_0020[64]; //0x0020 - HashNode** m_lookup_table; //0x0060 - uint16_t m_lookup_key; //0x0068 + T* m_data; //0x0000 + uint16_t m_size; //0x0008 + char pad_000A[14]; //0x000A + uint64_t m_item_size; //0x0018 + char pad_0020[64]; //0x0020 + HashNode** m_lookup_table; //0x0060 + uint16_t m_lookup_key; //0x0068 }; //Size: 0x006A // static_assert(sizeof(HashTable) == 0x6A); // compiler gives assert error without telling me what the problem is, the class is correct though. #pragma pack(pop) diff --git a/base/datBase.hpp b/base/datBase.hpp index d79d690..ebbe82e 100644 --- a/base/datBase.hpp +++ b/base/datBase.hpp @@ -4,10 +4,10 @@ namespace rage { class datBase - { - public: - virtual ~datBase() = default; - }; //Size: 0x0008 + { + public: + virtual ~datBase() = default; + }; //Size: 0x0008 static_assert(sizeof(datBase) == 0x8); } \ No newline at end of file diff --git a/base/fwExtensibleBase.hpp b/base/fwExtensibleBase.hpp index 41024d4..2c212a5 100644 --- a/base/fwExtensibleBase.hpp +++ b/base/fwExtensibleBase.hpp @@ -9,23 +9,23 @@ namespace rage { class fwExtensibleBase : public fwRefAwareBase - { - public: - virtual bool is_of_type(std::uint32_t hash) = 0; - virtual uint32_t const &get_type() = 0; + { + public: + virtual bool is_of_type(std::uint32_t hash) = 0; + virtual uint32_t const &get_type() = 0; - fwExtensionContainer* m_extension_container; // 0x0010 - void *m_extensible_unk; // 0x0018 + fwExtensionContainer* m_extension_container; // 0x0010 + void *m_extensible_unk; // 0x0018 - template - bool is_of_type() - { - static auto name = (typeid(T).name()) + 6; // Skip "class " - static auto name_hash = joaat(name); + template + bool is_of_type() + { + static auto name = (typeid(T).name()) + 6; // Skip "class " + static auto name_hash = joaat(name); - return is_of_type(name_hash); - } - }; //Size: 0x0020 + return is_of_type(name_hash); + } + }; //Size: 0x0020 static_assert(sizeof(fwExtensibleBase) == 0x20); } diff --git a/base/fwExtensionContainer.hpp b/base/fwExtensionContainer.hpp index e65b30b..7d31bfe 100644 --- a/base/fwExtensionContainer.hpp +++ b/base/fwExtensionContainer.hpp @@ -6,11 +6,11 @@ namespace rage { class fwExtensionContainer - { - public: - fwExtension *m_entry; //0x0000 - fwExtensionContainer* m_next; //0x0008 - }; //Size: 0x0010 + { + public: + fwExtension *m_entry; //0x0000 + fwExtensionContainer* m_next; //0x0008 + }; //Size: 0x0010 static_assert(sizeof(fwExtensionContainer) == 0x10); } \ No newline at end of file diff --git a/base/fwRefAwareBase.hpp b/base/fwRefAwareBase.hpp index c4cf797..662646e 100644 --- a/base/fwRefAwareBase.hpp +++ b/base/fwRefAwareBase.hpp @@ -7,8 +7,8 @@ namespace rage { class fwRefAwareBase : public fwRefAwareBaseImpl - { - }; + { + }; static_assert(sizeof(fwRefAwareBase) == 0x10); } \ No newline at end of file diff --git a/base/fwRefAwareBaseImpl.hpp b/base/fwRefAwareBaseImpl.hpp index 22dee21..89987eb 100644 --- a/base/fwRefAwareBaseImpl.hpp +++ b/base/fwRefAwareBaseImpl.hpp @@ -4,10 +4,10 @@ namespace rage { template - class fwRefAwareBaseImpl : public T - { - private: - void *m_ref; // 0x08 - }; + class fwRefAwareBaseImpl : public T + { + private: + void *m_ref; // 0x08 + }; } \ No newline at end of file diff --git a/base/pgBase.hpp b/base/pgBase.hpp index d3483f1..7f4593c 100644 --- a/base/pgBase.hpp +++ b/base/pgBase.hpp @@ -4,14 +4,14 @@ namespace rage { class pgBase - { - public: - virtual ~pgBase() = default; - virtual int return_zero() = 0; - virtual void error() = 0; + { + public: + virtual ~pgBase() = default; + virtual int return_zero() = 0; + virtual void error() = 0; - void *unk_0000; // 0x0000 - }; //Size: 0x0008 + void *unk_0000; // 0x0000 + }; //Size: 0x0008 static_assert(sizeof(pgBase) == 0x10); } \ No newline at end of file diff --git a/base/phArchetype.hpp b/base/phArchetype.hpp index 7360827..4308609 100644 --- a/base/phArchetype.hpp +++ b/base/phArchetype.hpp @@ -4,28 +4,26 @@ namespace rage { - class phArchetype - { - public: - char pad_0000[32]; //0x0000 - class phBound* m_bound; //0x0020 - char pad_0028[16]; //0x0028 - }; //Size: 0x0038 - static_assert(sizeof(phArchetype) == 0x38); + class phArchetype + { + char pad_0000[32]; //0x0000 + class phBound* m_bound; //0x0020 + char pad_0028[16]; //0x0028 + }; //Size: 0x0038 + static_assert(sizeof(phArchetype) == 0x38); - class phArchetypePhys : public phArchetype - { - public: - char pad_0038[28]; //0x0028 - float m_water_collision; //0x0054 - char pad_0058[40]; //0x0058 - }; //Size: 0x0080 - static_assert(sizeof(phArchetypePhys) == 0x80); + class phArchetypePhys : public phArchetype + { + char pad_0038[28]; //0x0028 + float m_water_collision; //0x0054 + char pad_0058[40]; //0x0058 + }; //Size: 0x0080 + static_assert(sizeof(phArchetypePhys) == 0x80); - class phArchetypeDamp : public phArchetypePhys - { - public: - char pad_0080[96]; //0x0080 - }; //Size: 0x00E0 - static_assert(sizeof(phArchetypeDamp) == 0xE0); + class phArchetypeDamp : public phArchetypePhys + { + public: + char pad_0080[96]; //0x0080 + }; //Size: 0x00E0 + static_assert(sizeof(phArchetypeDamp) == 0xE0); } \ No newline at end of file diff --git a/base/phBoundCapsule.hpp b/base/phBoundCapsule.hpp index 8226d36..3346637 100644 --- a/base/phBoundCapsule.hpp +++ b/base/phBoundCapsule.hpp @@ -5,13 +5,13 @@ namespace rage { #pragma pack(push,1) - class phBoundCapsule : public phBound - { - public: - float m_capsule_half_height; - uint64_t unk_0074; - uint32_t unk_007C; - }; //Size: 0x0080 - static_assert(sizeof(phBoundCapsule) == 0x80); + class phBoundCapsule : public phBound + { + public: + float m_capsule_half_height; + uint64_t unk_0074; + uint32_t unk_007C; + }; //Size: 0x0080 + static_assert(sizeof(phBoundCapsule) == 0x80); #pragma pack(pop) } \ No newline at end of file diff --git a/base/phBoundComposite.hpp b/base/phBoundComposite.hpp index d059b68..dc73bc9 100644 --- a/base/phBoundComposite.hpp +++ b/base/phBoundComposite.hpp @@ -7,20 +7,20 @@ namespace rage { #pragma pack(push,8) - class phBoundComposite : public phBound - { - public: - class phBound** m_bounds; //0x0070 - fmatrix34* m_current_matrices; //0x0078 - fmatrix34* m_last_matrices; //0x0080 - fvector3* unk_0088; //0x0088 - uint32_t* m_type_and_include_flags; //0x0090 - uint32_t* m_owned_type_and_include_flags; //0x0098 - uint16_t m_max_num_bounds; //0x00A0 - uint16_t m_num_bounds; //0x00A2 - char pad_00A4[4]; //0x00A4 - void* unk_00A8; //0x00A8 - }; //Size: 0x00B0 - static_assert(sizeof(phBoundComposite) == 0xB0); + class phBoundComposite : public phBound + { + public: + class phBound** m_bounds; //0x0070 + fmatrix34* m_current_matrices; //0x0078 + fmatrix34* m_last_matrices; //0x0080 + fvector3* unk_0088; //0x0088 + uint32_t* m_type_and_include_flags; //0x0090 + uint32_t* m_owned_type_and_include_flags; //0x0098 + uint16_t m_max_num_bounds; //0x00A0 + uint16_t m_num_bounds; //0x00A2 + char pad_00A4[4]; //0x00A4 + void* unk_00A8; //0x00A8 + }; //Size: 0x00B0 + static_assert(sizeof(phBoundComposite) == 0xB0); #pragma pack(pop) } \ No newline at end of file diff --git a/camera/CCameraAngles.hpp b/camera/CCameraAngles.hpp index 51ca88d..2a57e6f 100644 --- a/camera/CCameraAngles.hpp +++ b/camera/CCameraAngles.hpp @@ -5,8 +5,8 @@ class CCameraAngles { public: - char pad_0000[960]; //0x0000 - CPlayerAngles* angles; //0x03C0 - char pad_03C8[60]; //0x03C8 + char pad_0000[960]; //0x0000 + CPlayerAngles* angles; //0x03C0 + char pad_03C8[60]; //0x03C8 }; //Size: 0x0408 static_assert(sizeof(CCameraAngles) == 0x408); diff --git a/camera/CCameraManagerAngles.hpp b/camera/CCameraManagerAngles.hpp index c8f56ad..88c8df1 100644 --- a/camera/CCameraManagerAngles.hpp +++ b/camera/CCameraManagerAngles.hpp @@ -5,6 +5,6 @@ class CCameraManagerAngles { public: - CCameraAngles* m_angles; //0x0000 + CCameraAngles* m_angles; //0x0000 }; //Size: 0x0008 static_assert(sizeof(CCameraManagerAngles) == 0x8); diff --git a/camera/CGameCameraAngles.hpp b/camera/CGameCameraAngles.hpp index f6fbc3c..141448d 100644 --- a/camera/CGameCameraAngles.hpp +++ b/camera/CGameCameraAngles.hpp @@ -5,7 +5,7 @@ class CGameCameraAngles { public: - CCameraManagerAngles* m_angles; //0x0000 - char pad_0008[56]; //0x0008 + CCameraManagerAngles* m_angles; //0x0000 + char pad_0008[56]; //0x0008 }; //Size: 0x0040 static_assert(sizeof(CGameCameraAngles) == 0x40); diff --git a/datanodes/object/CObjectCreationDataNode.hpp b/datanodes/object/CObjectCreationDataNode.hpp index 5ad768d..84fbc7f 100644 --- a/datanodes/object/CObjectCreationDataNode.hpp +++ b/datanodes/object/CObjectCreationDataNode.hpp @@ -7,35 +7,35 @@ class CObjectCreationDataNode { public: - char pad_0000[192]; //0x0000 - uint16_t unk_00C0; //0x00C0 - char pad_0xC2[14]; //0x00C2 - rage::fvector4 m_object_orientation; //0x00D0 - char pad_00E0[30]; //0x00E0 - rage::fvector3 m_object_position; //0x0100 - char pad_010C[4]; //0x010C - rage::fvector3 m_dummy_position; //0x010E - char pad_011A[20]; //0x011C - rage::fvector3 m_script_grab_position; //0x0130 - char pad_013C[12]; //0x013C - float m_script_grab_radius; //0x0148 - uint32_t m_created_by; //0x014C - uint32_t m_model; //0x0150 - uint32_t m_frag_group_index; //0x0154 - uint32_t m_ownership_token; //0x0158 - uint32_t unk_015C; //0x015C - bool m_no_reassign; //0x0160 - bool unk_0161; //0x0161 - bool m_player_wants_control; //0x0162 - bool m_has_init_physics; //0x0163 - bool m_script_grabbed_from_world; //0x0164 - bool m_has_frag_group; //0x0165 - bool m_is_broken; //0x0166 - bool m_has_exploded; //0x0167 - bool m_keep_registered; //0x0168 - bool unk_0169; //0x0169 - bool unk_016A; //0x016A - bool unk_016B; //0x016B + char pad_0000[192]; //0x0000 + uint16_t unk_00C0; //0x00C0 + char pad_0xC2[14]; //0x00C2 + rage::fvector4 m_object_orientation; //0x00D0 + char pad_00E0[30]; //0x00E0 + rage::fvector3 m_object_position; //0x0100 + char pad_010C[4]; //0x010C + rage::fvector3 m_dummy_position; //0x010E + char pad_011A[20]; //0x011C + rage::fvector3 m_script_grab_position; //0x0130 + char pad_013C[12]; //0x013C + float m_script_grab_radius; //0x0148 + uint32_t m_created_by; //0x014C + uint32_t m_model; //0x0150 + uint32_t m_frag_group_index; //0x0154 + uint32_t m_ownership_token; //0x0158 + uint32_t unk_015C; //0x015C + bool m_no_reassign; //0x0160 + bool unk_0161; //0x0161 + bool m_player_wants_control; //0x0162 + bool m_has_init_physics; //0x0163 + bool m_script_grabbed_from_world; //0x0164 + bool m_has_frag_group; //0x0165 + bool m_is_broken; //0x0166 + bool m_has_exploded; //0x0167 + bool m_keep_registered; //0x0168 + bool unk_0169; //0x0169 + bool unk_016A; //0x016A + bool unk_016B; //0x016B }; //Size: 0x016C static_assert(sizeof(CObjectCreationDataNode) == 0x16C); #pragma pack(pop) diff --git a/datanodes/player/CPlayerAppearanceDataNode.hpp b/datanodes/player/CPlayerAppearanceDataNode.hpp index d88a5e4..49382ef 100644 --- a/datanodes/player/CPlayerAppearanceDataNode.hpp +++ b/datanodes/player/CPlayerAppearanceDataNode.hpp @@ -6,89 +6,89 @@ class CPlayerAppearanceDataNode { public: - char pad_0x0[192]; //0xB0 - uint32_t unk_0xC0[56]; //0xC0 - class CPedComponents components; //0x1A0 - char pad_0x268[8]; //0x268 - uint32_t unk_0x270[6]; //0x270 - uint32_t unk_0x288[6]; //0x288 - char pad_0x2A0[8]; //0x2A0 - float unk_0x2A8; //0x2A8 - uint8_t unk_0x2AC; //0x2AC - uint8_t unk_0x2AD; //0x2AD - char pad_0x2AE[26]; //0x2AE - float m_shape_mix; //0x2C8 - float m_skin_mix; //0x2CC - float m_third_mix; //0x2D0 - float unk_0x2D4; //0x2D4 - float unk_0x2D8[13]; //0x2D8 - float unk_0x30C[13]; //0x30C - float unk_0x340[20]; //0x340 - uint8_t unk_0x390[13]; //0x390 - uint8_t unk_0x39D[13]; //0x39D - uint8_t unk_0x3AA[13]; //0x3AA - uint8_t m_shape_first; //0x3B7 - uint8_t m_shape_second; //0x3B8 - uint8_t m_shape_third; //0x3B9 - uint8_t m_skin_first; //0x3BA - uint8_t m_skin_second; //0x3BB - uint8_t m_skin_third; //0x3BC - uint8_t unk_0x3BD[13]; //0x3BD - uint8_t unk_0x3CA[11]; //0x3CA - int16_t unk_0x3D6; //0x3D6 - uint8_t unk_0x3D8; //0x3D8 - uint8_t unk_0x3D9; //0x3D9 - char pad_0x3DA[1]; //0x3DA - bool unk_0x3DB; //0x3DB - bool unk_0x3DC; //0x3DC - char pad_0x3DD[3]; //0x3DD - uint32_t unk_0x3E0; //0x3E0 - uint32_t unk_0x3E4; //0x3E4 - uint32_t unk_0x3E8; //0x3E8 - uint32_t unk_0x3EC; //0x3EC - uint32_t unk_0x3F0; //0x3F0 - float unk_0x3F4; //0x3F4 - float unk_0x3F8; //0x3F8 - float unk_0x3FC; //0x3FC - uint32_t unk_0x400; //0x400 - uint32_t unk_0x404; //0x404 - uint32_t unk_0x408; //0x408 - uint32_t unk_0x40C; //0x40C - uint32_t unk_0x410; //0x410 - bool unk_0x414; //0x414 - bool unk_0x415; //0x415 - bool unk_0x416; //0x416 - bool unk_0x417; //0x417 - bool unk_0x418; //0x418 - bool unk_0x419; //0x419 - uint32_t unk_0x41C; //0x41C - uint32_t m_model_hash; //0x420 - uint32_t m_voice_hash; //0x424 - uint32_t m_phone_mode; //0x428 - uint32_t unk_0x42C; //0x42C - uint8_t m_parachute_tint_index; //0x430 - uint8_t m_parachute_pack_tint_index; //0x431 - uint16_t m_respawn_object; //0x432 - bool m_has_head_blend_data; //0x434 - bool unk_0x435; //0x435 - bool m_has_respawn_object; //0x436 - char pad_0x437; //0x437 - uint32_t unk_0x438_clip_maybe; //0x438 - uint32_t unk_0x43C; //0x43C - uint32_t unk_0x440; //0x440 - bool unk_0x444; //0x444 - bool unk_0x445; //0x445 - bool unk_0x446; //0x446 - uint8_t unk_0x447; //0x447 - uint16_t unk_0x448; //0x448 - uint16_t unk_0x44A; //0x44A - uint16_t unk_0x44C; //0x44C - bool unk_0x44E; //0x44E - bool unk_0x44F; //0x44F - bool unk_0x450; //0x450 - uint8_t unk_0x451; //0x451 - uint32_t unk_0x452; //0x452 - uint32_t unk_0x456; //0x456 + char pad_0x0[192]; //0xB0 + uint32_t unk_0xC0[56]; //0xC0 + class CPedComponents components; //0x1A0 + char pad_0x268[8]; //0x268 + uint32_t unk_0x270[6]; //0x270 + uint32_t unk_0x288[6]; //0x288 + char pad_0x2A0[8]; //0x2A0 + float unk_0x2A8; //0x2A8 + uint8_t unk_0x2AC; //0x2AC + uint8_t unk_0x2AD; //0x2AD + char pad_0x2AE[26]; //0x2AE + float m_shape_mix; //0x2C8 + float m_skin_mix; //0x2CC + float m_third_mix; //0x2D0 + float unk_0x2D4; //0x2D4 + float unk_0x2D8[13]; //0x2D8 + float unk_0x30C[13]; //0x30C + float unk_0x340[20]; //0x340 + uint8_t unk_0x390[13]; //0x390 + uint8_t unk_0x39D[13]; //0x39D + uint8_t unk_0x3AA[13]; //0x3AA + uint8_t m_shape_first; //0x3B7 + uint8_t m_shape_second; //0x3B8 + uint8_t m_shape_third; //0x3B9 + uint8_t m_skin_first; //0x3BA + uint8_t m_skin_second; //0x3BB + uint8_t m_skin_third; //0x3BC + uint8_t unk_0x3BD[13]; //0x3BD + uint8_t unk_0x3CA[11]; //0x3CA + int16_t unk_0x3D6; //0x3D6 + uint8_t unk_0x3D8; //0x3D8 + uint8_t unk_0x3D9; //0x3D9 + char pad_0x3DA[1]; //0x3DA + bool unk_0x3DB; //0x3DB + bool unk_0x3DC; //0x3DC + char pad_0x3DD[3]; //0x3DD + uint32_t unk_0x3E0; //0x3E0 + uint32_t unk_0x3E4; //0x3E4 + uint32_t unk_0x3E8; //0x3E8 + uint32_t unk_0x3EC; //0x3EC + uint32_t unk_0x3F0; //0x3F0 + float unk_0x3F4; //0x3F4 + float unk_0x3F8; //0x3F8 + float unk_0x3FC; //0x3FC + uint32_t unk_0x400; //0x400 + uint32_t unk_0x404; //0x404 + uint32_t unk_0x408; //0x408 + uint32_t unk_0x40C; //0x40C + uint32_t unk_0x410; //0x410 + bool unk_0x414; //0x414 + bool unk_0x415; //0x415 + bool unk_0x416; //0x416 + bool unk_0x417; //0x417 + bool unk_0x418; //0x418 + bool unk_0x419; //0x419 + uint32_t unk_0x41C; //0x41C + uint32_t m_model_hash; //0x420 + uint32_t m_voice_hash; //0x424 + uint32_t m_phone_mode; //0x428 + uint32_t unk_0x42C; //0x42C + uint8_t m_parachute_tint_index; //0x430 + uint8_t m_parachute_pack_tint_index; //0x431 + uint16_t m_respawn_object; //0x432 + bool m_has_head_blend_data; //0x434 + bool unk_0x435; //0x435 + bool m_has_respawn_object; //0x436 + char pad_0x437; //0x437 + uint32_t unk_0x438_clip_maybe; //0x438 + uint32_t unk_0x43C; //0x43C + uint32_t unk_0x440; //0x440 + bool unk_0x444; //0x444 + bool unk_0x445; //0x445 + bool unk_0x446; //0x446 + uint8_t unk_0x447; //0x447 + uint16_t unk_0x448; //0x448 + uint16_t unk_0x44A; //0x44A + uint16_t unk_0x44C; //0x44C + bool unk_0x44E; //0x44E + bool unk_0x44F; //0x44F + bool unk_0x450; //0x450 + uint8_t unk_0x451; //0x451 + uint32_t unk_0x452; //0x452 + uint32_t unk_0x456; //0x456 }; static_assert(sizeof(CPlayerAppearanceDataNode) == 0x45C); #pragma pack(pop) diff --git a/datanodes/player/CPlayerGameStateDataNode.hpp b/datanodes/player/CPlayerGameStateDataNode.hpp index 25acdee..0c0a71b 100644 --- a/datanodes/player/CPlayerGameStateDataNode.hpp +++ b/datanodes/player/CPlayerGameStateDataNode.hpp @@ -6,142 +6,142 @@ class CPlayerGameStateDataNode { public: - char pad_0000[192]; //0x0000 - uint32_t m_player_state; //0x00C0 - bool m_controls_disabled_by_script; //0x00C4 - bool m_is_max_armor_and_health_default; //0x00C5 - bool unk_000C6; //0x00C6 - bool m_is_spectating; //0x00C7 - bool m_is_antagonistic_to_another_player; //0x00C8 - bool m_never_target; //0x00C9 - bool m_use_kinematic_physics; //0x00CA - bool m_has_tutorial_data; //0x00CB - bool m_pending_tutorial_change; //0x00CC - bool unk_00CD; //0x00CD - bool m_respawning; //0x00CE - bool m_will_jack_any_player; //0x00CF - bool m_will_jack_wanted_players; //0x00D0 - bool m_dont_drag_from_car; //0x00D1 - bool m_random_peds_flee; //0x00D2 - bool m_every_ped_back_away; //0x00D3 - bool m_has_microphone; //0x00D4 - bool m_is_invincible; //0x00D5 - bool unk_00D6; //0x00D6 - bool unk_00D7; //0x00D7 - bool m_seatbelt; //0x00D8 - bool unk_00D9; //0x00D9 - bool m_bullet_proof; //0x00DA - bool m_fire_proof; //0x00DB - bool m_explosion_proof; //0x00DC - bool m_collision_proof; //0x00DD - bool m_melee_proof; //0x00DE - bool m_water_proof; //0x00DF - bool m_steam_proof; //0x00E0 - bool unk_00E1; //0x00E1 - bool unk_00E2; //0x00E2 - bool unk_00E3; //0x00E3 - bool unk_00E4; //0x00E4 - bool unk_00E5; //0x00E5 - bool unk_00E6; //0x00E6 - bool unk_00E7; //0x00E7 - bool unk_00E8; //0x00E8 - bool unk_00E9; //0x00E9 - bool unk_00EA; //0x00EA - bool unk_00EB; //0x00EB - bool unk_00EC; //0x00EC - bool unk_00ED; //0x00ED - bool unk_00EE; //0x00EE - bool unk_00EF; //0x00EF - bool unk_00F0; //0x00F0 - bool unk_00F1; //0x00F1 - bool unk_00F2; //0x00F2 - bool unk_00F3; //0x00F3 - bool unk_00F4; //0x00F4 - bool unk_00F5; //0x00F5 - bool unk_00F6; //0x00F6 - bool unk_00F7; //0x00F7 - bool unk_00F8; //0x00F8 - bool unk_00F9; //0x00F9 - bool unk_00FA; //0x00FA - bool unk_00FB; //0x00FB - uint32_t unk_00FC; //0x00FC - uint32_t m_mobile_ring_state; //0x0100 - int32_t m_player_team; //0x0104 - float m_air_drag_multiplier; //0x0108 - uint32_t m_max_health; //0x010C - uint32_t m_max_armor; //0x0110 - uint32_t m_jack_speed; //0x0114 - uint16_t m_player_is_targetable_by_team; //0x0118 - uint32_t m_override_receive_chat; //0x011C - uint32_t m_override_send_chat; //0x0120 - bool unk_0124; //0x0124 - bool unk_0125; //0x0125 - bool unk_0126; //0x0126 - bool unk_0127; //0x0127 - uint16_t m_spectating_net_id; //0x0128 - uint8_t m_antagonistic_to_player_id; //0x012C - uint8_t m_tutorial_index; //0x012B - uint8_t m_tutorial_instance_id; //0x012C - char pad_012D[2]; //0x012D - float m_microphone_volume; //0x0130 - uint32_t m_voice_channel; //0x0134 - bool m_is_overriding_voice_proximity; //0x0138 - char pad_0139[7]; //0x0139 - float m_voice_proximity_x; //0x0140 - float m_voice_proximity_y; //0x0144 - float m_voice_proximity_z; //0x0148 - float m_voice_proximity_radius_maybe; //0x014C - uint32_t unk_0150; //0x0150 - uint32_t m_vehicle_weapon_index; //0x0154 - bool m_has_vehicle_weapon_index; //0x0158 - uint32_t m_decor_count; //0x015C - uint32_t m_decor_type[3]; // 0x0160 + char pad_0000[192]; //0x0000 + uint32_t m_player_state; //0x00C0 + bool m_controls_disabled_by_script; //0x00C4 + bool m_is_max_armor_and_health_default; //0x00C5 + bool unk_000C6; //0x00C6 + bool m_is_spectating; //0x00C7 + bool m_is_antagonistic_to_another_player; //0x00C8 + bool m_never_target; //0x00C9 + bool m_use_kinematic_physics; //0x00CA + bool m_has_tutorial_data; //0x00CB + bool m_pending_tutorial_change; //0x00CC + bool unk_00CD; //0x00CD + bool m_respawning; //0x00CE + bool m_will_jack_any_player; //0x00CF + bool m_will_jack_wanted_players; //0x00D0 + bool m_dont_drag_from_car; //0x00D1 + bool m_random_peds_flee; //0x00D2 + bool m_every_ped_back_away; //0x00D3 + bool m_has_microphone; //0x00D4 + bool m_is_invincible; //0x00D5 + bool unk_00D6; //0x00D6 + bool unk_00D7; //0x00D7 + bool m_seatbelt; //0x00D8 + bool unk_00D9; //0x00D9 + bool m_bullet_proof; //0x00DA + bool m_fire_proof; //0x00DB + bool m_explosion_proof; //0x00DC + bool m_collision_proof; //0x00DD + bool m_melee_proof; //0x00DE + bool m_water_proof; //0x00DF + bool m_steam_proof; //0x00E0 + bool unk_00E1; //0x00E1 + bool unk_00E2; //0x00E2 + bool unk_00E3; //0x00E3 + bool unk_00E4; //0x00E4 + bool unk_00E5; //0x00E5 + bool unk_00E6; //0x00E6 + bool unk_00E7; //0x00E7 + bool unk_00E8; //0x00E8 + bool unk_00E9; //0x00E9 + bool unk_00EA; //0x00EA + bool unk_00EB; //0x00EB + bool unk_00EC; //0x00EC + bool unk_00ED; //0x00ED + bool unk_00EE; //0x00EE + bool unk_00EF; //0x00EF + bool unk_00F0; //0x00F0 + bool unk_00F1; //0x00F1 + bool unk_00F2; //0x00F2 + bool unk_00F3; //0x00F3 + bool unk_00F4; //0x00F4 + bool unk_00F5; //0x00F5 + bool unk_00F6; //0x00F6 + bool unk_00F7; //0x00F7 + bool unk_00F8; //0x00F8 + bool unk_00F9; //0x00F9 + bool unk_00FA; //0x00FA + bool unk_00FB; //0x00FB + uint32_t unk_00FC; //0x00FC + uint32_t m_mobile_ring_state; //0x0100 + int32_t m_player_team; //0x0104 + float m_air_drag_multiplier; //0x0108 + uint32_t m_max_health; //0x010C + uint32_t m_max_armor; //0x0110 + uint32_t m_jack_speed; //0x0114 + uint16_t m_player_is_targetable_by_team; //0x0118 + uint32_t m_override_receive_chat; //0x011C + uint32_t m_override_send_chat; //0x0120 + bool unk_0124; //0x0124 + bool unk_0125; //0x0125 + bool unk_0126; //0x0126 + bool unk_0127; //0x0127 + uint16_t m_spectating_net_id; //0x0128 + uint8_t m_antagonistic_to_player_id; //0x012C + uint8_t m_tutorial_index; //0x012B + uint8_t m_tutorial_instance_id; //0x012C + char pad_012D[2]; //0x012D + float m_microphone_volume; //0x0130 + uint32_t m_voice_channel; //0x0134 + bool m_is_overriding_voice_proximity; //0x0138 + char pad_0139[7]; //0x0139 + float m_voice_proximity_x; //0x0140 + float m_voice_proximity_y; //0x0144 + float m_voice_proximity_z; //0x0148 + float m_voice_proximity_radius_maybe; //0x014C + uint32_t unk_0150; //0x0150 + uint32_t m_vehicle_weapon_index; //0x0154 + bool m_has_vehicle_weapon_index; //0x0158 + uint32_t m_decor_count; //0x015C + uint32_t m_decor_type[3]; // 0x0160 uint32_t m_decor_value[3]; // 0x016C uint32_t m_decor_name_hash[3]; // 0x0178 - bool m_friendly_fire_allowed; //0x0184 - bool unk_0185; //0x0185 - uint8_t m_current_garage_instance_index; //0x0186 - uint8_t m_current_property_id; //0x0187 - uint8_t unk_0188; //0x0188 - uint8_t unk_0189; //0x0189 - bool m_battle_aware; //0x018A - bool m_vehicle_jump_down; //0x018B - float m_weapon_defence_modifier; //0x018C - float m_weapon_defence_modifier_2; //0x0190 - bool m_is_overriding_population_control_sphere; //0x0194 - char pad_0195[11]; //0x0195 - float m_population_control_sphere_x; //0x01A0 - float m_population_control_sphere_y; //0x01A4 - float m_population_control_sphere_z; //0x01A8 - uint16_t unk_01AC; //0x01AC - uint16_t unk_01AE; //0x01AE - uint16_t unk_01B0; //0x01B0 - bool pad_01B2; //0x01B2 - bool unk_01B3; //0x01B3 - bool m_no_collision; //0x01B4 - bool unk_01B5; //0x01B5 - bool unk_01B6; //0x01B6 - bool m_super_jump; //0x01B7 - bool unk_01B8; //0x01B8 - bool unk_01B9; //0x01B9 - uint16_t unk_01BA; //0x01BA - uint32_t unk_01BC; //0x01BC - float unk_01C0; //0x01C0 - float m_weapon_damage_modifier; //0x01C4 Divisor: 0x3F800000 - float m_melee_weapon_damage_modifier; //0x01C8 Divisor: 0x3F800000 - float unk_01CC; //0x01CC - bool unk_01D0; //0x01D0 - char pad_01D1[15]; //0x01D1 - float unk_01E0; //0x01E0 - float unk_01E4; //0x01E4 - float unk_01E8; //0x01E8 - uint32_t unk_01EC; //0x01EC - uint8_t unk_01F0; //0x01F0 - uint8_t unk_01F1; //0x01F1 - bool unk_01F2; //0x01F2 - uint8_t unk_01F3; //0x01F3 - bool unk_01F4; //0x01F4 - bool unk_01F5; //0x01F5 + bool m_friendly_fire_allowed; //0x0184 + bool unk_0185; //0x0185 + uint8_t m_current_garage_instance_index; //0x0186 + uint8_t m_current_property_id; //0x0187 + uint8_t unk_0188; //0x0188 + uint8_t unk_0189; //0x0189 + bool m_battle_aware; //0x018A + bool m_vehicle_jump_down; //0x018B + float m_weapon_defence_modifier; //0x018C + float m_weapon_defence_modifier_2; //0x0190 + bool m_is_overriding_population_control_sphere; //0x0194 + char pad_0195[11]; //0x0195 + float m_population_control_sphere_x; //0x01A0 + float m_population_control_sphere_y; //0x01A4 + float m_population_control_sphere_z; //0x01A8 + uint16_t unk_01AC; //0x01AC + uint16_t unk_01AE; //0x01AE + uint16_t unk_01B0; //0x01B0 + bool pad_01B2; //0x01B2 + bool unk_01B3; //0x01B3 + bool m_no_collision; //0x01B4 + bool unk_01B5; //0x01B5 + bool unk_01B6; //0x01B6 + bool m_super_jump; //0x01B7 + bool unk_01B8; //0x01B8 + bool unk_01B9; //0x01B9 + uint16_t unk_01BA; //0x01BA + uint32_t unk_01BC; //0x01BC + float unk_01C0; //0x01C0 + float m_weapon_damage_modifier; //0x01C4 Divisor: 0x3F800000 + float m_melee_weapon_damage_modifier; //0x01C8 Divisor: 0x3F800000 + float unk_01CC; //0x01CC + bool unk_01D0; //0x01D0 + char pad_01D1[15]; //0x01D1 + float unk_01E0; //0x01E0 + float unk_01E4; //0x01E4 + float unk_01E8; //0x01E8 + uint32_t unk_01EC; //0x01EC + uint8_t unk_01F0; //0x01F0 + uint8_t unk_01F1; //0x01F1 + bool unk_01F2; //0x01F2 + uint8_t unk_01F3; //0x01F3 + bool unk_01F4; //0x01F4 + bool unk_01F5; //0x01F5 }; //Size: 0x01F8 static_assert(sizeof(CPlayerGameStateDataNode) == 0x1F8); #pragma pack(pop) \ No newline at end of file diff --git a/datanodes/proximity_migrateable/CSectorDataNode.hpp b/datanodes/proximity_migrateable/CSectorDataNode.hpp index bd2a144..4a60762 100644 --- a/datanodes/proximity_migrateable/CSectorDataNode.hpp +++ b/datanodes/proximity_migrateable/CSectorDataNode.hpp @@ -6,10 +6,10 @@ class CSectorDataNode { public: - char pad_0x0[192]; //0x0 - uint16_t m_pos_x; //0xC0 - uint16_t m_pos_y; //0xC2 - uint16_t m_pos_z; //0xC4 + char pad_0x0[192]; //0x0 + uint16_t m_pos_x; //0xC0 + uint16_t m_pos_y; //0xC2 + uint16_t m_pos_z; //0xC4 }; static_assert(sizeof(CSectorDataNode) == 0xC6); #pragma pack(pop) \ No newline at end of file diff --git a/entities/CAttackers.hpp b/entities/CAttackers.hpp index 36b11db..f087638 100644 --- a/entities/CAttackers.hpp +++ b/entities/CAttackers.hpp @@ -6,10 +6,10 @@ class CPed; //fwdec class CAttackers { public: - CPed* m_attacker0; //0x0000 - char pad_0x0008[0x10]; //0x0008 - CPed* m_attacker1; //0x0018 - char pad_0x0020[0x10]; //0x0020 - CPed* m_attacker2; //0x0030 + CPed* m_attacker0; //0x0000 + char pad_0x0008[0x10]; //0x0008 + CPed* m_attacker1; //0x0018 + char pad_0x0020[0x10]; //0x0020 + CPed* m_attacker2; //0x0030 }; //Size=0x0038 #pragma pack(pop) \ No newline at end of file diff --git a/enums/eExplosionTag.hpp b/enums/eExplosionTag.hpp index 6f9247e..4cfca5d 100644 --- a/enums/eExplosionTag.hpp +++ b/enums/eExplosionTag.hpp @@ -4,89 +4,89 @@ enum eExplosionTag : int32_t { - DONTCARE = -1, - GRENADE, - GRENADELAUNCHER, - STICKYBOMB, - MOLOTOV, - ROCKET, - TANKSHELL, - HI_OCTANE, - CAR, - PLANE, - PETROL_PUMP, - BIKE, - DIR_STEAM, - DIR_FLAME, - DIR_WATER_HYDRANT, - DIR_GAS_CANISTER, - BOAT, - SHIP_DESTROY, - TRUCK, - BULLET, - SMOKEGRENADELAUNCHER, - SMOKEGRENADE, - BZGAS, - FLARE, - GAS_CANISTER, - EXTINGUISHER, - _0x988620B8, - EXP_TAG_TRAIN, - EXP_TAG_BARREL, - EXP_TAG_PROPANE, - EXP_TAG_BLIMP, - EXP_TAG_DIR_FLAME_EXPLODE, - EXP_TAG_TANKER, - PLANE_ROCKET, - EXP_TAG_VEHICLE_BULLET, - EXP_TAG_GAS_TANK, - EXP_TAG_BIRD_CRAP, - EXP_TAG_RAILGUN, - EXP_TAG_BLIMP2, - EXP_TAG_FIREWORK, - EXP_TAG_SNOWBALL, - EXP_TAG_PROXMINE, - EXP_TAG_VALKYRIE_CANNON, - EXP_TAG_AIR_DEFENCE, - EXP_TAG_PIPEBOMB, - EXP_TAG_VEHICLEMINE, - EXP_TAG_EXPLOSIVEAMMO, - EXP_TAG_APCSHELL, - EXP_TAG_BOMB_CLUSTER, - EXP_TAG_BOMB_GAS, - EXP_TAG_BOMB_INCENDIARY, - EXP_TAG_BOMB_STANDARD, - EXP_TAG_TORPEDO, - EXP_TAG_TORPEDO_UNDERWATER, - EXP_TAG_BOMBUSHKA_CANNON, - EXP_TAG_BOMB_CLUSTER_SECONDARY, - EXP_TAG_HUNTER_BARRAGE, - EXP_TAG_HUNTER_CANNON, - EXP_TAG_ROGUE_CANNON, - EXP_TAG_MINE_UNDERWATER, - EXP_TAG_ORBITAL_CANNON, - EXP_TAG_BOMB_STANDARD_WIDE, - EXP_TAG_EXPLOSIVEAMMO_SHOTGUN, - EXP_TAG_OPPRESSOR2_CANNON, - EXP_TAG_MORTAR_KINETIC, - EXP_TAG_VEHICLEMINE_KINETIC, - EXP_TAG_VEHICLEMINE_EMP, - EXP_TAG_VEHICLEMINE_SPIKE, - EXP_TAG_VEHICLEMINE_SLICK, - EXP_TAG_VEHICLEMINE_TAR, - EXP_TAG_SCRIPT_DRONE, - EXP_TAG_RAYGUN, - EXP_TAG_BURIEDMINE, - EXP_TAG_SCRIPT_MISSILE, - EXP_TAG_RCTANK_ROCKET, - EXP_TAG_BOMB_WATER, - EXP_TAG_BOMB_WATER_SECONDARY, - _0xF728C4A9, - _0xBAEC056F, - EXP_TAG_FLASHGRENADE, - EXP_TAG_STUNGRENADE, - _0x763D3B3B, - EXP_TAG_SCRIPT_MISSILE_LARGE, - EXP_TAG_SUBMARINE_BIG, - EXP_TAG_EMPLAUNCHER_EMP, + DONTCARE = -1, + GRENADE, + GRENADELAUNCHER, + STICKYBOMB, + MOLOTOV, + ROCKET, + TANKSHELL, + HI_OCTANE, + CAR, + PLANE, + PETROL_PUMP, + BIKE, + DIR_STEAM, + DIR_FLAME, + DIR_WATER_HYDRANT, + DIR_GAS_CANISTER, + BOAT, + SHIP_DESTROY, + TRUCK, + BULLET, + SMOKEGRENADELAUNCHER, + SMOKEGRENADE, + BZGAS, + FLARE, + GAS_CANISTER, + EXTINGUISHER, + _0x988620B8, + EXP_TAG_TRAIN, + EXP_TAG_BARREL, + EXP_TAG_PROPANE, + EXP_TAG_BLIMP, + EXP_TAG_DIR_FLAME_EXPLODE, + EXP_TAG_TANKER, + PLANE_ROCKET, + EXP_TAG_VEHICLE_BULLET, + EXP_TAG_GAS_TANK, + EXP_TAG_BIRD_CRAP, + EXP_TAG_RAILGUN, + EXP_TAG_BLIMP2, + EXP_TAG_FIREWORK, + EXP_TAG_SNOWBALL, + EXP_TAG_PROXMINE, + EXP_TAG_VALKYRIE_CANNON, + EXP_TAG_AIR_DEFENCE, + EXP_TAG_PIPEBOMB, + EXP_TAG_VEHICLEMINE, + EXP_TAG_EXPLOSIVEAMMO, + EXP_TAG_APCSHELL, + EXP_TAG_BOMB_CLUSTER, + EXP_TAG_BOMB_GAS, + EXP_TAG_BOMB_INCENDIARY, + EXP_TAG_BOMB_STANDARD, + EXP_TAG_TORPEDO, + EXP_TAG_TORPEDO_UNDERWATER, + EXP_TAG_BOMBUSHKA_CANNON, + EXP_TAG_BOMB_CLUSTER_SECONDARY, + EXP_TAG_HUNTER_BARRAGE, + EXP_TAG_HUNTER_CANNON, + EXP_TAG_ROGUE_CANNON, + EXP_TAG_MINE_UNDERWATER, + EXP_TAG_ORBITAL_CANNON, + EXP_TAG_BOMB_STANDARD_WIDE, + EXP_TAG_EXPLOSIVEAMMO_SHOTGUN, + EXP_TAG_OPPRESSOR2_CANNON, + EXP_TAG_MORTAR_KINETIC, + EXP_TAG_VEHICLEMINE_KINETIC, + EXP_TAG_VEHICLEMINE_EMP, + EXP_TAG_VEHICLEMINE_SPIKE, + EXP_TAG_VEHICLEMINE_SLICK, + EXP_TAG_VEHICLEMINE_TAR, + EXP_TAG_SCRIPT_DRONE, + EXP_TAG_RAYGUN, + EXP_TAG_BURIEDMINE, + EXP_TAG_SCRIPT_MISSILE, + EXP_TAG_RCTANK_ROCKET, + EXP_TAG_BOMB_WATER, + EXP_TAG_BOMB_WATER_SECONDARY, + _0xF728C4A9, + _0xBAEC056F, + EXP_TAG_FLASHGRENADE, + EXP_TAG_STUNGRENADE, + _0x763D3B3B, + EXP_TAG_SCRIPT_MISSILE_LARGE, + EXP_TAG_SUBMARINE_BIG, + EXP_TAG_EMPLAUNCHER_EMP, }; \ No newline at end of file diff --git a/misc/CTunables.hpp b/misc/CTunables.hpp index c3c60de..d029c1e 100644 --- a/misc/CTunables.hpp +++ b/misc/CTunables.hpp @@ -5,18 +5,18 @@ enum eTunableType { - TunableType_DONTCARE = -1, - TunableType_UNK0, - TunableType_4BYTE, - TunableType_1BYTE, + TunableType_DONTCARE = -1, + TunableType_UNK0, + TunableType_4BYTE, + TunableType_1BYTE, }; class CTunables : public rage::datBase { public: - char pad_0000[104]; //0x0008 - uint64_t m_bPtr; //0x0070 - uint16_t m_bCount; //0x0078 - char pad_007A[0x4E]; //0x007A + char pad_0000[104]; //0x0008 + uint64_t m_bPtr; //0x0070 + uint16_t m_bCount; //0x0078 + char pad_007A[0x4E]; //0x007A }; //Size: 0x00C8 static_assert(sizeof(CTunables) == 0xC8); diff --git a/network/CNetComplaintMgr.hpp b/network/CNetComplaintMgr.hpp index 3090493..56ac6af 100644 --- a/network/CNetComplaintMgr.hpp +++ b/network/CNetComplaintMgr.hpp @@ -4,67 +4,67 @@ class CNetRemoteComplaint { public: - uint64_t m_complainer_token; //0x0000 - uint64_t m_complainee_token; //0x0008 - uint32_t m_flags; //0x0010 - uint32_t m_time; //0x0014 + uint64_t m_complainer_token; //0x0000 + uint64_t m_complainee_token; //0x0008 + uint32_t m_flags; //0x0010 + uint32_t m_time; //0x0014 }; //Size: 0x0018 static_assert(sizeof(CNetRemoteComplaint) == 0x18); class CNetComplaintMgr { public: - uint64_t m_host_token; //0x0000 - uint32_t m_host_peer_id; //0x0008 - char pad_000C[4]; //0x000C - void* m_net_connection_mgr; //0x0010 - char pad_0018[64]; //0x0018 - uint64_t m_host_tokens_in_scope[64]; //0x0058 - uint32_t m_num_tokens_in_scope; //0x0258 - char pad_025C[4]; //0x025C - class CNetRemoteComplaint m_remote_complaints[64]; //0x0260 - uint32_t m_num_remote_complaints; //0x0860 - char pad_0864[4]; //0x0864 - uint64_t m_host_tokens_complained[64]; //0x0868 - uint32_t m_num_tokens_complained; //0x0A68 - char pad_0A6C[520]; //0x0A6C - uint32_t m_connection_identifier; //0x0C74 - uint32_t m_last_resend_time; //0x0C78 - char pad_0C7C[4]; //0x0C7C - uint32_t m_time_to_resend; //0x0C80 - uint32_t m_flags; //0x0C84 - char pad_0C88[16]; //0x0C88 + uint64_t m_host_token; //0x0000 + uint32_t m_host_peer_id; //0x0008 + char pad_000C[4]; //0x000C + void* m_net_connection_mgr; //0x0010 + char pad_0018[64]; //0x0018 + uint64_t m_host_tokens_in_scope[64]; //0x0058 + uint32_t m_num_tokens_in_scope; //0x0258 + char pad_025C[4]; //0x025C + class CNetRemoteComplaint m_remote_complaints[64]; //0x0260 + uint32_t m_num_remote_complaints; //0x0860 + char pad_0864[4]; //0x0864 + uint64_t m_host_tokens_complained[64]; //0x0868 + uint32_t m_num_tokens_complained; //0x0A68 + char pad_0A6C[520]; //0x0A6C + uint32_t m_connection_identifier; //0x0C74 + uint32_t m_last_resend_time; //0x0C78 + char pad_0C7C[4]; //0x0C7C + uint32_t m_time_to_resend; //0x0C80 + uint32_t m_flags; //0x0C84 + char pad_0C88[16]; //0x0C88 - inline bool has_local_complaint(uint64_t host_token) - { - for (std::uint32_t i = 0; i < m_num_tokens_complained; i++) - if (m_host_tokens_complained[i] == host_token) - return true; + inline bool has_local_complaint(uint64_t host_token) + { + for (std::uint32_t i = 0; i < m_num_tokens_complained; i++) + if (m_host_tokens_complained[i] == host_token) + return true; - return false; - } + return false; + } - inline void raise_complaint(uint64_t host_token) - { - if (has_local_complaint(host_token)) - return; + inline void raise_complaint(uint64_t host_token) + { + if (has_local_complaint(host_token)) + return; - m_host_tokens_complained[m_num_tokens_complained++] = host_token; + m_host_tokens_complained[m_num_tokens_complained++] = host_token; - // big::g_pointers->m_raise_network_complaint(this, host_token); - } + // big::g_pointers->m_raise_network_complaint(this, host_token); + } - inline void remove_complaint(uint64_t host_token) - { - if (!has_local_complaint(host_token)) - return; + inline void remove_complaint(uint64_t host_token) + { + if (!has_local_complaint(host_token)) + return; - for (std::uint32_t i = 0; i < m_num_tokens_complained; i++) - if (m_host_tokens_complained[i] == host_token) - m_host_tokens_complained[i] = m_host_tokens_complained[m_num_tokens_complained - 1]; + for (std::uint32_t i = 0; i < m_num_tokens_complained; i++) + if (m_host_tokens_complained[i] == host_token) + m_host_tokens_complained[i] = m_host_tokens_complained[m_num_tokens_complained - 1]; - m_num_tokens_complained--; - } + m_num_tokens_complained--; + } }; //Size: 0x0C98 static_assert(sizeof(CNetComplaintMgr) == 0xC98); \ No newline at end of file diff --git a/network/Network.hpp b/network/Network.hpp index bba3b64..1276359 100644 --- a/network/Network.hpp +++ b/network/Network.hpp @@ -9,211 +9,211 @@ class MetricSessionMigrated : public rage::rlMetric { public: - char pad_0008[804]; //0x0008 - uint32_t m_num_players; //0x032C + char pad_0008[804]; //0x0008 + uint32_t m_num_players; //0x032C }; //Size: 0x0330 static_assert(sizeof(MetricSessionMigrated) == 0x330); class NetworkGameConfig { public: - char pad_0000[48]; //0x0000 - uint32_t m_public_slots; //0x0030 - uint32_t m_private_slots; //0x0034 - char pad_0038[272]; //0x0038 + char pad_0000[48]; //0x0000 + uint32_t m_public_slots; //0x0030 + uint32_t m_private_slots; //0x0034 + char pad_0038[272]; //0x0038 }; //Size: 0x0148 static_assert(sizeof(NetworkGameConfig) == 0x148); class NetworkGameFilter { public: - char pad_0000[16]; //0x0000 - char m_game_mode[24]; //0x0010 - char pad_0028[8]; //0x0028 - uint32_t m_attribute_values[8]; //0x0030 - char m_attribute_names[8][24]; //0x0050 - char pad_0110[564]; //0x0110 + char pad_0000[16]; //0x0000 + char m_game_mode[24]; //0x0010 + char pad_0028[8]; //0x0028 + uint32_t m_attribute_values[8]; //0x0030 + char m_attribute_names[8][24]; //0x0050 + char pad_0110[564]; //0x0110 }; //Size: 0x0344 static_assert(sizeof(NetworkGameFilter) == 0x344); class SessionInfoBackup { public: - class rage::rlSessionInfo m_session_info; - uint32_t m_unk; //0x0070 - char pad_0074[4]; //0x0074 - uint32_t m_flags; //0x0078 + class rage::rlSessionInfo m_session_info; + uint32_t m_unk; //0x0070 + char pad_0074[4]; //0x0074 + uint32_t m_flags; //0x0078 }; //Size: 0x007C static_assert(sizeof(SessionInfoBackup) == 0x7C); class MatchmakingSessionResult { public: - class rage::rlSessionDetail m_detail; - char pad_03B8[24]; //0x03B8 + class rage::rlSessionDetail m_detail; + char pad_03B8[24]; //0x03B8 }; //Size: 0x03D0 static_assert(sizeof(MatchmakingSessionResult) == 0x3D0); class PlayerNameMapNode { public: - char m_name[24]; //0x0000 - class rage::rlGamerHandle m_handle; //0x0018 - class PlayerNameMapNode* m_next; //0x0028 - class PlayerNameMapNode* m_prev; //0x0030 + char m_name[24]; //0x0000 + class rage::rlGamerHandle m_handle; //0x0018 + class PlayerNameMapNode* m_next; //0x0028 + class PlayerNameMapNode* m_prev; //0x0030 }; //Size: 0x0038 static_assert(sizeof(PlayerNameMapNode) == 0x38); class JoiningPlayerNameMap { public: - class PlayerNameMapNode m_names[100]; //0x0000 - char pad_15E0[40]; //0x15E0 - uint32_t m_num_name_nodes; //0x1608 - char pad_160C[796]; //0x160C + class PlayerNameMapNode m_names[100]; //0x0000 + char pad_15E0[40]; //0x15E0 + uint32_t m_num_name_nodes; //0x1608 + char pad_160C[796]; //0x160C }; //Size: 0x1928 static_assert(sizeof(JoiningPlayerNameMap) == 0x1928); class CNetBlacklistNode { public: - class rage::rlGamerHandle m_handle; //0x0000 - bool m_block_rejoin; //0x0010 - char pad_0011[3]; //0x0011 - uint32_t m_added_time; //0x0014 - class CNetBlacklistNode* m_next; //0x0018 - class CNetBlacklistNode* m_prev; //0x0020 + class rage::rlGamerHandle m_handle; //0x0000 + bool m_block_rejoin; //0x0010 + char pad_0011[3]; //0x0011 + uint32_t m_added_time; //0x0014 + class CNetBlacklistNode* m_next; //0x0018 + class CNetBlacklistNode* m_prev; //0x0020 }; //Size: 0x0028 static_assert(sizeof(CNetBlacklistNode) == 0x28); class CNetBlacklist { public: - class CNetBlacklistNode m_nodes[16]; //0x0000 - class CNetBlacklistNode* m_head; //0x0280 - class CNetBlacklistNode* m_tail; //0x0288 - uint32_t m_free_nodes; //0x0290 - char pad_0294[4]; //0x0294 - class CNetBlacklistNode* m_start; //0x0298 - char pad_02A0[24]; //0x02A0 + class CNetBlacklistNode m_nodes[16]; //0x0000 + class CNetBlacklistNode* m_head; //0x0280 + class CNetBlacklistNode* m_tail; //0x0288 + uint32_t m_free_nodes; //0x0290 + char pad_0294[4]; //0x0294 + class CNetBlacklistNode* m_start; //0x0298 + char pad_02A0[24]; //0x02A0 }; //Size: 0x02B8 static_assert(sizeof(CNetBlacklist) == 0x2B8); class RemotePlayerData { public: - class rage::netGamePlayerData m_data[32]; //0x0000 - uint32_t m_count; //0x0600 - char pad_0604[4]; //0x0604 + class rage::netGamePlayerData m_data[32]; //0x0000 + uint32_t m_count; //0x0600 + char pad_0604[4]; //0x0604 }; //Size: 0x0608 static_assert(sizeof(RemotePlayerData) == 0x608); class InvitedGamer { public: - class rage::rlGamerHandle m_handle; - char pad_0010[12]; //0x0010 - uint32_t m_flags; //0x001C + class rage::rlGamerHandle m_handle; + char pad_0010[12]; //0x0010 + uint32_t m_flags; //0x001C }; //Size: 0x0020 static_assert(sizeof(InvitedGamer) == 0x20); class InvitedGamers { public: - class InvitedGamer m_invited_gamers[100]; //0x0000 - uint32_t m_num_invited_gamers; //0x0C80 - char pad_0C84[4]; //0x0C84 + class InvitedGamer m_invited_gamers[100]; //0x0000 + uint32_t m_num_invited_gamers; //0x0C80 + char pad_0C84[4]; //0x0C84 }; //Size: 0x0C88 static_assert(sizeof(InvitedGamers) == 0xC88); class Network { public: - class rage::rlSessionInfo m_session_info; //0x0000 - class Obf32 m_num_dinput8_instances; //0x0070 - class Obf32 m_last_time_dinput8_checked; //0x0080 - class rage::snSession* m_game_session_ptr; //0x0090 - class rage::snSession* m_transition_session_ptr; //0x0098 - char pad_00A0[24]; //0x00A0 - class rage::snSession m_game_session; //0x00B8 - class rage::snSession m_transition_session; //0x3F28 - char pad_7D98[16]; //0x7D98 - class NetworkGameConfig m_network_game_config; //0x7DA8 - class NetworkGameConfig m_network_transition_config; //0x7EF0 - bool m_session_attributes_dirty; //0x8038 - char pad_8039[19]; //0x8039 - uint32_t m_session_visibility_flags; //0x804C - uint32_t m_transition_visibility_flags; //0x8050 - char pad_8054[36]; //0x8054 - class MetricSessionMigrated m_metric_session_migrated; //0x8078 - bool m_migrated_metric_enabled; //0x83A8 - char pad_83A9[3]; //0x83A9 - uint32_t m_game_session_state; //0x83AC - class NetworkGameFilter m_network_game_filter; //0x83B0 - char pad_86F4[33]; //0x86F4 - bool m_was_invited; //0x8715 - char pad_8716[757]; //0x8716 - bool m_need_host_change; //0x8A0B - char pad_8A0C[2620]; //0x8A0C - class rage::rlSessionDetail m_joining_session_detail; //0x9448 - class SessionInfoBackup m_last_joined_session; //0x9800 - char pad_987C[40]; //0x987C - uint32_t m_current_matchmaking_group; //0x98A4 - uint32_t m_matchmaking_group_max_players[5]; //0x98A8 - uint32_t m_num_active_matchmaking_groups; //0x98Bc - char pad_98C0[8]; //0x98C0 - uint8_t m_matchmaking_property_id; //0x98C8 - uint8_t m_matchmaking_mental_state; //0x98C9 - char pad_98CA[374]; //0x98CA - class rage::rlMatchmakingFindResult m_game_session_matchmaking[3]; //0x9A40 - char pad_14390[40]; //0x14390 - class MatchmakingSessionResult m_game_matchmaking_session_results[10]; //0x143B8 - char pad_169D8[320]; //0x169D8 - class rage::rlGamerHandle m_transition_creator_handle; //0x16B18 - char pad_16B28[24]; //0x16B28 - bool m_local_player_info_dirty; //0x16B40 - char pad_16B41[495]; //0x16B41 - class rage::rlGamerHandle m_inviter_handle; //0x16D30 - class CNetComplaintMgr m_game_complaint_mgr; //0x16D40 - class CNetComplaintMgr m_transition_complaint_mgr; //0x179D8 - char pad_18670[32]; //0x18670 - class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x18690 - char pad_19FB8[8]; //0x19FB8 - class CNetBlacklist m_blacklist; //0x19FC0 - char pad_1A278[8]; //0x1A278 - class InvitedGamers m_game_invited_gamers; //0x1A280 - char pad_1AF08[56]; //0x1AF08 - class SessionInfoBackup m_last_joined_transition; //0x1AF40 - char pad_1AFBC[4]; //0x1AFBC - uint32_t m_activity_spectator_max_players; //0x1AFC0 - char pad_1AFC4[56]; //0x1AFC4 - bool m_is_activity_session; //0x1AFFC - char pad_1AFFD[35]; //0x1AFFD - class RemotePlayerData m_remote_player_data; //0x1B020 - char pad_1B628[8]; //0x1B628 - class rage::netGamePlayerData m_local_net_game_player_data; //0x1B630 - char pad_1B660[600]; //0x1B660 - class rage::rlMatchmakingFindResult m_transition_matchmaking[4]; //0x1B8B8 - class NetworkGameFilter m_transition_filters[4]; //0x29A78 - char pad_2A788[20]; //0x2A788 - uint32_t m_transition_quickmatch_group_handle_count; //0x2A79C - class rage::rlGamerHandle m_transition_quickmatch_group_handles[32]; //0x2A7A0 - char pad_2A9A0[8]; //0x2A9A0 - class rage::rlSessionInfo m_transition_to_activity_session_info; //0x2A9A8 - char pad_2AA18[48]; //0x2AA18 - class MatchmakingSessionResult m_transition_matchmaking_session_results[10]; //0x2AA48 - char pad_2D068[8]; //0x2D068 - class InvitedGamers m_transition_invited_gamers; //0x2D070 - char pad_2DCF8[16]; //0x2DCF8 - class rage::rlGamerHandle m_transition_to_game_handle; //0x2DD08 - class rage::rlSessionInfo m_transition_to_game_session_info; //0x2DD18 - char pad_2DD88[4]; //0x2DD88 - uint32_t m_transition_to_game_session_participant_count; //0x2DD8C - class rage::rlGamerHandle m_transition_to_game_session_participants[32]; //0x2DD90 - char pad_2DF90[72]; //0x2DF90 - class rage::rlGamerHandle m_follower_handles[32]; //0x2DFD8 - uint32_t m_follower_count; //0x2E1D8 - char pad_2E1DC[628]; //0x2E1DC + class rage::rlSessionInfo m_session_info; //0x0000 + class Obf32 m_num_dinput8_instances; //0x0070 + class Obf32 m_last_time_dinput8_checked; //0x0080 + class rage::snSession* m_game_session_ptr; //0x0090 + class rage::snSession* m_transition_session_ptr; //0x0098 + char pad_00A0[24]; //0x00A0 + class rage::snSession m_game_session; //0x00B8 + class rage::snSession m_transition_session; //0x3F28 + char pad_7D98[16]; //0x7D98 + class NetworkGameConfig m_network_game_config; //0x7DA8 + class NetworkGameConfig m_network_transition_config; //0x7EF0 + bool m_session_attributes_dirty; //0x8038 + char pad_8039[19]; //0x8039 + uint32_t m_session_visibility_flags; //0x804C + uint32_t m_transition_visibility_flags; //0x8050 + char pad_8054[36]; //0x8054 + class MetricSessionMigrated m_metric_session_migrated; //0x8078 + bool m_migrated_metric_enabled; //0x83A8 + char pad_83A9[3]; //0x83A9 + uint32_t m_game_session_state; //0x83AC + class NetworkGameFilter m_network_game_filter; //0x83B0 + char pad_86F4[33]; //0x86F4 + bool m_was_invited; //0x8715 + char pad_8716[757]; //0x8716 + bool m_need_host_change; //0x8A0B + char pad_8A0C[2620]; //0x8A0C + class rage::rlSessionDetail m_joining_session_detail; //0x9448 + class SessionInfoBackup m_last_joined_session; //0x9800 + char pad_987C[40]; //0x987C + uint32_t m_current_matchmaking_group; //0x98A4 + uint32_t m_matchmaking_group_max_players[5]; //0x98A8 + uint32_t m_num_active_matchmaking_groups; //0x98Bc + char pad_98C0[8]; //0x98C0 + uint8_t m_matchmaking_property_id; //0x98C8 + uint8_t m_matchmaking_mental_state; //0x98C9 + char pad_98CA[374]; //0x98CA + class rage::rlMatchmakingFindResult m_game_session_matchmaking[3]; //0x9A40 + char pad_14390[40]; //0x14390 + class MatchmakingSessionResult m_game_matchmaking_session_results[10]; //0x143B8 + char pad_169D8[320]; //0x169D8 + class rage::rlGamerHandle m_transition_creator_handle; //0x16B18 + char pad_16B28[24]; //0x16B28 + bool m_local_player_info_dirty; //0x16B40 + char pad_16B41[495]; //0x16B41 + class rage::rlGamerHandle m_inviter_handle; //0x16D30 + class CNetComplaintMgr m_game_complaint_mgr; //0x16D40 + class CNetComplaintMgr m_transition_complaint_mgr; //0x179D8 + char pad_18670[32]; //0x18670 + class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x18690 + char pad_19FB8[8]; //0x19FB8 + class CNetBlacklist m_blacklist; //0x19FC0 + char pad_1A278[8]; //0x1A278 + class InvitedGamers m_game_invited_gamers; //0x1A280 + char pad_1AF08[56]; //0x1AF08 + class SessionInfoBackup m_last_joined_transition; //0x1AF40 + char pad_1AFBC[4]; //0x1AFBC + uint32_t m_activity_spectator_max_players; //0x1AFC0 + char pad_1AFC4[56]; //0x1AFC4 + bool m_is_activity_session; //0x1AFFC + char pad_1AFFD[35]; //0x1AFFD + class RemotePlayerData m_remote_player_data; //0x1B020 + char pad_1B628[8]; //0x1B628 + class rage::netGamePlayerData m_local_net_game_player_data; //0x1B630 + char pad_1B660[600]; //0x1B660 + class rage::rlMatchmakingFindResult m_transition_matchmaking[4]; //0x1B8B8 + class NetworkGameFilter m_transition_filters[4]; //0x29A78 + char pad_2A788[20]; //0x2A788 + uint32_t m_transition_quickmatch_group_handle_count; //0x2A79C + class rage::rlGamerHandle m_transition_quickmatch_group_handles[32]; //0x2A7A0 + char pad_2A9A0[8]; //0x2A9A0 + class rage::rlSessionInfo m_transition_to_activity_session_info; //0x2A9A8 + char pad_2AA18[48]; //0x2AA18 + class MatchmakingSessionResult m_transition_matchmaking_session_results[10]; //0x2AA48 + char pad_2D068[8]; //0x2D068 + class InvitedGamers m_transition_invited_gamers; //0x2D070 + char pad_2DCF8[16]; //0x2DCF8 + class rage::rlGamerHandle m_transition_to_game_handle; //0x2DD08 + class rage::rlSessionInfo m_transition_to_game_session_info; //0x2DD18 + char pad_2DD88[4]; //0x2DD88 + uint32_t m_transition_to_game_session_participant_count; //0x2DD8C + class rage::rlGamerHandle m_transition_to_game_session_participants[32]; //0x2DD90 + char pad_2DF90[72]; //0x2DF90 + class rage::rlGamerHandle m_follower_handles[32]; //0x2DFD8 + uint32_t m_follower_count; //0x2E1D8 + char pad_2E1DC[628]; //0x2E1DC }; //Size: 0x2E450 static_assert(sizeof(Network) == 0x2E450); #pragma pack(pop) diff --git a/network/netObject.hpp b/network/netObject.hpp index 66bfdf6..3736d86 100644 --- a/network/netObject.hpp +++ b/network/netObject.hpp @@ -20,111 +20,111 @@ namespace rage char pad_004E[1]; //0x004E bool m_should_not_be_delete; //0x004F - virtual ~netObject() = 0; - virtual void mov1() = 0; - virtual void mov2() = 0; - virtual void m_8() = 0; - virtual void m_10() = 0; - virtual void m_18() = 0; - virtual void* m_20() = 0; - virtual void m_28() = 0; - virtual netSyncTree* GetSyncTree() = 0; - virtual void m_38() = 0; - virtual void m_40() = 0; - virtual void m_48() = 0; - virtual void m_50() = 0; - virtual void m_58() = 0; - virtual void m_60() = 0; - virtual void m_68() = 0; - virtual void m_70() = 0; - virtual void m_78() = 0; - virtual CObject* GetGameObject() = 0; - virtual void m_88() = 0; - virtual void m_90() = 0; - virtual void m_98() = 0; - virtual int GetObjectFlags() = 0; - virtual void m_A8() = 0; - virtual void m_B0() = 0; - virtual void m_B8() = 0; - virtual void m_C0() = 0; - virtual void m_C8() = 0; - virtual int GetSyncFrequency() = 0; - virtual void m_D8() = 0; - virtual void m_E0() = 0; - virtual void m_E8() = 0; - virtual void m_F0() = 0; - virtual void m_F8() = 0; - virtual void Update() = 0; - virtual bool m_108_1604() = 0; // added in 1604 - virtual void m_108() = 0; - virtual void m_110() = 0; - virtual void m_118() = 0; - virtual void m_120() = 0; - virtual void m_128() = 0; - virtual void m_130() = 0; - virtual void m_138() = 0; - virtual void m_140() = 0; - virtual void m_148() = 0; - virtual void m_150() = 0; - virtual bool m_158(void* player, int type, int* outReason) = 0; - virtual void m_160() = 0; - virtual bool m_168(int* outReason) = 0; - virtual void m_170() = 0; - virtual void m_178() = 0; - virtual void m_180() = 0; - virtual void m_188() = 0; - virtual void m_190() = 0; - virtual void m_198() = 0; - virtual void m_1A0() = 0; - virtual void m_1A8() = 0; - virtual void m_1B0() = 0; - virtual void m_1B8() = 0; - virtual void m_1C0() = 0; - virtual void m_1C8() = 0; - virtual void m_1D0() = 0; - virtual void m_1D8() = 0; - virtual void m_1E0() = 0; - virtual void m_1E8() = 0; - virtual void m_1F0() = 0; - virtual void m_1F8() = 0; - virtual void m_200() = 0; - virtual void m_208() = 0; - virtual void m_210() = 0; - virtual void m_218() = 0; - virtual void m_220() = 0; - virtual void m_228() = 0; - virtual void m_230() = 0; - virtual void m_238() = 0; - virtual void m_240() = 0; - virtual void m_248() = 0; - virtual void m_250() = 0; - virtual void m_258() = 0; - virtual void m_260() = 0; - virtual void m_268() = 0; - virtual void m_270() = 0; - virtual void m_278() = 0; - virtual void m_280() = 0; - virtual void m_288() = 0; - virtual void m_290() = 0; - virtual void m_298() = 0; - virtual void m_2A0() = 0; - virtual void m_2A8() = 0; - virtual void m_2B0() = 0; - virtual void m_2B8() = 0; - virtual void m_2C0() = 0; - virtual void m_2C8() = 0; - virtual void m_2D0() = 0; - virtual void m_2D8() = 0; - virtual void m_2E0() = 0; - virtual void m_2E8() = 0; - virtual void m_2F0() = 0; - virtual void m_2F8() = 0; - virtual void m_300() = 0; - virtual void m_308() = 0; - virtual void m_310() = 0; - virtual void m_318() = 0; - virtual void m_320() = 0; - virtual void UpdatePendingVisibilityChanges() = 0; + virtual ~netObject() = 0; + virtual void mov1() = 0; + virtual void mov2() = 0; + virtual void m_8() = 0; + virtual void m_10() = 0; + virtual void m_18() = 0; + virtual void* m_20() = 0; + virtual void m_28() = 0; + virtual netSyncTree* GetSyncTree() = 0; + virtual void m_38() = 0; + virtual void m_40() = 0; + virtual void m_48() = 0; + virtual void m_50() = 0; + virtual void m_58() = 0; + virtual void m_60() = 0; + virtual void m_68() = 0; + virtual void m_70() = 0; + virtual void m_78() = 0; + virtual CObject* GetGameObject() = 0; + virtual void m_88() = 0; + virtual void m_90() = 0; + virtual void m_98() = 0; + virtual int GetObjectFlags() = 0; + virtual void m_A8() = 0; + virtual void m_B0() = 0; + virtual void m_B8() = 0; + virtual void m_C0() = 0; + virtual void m_C8() = 0; + virtual int GetSyncFrequency() = 0; + virtual void m_D8() = 0; + virtual void m_E0() = 0; + virtual void m_E8() = 0; + virtual void m_F0() = 0; + virtual void m_F8() = 0; + virtual void Update() = 0; + virtual bool m_108_1604() = 0; // added in 1604 + virtual void m_108() = 0; + virtual void m_110() = 0; + virtual void m_118() = 0; + virtual void m_120() = 0; + virtual void m_128() = 0; + virtual void m_130() = 0; + virtual void m_138() = 0; + virtual void m_140() = 0; + virtual void m_148() = 0; + virtual void m_150() = 0; + virtual bool m_158(void* player, int type, int* outReason) = 0; + virtual void m_160() = 0; + virtual bool m_168(int* outReason) = 0; + virtual void m_170() = 0; + virtual void m_178() = 0; + virtual void m_180() = 0; + virtual void m_188() = 0; + virtual void m_190() = 0; + virtual void m_198() = 0; + virtual void m_1A0() = 0; + virtual void m_1A8() = 0; + virtual void m_1B0() = 0; + virtual void m_1B8() = 0; + virtual void m_1C0() = 0; + virtual void m_1C8() = 0; + virtual void m_1D0() = 0; + virtual void m_1D8() = 0; + virtual void m_1E0() = 0; + virtual void m_1E8() = 0; + virtual void m_1F0() = 0; + virtual void m_1F8() = 0; + virtual void m_200() = 0; + virtual void m_208() = 0; + virtual void m_210() = 0; + virtual void m_218() = 0; + virtual void m_220() = 0; + virtual void m_228() = 0; + virtual void m_230() = 0; + virtual void m_238() = 0; + virtual void m_240() = 0; + virtual void m_248() = 0; + virtual void m_250() = 0; + virtual void m_258() = 0; + virtual void m_260() = 0; + virtual void m_268() = 0; + virtual void m_270() = 0; + virtual void m_278() = 0; + virtual void m_280() = 0; + virtual void m_288() = 0; + virtual void m_290() = 0; + virtual void m_298() = 0; + virtual void m_2A0() = 0; + virtual void m_2A8() = 0; + virtual void m_2B0() = 0; + virtual void m_2B8() = 0; + virtual void m_2C0() = 0; + virtual void m_2C8() = 0; + virtual void m_2D0() = 0; + virtual void m_2D8() = 0; + virtual void m_2E0() = 0; + virtual void m_2E8() = 0; + virtual void m_2F0() = 0; + virtual void m_2F8() = 0; + virtual void m_300() = 0; + virtual void m_308() = 0; + virtual void m_310() = 0; + virtual void m_318() = 0; + virtual void m_320() = 0; + virtual void UpdatePendingVisibilityChanges() = 0; }; //Size: 0x0050 static_assert(sizeof(netObject) == 0x50); } diff --git a/network/snSession.hpp b/network/snSession.hpp index bdb350e..20fd7d6 100644 --- a/network/snSession.hpp +++ b/network/snSession.hpp @@ -6,188 +6,188 @@ #pragma pack(push, 1) namespace rage { - class netConnectionManager; - class sysMemAllocator; + class netConnectionManager; + class sysMemAllocator; - class snPlayer - { - public: - uint64_t m_msg_id; //0x0000 - class rage::rlGamerInfo m_player_data; //0x0008 - }; //Size: 0x00A0 - static_assert(sizeof(rage::snPlayer) == 0xA0); + class snPlayer + { + public: + uint64_t m_msg_id; //0x0000 + class rage::rlGamerInfo m_player_data; //0x0008 + }; //Size: 0x00A0 + static_assert(sizeof(rage::snPlayer) == 0xA0); - class snPeer - { - public: - class rage::rlGamerInfo m_peer_data; //0x0000 - char pad_0098[40]; //0x0098 - }; //Size: 0x00C0 - static_assert(sizeof(rage::snPeer) == 0xC0); + class snPeer + { + public: + class rage::rlGamerInfo m_peer_data; //0x0000 + char pad_0098[40]; //0x0098 + }; //Size: 0x00C0 + static_assert(sizeof(rage::snPeer) == 0xC0); - class rlRemoteGamer - { - public: - rage::rlGamerHandle m_handle; - char pad_0010[4]; //0x0010 - uint32_t m_timeout_time; //0x0014 - uint32_t m_time_unk; //0x0018 - char pad_001C[4]; //0x001C - }; //Size: 0x0020 - static_assert(sizeof(rage::rlRemoteGamer) == 0x20); + class rlRemoteGamer + { + public: + rage::rlGamerHandle m_handle; + char pad_0010[4]; //0x0010 + uint32_t m_timeout_time; //0x0014 + uint32_t m_time_unk; //0x0018 + char pad_001C[4]; //0x001C + }; //Size: 0x0020 + static_assert(sizeof(rage::rlRemoteGamer) == 0x20); - class rlSession - { - public: - char pad_0008[168]; //0x0008 - class rage::rlSessionInfo m_session_info; //0x00B0 - char pad_0120[288]; //0x0120 - uint64_t m_session_id; //0x0240 - char pad_0248[1648]; //0x0248 + class rlSession + { + public: + char pad_0008[168]; //0x0008 + class rage::rlSessionInfo m_session_info; //0x00B0 + char pad_0120[288]; //0x0120 + uint64_t m_session_id; //0x0240 + char pad_0248[1648]; //0x0248 - virtual ~rlSession() = default; - }; //Size: 0x08B8 - static_assert(sizeof(rage::rlSession) == 0x8B8); + virtual ~rlSession() = default; + }; //Size: 0x08B8 + static_assert(sizeof(rage::rlSession) == 0x8B8); - class rlSessionDetail - { - public: - class rage::rlGamerInfoBase m_base_gamer_info; - char pad_0060[8]; //0x0060 - class rage::rlSessionInfo m_session_info; //0x0068 - char pad_00D8[14]; //0x00D8 - uint16_t m_session_type; //0x00E6 - char pad_00E8[324]; //0x00E8 - uint32_t m_player_count; //0x022C - uint32_t m_unk_player_count; //0x0230 - char pad_0234[2]; //0x0234 - int16_t m_unk_pos_x; //0x0236 - int16_t m_unk_pos_y; //0x0238 - int16_t m_unk_pos_z; //0x023A - uint8_t m_matchmaking_property_ids[32]; //0x023C - char pad_025C[2]; //0x025C - uint16_t m_rank; //0x025E - char pad_0260[1]; //0x0260 - uint8_t m_mental_state; //0x0261 - char pad_0262[21]; //0x0262 - uint8_t m_population_density; //0x0277 - char pad_0278[320]; //0x0278 - }; //Size: 0x03CA - static_assert(sizeof(rlSessionDetail) == 0x3B8); + class rlSessionDetail + { + public: + class rage::rlGamerInfoBase m_base_gamer_info; + char pad_0060[8]; //0x0060 + class rage::rlSessionInfo m_session_info; //0x0068 + char pad_00D8[14]; //0x00D8 + uint16_t m_session_type; //0x00E6 + char pad_00E8[324]; //0x00E8 + uint32_t m_player_count; //0x022C + uint32_t m_unk_player_count; //0x0230 + char pad_0234[2]; //0x0234 + int16_t m_unk_pos_x; //0x0236 + int16_t m_unk_pos_y; //0x0238 + int16_t m_unk_pos_z; //0x023A + uint8_t m_matchmaking_property_ids[32]; //0x023C + char pad_025C[2]; //0x025C + uint16_t m_rank; //0x025E + char pad_0260[1]; //0x0260 + uint8_t m_mental_state; //0x0261 + char pad_0262[21]; //0x0262 + uint8_t m_population_density; //0x0277 + char pad_0278[320]; //0x0278 + }; //Size: 0x03CA + static_assert(sizeof(rlSessionDetail) == 0x3B8); - class rlMatchmakingFindResult - { - public: - class rage::rlSessionDetail m_result_session_details[15]; //0x0000 - char pad_37C8[168]; //0x37C8 - }; //Size: 0x3870 - static_assert(sizeof(rage::rlMatchmakingFindResult) == 0x3870); + class rlMatchmakingFindResult + { + public: + class rage::rlSessionDetail m_result_session_details[15]; //0x0000 + char pad_37C8[168]; //0x37C8 + }; //Size: 0x3870 + static_assert(sizeof(rage::rlMatchmakingFindResult) == 0x3870); - class netGamePlayerData - { - public: - class rlGamerHandle m_handle; - bool m_is_activity_spectator; //0x0010 - char pad_0011[7]; //0x0011 - uint64_t m_crew_id; //0x0018 - uint16_t m_rank; //0x0020 - uint16_t m_debug_unk; //0x0022 - char pad_0024[4]; //0x0024 - uint32_t m_nat_type; //0x0028 - bool m_is_rockstar_dev; //0x002C - char pad_002D[3]; //0x002D - }; //Size: 0x0030 - static_assert(sizeof(rage::netGamePlayerData) == 0x30); + class netGamePlayerData + { + public: + class rlGamerHandle m_handle; + bool m_is_activity_spectator; //0x0010 + char pad_0011[7]; //0x0011 + uint64_t m_crew_id; //0x0018 + uint16_t m_rank; //0x0020 + uint16_t m_debug_unk; //0x0022 + char pad_0024[4]; //0x0024 + uint32_t m_nat_type; //0x0028 + bool m_is_rockstar_dev; //0x002C + char pad_002D[3]; //0x002D + }; //Size: 0x0030 + static_assert(sizeof(rage::netGamePlayerData) == 0x30); - class snSession - { - public: - rage::sysMemAllocator* m_memory_allocator; //0x0000 - char pad_0008[64]; //0x0008 - rage::netConnectionManager* m_net_connection_mgr; //0x0048 - char pad_0050[48]; //0x0050 - class rage::rlSession m_rline_session; //0x0080 - class rage::snPlayer m_local_player; //0x0938 - uint64_t m_host_token; //0x09D8 - char pad_09E0[144]; //0x09E0 - class rage::snPeer m_peer_storage[32]; //0x0A70 - char pad_2270[24]; //0x2270 - class rage::snPeer* m_peers[32]; //0x2288 - uint32_t m_peer_count; //0x2388 - char pad_238C[4]; //0x238C - class rage::snPlayer m_player_storage[32]; //0x2390 - char pad_3790[24]; //0x3790 - class rage::snPlayer* m_players[32]; //0x37A8 - uint32_t m_player_count; //0x38A8 - char pad_38AC[4]; //0x38AC - class rage::rlRemoteGamer m_remote_gamers[32]; //0x38B0 - uint32_t m_num_remote_gamers; //0x3CB0 - bool m_player_joining; //0x3CB4 - char pad_3CB5[107]; //0x3CB5 - uint32_t m_connection_identifier; //0x3D20 - char pad_3D24[8]; //0x3D24 - char m_token_key[64]; //0x3D2C - char m_id_key[64]; //0x3D6C - char m_info_key[64]; //0x3DAC - char m_host_key[64]; //0x3DEC - char m_join_key[64]; //0x3E2C - char pad_3E6C[4]; //0x3E6C + class snSession + { + public: + rage::sysMemAllocator* m_memory_allocator; //0x0000 + char pad_0008[64]; //0x0008 + rage::netConnectionManager* m_net_connection_mgr; //0x0048 + char pad_0050[48]; //0x0050 + class rage::rlSession m_rline_session; //0x0080 + class rage::snPlayer m_local_player; //0x0938 + uint64_t m_host_token; //0x09D8 + char pad_09E0[144]; //0x09E0 + class rage::snPeer m_peer_storage[32]; //0x0A70 + char pad_2270[24]; //0x2270 + class rage::snPeer* m_peers[32]; //0x2288 + uint32_t m_peer_count; //0x2388 + char pad_238C[4]; //0x238C + class rage::snPlayer m_player_storage[32]; //0x2390 + char pad_3790[24]; //0x3790 + class rage::snPlayer* m_players[32]; //0x37A8 + uint32_t m_player_count; //0x38A8 + char pad_38AC[4]; //0x38AC + class rage::rlRemoteGamer m_remote_gamers[32]; //0x38B0 + uint32_t m_num_remote_gamers; //0x3CB0 + bool m_player_joining; //0x3CB4 + char pad_3CB5[107]; //0x3CB5 + uint32_t m_connection_identifier; //0x3D20 + char pad_3D24[8]; //0x3D24 + char m_token_key[64]; //0x3D2C + char m_id_key[64]; //0x3D6C + char m_info_key[64]; //0x3DAC + char m_host_key[64]; //0x3DEC + char m_join_key[64]; //0x3E2C + char pad_3E6C[4]; //0x3E6C - inline bool is_host() - { - return m_local_player.m_player_data.m_host_token == m_host_token; - } + inline bool is_host() + { + return m_local_player.m_player_data.m_host_token == m_host_token; + } - inline snPlayer* get_player_by_token(uint64_t token) - { - for (std::uint32_t i = 0; i < m_player_count; i++) - { - if (m_players[i]->m_player_data.m_host_token == token) - { - return m_players[i]; - } - } + inline snPlayer* get_player_by_token(uint64_t token) + { + for (std::uint32_t i = 0; i < m_player_count; i++) + { + if (m_players[i]->m_player_data.m_host_token == token) + { + return m_players[i]; + } + } - return nullptr; - } + return nullptr; + } - inline snPeer* get_peer_by_rockstar_id(uint64_t rid) - { - for (uint32_t i = 0; i < m_peer_count; i++) - { - if (m_peers[i]->m_peer_data.m_gamer_handle_2.m_rockstar_id == rid) - { - return m_peers[i]; - } - } + inline snPeer* get_peer_by_rockstar_id(uint64_t rid) + { + for (uint32_t i = 0; i < m_peer_count; i++) + { + if (m_peers[i]->m_peer_data.m_gamer_handle_2.m_rockstar_id == rid) + { + return m_peers[i]; + } + } - return nullptr; - } + return nullptr; + } - }; //Size: 0x3E70 - static_assert(sizeof(rage::snSession) == 0x3E70); + }; //Size: 0x3E70 + static_assert(sizeof(rage::snSession) == 0x3E70); - class snMsgRemoveGamersFromSessionCmd - { - public: - uint64_t m_session_id; //0x0000 - uint64_t m_peer_ids[32]; //0x0008 - int32_t m_unk = -1; //0x0108 - uint32_t m_num_peers; //0x010C - }; //Size: 0x0110 - static_assert(sizeof(rage::snMsgRemoveGamersFromSessionCmd) == 0x110); + class snMsgRemoveGamersFromSessionCmd + { + public: + uint64_t m_session_id; //0x0000 + uint64_t m_peer_ids[32]; //0x0008 + int32_t m_unk = -1; //0x0108 + uint32_t m_num_peers; //0x010C + }; //Size: 0x0110 + static_assert(sizeof(rage::snMsgRemoveGamersFromSessionCmd) == 0x110); } class SessionSortEntry { public: - class rage::rlSessionDetail* m_session_detail; //0x0000 - char pad_0008[4]; //0x0008 - float m_score; //0x000C - char pad_0010[8]; //0x0010 + class rage::rlSessionDetail* m_session_detail; //0x0000 + char pad_0008[4]; //0x0008 + float m_score; //0x000C + char pad_0010[8]; //0x0010 }; //Size: 0x0018 static_assert(sizeof(SessionSortEntry) == 0x18); #pragma pack(pop) diff --git a/ped/CPed.hpp b/ped/CPed.hpp index f93b192..99a7f51 100644 --- a/ped/CPed.hpp +++ b/ped/CPed.hpp @@ -18,35 +18,35 @@ class CPed : public rage::CPhysical { public: - char gap2EC[20]; - rage::fvector3 m_velocity; //0x0300 - char pad_030C[260]; //0x030C - class CPedBoneInfo m_bone_info; //0x0410 - char pad_04A0[2160]; //0x04A0 - class CVehicle *m_vehicle; //0x0D10 - char pad_0D18[896]; //0x0D18 - uint32_t m_ped_type; //0x1098 - char pad_109C[4]; //0x109C - class CPedOxygenInfo* m_oxygen_info; //0x10A0 - class CPlayerInfo *m_player_info; //0x10A8 - class CPedInventory* m_inventory; //0x10B0 - class CPedWeaponManager *m_weapon_manager; //0x10B8 - char pad_10C0[892]; //0x10C0 - uint8_t m_seatbelt; //0x143C - char pad_143D[13]; //0x143D - uint8_t m_can_switch_weapon; //0x144A - uint8_t m_ped_task_flag; //0x144B - char pad_144C[4]; //0x144C - uint8_t m_forced_aim; //0x1450 m_forced_aim ^= (m_forced_aim ^ -(char)toggle) & 0x20; - char pad_1451[187]; //0x1451 - float m_armor; //0x150C - float unk_health_threshold; //0x1510 - float m_fatigued_health_threshold; //0x1514 - float m_injured_health_threshold; //0x1518 - float m_dying_health_threshold; //0x151C - float m_hurt_health_threshold; //0x1520 - char pad_1524[240]; //0x1524 - uint16_t m_cash; //0x1614 + char gap2EC[20]; + rage::fvector3 m_velocity; //0x0300 + char pad_030C[260]; //0x030C + class CPedBoneInfo m_bone_info; //0x0410 + char pad_04A0[2160]; //0x04A0 + class CVehicle *m_vehicle; //0x0D10 + char pad_0D18[896]; //0x0D18 + uint32_t m_ped_type; //0x1098 + char pad_109C[4]; //0x109C + class CPedOxygenInfo* m_oxygen_info; //0x10A0 + class CPlayerInfo *m_player_info; //0x10A8 + class CPedInventory* m_inventory; //0x10B0 + class CPedWeaponManager *m_weapon_manager; //0x10B8 + char pad_10C0[892]; //0x10C0 + uint8_t m_seatbelt; //0x143C + char pad_143D[13]; //0x143D + uint8_t m_can_switch_weapon; //0x144A + uint8_t m_ped_task_flag; //0x144B + char pad_144C[4]; //0x144C + uint8_t m_forced_aim; //0x1450 m_forced_aim ^= (m_forced_aim ^ -(char)toggle) & 0x20; + char pad_1451[187]; //0x1451 + float m_armor; //0x150C + float unk_health_threshold; //0x1510 + float m_fatigued_health_threshold; //0x1514 + float m_injured_health_threshold; //0x1518 + float m_dying_health_threshold; //0x151C + float m_hurt_health_threshold; //0x1520 + char pad_1524[240]; //0x1524 + uint16_t m_cash; //0x1614 }; //Size: 0x1616 static_assert(sizeof(CPed) == 0x1616); diff --git a/ped/CPedBoneInfo.hpp b/ped/CPedBoneInfo.hpp index 8bc998a..f9205d9 100644 --- a/ped/CPedBoneInfo.hpp +++ b/ped/CPedBoneInfo.hpp @@ -5,23 +5,23 @@ class CPedBoneInfo { public: - rage::fvector3 m_bone_head_model_coords; //0x0000 - char pad_000C[4]; //0x000C - rage::fvector3 m_bone_left_foot_model_coords; //0x0010 - char pad_001C[4]; //0x001C - rage::fvector3 m_bone_right_foot_model_coords; //0x0020 - char pad_002C[4]; //0x002C - rage::fvector3 m_bone_left_ankle_model_coords; //0x0030 - char pad_003C[4]; //0x003C - rage::fvector3 m_bone_right_ankle_model_coords; //0x0040 - char pad_004C[4]; //0x004C - rage::fvector3 m_bone_left_hand_model_coords; //0x0050 - char pad_005C[4]; //0x005C - rage::fvector3 m_bone_right_hand_model_coords; //0x0060 - char pad_006C[4]; //0x006C - rage::fvector3 m_bone_neck_model_coords; //0x0070 - char pad_007C[4]; //0x007C - rage::fvector3 m_bone_abdomen_model_coords; //0x0080 - char pad_008C[4]; //0x008C + rage::fvector3 m_bone_head_model_coords; //0x0000 + char pad_000C[4]; //0x000C + rage::fvector3 m_bone_left_foot_model_coords; //0x0010 + char pad_001C[4]; //0x001C + rage::fvector3 m_bone_right_foot_model_coords; //0x0020 + char pad_002C[4]; //0x002C + rage::fvector3 m_bone_left_ankle_model_coords; //0x0030 + char pad_003C[4]; //0x003C + rage::fvector3 m_bone_right_ankle_model_coords; //0x0040 + char pad_004C[4]; //0x004C + rage::fvector3 m_bone_left_hand_model_coords; //0x0050 + char pad_005C[4]; //0x005C + rage::fvector3 m_bone_right_hand_model_coords; //0x0060 + char pad_006C[4]; //0x006C + rage::fvector3 m_bone_neck_model_coords; //0x0070 + char pad_007C[4]; //0x007C + rage::fvector3 m_bone_abdomen_model_coords; //0x0080 + char pad_008C[4]; //0x008C }; //Size: 0x0090 static_assert(sizeof(CPedBoneInfo) == 0x90); \ No newline at end of file diff --git a/ped/CPedFactory.hpp b/ped/CPedFactory.hpp index a6bede5..44f984b 100644 --- a/ped/CPedFactory.hpp +++ b/ped/CPedFactory.hpp @@ -5,7 +5,7 @@ class CPedFactory { public: - char pad_0000[8]; //0x0000 - class CPed* m_local_ped; //0x0008 + char pad_0000[8]; //0x0000 + class CPed* m_local_ped; //0x0008 }; //Size: 0x0010 static_assert(sizeof(CPedFactory) == 0x10); diff --git a/ped/CPedModelInfo.hpp b/ped/CPedModelInfo.hpp index ceb3b5f..6858c62 100644 --- a/ped/CPedModelInfo.hpp +++ b/ped/CPedModelInfo.hpp @@ -7,40 +7,40 @@ class CPedModelInfo : public CBaseModelInfo { public: - char gapB0[48]; - uint64_t qwordE0; - uint32_t dwordE8; - char gapEC[4]; - uint32_t dwordF0; - char gapF4[4]; - uint64_t qwordF8; - uint32_t dword100; - uint64_t qword108; - uint64_t qword110; - uint64_t qword118; - uint64_t qword120; - uint64_t qword128; - uint32_t dword130; - char gap134[148]; - uint64_t qword1C8; - uint32_t dword1D0; - uint64_t qword1D8; - uint32_t dword1E0; - char gap1E4[52]; - uint64_t qword218; - char gap220[8]; - uint64_t qword228; - uint32_t dword230; - char gap234[4]; - uint32_t dword238; - char gap23C[12]; - uint64_t qword248; - uint64_t qword250; - uint64_t qword258; - uint64_t qword260; - uint64_t qword268; - uint64_t qword270; - uint64_t qword278; - char gap280[16]; + char gapB0[48]; + uint64_t qwordE0; + uint32_t dwordE8; + char gapEC[4]; + uint32_t dwordF0; + char gapF4[4]; + uint64_t qwordF8; + uint32_t dword100; + uint64_t qword108; + uint64_t qword110; + uint64_t qword118; + uint64_t qword120; + uint64_t qword128; + uint32_t dword130; + char gap134[148]; + uint64_t qword1C8; + uint32_t dword1D0; + uint64_t qword1D8; + uint32_t dword1E0; + char gap1E4[52]; + uint64_t qword218; + char gap220[8]; + uint64_t qword228; + uint32_t dword230; + char gap234[4]; + uint32_t dword238; + char gap23C[12]; + uint64_t qword248; + uint64_t qword250; + uint64_t qword258; + uint64_t qword260; + uint64_t qword268; + uint64_t qword270; + uint64_t qword278; + char gap280[16]; }; static_assert(sizeof(CPedModelInfo) == 0x290); diff --git a/ped/CPedOxygenInfo.hpp b/ped/CPedOxygenInfo.hpp index 4bf6d5f..dd5e903 100644 --- a/ped/CPedOxygenInfo.hpp +++ b/ped/CPedOxygenInfo.hpp @@ -3,7 +3,7 @@ class CPedOxygenInfo { public: - char pad_0000[632]; //0x0000 - float m_oxygen_time; //0x0278 + char pad_0000[632]; //0x0000 + float m_oxygen_time; //0x0278 }; //Size: 0x027C static_assert(sizeof(CPedOxygenInfo) == 0x27C); \ No newline at end of file diff --git a/ped/CPedWeaponManager.hpp b/ped/CPedWeaponManager.hpp index b1d29a0..62a2d27 100644 --- a/ped/CPedWeaponManager.hpp +++ b/ped/CPedWeaponManager.hpp @@ -7,12 +7,12 @@ class CPedWeaponManager { public: - char pad_0000[16]; //0x0000 - class CPed* m_owner; //0x0010 - uint32_t m_selected_weapon_hash; //0x0018 - char pad_001C[4]; //0x001C - class CWeaponInfo* m_weapon_info; //0x0020 - char pad_0028[72]; //0x0028 - class CWeaponInfo* m_vehicle_weapon_info; //0x0070 + char pad_0000[16]; //0x0000 + class CPed* m_owner; //0x0010 + uint32_t m_selected_weapon_hash; //0x0018 + char pad_001C[4]; //0x001C + class CWeaponInfo* m_weapon_info; //0x0020 + char pad_0028[72]; //0x0028 + class CWeaponInfo* m_vehicle_weapon_info; //0x0070 }; //Size: 0x0078 static_assert(sizeof(CPedWeaponManager) == 0x78); diff --git a/player/CNonPhysicalPlayerData.hpp b/player/CNonPhysicalPlayerData.hpp index 245a71c..13cc735 100644 --- a/player/CNonPhysicalPlayerData.hpp +++ b/player/CNonPhysicalPlayerData.hpp @@ -22,9 +22,9 @@ namespace rage class CNonPhysicalPlayerData : public rage::nonPhysicalPlayerDataBase { public: - int32_t m_bubble_id; //0x0008 - int32_t m_player_id; //0x000C - rage::fvector3 m_position; //0x0010 + int32_t m_bubble_id; //0x0008 + int32_t m_player_id; //0x000C + rage::fvector3 m_position; //0x0010 }; //Size: 0x001C static_assert(sizeof(CNonPhysicalPlayerData) == 0x1C); #pragma pack(pop) diff --git a/player/CPlayerAngles.hpp b/player/CPlayerAngles.hpp index 491de2c..3616a97 100644 --- a/player/CPlayerAngles.hpp +++ b/player/CPlayerAngles.hpp @@ -7,16 +7,16 @@ class CPlayerCameraData; class CPlayerAngles { public: - char pad_0000[16]; //0x0000 - CPlayerCameraData* m_cam_data; //0x0010 - char pad_0018[24]; //0x0018 - rage::fvector3 m_right; //0x0030 - char pad_003C[4]; //0x003C - rage::fvector3 m_forward; //0x0040 - char pad_004C[4]; //0x004C - rage::fvector3 m_up; //0x0050 - char pad_005C[4]; //0x005C - rage::fvector3 m_position; //0x0060 - char pad_006C[36]; //0x006C + char pad_0000[16]; //0x0000 + CPlayerCameraData* m_cam_data; //0x0010 + char pad_0018[24]; //0x0018 + rage::fvector3 m_right; //0x0030 + char pad_003C[4]; //0x003C + rage::fvector3 m_forward; //0x0040 + char pad_004C[4]; //0x004C + rage::fvector3 m_up; //0x0050 + char pad_005C[4]; //0x005C + rage::fvector3 m_position; //0x0060 + char pad_006C[36]; //0x006C }; //Size: 0x0090 static_assert(sizeof(CPlayerAngles) == 0x90); diff --git a/player/CPlayerInfo.hpp b/player/CPlayerInfo.hpp index 813ace4..a5a3279 100644 --- a/player/CPlayerInfo.hpp +++ b/player/CPlayerInfo.hpp @@ -6,60 +6,60 @@ enum class eGameState : int32_t { - Invalid = -1, - Playing, - Died, - Arrested, - FailedMission, - LeftGame, - Respawn, - InMPCutscene + Invalid = -1, + Playing, + Died, + Arrested, + FailedMission, + LeftGame, + Respawn, + InMPCutscene }; #pragma pack(push, 4) class CPlayerInfo { public: - char pad_0000[32]; //0x0000 - class rage::rlGamerInfo m_net_player_data; //0x0020 - char pad_00B8[184]; //0x00B8 - float m_swim_speed; //0x0170 - char pad_0174[20]; //0x0174 - uint32_t m_water_proof; //0x0188 - char pad_018C[76]; //0x018C - eGameState m_game_state; //0x01D8 - char pad_01DC[12]; //0x01DC - class CPed *m_ped; //0x01E8 - char pad_01F0[40]; //0x01F0 - uint32_t m_frame_flags; //0x0218 - char pad_021C[52]; //0x021C - uint32_t m_player_controls; //0x0250 - char pad_0254[1256]; //0x0254 - float m_wanted_can_change; //0x073C - char pad_0740[144]; //0x0740 - float m_wanted_level_difficulty; //0x07D0 min:-1 max:1 - char pad_07D4[52]; //0x07D4 - float m_wanted_level_multiplier; //0x0808 min:0 max:1 - char pad_080C[100]; //0x080C - uint32_t m_npc_ignore; //0x0870 - char pad_0874[12]; //0x0874 - bool m_is_wanted; //0x0880 - char pad_0881[7]; //0x0881 - uint32_t m_wanted_level; //0x0888 - uint32_t m_wanted_level_display; //0x088C - char pad_0890[1120]; //0x0890 - float m_run_speed; //0x0CF0 - float m_stamina; //0x0CF4 - float m_stamina_regen; //0x0CF8 - char pad_0CFC[16]; //0x0CFC - float m_weapon_damage_mult; //0x0D0C - float m_weapon_defence_mult; //0x0D10 - char pad_0D14[4]; //0x0D14 - float m_melee_weapon_damage_mult; //0x0D18 - float m_melee_damage_mult; //0x0D1C - float m_melee_defence_mult; //0x0D20 - char pad_0D24[8]; //0x0D24 - float m_melee_weapon_defence_mult; //0x0D2C + char pad_0000[32]; //0x0000 + class rage::rlGamerInfo m_net_player_data; //0x0020 + char pad_00B8[184]; //0x00B8 + float m_swim_speed; //0x0170 + char pad_0174[20]; //0x0174 + uint32_t m_water_proof; //0x0188 + char pad_018C[76]; //0x018C + eGameState m_game_state; //0x01D8 + char pad_01DC[12]; //0x01DC + class CPed *m_ped; //0x01E8 + char pad_01F0[40]; //0x01F0 + uint32_t m_frame_flags; //0x0218 + char pad_021C[52]; //0x021C + uint32_t m_player_controls; //0x0250 + char pad_0254[1256]; //0x0254 + float m_wanted_can_change; //0x073C + char pad_0740[144]; //0x0740 + float m_wanted_level_difficulty; //0x07D0 min:-1 max:1 + char pad_07D4[52]; //0x07D4 + float m_wanted_level_multiplier; //0x0808 min:0 max:1 + char pad_080C[100]; //0x080C + uint32_t m_npc_ignore; //0x0870 + char pad_0874[12]; //0x0874 + bool m_is_wanted; //0x0880 + char pad_0881[7]; //0x0881 + uint32_t m_wanted_level; //0x0888 + uint32_t m_wanted_level_display; //0x088C + char pad_0890[1120]; //0x0890 + float m_run_speed; //0x0CF0 + float m_stamina; //0x0CF4 + float m_stamina_regen; //0x0CF8 + char pad_0CFC[16]; //0x0CFC + float m_weapon_damage_mult; //0x0D0C + float m_weapon_defence_mult; //0x0D10 + char pad_0D14[4]; //0x0D14 + float m_melee_weapon_damage_mult; //0x0D18 + float m_melee_damage_mult; //0x0D1C + float m_melee_defence_mult; //0x0D20 + char pad_0D24[8]; //0x0D24 + float m_melee_weapon_defence_mult; //0x0D2C }; //Size: 0x0D30 static_assert(sizeof(CPlayerInfo) == 0xD30); #pragma pack(pop) diff --git a/rage/atSingleton.hpp b/rage/atSingleton.hpp index 5ade0cf..bd3f8d0 100644 --- a/rage/atSingleton.hpp +++ b/rage/atSingleton.hpp @@ -3,20 +3,20 @@ namespace rage { template - struct atSingleton - { - private: - T* m_basePtr{}; + struct atSingleton + { + private: + T* m_basePtr{}; - public: - bool isValid() const - { - return m_basePtr != nullptr; - } + public: + bool isValid() const + { + return m_basePtr != nullptr; + } - T* getInstance() - { - return m_basePtr; - } - }; + T* getInstance() + { + return m_basePtr; + } + }; } diff --git a/rage/joaat.hpp b/rage/joaat.hpp index 3f7c340..03fe86e 100644 --- a/rage/joaat.hpp +++ b/rage/joaat.hpp @@ -6,22 +6,22 @@ namespace rage { using joaat_t = std::uint32_t; - inline constexpr char joaat_to_lower(char c) + inline constexpr char joaat_to_lower(char c) { return (c >= 'A' && c <= 'Z') ? c + ('a' - 'A') : c; } - inline joaat_t joaat(std::string_view str) - { - joaat_t hash = 0; - for (auto c : str) { - hash += joaat_to_lower(c); - hash += (hash << 10); - hash ^= (hash >> 6); - } - hash += (hash << 3); - hash ^= (hash >> 11); - hash += (hash << 15); - return hash; - } + inline joaat_t joaat(std::string_view str) + { + joaat_t hash = 0; + for (auto c : str) { + hash += joaat_to_lower(c); + hash += (hash << 10); + hash ^= (hash >> 6); + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + return hash; + } }; diff --git a/rage/rlMetric.hpp b/rage/rlMetric.hpp index 0eaa53a..8c5dfbb 100644 --- a/rage/rlMetric.hpp +++ b/rage/rlMetric.hpp @@ -3,21 +3,21 @@ namespace rage { - class rlMetric - { - public: - virtual ~rlMetric() = default; + class rlMetric + { + public: + virtual ~rlMetric() = default; - virtual int _0x08() { return 0; }; // returns a constant integer + virtual int _0x08() { return 0; }; // returns a constant integer - virtual int _0x10() { return 0; }; // returns a constant integer + virtual int _0x10() { return 0; }; // returns a constant integer - virtual const char* get_name() { return ""; }; + virtual const char* get_name() { return ""; }; - virtual bool serialize(void* serializer) { return false; }; + virtual bool serialize(void* serializer) { return false; }; - virtual int get_size() { return 0; }; + virtual int get_size() { return 0; }; - virtual joaat_t get_name_hash() { return 0; }; - }; + virtual joaat_t get_name_hash() { return 0; }; + }; }; \ No newline at end of file diff --git a/rage/rlSessionByGamerTaskResult.hpp b/rage/rlSessionByGamerTaskResult.hpp index 3e8448a..0868e5a 100644 --- a/rage/rlSessionByGamerTaskResult.hpp +++ b/rage/rlSessionByGamerTaskResult.hpp @@ -4,10 +4,10 @@ namespace rage { - class rlSessionByGamerTaskResult - { - public: - rlGamerHandle m_gamer_handle{ 0 }; - rlSessionInfo m_session_info; - }; + class rlSessionByGamerTaskResult + { + public: + rlGamerHandle m_gamer_handle{ 0 }; + rlSessionInfo m_session_info; + }; } diff --git a/rage/sysMemAllocator.hpp b/rage/sysMemAllocator.hpp new file mode 100644 index 0000000..38df0a9 --- /dev/null +++ b/rage/sysMemAllocator.hpp @@ -0,0 +1,25 @@ +#pragma once +#include + +namespace rage +{ + class sysMemAllocator + { + public: + virtual ~sysMemAllocator() = 0; + + virtual void SetQuitOnFail(bool) = 0; + virtual void* Allocate(std::size_t size, std::size_t align, int subAllocator) = 0; + virtual void* TryAllocate(std::size_t size, std::size_t align, int subAllocator) = 0; + virtual void Free(void* pointer) = 0; + virtual void TryFree(void* pointer) = 0; + virtual void Resize(void* pointer, std::size_t size) = 0; + virtual sysMemAllocator* GetAllocator(int allocator) const = 0; + virtual sysMemAllocator* GetAllocator(int allocator) = 0; + virtual sysMemAllocator* GetPointerOwner(void* pointer) = 0; + virtual std::size_t GetSize(void* pointer) const = 0; + virtual std::size_t GetMemoryUsed(int memoryBucket) = 0; + virtual std::size_t GetMemoryAvailable() = 0; + + }; +} \ No newline at end of file diff --git a/script/GtaThread.hpp b/script/GtaThread.hpp new file mode 100644 index 0000000..e69de29 diff --git a/script/dataList.hpp b/script/dataList.hpp new file mode 100644 index 0000000..bf6682c --- /dev/null +++ b/script/dataList.hpp @@ -0,0 +1,22 @@ +#pragma once +#include "../base/datBase.hpp" + +namespace rage +{ + template + class atDNode : public Base + { + public: + T m_data; + void *m_unk; + atDNode *m_next; + }; + + template + class atDList + { + public: + Node *m_head; + Node *m_tail; + }; +} \ No newline at end of file diff --git a/script/scrNativeHandler.hpp b/script/scrNativeHandler.hpp new file mode 100644 index 0000000..ac11837 --- /dev/null +++ b/script/scrNativeHandler.hpp @@ -0,0 +1,60 @@ +#pragma once +#include +#include +#include + +namespace rage +{ + using scrNativeHash = std::int64_t; + using scrNativePair = std::pair; + + class scrNativeCallContext + { + public: + void reset() + { + m_arg_count = 0; + m_data_count = 0; + } + + template + void push_arg(T &&value) + { + static_assert(sizeof(T) <= sizeof(std::uint64_t)); + *reinterpret_cast>*>(reinterpret_cast(m_args) + (m_arg_count++)) = std::forward(value); + } + + template + T &get_arg(std::size_t index) + { + static_assert(sizeof(T) <= sizeof(std::uint64_t)); + return *reinterpret_cast(reinterpret_cast(m_args) + index); + } + + template + void set_arg(std::size_t index, T &&value) + { + static_assert(sizeof(T) <= sizeof(std::uint64_t)); + *reinterpret_cast>*>(reinterpret_cast(m_args) + index) = std::forward(value); + } + + template + T *get_return_value() + { + return reinterpret_cast(m_return_value); + } + + template + void set_return_value(T &&value) + { + *reinterpret_cast>*>(m_return_value) = std::forward(value); + } + protected: + void *m_return_value; + std::uint32_t m_arg_count; + void *m_args; + std::int32_t m_data_count; + std::uint32_t m_data[48]; + }; + static_assert(sizeof(scrNativeCallContext) == 0xE0); +} \ No newline at end of file diff --git a/script/scrNativeRegistration.hpp b/script/scrNativeRegistration.hpp new file mode 100644 index 0000000..71a9737 --- /dev/null +++ b/script/scrNativeRegistration.hpp @@ -0,0 +1,43 @@ +#pragma once +#include + +namespace rage +{ + class scrNativeRegistration + { + public: + uint64_t m_next_registration1; + uint64_t m_next_registration2; + void* m_handlers[7]; + uint32_t m_num_entries1; + uint32_t m_num_entries2; + uint64_t m_hashes; + scrNativeRegistration* get_next_registration() { + std::uintptr_t result; + auto nextReg = uintptr_t(&m_next_registration1); + auto newReg = nextReg ^ m_next_registration2; + auto charTableOfRegs = (char*)&result - nextReg; + for (auto i = 0; i < 3; i++) { + *(std::uint32_t*)&charTableOfRegs[nextReg] = static_cast(newReg) ^ *(std::uint32_t*)nextReg; + nextReg += 4; + } + return reinterpret_cast(result); + } + + std::uint32_t get_num_entries() { + return static_cast(((std::uintptr_t)&m_num_entries1) ^ m_num_entries1 ^ m_num_entries2); + } + + std::uint64_t get_hash(std::uint32_t index) { + auto nativeAddress = 16 * index + std::uintptr_t(&m_next_registration1) + 0x54; + std::uint64_t result; + auto charTableOfRegs = (char*)&result - nativeAddress; + auto addressIndex = nativeAddress ^ *(std::uint32_t*)(nativeAddress + 8); + for (auto i = 0; i < 3; i++) { + *(std::uint32_t*)&charTableOfRegs[nativeAddress] = static_cast(addressIndex ^ *(std::uint32_t*)(nativeAddress)); + nativeAddress += 4; + } + return result; + } + }; +} \ No newline at end of file diff --git a/script/scrNativeRegistrationTable.hpp b/script/scrNativeRegistrationTable.hpp new file mode 100644 index 0000000..19f90e6 --- /dev/null +++ b/script/scrNativeRegistrationTable.hpp @@ -0,0 +1,16 @@ +#pragma once +#include + +#include "scrNativeRegistration.hpp" + +#pragma pack(push, 1) +namespace rage +{ + class scrNativeRegistrationTable + { + scrNativeRegistration *m_entries[0xFF]; + std::uint32_t m_unk; + bool m_initialized; + }; +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scrProgram.hpp b/script/scrProgram.hpp new file mode 100644 index 0000000..1cb8209 --- /dev/null +++ b/script/scrProgram.hpp @@ -0,0 +1,100 @@ +#pragma once +#include + +#include "../base/pgBase.hpp" + +#pragma pack(push, 1) +namespace rage +{ + class scrProgram : public pgBase + { + public: + std::uint8_t** m_code_blocks; // 0x10 + std::uint32_t m_hash; // 0x18 + std::uint32_t m_code_size; // 0x1C + std::uint32_t m_arg_count; // 0x20 + std::uint32_t m_local_count; // 0x24 + std::uint32_t m_global_count; // 0x28 + std::uint32_t m_native_count; // 0x2C + void *m_local_data; // 0x30 + std::int64_t **m_global_data; // 0x38 + void **m_native_entrypoints; // 0x40 + char m_padding6[0x10]; // 0x48 + std::uint32_t m_name_hash; // 0x58 + char m_padding7[0x04]; // 0x5C + const char* m_name; // 0x60 + const char** m_strings_data; // 0x68 + std::uint32_t m_strings_count; // 0x70 + char m_padding8[0x0C]; // 0x74 + + bool is_valid() const + { + return m_code_size != 0; + } + + std::uint32_t get_num_code_pages() const + { + return (m_code_size + 0x3FFF) >> 14; + } + + std::uint32_t get_code_page_size(std::uint32_t page) const + { + auto num = get_num_code_pages(); + if (page < num) + { + if (page == num - 1) + return m_code_size & 0x3FFF; + return 0x4000; + } + + return 0; + } + + std::uint32_t get_full_code_size() const + { + auto numPages = get_num_code_pages(); + if (!numPages) + return 0; + if (numPages == 1) + --numPages; + + return (numPages * 0x4000) + (m_code_size & 0x3FFF); + } + + std::uint8_t* get_code_page(std::uint32_t page) const + { + return m_code_blocks[page]; + } + + std::uint8_t* get_code_address(std::uint32_t index) const + { + if (index < m_code_size) + return &m_code_blocks[index >> 14][index & 0x3FFF]; + + return nullptr; + } + + const char* get_string(std::uint32_t index) const + { + if (index < m_strings_count) + return &m_strings_data[index >> 14][index & 0x3FFF]; + + return nullptr; + } + + void** get_address_of_native_entrypoint(void* entrypoint) + { + for (std::uint32_t i = 0; i < m_native_count; ++i) + { + if (m_native_entrypoints[i] == entrypoint) + { + return m_native_entrypoints + i; + } + } + + return nullptr; + } + }; + static_assert(sizeof(scrProgram) == 0x80); +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scrProgramTable.hpp b/script/scrProgramTable.hpp new file mode 100644 index 0000000..0f34347 --- /dev/null +++ b/script/scrProgramTable.hpp @@ -0,0 +1,41 @@ +#pragma once +#include + +#include "scrProgramTableEntry.hpp" + +#pragma pack(push, 1) +namespace rage +{ + class scrProgramTable + { + public: + scrProgramTableEntry* m_data; // 0x00 + char m_padding[0x10]; // 0x08 + std::uint32_t m_size; // 0x18 + + scrProgram* find_script(joaat_t hash) + { + for (std::uint32_t i = 0; i < m_size; ++i) + { + if (m_data[i].m_hash == hash) + { + return m_data[i].m_program; + } + } + + return nullptr; + } + + scrProgramTableEntry* begin() + { + return m_data; + } + + scrProgramTableEntry* end() + { + return m_data + m_size; + } + }; + static_assert(sizeof(scrProgramTable) == 0x1C); +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scrProgramTableEntry.hpp b/script/scrProgramTableEntry.hpp new file mode 100644 index 0000000..e43df2e --- /dev/null +++ b/script/scrProgramTableEntry.hpp @@ -0,0 +1,17 @@ +#pragma once +#include "scrProgram.hpp" +#include "../rage/joaat.hpp" + +#pragma pack(push, 1) +namespace rage +{ + class scrProgramTableEntry + { + public: + scrProgram* m_program; // 0x00 + char m_Pad1[0x04]; // 0x08 + joaat_t m_hash; // 0x0C + }; + static_assert(sizeof(scrProgramTableEntry) == 0x10); +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scrThread.hpp b/script/scrThread.hpp new file mode 100644 index 0000000..bb4fcd9 --- /dev/null +++ b/script/scrThread.hpp @@ -0,0 +1,31 @@ +#pragma once +#include "scriptHandler.hpp" +#include "scriptHandlerNetComponent.hpp" +#include "scrThreadContext.hpp" + +namespace rage +{ + class scrThread + { + public: + virtual ~scrThread() = default; // 0 (0x00) + virtual void reset(std::uint32_t script_hash, void* args, std::uint32_t arg_count) = 0; // 1 (0x08) + virtual eThreadState run() = 0; // 2 (0x10) + virtual eThreadState tick(std::uint32_t ops_to_execute) = 0; // 3 (0x18) + virtual void kill() = 0; + + public: + scrThreadContext m_context; // 0x08 + void* m_stack; // 0xB0 + char m_padding[0x4]; // 0xB8 + uint32_t m_arg_size; // 0xBC + uint32_t m_arg_loc; // 0xC0 + char m_padding2[0x4]; // 0xC4 + const char* m_exit_message; // 0xC8 + char m_pad[0x4]; + char m_name[0x40]; // 0xD4 + scriptHandler* m_handler; // 0x114 + scriptHandlerNetComponent* m_net_component; // 0x11C + + }; +} \ No newline at end of file diff --git a/script/scrThreadContext.hpp b/script/scrThreadContext.hpp new file mode 100644 index 0000000..fdfcf0e --- /dev/null +++ b/script/scrThreadContext.hpp @@ -0,0 +1,34 @@ +#pragma once +#include + +#include "../rage/joaat.hpp" + +namespace rage +{ + enum class eThreadState : std::uint32_t + { + idle, + running, + killed, + unk_3, + unk_4, + }; + + class scrThreadContext + { + public: + std::uint32_t m_thread_id; // 0x00 + joaat_t m_script_hash; // 0x04 + eThreadState m_state; // 0x08 + std::uint32_t m_instruction_pointer; // 0x0C + std::uint32_t m_frame_pointer; // 0x10 + std::uint32_t m_stack_pointer; // 0x14 + float m_timer_a; // 0x18 + float m_timer_b; // 0x1C + float m_timer_c; // 0x20 + char m_padding1[0x2C]; // 0x24 + std::uint32_t m_stack_size; // 0x50 + char m_padding2[0x54]; // 0x54 + }; + static_assert(sizeof(scrThreadContext) == 0xA8); +} \ No newline at end of file diff --git a/script/scriptHandler.hpp b/script/scriptHandler.hpp new file mode 100644 index 0000000..5940c03 --- /dev/null +++ b/script/scriptHandler.hpp @@ -0,0 +1,81 @@ +#pragma once +#include + +#include "dataList.hpp" +#include "scriptHandlerNetComponent.hpp" +#include "scriptId.hpp" +#include "scriptResource.hpp" +#include "scrThread.hpp" + +#pragma pack(push, 1) +namespace rage +{ + class scriptHandlerObject; + class scriptHandler + { + public: + class atDScriptObjectNode : public atDNode + { + }; + public: + virtual ~scriptHandler() = default; // 0 (0x00) + + virtual bool _0x08() = 0; // 1 (0x08) + + virtual void _0x10() = 0; // 2 (0x10) + + virtual void cleanup_objects() = 0; // 3 (0x18) + + virtual scriptId *_0x20() = 0; // 4 (0x20) + + virtual scriptId *get_id() = 0; // 5 (0x28) + + // Returns whether the script handler belongs to a networked script. + virtual bool is_networked() = 0; // 6 (0x30) + + // Initializes the network component for the script handler. + virtual void init_net_component() = 0; // 7 (0x38) + + // Deletes the script handler's network component, if it exists. + virtual void reset_net_component() = 0; // 8 (0x40) + + // Destroys the script handler. + virtual bool destroy() = 0; // 9 (0x48) + + // Adds the object to the script handler's list of objects. + virtual void add_object(scriptHandlerObject*, bool is_network, bool is_network_and_scriptcheck) = 0; // 10 (0x50) + + // Something related to reservations. + virtual void _0x58(void*) = 0; // 11 (0x58) + + virtual void register_resource(scriptResource*, void*) = 0; // 12 (0x60) + + virtual void _0x68() = 0; // 13 (0x68) + + virtual void _0x70() = 0; // 14 (0x70) + + virtual void _0x78() = 0; // 15 (0x78) + + virtual void _0x80() = 0; // 16 (0x80) + + virtual void _0x88() = 0; // 17 (0x88) + + virtual void _0x90() = 0; // 18 (0x90) + + virtual void _0x98() = 0; // 19 (0x98) + public: + void *m_0x08; // 0x08 + void *m_0x10; // 0x10 + scrThread *m_script_thread; // 0x18 + atDList m_objects; // 0x20 + scriptResource *m_resource_list_head; // 0x30 + scriptResource *m_resource_list_tail; // 0x38 + void *m_0x40; // 0x40 + scriptHandlerNetComponent *m_net_component; // 0x48 + std::uint32_t m_0x50; // 0x50 + std::uint32_t m_0x54; // 0x54 + std::uint32_t m_0x58; // 0x58 + std::uint32_t m_0x60; // 0x5C + }; +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scriptHandlerMgr.hpp b/script/scriptHandlerMgr.hpp new file mode 100644 index 0000000..dce7f35 --- /dev/null +++ b/script/scriptHandlerMgr.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include "../network/netPlayer.hpp" +#include "scriptHandler.hpp" +#include "scrThread.hpp" + +#pragma pack(push, 1) +namespace rage +{ + class netLoggingInterface; + + class scriptHandlerMgr + { + public: + virtual ~scriptHandlerMgr() = default; + + // Initializes some scripting-related pools. + virtual bool initialize() = 0; // 1 (0x08) + + // Called every tick. + virtual void _0x10() = 0; // 2 (0x10) + + // Frees some scripting-related pools. + virtual void shutdown() = 0; // 3 (0x18) + + virtual void _0x20() = 0; // 4 (0x20) + virtual void _0x28() = 0; // 5 (0x28) + virtual void _0x30() = 0; // 6 (0x30) + + // Generates a rage::scriptId from the thread and copies it over to a global structure. + virtual void _0x38(scrThread*) = 0; // 7 (0x38) + + // Allocates and constructs a script handler. + virtual scriptHandler *create_script_handler() = 0; // 8 (0x40) + + // Finds the script handler for a given script id. + virtual scriptHandler *get_script_handler(scriptId*) = 0; // 9 (0x48) + + // Attaches a script thread. + virtual void attach_thread(scrThread*) = 0; // 10 (0x50) + + // Detaches a script thread. + virtual void detach_thread(scrThread*) = 0; // 11 (0x58) + + // Called when a player joins. + virtual void on_player_join(netPlayer*) = 0; // 12 (0x60) + + // Called when a player leaves. + virtual void on_player_left(netPlayer*) = 0; // 13 (0x68) + + virtual std::int32_t _0x70() = 0; // 14 (0x70) + virtual void *_0x78() = 0; // 15 (0x78) + public: + char m_padding1[0x28]; // 0x08 + bool m_initialized; // 0x30 + bool m_initialized2; // 0x31 + char m_padding2[0x0E]; // 0x32 + netLoggingInterface *m_logger; // 0x40 + }; +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scriptHandlerNetComponent.hpp b/script/scriptHandlerNetComponent.hpp new file mode 100644 index 0000000..3f2d7bc --- /dev/null +++ b/script/scriptHandlerNetComponent.hpp @@ -0,0 +1,16 @@ +#pragma once + +#pragma pack(push, 1) +namespace rage +{ + class scriptHandler; + class scriptHandlerNetComponent + { + public: + virtual ~scriptHandlerNetComponent() = default; + + public: + scriptHandler *m_script_handler; // 0x08 + }; +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scriptId.hpp b/script/scriptId.hpp new file mode 100644 index 0000000..e7ee468 --- /dev/null +++ b/script/scriptId.hpp @@ -0,0 +1,14 @@ +#pragma once +#include "scriptIdBase.hpp" + +#pragma pack(push, 1) +namespace rage +{ + class scriptId : public scriptIdBase + { + public: + joaat_t m_hash; // 0x08 + char m_name[0x20]; // 0x0C + }; +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scriptIdBase.hpp b/script/scriptIdBase.hpp new file mode 100644 index 0000000..ea4c85a --- /dev/null +++ b/script/scriptIdBase.hpp @@ -0,0 +1,57 @@ +#pragma once +#include + +#include "../rage/joaat.hpp" + +#pragma pack(push, 1) +namespace rage +{ + class datBitBuffer; + class netLoggingInterface; + class scrThread; + + class scriptIdBase + { + public: + virtual ~scriptIdBase() = default; // 0 (0x00) + + // Assumes the script thread's identity. + virtual void assume_thread_identity(scrThread*) = 0; // 1 (0x08) + + // Returns whether the hash of the script id is valid. + virtual bool is_valid() = 0; // 2 (0x10) + + // Gets the hash of the script id. + virtual joaat_t *get_hash(joaat_t *out) = 0; // 3 (0x18) + + // Gets an unknown value from the script id. + virtual std::uint32_t *get_hash2(std::uint32_t *out) = 0; // 4 (0x20) + + // Gets the name of the script id. + virtual const char *get_name() = 0; // 5 (0x28) + + // Serializes the script id from the buffer. + virtual void deserialize(datBitBuffer* buffer) = 0; // 6 (0x30) + + // Serializes the script id to the buffer. + virtual void serialize(datBitBuffer* buffer) = 0; // 7 (0x38) + + // Calculates some information with the position hash & instance id. + virtual std::uint32_t _0x40() = 0; // 8 (0x40) + + // Calls _0x40 and returns it's value added to another value. + virtual std::uint32_t _0x48() = 0; // 9 (0x48) + + // Logs some information about the script id. + virtual void log_information(netLoggingInterface* logger) = 0; // 10 (0x50) + + // Copies the information of other to this object. + virtual void copy_data(scriptIdBase *other) = 0; // 11 (0x58) + + // Returns whether the other script id is equal. + virtual bool operator==(scriptIdBase*) = 0; // 12 (0x60) + + virtual bool _0x68(void*) = 0; // 13 (0x68) + }; +} +#pragma pack(pop) \ No newline at end of file diff --git a/script/scriptResource.hpp b/script/scriptResource.hpp new file mode 100644 index 0000000..9379d6e --- /dev/null +++ b/script/scriptResource.hpp @@ -0,0 +1,10 @@ +#pragma once + +namespace rage +{ + class scriptResource + { + public: + virtual ~scriptResource() = default; + }; +} \ No newline at end of file diff --git a/script/tlsContext.hpp b/script/tlsContext.hpp new file mode 100644 index 0000000..00c6673 --- /dev/null +++ b/script/tlsContext.hpp @@ -0,0 +1,17 @@ +#pragma once +#include "../rage/sysMemAllocator.hpp" +#include "scrThread.hpp" + +namespace rage +{ + class tlsContext + { + public: + char m_padding1[0xC8]; // 0x00 + sysMemAllocator* m_allocator; // 0xC8 + char m_padding2[0x758]; // 0xD0 + scrThread* m_script_thread; // 0x828 + bool m_is_script_thread_active; // 0x830 + }; + static_assert(sizeof(tlsContext) == 0x838); +} \ No newline at end of file diff --git a/security/Obf32.hpp b/security/Obf32.hpp index 73d1412..cabc07c 100644 --- a/security/Obf32.hpp +++ b/security/Obf32.hpp @@ -4,22 +4,22 @@ #pragma pack(push, 1) class Obf32 { - std::uint32_t a; - std::uint32_t b; - std::uint32_t c; - std::uint32_t d; + std::uint32_t a; + std::uint32_t b; + std::uint32_t c; + std::uint32_t d; public: - inline void operator=(std::uint32_t val) - { - a = val & d; - b = val & ~d; - } + inline void operator=(std::uint32_t val) + { + a = val & d; + b = val & ~d; + } - inline operator std::uint32_t() - { - return (a & d) | (b & ~d); - } + inline operator std::uint32_t() + { + return (a & d) | (b & ~d); + } }; static_assert(sizeof(Obf32) == 0x10); #pragma pack(pop) \ No newline at end of file diff --git a/socialclub/FriendInfo.hpp b/socialclub/FriendInfo.hpp index 19a7815..e2d27cd 100644 --- a/socialclub/FriendInfo.hpp +++ b/socialclub/FriendInfo.hpp @@ -6,15 +6,15 @@ class FriendInfo { public: - char m_name[20]; //0x0000 - char pad_0014[36]; //0x0014 - uint64_t m_rockstar_id; //0x0038 - uint8_t unk; //0x0040 - char pad_0041[3]; //0x0041 - uint32_t m_friend_state; //0x0044 - char pad_0048[304]; //0x0048 - uint32_t m_is_joinable; //0x0178 - char pad_017C[4]; //0x017C + char m_name[20]; //0x0000 + char pad_0014[36]; //0x0014 + uint64_t m_rockstar_id; //0x0038 + uint8_t unk; //0x0040 + char pad_0041[3]; //0x0041 + uint32_t m_friend_state; //0x0044 + char pad_0048[304]; //0x0048 + uint32_t m_is_joinable; //0x0178 + char pad_017C[4]; //0x017C }; //Size: 0x0180 static_assert(sizeof(FriendInfo) == 0x180); #pragma pack(pop) diff --git a/socialclub/FriendRegistry.hpp b/socialclub/FriendRegistry.hpp index 29197a7..28428ab 100644 --- a/socialclub/FriendRegistry.hpp +++ b/socialclub/FriendRegistry.hpp @@ -8,14 +8,14 @@ class FriendRegistry { public: - uint32_t m_friend_count; //0x0000 - char pad_0004[8]; //0x0004 - FriendInfo (*m_friends)[250]; //0x000C + uint32_t m_friend_count; //0x0000 + char pad_0004[8]; //0x0004 + FriendInfo (*m_friends)[250]; //0x000C - inline FriendInfo* get(std::uint32_t idx) - { - return &(*m_friends)[idx]; - } + inline FriendInfo* get(std::uint32_t idx) + { + return &(*m_friends)[idx]; + } }; //Size: 0x0014 static_assert(sizeof(FriendRegistry) == 0x14); #pragma pack(pop) diff --git a/vehicle/CHandlingData.hpp b/vehicle/CHandlingData.hpp index 27bacb5..636e47c 100644 --- a/vehicle/CHandlingData.hpp +++ b/vehicle/CHandlingData.hpp @@ -7,76 +7,76 @@ class CHandlingData { public: - uint64_t qword0; //0x0000 - uint32_t m_model_hash; //0x0008 - float m_mass; //0x000C - float m_initial_drag_coeff; //0x0010 - float m_downforce_multiplier; //0x0014 - float m_popup_light_rotation; //0x0018 - char pad_001C[4]; //0x001C - rage::fvector3 m_centre_of_mass; //0x0020 - char pad_002C[4]; //0x002C - rage::fvector3 m_inertia_mult; //0x0030 - char pad_003C[4]; //0x003C - float m_buoyancy; //0x0040 - float m_drive_bias_rear; //0x0044 - float m_drive_bias_front; //0x0048 - float m_acceleration; //0x004C - uint8_t m_initial_drive_gears; //0x0050 - char pad_0051[3]; //0x0051 - float m_drive_inertia; //0x0054 - float m_upshift; //0x0058 - float m_downshift; //0x005C - float m_initial_drive_force; //0x0060 - float m_drive_max_flat_velocity; //0x0064 - float m_initial_drive_max_flat_vel; //0x0068 - float m_brake_force; //0x006C - char pad_0070[4]; //0x0070 - float m_brake_bias_front; //0x0074 - float m_brake_bias_rear; //0x0078 - float m_handbrake_force; //0x007C - float m_steering_lock; //0x0080 - float m_steering_lock_ratio; //0x0084 - float m_traction_curve_max; //0x0088 - float m_traction_curve_lateral; //0x008C - float m_traction_curve_min; //0x0090 - float m_traction_curve_ratio; //0x0094 - float m_curve_lateral; //0x0098 - float m_curve_lateral_ratio; //0x009C - float m_traction_spring_delta_max; //0x00A0 - float m_traction_spring_delta_max_ratio; //0x00A4 - float m_low_speed_traction_loss_mult; //0x00A8 - float m_camber_stiffness; //0x00AC - float m_traction_bias_front; //0x00B0 - float m_traction_bias_rear; //0x00B4 - float m_traction_loss_mult; //0x00B8 - float m_suspension_force; //0x00BC - float m_suspension_comp_damp; //0x00C0 - float m_suspension_rebound_damp; //0x00C4 - float m_suspension_upper_limit; //0x00C8 - float m_suspension_lower_limit; //0x00CC - float m_suspension_raise; //0x00D0 - float m_suspension_bias_front; //0x00D4 - float m_suspension_bias_rear; //0x00D8 - float m_anti_rollbar_force; //0x00DC - float m_anti_rollbar_bias_front; //0x00E0 - float m_anti_rollbar_bias_rear; //0x00E4 - float m_roll_centre_height_front; //0x00E8 - float m_roll_centre_height_rear; //0x00EC - float m_collision_damage_mult; //0x00F0 - float m_weapon_damamge_mult; //0x00F4 - float m_deformation_mult; //0x00F8 - float m_engine_damage_mult; //0x00FC - float m_petrol_tank_volume; //0x0100 - float m_oil_volume; //0x0104 - char pad_0108[4]; //0x0108 - rage::fvector3 m_seat_offset_dist; //0x010C - uint32_t m_monetary_value; //0x0118 - char pad_011C[8]; //0x011C - uint32_t m_model_flags; //0x0124 - uint32_t m_handling_flags; //0x0128 - uint32_t m_damage_flags; //0x012C - char pad_0130[12]; //0x0130 - uint32_t m_ai_handling_hash; //0x013C + uint64_t qword0; //0x0000 + uint32_t m_model_hash; //0x0008 + float m_mass; //0x000C + float m_initial_drag_coeff; //0x0010 + float m_downforce_multiplier; //0x0014 + float m_popup_light_rotation; //0x0018 + char pad_001C[4]; //0x001C + rage::fvector3 m_centre_of_mass; //0x0020 + char pad_002C[4]; //0x002C + rage::fvector3 m_inertia_mult; //0x0030 + char pad_003C[4]; //0x003C + float m_buoyancy; //0x0040 + float m_drive_bias_rear; //0x0044 + float m_drive_bias_front; //0x0048 + float m_acceleration; //0x004C + uint8_t m_initial_drive_gears; //0x0050 + char pad_0051[3]; //0x0051 + float m_drive_inertia; //0x0054 + float m_upshift; //0x0058 + float m_downshift; //0x005C + float m_initial_drive_force; //0x0060 + float m_drive_max_flat_velocity; //0x0064 + float m_initial_drive_max_flat_vel; //0x0068 + float m_brake_force; //0x006C + char pad_0070[4]; //0x0070 + float m_brake_bias_front; //0x0074 + float m_brake_bias_rear; //0x0078 + float m_handbrake_force; //0x007C + float m_steering_lock; //0x0080 + float m_steering_lock_ratio; //0x0084 + float m_traction_curve_max; //0x0088 + float m_traction_curve_lateral; //0x008C + float m_traction_curve_min; //0x0090 + float m_traction_curve_ratio; //0x0094 + float m_curve_lateral; //0x0098 + float m_curve_lateral_ratio; //0x009C + float m_traction_spring_delta_max; //0x00A0 + float m_traction_spring_delta_max_ratio; //0x00A4 + float m_low_speed_traction_loss_mult; //0x00A8 + float m_camber_stiffness; //0x00AC + float m_traction_bias_front; //0x00B0 + float m_traction_bias_rear; //0x00B4 + float m_traction_loss_mult; //0x00B8 + float m_suspension_force; //0x00BC + float m_suspension_comp_damp; //0x00C0 + float m_suspension_rebound_damp; //0x00C4 + float m_suspension_upper_limit; //0x00C8 + float m_suspension_lower_limit; //0x00CC + float m_suspension_raise; //0x00D0 + float m_suspension_bias_front; //0x00D4 + float m_suspension_bias_rear; //0x00D8 + float m_anti_rollbar_force; //0x00DC + float m_anti_rollbar_bias_front; //0x00E0 + float m_anti_rollbar_bias_rear; //0x00E4 + float m_roll_centre_height_front; //0x00E8 + float m_roll_centre_height_rear; //0x00EC + float m_collision_damage_mult; //0x00F0 + float m_weapon_damamge_mult; //0x00F4 + float m_deformation_mult; //0x00F8 + float m_engine_damage_mult; //0x00FC + float m_petrol_tank_volume; //0x0100 + float m_oil_volume; //0x0104 + char pad_0108[4]; //0x0108 + rage::fvector3 m_seat_offset_dist; //0x010C + uint32_t m_monetary_value; //0x0118 + char pad_011C[8]; //0x011C + uint32_t m_model_flags; //0x0124 + uint32_t m_handling_flags; //0x0128 + uint32_t m_damage_flags; //0x012C + char pad_0130[12]; //0x0130 + uint32_t m_ai_handling_hash; //0x013C }; //Size: 0x0140 static_assert(sizeof(CHandlingData) == 0x140); diff --git a/vehicle/CVehicleModelInfo.hpp b/vehicle/CVehicleModelInfo.hpp index ab44911..a1b7580 100644 --- a/vehicle/CVehicleModelInfo.hpp +++ b/vehicle/CVehicleModelInfo.hpp @@ -6,107 +6,107 @@ enum class eVehicleType : std::uint32_t { - VEHICLE_TYPE_NONE = 4294967295, - VEHICLE_TYPE_CAR = 0, - VEHICLE_TYPE_PLANE = 1, - VEHICLE_TYPE_TRAILER = 2, - VEHICLE_TYPE_QUADBIKE = 3, - VEHICLE_TYPE_DRAFT = 4, - VEHICLE_TYPE_SUBMARINECAR = 5, - VEHICLE_TYPE_AMPHIBIOUS_AUTOMOBILE = 6, - VEHICLE_TYPE_AMPHIBIOUS_QUADBIKE = 7, - VEHICLE_TYPE_HELI = 8, - VEHICLE_TYPE_BLIMP = 9, - VEHICLE_TYPE_AUTOGYRO = 10, - VEHICLE_TYPE_BIKE = 11, - VEHICLE_TYPE_BICYCLE = 12, - VEHICLE_TYPE_BOAT = 13, - VEHICLE_TYPE_TRAIN = 14, - VEHICLE_TYPE_SUBMARINE = 15, + VEHICLE_TYPE_NONE = 4294967295, + VEHICLE_TYPE_CAR = 0, + VEHICLE_TYPE_PLANE = 1, + VEHICLE_TYPE_TRAILER = 2, + VEHICLE_TYPE_QUADBIKE = 3, + VEHICLE_TYPE_DRAFT = 4, + VEHICLE_TYPE_SUBMARINECAR = 5, + VEHICLE_TYPE_AMPHIBIOUS_AUTOMOBILE = 6, + VEHICLE_TYPE_AMPHIBIOUS_QUADBIKE = 7, + VEHICLE_TYPE_HELI = 8, + VEHICLE_TYPE_BLIMP = 9, + VEHICLE_TYPE_AUTOGYRO = 10, + VEHICLE_TYPE_BIKE = 11, + VEHICLE_TYPE_BICYCLE = 12, + VEHICLE_TYPE_BOAT = 13, + VEHICLE_TYPE_TRAIN = 14, + VEHICLE_TYPE_SUBMARINE = 15, }; enum class eVehicleClass : std::uint8_t { - VC_COMPACT = 0, - VC_SEDAN = 1, - VC_SUV = 2, - VC_COUPE = 3, - VC_MUSCLE = 4, - VC_SPORT_CLASSIC = 5, - VC_SPORT = 6, - VC_SUPER = 7, - VC_MOTORCYCLE = 8, - VC_OFF_ROAD = 9, - VC_INDUSTRIAL = 10, - VC_UTILITY = 11, - VC_VAN = 12, - VC_CYCLE = 13, - VC_BOAT = 14, - VC_HELICOPTER = 15, - VC_PLANE = 16, - VC_SERVICE = 17, - VC_EMERGENCY = 18, - VC_MILITARY = 19, - VC_COMMERCIAL = 20, - VC_RAIL = 21, - VC_OPEN_WHEEL = 22, + VC_COMPACT = 0, + VC_SEDAN = 1, + VC_SUV = 2, + VC_COUPE = 3, + VC_MUSCLE = 4, + VC_SPORT_CLASSIC = 5, + VC_SPORT = 6, + VC_SUPER = 7, + VC_MOTORCYCLE = 8, + VC_OFF_ROAD = 9, + VC_INDUSTRIAL = 10, + VC_UTILITY = 11, + VC_VAN = 12, + VC_CYCLE = 13, + VC_BOAT = 14, + VC_HELICOPTER = 15, + VC_PLANE = 16, + VC_SERVICE = 17, + VC_EMERGENCY = 18, + VC_MILITARY = 19, + VC_COMMERCIAL = 20, + VC_RAIL = 21, + VC_OPEN_WHEEL = 22, }; #pragma pack(push, 1) class CVehicleModelInfo : public CBaseModelInfo { public: - char pad_00A4[72]; //0x00A4 - uint8_t m_primary_color_combinations[25]; //0x00F8 - uint8_t m_secondary_color_combinations[25]; //0x0111 - uint8_t m_unk_color_combos1[25]; //0x012A - uint8_t m_unk_color_combos2[25]; //0x0143 - uint8_t m_interior_color_combinations[25]; //0x015C - uint8_t m_dashboard_color_combinations[25]; //0x0175 - char pad_018E[266]; //0x018E - char m_name[12]; //0x0298 - char m_manufacturer[12]; //0x02A4 - uint16_t* m_modkits; //0x02B0 - uint16_t m_modkits_count; //0x02B8 - char pad_02BA[30]; //0x02BA - uint8_t m_passenger_capacity; //0x02D8 - char pad_02D9[103]; //0x02D9 - eVehicleType m_vehicle_type; //0x0340 - uint32_t m_unk_vehicle_type; //0x0344 - uint32_t m_diffuse_tint; //0x0348 - char pad_034C[20]; //0x034C - rage::fvector3 m_first_person_driveby_ik_offset; //0x0360 - char pad_036C[4]; //0x036C - rage::fvector3 m_first_person_driveby_unarmed_ik_offset; //0x0370 - char pad_037C[20]; //0x037C - rage::fvector3 m_first_person_driveby_right_passenger_ik_offset; //0x0390 - char pad_039C[36]; //0x039C - rage::fvector3 m_first_person_driveby_right_passenger_unarmed_ik_offset; //0x03C0 - char pad_03CC[4]; //0x03CC - rage::fvector3 m_first_person_projectile_driveby_ik_offset; //0x03D0 - char pad_03DC[4]; //0x03DC - rage::fvector3 m_first_person_projectile_driveby_passenger_ik_offset; //0x03E0 - char pad_03EC[52]; //0x03EC - rage::fvector3 m_first_person_mobile_phone_offset; //0x0420 - char pad_042C[4]; //0x042C - rage::fvector3 m_first_person_passenger_mobile_phone_offset; //0x0430 - char pad_043C[20]; //0x043C - rage::fvector3 m_pov_camera_offset; //0x0450 - char pad_045C[36]; //0x045C - float m_pov_camera_vertical_adjustement_for_rollcage; //0x0480 - char pad_0484[8]; //0x0484 - float m_wheel_scale; //0x048C - float m_wheel_scale_rear; //0x0490 - float m_default_health; //0x0494 - char pad_0498[4]; //0x0498 - float m_steer_wheel_multiplier; //0x049C - char pad_04A0[168]; //0x04A0 - eVehicleClass m_vehicle_class; //0x0548 - char pad_0549[11]; - float m_min_seat_height; //0x0554 - char pad_0558[40]; //0x0558 - uint32_t m_is_jetski; //0x0580 - char pad_0584[28]; //0x0584 + char pad_00A4[72]; //0x00A4 + uint8_t m_primary_color_combinations[25]; //0x00F8 + uint8_t m_secondary_color_combinations[25]; //0x0111 + uint8_t m_unk_color_combos1[25]; //0x012A + uint8_t m_unk_color_combos2[25]; //0x0143 + uint8_t m_interior_color_combinations[25]; //0x015C + uint8_t m_dashboard_color_combinations[25]; //0x0175 + char pad_018E[266]; //0x018E + char m_name[12]; //0x0298 + char m_manufacturer[12]; //0x02A4 + uint16_t* m_modkits; //0x02B0 + uint16_t m_modkits_count; //0x02B8 + char pad_02BA[30]; //0x02BA + uint8_t m_passenger_capacity; //0x02D8 + char pad_02D9[103]; //0x02D9 + eVehicleType m_vehicle_type; //0x0340 + uint32_t m_unk_vehicle_type; //0x0344 + uint32_t m_diffuse_tint; //0x0348 + char pad_034C[20]; //0x034C + rage::fvector3 m_first_person_driveby_ik_offset; //0x0360 + char pad_036C[4]; //0x036C + rage::fvector3 m_first_person_driveby_unarmed_ik_offset; //0x0370 + char pad_037C[20]; //0x037C + rage::fvector3 m_first_person_driveby_right_passenger_ik_offset; //0x0390 + char pad_039C[36]; //0x039C + rage::fvector3 m_first_person_driveby_right_passenger_unarmed_ik_offset; //0x03C0 + char pad_03CC[4]; //0x03CC + rage::fvector3 m_first_person_projectile_driveby_ik_offset; //0x03D0 + char pad_03DC[4]; //0x03DC + rage::fvector3 m_first_person_projectile_driveby_passenger_ik_offset; //0x03E0 + char pad_03EC[52]; //0x03EC + rage::fvector3 m_first_person_mobile_phone_offset; //0x0420 + char pad_042C[4]; //0x042C + rage::fvector3 m_first_person_passenger_mobile_phone_offset; //0x0430 + char pad_043C[20]; //0x043C + rage::fvector3 m_pov_camera_offset; //0x0450 + char pad_045C[36]; //0x045C + float m_pov_camera_vertical_adjustement_for_rollcage; //0x0480 + char pad_0484[8]; //0x0484 + float m_wheel_scale; //0x048C + float m_wheel_scale_rear; //0x0490 + float m_default_health; //0x0494 + char pad_0498[4]; //0x0498 + float m_steer_wheel_multiplier; //0x049C + char pad_04A0[168]; //0x04A0 + eVehicleClass m_vehicle_class; //0x0548 + char pad_0549[11]; + float m_min_seat_height; //0x0554 + char pad_0558[40]; //0x0558 + uint32_t m_is_jetski; //0x0580 + char pad_0584[28]; //0x0584 }; //Size: 0x05A0 static_assert(sizeof(CVehicleModelInfo) == 0x5A0); #pragma pack(pop) diff --git a/weapon/CItemInfo.hpp b/weapon/CItemInfo.hpp index cadf912..9431108 100644 --- a/weapon/CItemInfo.hpp +++ b/weapon/CItemInfo.hpp @@ -5,10 +5,10 @@ class CItemInfo { public: - char pad_0000[16]; //0x0000 - uint32_t m_name; //0x0010 - uint32_t m_model; //0x0014 - uint32_t m_audio; //0x0018 - uint32_t m_slot; //0x001C + char pad_0000[16]; //0x0000 + uint32_t m_name; //0x0010 + uint32_t m_model; //0x0014 + uint32_t m_audio; //0x0018 + uint32_t m_slot; //0x001C }; //Size: 0x0020 static_assert(sizeof(CItemInfo) == 0x20);