From 5abbb7f1ebf8d9ef756d0ab29dc1183dbf5950f2 Mon Sep 17 00:00:00 2001 From: Yimura Date: Fri, 28 Jan 2022 00:02:15 +0100 Subject: [PATCH] feat: Updated classes --- CAutomobile.hpp | 84 ++++++++++++------------- CBaseModelInfo.hpp | 9 +++ CNavigation.hpp | 14 +++++ CNetGamePlayer.hpp | 20 +++--- CNetworkPlayerMgr.hpp | 33 ++++++++++ CNonPhysicalPlayerData.hpp | 24 ++++++++ CPed.hpp | 18 +----- CPlayerInfo.hpp | 40 ++---------- fwDrawData.hpp | 73 ++++++++++++++++++++++ fwEntity.hpp | 28 +++++++++ gtav.rcnet | Bin 10905 -> 12489 bytes netObject.hpp | 123 +++++++++++++++++++++++++++++++++++++ netPlayer.hpp | 19 ++++++ netPlayerData.hpp | 37 +++++++++++ pgBase.hpp | 9 --- 15 files changed, 415 insertions(+), 116 deletions(-) create mode 100644 CBaseModelInfo.hpp create mode 100644 CNavigation.hpp create mode 100644 CNetworkPlayerMgr.hpp create mode 100644 CNonPhysicalPlayerData.hpp create mode 100644 fwDrawData.hpp create mode 100644 fwEntity.hpp create mode 100644 netObject.hpp create mode 100644 netPlayer.hpp create mode 100644 netPlayerData.hpp delete mode 100644 pgBase.hpp diff --git a/CAutomobile.hpp b/CAutomobile.hpp index 1b84c30..e8ee509 100644 --- a/CAutomobile.hpp +++ b/CAutomobile.hpp @@ -2,52 +2,44 @@ #include "CHandlingData.hpp" #include "CVehicleDrawHandler.hpp" #include "CVehicleModelInfo.hpp" -#include "pgBase.hpp" +#include "fwEntity.hpp" -class CAutomobile +class CAutomobile : public rage::fwEntity { public: - char pad_0000[32]; //0x0000 - class CVehicleModelInfo* m_vehicle_model; //0x0020 - char pad_0028[8]; //0x0028 - class pgBase* m_posbase; //0x0030 - char pad_0038[16]; //0x0038 - class CVehicleDrawHandler* m_mods; //0x0048 - char pad_0050[313]; //0x0050 - uint8_t m_godmode; //0x0189 - char pad_018A[246]; //0x018A - float m_health; //0x0280 - char pad_0284[28]; //0x0284 - float m_health_max; //0x02A0 - char pad_02A4[116]; //0x02A4 - uint8_t m_boost_state; //0x0318 - char pad_0319[2]; //0x0319 - uint8_t m_boost_allow_recharge; //0x031B - char pad_031C[4]; //0x031C - float m_boost; //0x0320 - float m_rocket_recharge_speed; //0x0324 - char pad_0328[136]; //0x0328 - float m_jump_boost_charge; //0x03B0 - char pad_03B4[1164]; //0x03B4 - float m_body_health; //0x0840 - float m_petrol_tank_health; //0x0844 - char pad_0848[192]; //0x0848 - float m_engine_health; //0x0908 - char pad_090C[44]; //0x090C - class CHandlingData* m_handling; //0x0938 - char pad_0940[2]; //0x0940 - uint8_t m_is_drivable; //0x0942 - uint8_t m_tyres_can_burst; //0x0943 - uint8_t m_deform_god; //0x0944 - char pad_0945[179]; //0x0945 - float m_dirt_level; //0x09F8 - char pad_09FC[194]; //0x09FC - uint8_t m_is_targetable; //0x0ABE - char pad_0ABF[413]; //0x0ABF - float m_gravity; //0x0C5C - char pad_0C60[8]; //0x0C60 - class CPed* m_driver; //0x0C68 - class CPed* m_passengers[15]; //0x0C70 - class CPed* m_last_driver; //0x0CE8 -}; //Size: 0x0CF0 -static_assert(sizeof(CAutomobile) == 0xCF0); + char pad_018C[240]; //0x018C + float m_health; //0x027C + char pad_0280[28]; //0x0280 + float m_health_max; //0x029C + char pad_02A0[116]; //0x02A0 + uint8_t m_boost_state; //0x0314 + char pad_0315[2]; //0x0315 + uint8_t m_boost_allow_recharge; //0x0317 + char pad_0318[4]; //0x0318 + float m_boost; //0x031C + float m_rocket_recharge_speed; //0x0320 + char pad_0324[136]; //0x0324 + float m_jump_boost_charge; //0x03AC + char pad_03B0[1164]; //0x03B0 + float m_body_health; //0x083C + float m_petrol_tank_health; //0x0840 + char pad_0844[192]; //0x0844 + float m_engine_health; //0x0904 + char pad_0908[44]; //0x0908 + class CHandlingData *m_handling; //0x0934 + char pad_093C[2]; //0x093C + uint8_t m_is_drivable; //0x093E + uint8_t m_tyres_can_burst; //0x093F + uint8_t m_deform_god; //0x0940 + char pad_0941[179]; //0x0941 + float m_dirt_level; //0x09F4 + char pad_09F8[194]; //0x09F8 + uint8_t m_is_targetable; //0x0ABA + char pad_0ABB[413]; //0x0ABB + float m_gravity; //0x0C58 + char pad_0C5C[8]; //0x0C5C + class CPed *m_driver; //0x0C64 + class CPed *m_passengers[15]; //0x0C6C + class CPed *m_last_driver; //0x0CE4 +}; //Size: 0x0CEC +static_assert(sizeof(CAutomobile) == 0xCEC); diff --git a/CBaseModelInfo.hpp b/CBaseModelInfo.hpp new file mode 100644 index 0000000..15f0379 --- /dev/null +++ b/CBaseModelInfo.hpp @@ -0,0 +1,9 @@ +#pragma once + +class CBaseModelInfo +{ +public: + char pad_0000[24]; //0x0000 + uint32_t m_model_hash; //0x0018 +}; //Size: 0x001C +static_assert(sizeof(CBaseModelInfo) == 0x1C); diff --git a/CNavigation.hpp b/CNavigation.hpp new file mode 100644 index 0000000..061f5af --- /dev/null +++ b/CNavigation.hpp @@ -0,0 +1,14 @@ +#pragma once + +class CNavigation +{ +public: + char pad_0000[32]; //0x0000 + float m_heading; //0x0020 + float m_heading2; //0x0024 + char pad_0028[8]; //0x0028 + rage::vector3 m_rotation; //0x0030 + char pad_003C[24]; //0x003C + rage::vector3 m_position; //0x0054 +}; //Size: 0x0060 +static_assert(sizeof(CNavigation) == 0x60); diff --git a/CNetGamePlayer.hpp b/CNetGamePlayer.hpp index d34b705..13541d8 100644 --- a/CNetGamePlayer.hpp +++ b/CNetGamePlayer.hpp @@ -1,18 +1,18 @@ +#pragma once #include "CPlayerInfo.hpp" +#include "CNonPhysicalPlayerData.hpp" +#include "netPlayer.hpp" -class CNetGamePlayer +class CNetGamePlayer : public rage::netPlayer { public: - char pad_0000[24]; //0x0000 + char pad_0008[8]; //0x0008 + class CNonPhysicalPlayerData *m_non_physical_player; //0x0010 uint32_t m_msg_id; //0x0018 char pad_001C[4]; //0x001C uint8_t m_active_id; //0x0020 uint8_t m_player_id; //0x0021 - char pad_0022[110]; //0x0022 - uint8_t m_player_flag; //0x0090 - char pad_0091[15]; //0x0091 - class CPlayerInfo* m_player_info; //0x00A0 - char pad_00A8[40]; //0x00A8 - uint32_t m_bubble_id; //0x00D0 -}; //Size: 0x00D4 -static_assert(sizeof(CNetGamePlayer) == 0xD4); + char pad_0022[126]; //0x0022 + class CPlayerInfo *m_player_info; //0x00A0 +}; //Size: 0x00A8 +static_assert(sizeof(CNetGamePlayer) == 0xA8); diff --git a/CNetworkPlayerMgr.hpp b/CNetworkPlayerMgr.hpp new file mode 100644 index 0000000..b26dc65 --- /dev/null +++ b/CNetworkPlayerMgr.hpp @@ -0,0 +1,33 @@ +#pragma once +#include "CNetGamePlayer.hpp" +#include "CNonPhysicalPlayerData.hpp" + +namespace rage +{ + class netPlayerMgrBase + { + public: + virtual ~netPlayerMgrBase() = default; + virtual void Initialize() = 0; + virtual void Shutdown() = 0; + virtual void unk_0x18() = 0; + virtual CNetGamePlayer* AddPlayer_raw(void* a1, void* a2, void* a3, rage::netPlayerData* net_player_data, CNonPhysicalPlayerData* non_physical_player_data) = 0; + virtual void RemovePlayer(CNetGamePlayer* net_game_player) = 0; + virtual void UpdatePlayerListsForPlayer(CNetGamePlayer* net_game_player) = 0; + virtual CNetGamePlayer* AddPlayer(void* a1, void* a2, void* a3, rage::netPlayerData* net_player_data, CNonPhysicalPlayerData* non_physical_player_data) = 0; + }; //Size: 0x0008 + static_assert(sizeof(netPlayerMgrBase) == 0x8); +} + +class CNetworkPlayerMgr : public rage::netPlayerMgrBase +{ +public: + char pad_0008[224]; //0x0008 + class CNetGamePlayer* m_local_net_player; //0x00E8 + char pad_00F0[144]; //0x00F0 + class CNetGamePlayer* m_player_list[32]; //0x0180 + uint16_t m_player_limit; //0x0280 + char pad_0282[10]; //0x0282 + uint16_t m_player_count; //0x028C +}; //Size: 0x028E +static_assert(sizeof(CNetworkPlayerMgr) == 0x28E); diff --git a/CNonPhysicalPlayerData.hpp b/CNonPhysicalPlayerData.hpp new file mode 100644 index 0000000..918325e --- /dev/null +++ b/CNonPhysicalPlayerData.hpp @@ -0,0 +1,24 @@ +#pragma once + +namespace rage +{ + class nonPhysicalPlayerDataBase + { + public: + virtual ~nonPhysicalPlayerDataBase(); + virtual void _0x08(); + virtual void _0x10(); + virtual void _0x18(); + virtual void log(); + }; //Size: 0x0008 + static_assert(sizeof(nonPhysicalPlayerDataBase) == 0x8); +} + +class CNonPhysicalPlayerData : public rage::nonPhysicalPlayerDataBase +{ +public: + int32_t m_bubble_id; //0x0008 + int32_t m_player_id; //0x000C + rage::vector3 m_position; //0x0010 +}; //Size: 0x001C +static_assert(sizeof(CNonPhysicalPlayerData) == 0x1C); diff --git a/CPed.hpp b/CPed.hpp index 84ddc5b..162033a 100644 --- a/CPed.hpp +++ b/CPed.hpp @@ -3,27 +3,13 @@ #include "CPedModelInfo.hpp" #include "CPedWeaponManager.hpp" #include "CPlayerInfo.hpp" -#include "pgBase.hpp" +#include "fwEntity.hpp" #pragma pack(push, 1) -class CPed +class CPed : public rage::fwEntity { public: - char pad_0000[32]; //0x0000 - class CPedModelInfo *m_ped_model_info; //0x0020 - uint8_t m_entity_type; //0x0028 - char pad_0029[3]; //0x0029 - uint8_t m_invisible; //0x002C - char pad_002D[1]; //0x002D - uint8_t m_freeze_momentum; //0x002E - char pad_002F[1]; //0x002F - class pgBase *m_posbase; //0x0030 - char pad_0038[88]; //0x0038 - rage::vector3 m_camera; //0x0090 - char pad_009C[237]; //0x009C - uint8_t m_godmode; //0x0189 - char pad_018A[2]; //0x018A uint8_t m_hostility; //0x018C char pad_018D[243]; //0x018D float m_health; //0x0280 diff --git a/CPlayerInfo.hpp b/CPlayerInfo.hpp index 3ad5cdf..fdb377f 100644 --- a/CPlayerInfo.hpp +++ b/CPlayerInfo.hpp @@ -1,49 +1,19 @@ #pragma once - -class netAddress -{ -public: - uint8_t m_field4; //0x0000 - uint8_t m_field3; //0x0001 - uint8_t m_field2; //0x0002 - uint8_t m_field1; //0x0003 -}; //Size: 0x0004 -static_assert(sizeof(netAddress) == 0x4); - -class netPlayerData -{ -public: - char pad_0000[8]; //0x0000 - uint64_t m_rockstar_id; //0x0008 - char pad_0010[52]; //0x0010 - class netAddress m_relay_ip; //0x0044 - uint16_t m_relay_port; //0x0048 - char pad_004A[2]; //0x004A - class netAddress m_external_ip; //0x004C - uint16_t m_external_port; //0x0050 - char pad_0052[2]; //0x0052 - class netAddress m_internal_ip; //0x0054 - uint16_t m_internal_port; //0x0058 - char pad_005A[6]; //0x005A - uint64_t m_host_token; //0x0060 - uint64_t m_peer_id; //0x0068 - uint64_t m_rockstar_id2; //0x0070 - char pad_0078[12]; //0x0078 - char m_name[20]; //0x0084 -}; //Size: 0x0098 -static_assert(sizeof(netPlayerData) == 0x98); +#include "netPlayerData.hpp" #pragma pack(push, 1) class CPlayerInfo { public: char pad_0000[32]; //0x0000 - class netPlayerData m_net_player_data; //0x0020 + class rage::netPlayerData 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[92]; //0x018C + 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 diff --git a/fwDrawData.hpp b/fwDrawData.hpp new file mode 100644 index 0000000..0ff2471 --- /dev/null +++ b/fwDrawData.hpp @@ -0,0 +1,73 @@ +#pragma once + +namespace rage +{ + class fwDrawData + { + public: + char pad_0000[904]; //0x0000 + uint8_t m_primary_color; //0x0388 + char pad_0389[3]; //0x0389 + uint8_t m_pearlescent; //0x038C + char pad_038D[3]; //0x038D + uint8_t m_secondary_color; //0x0390 + char pad_0391[15]; //0x0391 + uint8_t m_neon_blue; //0x03A0 + uint8_t m_neon_green; //0x03A1 + uint8_t m_neon_red; //0x03A2 + char pad_03A3[15]; //0x03A3 + uint8_t m_spoiler; //0x03B2 + uint8_t m_bumper_front; //0x03B3 + uint8_t m_bumper_rear; //0x03B4 + uint8_t m_sideskirts; //0x03B5 + uint8_t m_exhaust; //0x03B6 + uint8_t m_frame; //0x03B7 + uint8_t m_grille; //0x03B8 + uint8_t m_hood; //0x03B9 + uint8_t m_fenders; //0x03BA + uint8_t m_bullbars; //0x03BB + uint8_t m_roof; //0x03BC + char pad_03BD[3]; //0x03BD + uint8_t m_ornaments; //0x03C0 + char pad_03C1[1]; //0x03C1 + uint8_t m_dail_design; //0x03C2 + uint8_t m_sunstrips; //0x03C3 + uint8_t m_seats; //0x03C4 + uint8_t m_steering_wheel; //0x03C5 + uint8_t m_column_shifter_levers; //0x03C6 + char pad_03C7[2]; //0x03C7 + uint8_t m_truck_beds; //0x03C9 + char pad_03CA[4]; //0x03CA + uint8_t m_roll_cages; //0x03CE + uint8_t m_skid_plate; //0x03CF + uint8_t m_secondary_light_surrounds; //0x03D0 + uint8_t m_hood_accessories; //0x03D1 + uint8_t m_doors; //0x03D2 + uint8_t m_snorkel; //0x03D3 + uint8_t m_livery; //0x03D4 + char pad_03D5[1]; //0x03D5 + uint8_t m_engine; //0x03D6 + uint8_t m_brakes; //0x03D7 + uint8_t m_transmission; //0x03D8 + uint8_t m_horn; //0x03D9 + uint8_t m_suspension; //0x03DA + uint8_t m_armor; //0x03DB + char pad_03DC[1]; //0x03DC + uint8_t m_turbo; //0x03DD + char pad_03DE[3]; //0x03DE + uint8_t m_xenon; //0x03E1 + uint8_t m_tire_design; //0x03E2 + char pad_03E3[16]; //0x03E3 + uint8_t m_truck_bed; //0x03F3 + char pad_03F4[5]; //0x03F4 + uint8_t m_wheel_color; //0x03F9 + char pad_03FA[5]; //0x03FA + uint8_t m_window; //0x03FF + char pad_0400[2]; //0x0400 + uint8_t m_neon_left; //0x0402 + uint8_t m_neon_right; //0x0403 + uint8_t m_neon_front; //0x0404 + uint8_t m_neon_rear; //0x0405 + }; //Size: 0x0406 + static_assert(sizeof(fwDrawData) == 0x406); +} diff --git a/fwEntity.hpp b/fwEntity.hpp new file mode 100644 index 0000000..4b16017 --- /dev/null +++ b/fwEntity.hpp @@ -0,0 +1,28 @@ +#pragma once +#include "CBaseModelInfo.hpp" +#include "CNavigation.hpp" +#include "fwDrawData.hpp" +#include "netObject.hpp" + +namespace rage +{ + class fwEntity + { + public: + char pad_0000[32]; //0x0000 + class CBaseModelInfo *m_model_info; //0x0020 + char pad_0028[1]; //0x0028 + int8_t m_entity_type; //0x0029 + char pad_002A[2]; //0x002A + uint8_t m_invisible; //0x002C + char pad_002D[3]; //0x002D + class CNavigation *m_navigation; //0x0030 + char pad_0038[16]; //0x0038 + class rage::fwDrawData *m_draw_data; //0x0048 + char pad_0050[128]; //0x0050 + class rage::netObject *m_net_object; //0x00D0 + char pad_00D8[176]; //0x00D8 + uint32_t m_damage_bits; //0x0188 + }; //Size: 0x018C + static_assert(sizeof(fwEntity) == 0x18C); +} diff --git a/gtav.rcnet b/gtav.rcnet index 33e40b139a41d1d423811d07567d5a2e3189ddfb..1713f289bbebc4054a98528c40950d905750732c 100644 GIT binary patch literal 12489 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 yY|U$77SWHw(s+CglN{q8A16hhDE-yXUk{gRJO