Update to 1.66 (#98)

This commit is contained in:
maybegreat48 2023-02-02 22:55:50 +00:00 committed by GitHub
parent 82b6f0fbab
commit f155790d38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 281 additions and 170 deletions

View File

@ -1,6 +1,8 @@
#pragma once #pragma once
#include "../entities/CPhysical.hpp" #include "../entities/CPhysical.hpp"
class CWeapon;
#pragma pack(push, 2) #pragma pack(push, 2)
class CObject : public rage::CPhysical class CObject : public rage::CPhysical
{ {

11
base/atRTTI.hpp Normal file
View File

@ -0,0 +1,11 @@
#pragma once
#define DEFINE_RAGE_RTTI(className) private:\
virtual void* _0x00() = 0;\
virtual void* _0x08() = 0;\
virtual uint32_t _0x10() = 0;\
virtual className* _0x18(void*) = 0;\
virtual bool _0x20(void*) = 0;\
virtual bool _0x28(void**) = 0;\
virtual void destructor() = 0;\
public:

View File

@ -11,8 +11,8 @@ namespace rage
class fwExtensibleBase : public fwRefAwareBase class fwExtensibleBase : public fwRefAwareBase
{ {
public: public:
virtual bool is_of_type(std::uint32_t hash) = 0; // virtual bool is_of_type(std::uint32_t hash) = 0;
virtual uint32_t const &get_type() = 0; // virtual uint32_t const &get_type() = 0;
fwExtensionContainer* m_extension_container; // 0x0010 fwExtensionContainer* m_extension_container; // 0x0010
void *m_extensible_unk; // 0x0018 void *m_extensible_unk; // 0x0018

View File

@ -4,14 +4,47 @@
#include <cstdint> #include <cstdint>
class CEntityDrawHandler;
namespace rage namespace rage
{ {
class CEntity : public rage::fwEntity class CEntity : public rage::fwEntity
{ {
public: public:
char gapB9[7]; virtual void* _0x120() = 0; // implemented only by CPed
uint32_t dwordC0; virtual void UpdatePositionImpl() = 0; // 0x128
uint32_t dwordC4; virtual void _0x130() = 0;
virtual void _0x138(void*) = 0;
virtual void _0x140() = 0;
virtual void _0x148(int) = 0;
virtual bool _0x150() = 0;
virtual CEntityDrawHandler* CreateDrawHandler() = 0; // 0x158
virtual int GetTypeFlags() = 0; // 0x160
virtual int GetTypeFlags2() = 0; // 0x168
virtual bool _0x170() = 0; // implemented only by CPickup
virtual bool _0x178() = 0;
virtual void _0x180(bool) = 0;
virtual bool _0x188() = 0;
virtual bool _0x190() = 0;
virtual void ClearDecals() = 0; // 0x198
virtual void GetModelBounds(rage::fvector3* bounds) = 0; // 0x1A0
virtual void GetModelBounds2(rage::fvector3* bounds) = 0; // 0x1A8
virtual float GetBoundingBoxSize() = 0; // 0x1B0
virtual float _0x1B8(void*) = 0;
virtual float _0x1C0(void*) = 0;
virtual rage::fvector3* _0x1C8() = 0;
virtual rage::fvector3* GetCameraOffset() = 0; // 0x1D0
virtual void GetCameraBasePosition(rage::fvector3* pos) = 0; // 0x1D8
virtual bool _0x1E0() = 0;
virtual bool Update() = 0; // 0x1E8 always returns true
virtual bool _0x1F0() = 0;
virtual void Warp(rage::fvector3* pos, float heading, bool) = 0; // 0x1F8
uint8_t gapB9; //0x00B9
char gapBA[6]; //0x00BA
uint32_t m_flags_3; //0x00C0
uint32_t m_flags_4; //0x00C4
uint32_t dwordC8; uint32_t dwordC8;
uint32_t dwordCC; uint32_t dwordCC;
}; };

View File

@ -3,32 +3,81 @@
#include "../base/CBaseModelInfo.hpp" #include "../base/CBaseModelInfo.hpp"
#include "../base/CNavigation.hpp" #include "../base/CNavigation.hpp"
#include "../base/fwExtensibleBase.hpp" #include "../base/fwExtensibleBase.hpp"
#include "../base/atRTTI.hpp"
#include "../draw_handlers/fwDrawData.hpp" #include "../draw_handlers/fwDrawData.hpp"
#include <cstdint> #include <cstdint>
class CMoveObjectPooledObject;
namespace rage namespace rage
{ {
class fwDynamicEntityComponent;
class crmtRequestPose;
class crmtRequestIk;
class crFrameFilter;
class fwAudEntity;
#pragma pack(push, 1) #pragma pack(push, 1)
class fwEntity : public fwExtensibleBase class fwEntity : public fwExtensibleBase
{ {
public: public:
class CBaseModelInfo *m_model_info; //0x0020 DEFINE_RAGE_RTTI(rage::fwEntity);
char gap28; //0x0028
uint8_t m_entity_type; //0x0029 virtual void* _0x38(void*, void*) = 0;
char gap2A[2]; //0x002A virtual void AddExtension(void* extension) = 0; // 0x40
uint8_t m_invisible; //0x002C virtual void _0x48() = 0; // not implemented
char gap2D[3]; //0x002D virtual void _0x50() = 0; // only implemented by CEntityBatch
virtual void _0x58() = 0;
virtual void SetModelInfo(std::uint16_t* model_index) = 0; // 0x60
virtual void _0x68(int, fvector4*) = 0;
virtual void* _0x70(int) = 0;
virtual CNavigation* GetNavigation() = 0; // 0x78
virtual CMoveObjectPooledObject* CreateMoveObject() = 0; // 0x80
virtual std::uint32_t* GetType() = 0; // 0x88
virtual void _0x90() = 0;
virtual float _0x98() = 0;
virtual bool TryRequestInverseKinematics(rage::crmtRequestPose* pose, rage::crmtRequestIk* ik) = 0; // 0xA0 implemented only by CPed
virtual bool TryRequestFacialAnims(void*) = 0; // 0xA8 implemented only by CPed
virtual void* _0xB0() = 0;
virtual std::uint8_t _0xB8() = 0; // implemented only by CPed
virtual rage::crFrameFilter* GetFrameFilter() = 0; // 0xC0
virtual rage::fwAudEntity* GetEntityAudio() = 0; // 0xC8
virtual void _0xD0() = 0;
virtual void SetTransform(fmatrix44* matrix, bool update_pos) = 0; // 0xD8
virtual void SetTransform2(fmatrix44* matrix, bool update_pos) = 0; // 0xE0
virtual void SetPosition(fvector4* pos, bool update_pos) = 0; // 0xE8
virtual void SetHeading(float heading, bool update_pos) = 0; // 0xF0
virtual void SetEntityTypeFlags() = 0; // 0xF8
virtual void _0x100() = 0; // not implemented
virtual void UpdatePhysics(CNavigation* navigation) = 0; // 0x108
virtual void UpdatePhysics2(CNavigation* navigation) = 0; // 0x110
virtual void UpdatePosition() = 0; // 0x118
enum class EntityFlags
{
IS_VISIBLE = (1 << 0)
};
class CBaseModelInfo* m_model_info; //0x0020
uint8_t m_entity_type; //0x0028
char gap29; //0x0029
uint16_t gap2A; //0x002A
uint32_t m_flags; //0x002D
class CNavigation *m_navigation; //0x0030 class CNavigation *m_navigation; //0x0030
char gap38[16]; //0x0038 uint16_t gap38; //0x0038
class rage::fwDrawData *m_draw_data; //0x0048 uint16_t gap3A; //0x003A
char gap50[16]; //0x0050 uint32_t gap3C; //0x003C
class rage::fwDynamicEntityComponent* m_dynamic_entity_component; //0x0040 (stores attachments and stuff)
class rage::fwDrawData* m_draw_data; //0x0048
class rage::fwDynamicEntityComponent* gap50; //0x0050
uint64_t gap58; //0x0058
fmatrix44 m_transformation_matrix; //0x0060 fmatrix44 m_transformation_matrix; //0x0060
uint64_t qwordA0; //0x00A0 rage::fwEntity* m_render_focus_entity; //0x00A0
uint32_t dwordA8; //0x00A8 uint32_t m_render_focus_distance; //0x00A8
uint32_t dwordAC; //0x00AC uint32_t m_flags_2; //0x00AC
uint32_t dwordB0; //0x00B0 uint32_t m_shadow_flags; //0x00B0
char gapB4[4]; //0x00B4 char gapB4[4]; //0x00B4
std::uint8_t byteB8; //0x00B8 std::uint8_t byteB8; //0x00B8

View File

@ -9,7 +9,7 @@ public:
class rage::rlGamerInfo m_gamer_info; //0x0000 class rage::rlGamerInfo m_gamer_info; //0x0000
char pad_0098[40]; //0x0098 char pad_0098[40]; //0x0098
}; //Size: 0x00C0 }; //Size: 0x00C0
static_assert(sizeof(CVoiceConnection) == 0xC0); static_assert(sizeof(CVoiceConnection) == 0x120);
class CVoice class CVoice
{ {
@ -20,7 +20,7 @@ public:
uint32_t m_connection_count; //0x1908 uint32_t m_connection_count; //0x1908
char pad_190C[3508]; //0x190C char pad_190C[3508]; //0x190C
}; //Size: 0x1978 }; //Size: 0x1978
static_assert(sizeof(CVoice) == 0x26C0); static_assert(sizeof(CVoice) == 0x32C0);
class CCommunications class CCommunications
{ {
@ -29,5 +29,5 @@ public:
class CVoice m_voice; //0x0030 class CVoice m_voice; //0x0030
char pad_26F0[280300]; //0x26F0 char pad_26F0[280300]; //0x26F0
}; //Size: 0x46DE4 }; //Size: 0x46DE4
static_assert(sizeof(CCommunications) == 0x46DDC); static_assert(sizeof(CCommunications) == 0x479DC);
#pragma pack(pop) #pragma pack(pop)

View File

@ -59,5 +59,5 @@ public:
uint32_t m_account_id; //0x02B4 uint32_t m_account_id; //0x02B4
uint32_t m_unk_02BC; //0x02BC uint32_t m_unk_02BC; //0x02BC
}; //Size: 0x02C0 }; //Size: 0x02C0
static_assert(sizeof(CNetGamePlayer) == 0x2C0); static_assert(sizeof(CNetGamePlayer) == 0x320);
#pragma pack(pop) #pragma pack(pop)

View File

@ -30,5 +30,5 @@ public:
uint32_t unk_B944; //0xB944 uint32_t unk_B944; //0xB944
uint16_t unk_B948; //0xB948 uint16_t unk_B948; //0xB948
}; //Size: 0xB94A }; //Size: 0xB94A
static_assert(sizeof(CNetworkPlayerMgr) == 0xB94A); static_assert(sizeof(CNetworkPlayerMgr) == 0xD14A);
#pragma pack(pop) #pragma pack(pop)

View File

@ -97,7 +97,7 @@ public:
char pad_0074[4]; //0x0074 char pad_0074[4]; //0x0074
uint32_t m_flags; //0x0078 uint32_t m_flags; //0x0078
}; //Size: 0x007C }; //Size: 0x007C
static_assert(sizeof(SessionInfoBackup) == 0x7C); static_assert(sizeof(SessionInfoBackup) == 0xDC);
class MatchmakingSessionResult class MatchmakingSessionResult
{ {
@ -105,7 +105,7 @@ public:
class rage::rlSessionDetail m_detail; class rage::rlSessionDetail m_detail;
char pad_03B8[24]; //0x03B8 char pad_03B8[24]; //0x03B8
}; //Size: 0x03D0 }; //Size: 0x03D0
static_assert(sizeof(MatchmakingSessionResult) == 0x3D0); static_assert(sizeof(MatchmakingSessionResult) == 0x490);
class PlayerNameMapNode class PlayerNameMapNode
{ {
@ -191,95 +191,95 @@ public:
class rage::snSession m_game_session; //0x00B8 class rage::snSession m_game_session; //0x00B8
class rage::snSession m_transition_session; //0x3F28 class rage::snSession m_transition_session; //0x3F28
char pad_7D98[16]; //0x7D98 char pad_7D98[16]; //0x7D98
class NetworkGameConfig m_network_game_config; //0x7DA8 class NetworkGameConfig m_network_game_config; //0xAC48
class NetworkGameConfig m_network_transition_config; //0x7EF0 class NetworkGameConfig m_network_transition_config; //0xAD90
bool m_session_attributes_dirty; //0x8038 bool m_session_attributes_dirty; //0xAED8
char pad_8039[19]; //0x8039 char pad_AED9[19]; //0xAED9
uint32_t m_session_visibility_flags; //0x804C uint32_t m_session_visibility_flags; //0xAEEC
uint32_t m_transition_visibility_flags; //0x8050 uint32_t m_transition_visibility_flags; //0xAEF0
char pad_8054[60]; //0x8054 char pad_AEF4[60]; //0xAEF4
class MetricSessionMigrated m_metric_session_migrated; //0x8090 class MetricSessionMigrated m_metric_session_migrated; //0xAF30
bool m_migrated_metric_enabled; //0x83D8 bool m_migrated_metric_enabled; //0xB278
char pad_83D9[3]; //0x83D9 char pad_B279[3]; //0xB279
uint32_t m_game_session_state; //0x83DC uint32_t m_game_session_state; //0xB27C
class NetworkGameFilter m_network_game_filter; //0x83E0 class NetworkGameFilter m_network_game_filter; //0xB280
char pad_8724[33]; //0x8724 char pad_B5C4[33]; //0xB5C4
bool m_was_invited; //0x8745 bool m_was_invited; //0xB5E5
char pad_8746[10]; //0x8746 char pad_B5E6[10]; //0xB5E6
class rage::rlSessionInfo m_unk_session_info; //0x8750 class rage::rlSessionInfo m_unk_session_info; //0xB5F0
char pad_87C0[635]; //0x87C0 char pad_B6C0[635]; //0xB6C0
bool m_need_host_change; //0x8A3B bool m_need_host_change; //0xB93B
char pad_8A3C[2612]; //0x8A3C char pad_B93C[2628]; //0xB93C
class rage::rlSessionDetail m_joining_session_detail; //0x9470 class rage::rlSessionDetail m_joining_session_detail; //0xC380
class SessionInfoBackup m_last_joined_session; //0x9828 class SessionInfoBackup m_last_joined_session; //0xC7F8
char pad_98A4[40]; //0x98A4 char pad_C8D4[40]; //0xC8D4
uint32_t m_current_matchmaking_group; //0x98CC uint32_t m_current_matchmaking_group; //0xC8FC
uint32_t m_matchmaking_group_max_players[5]; //0x98D0 uint32_t m_matchmaking_group_max_players[5]; //0xC900
uint32_t m_num_active_matchmaking_groups; //0x98E4 uint32_t m_num_active_matchmaking_groups; //0xC914
char pad_98E8[8]; //0x98E8 char pad_C918[8]; //0xC918
uint8_t m_matchmaking_property_id; //0x98F0 uint8_t m_matchmaking_property_id; //0xC920
uint8_t m_matchmaking_mental_state; //0x98F1 uint8_t m_matchmaking_mental_state; //0xC921
char pad_98F2[366]; //0x98F2 char pad_C922[366]; //0xC922
class rage::rlMatchmakingFindResult m_game_session_matchmaking[3]; //0x9A60 class rage::rlMatchmakingFindResult m_game_session_matchmaking[3]; //0xCA90
char pad_143B0[40]; //0x143B0 char pad_195A0[40]; //0x195A0
class MatchmakingSessionResult m_game_matchmaking_session_results[10]; //0x143D8 class MatchmakingSessionResult m_game_matchmaking_session_results[10]; //0x195C8
char pad_169F8[308]; //0x169F8 char pad_1C368[308]; //0x1C368
uint32_t m_num_bosses; //0x16B2C uint32_t m_num_bosses; //0x1C49C
bool m_num_bosses_set; //0x16B30 bool m_num_bosses_set; //0x1C4A0
char pad_16B31[7]; //0x16B31 char pad_1C4A1[7]; //0x1C4A1
class rage::rlGamerHandle m_transition_creator_handle; //0x16B38 class rage::rlGamerHandle m_transition_creator_handle; //0x1C4A8
char pad_16B48[12]; //0x16B48 char pad_1C4B8[12]; //0x1C4B8
bool m_is_waiting_async; //0x16B54 bool m_is_waiting_async; //0x1C4C4
bool m_is_preferred_activity; //0x16B55 bool m_is_preferred_activity; //0x1C4C5
char pad_16B56[2]; //0x16B56 char pad_1C4C6[2]; //0x1C4C6
uint32_t m_in_progress_finish_time; //0x16B58 uint32_t m_in_progress_finish_time; //0x1C4C8
char pad_16B5C[4]; //0x16B5C char pad_1C4CC[4]; //0x1C4CC
bool m_local_player_info_dirty; //0x16B60 bool m_local_player_info_dirty; //0x1C4D0
char pad_16B61[495]; //0x16B61 char pad_1C4D1[495]; //0x1C4D1
class rage::rlGamerHandle m_inviter_handle; //0x16D50 class rage::rlGamerHandle m_inviter_handle; //0x1C6C0
class CNetComplaintMgr m_game_complaint_mgr; //0x16D60 class CNetComplaintMgr m_game_complaint_mgr; //0x1C6D0
class CNetComplaintMgr m_transition_complaint_mgr; //0x179F8 class CNetComplaintMgr m_transition_complaint_mgr; //0x1D368
char pad_18690[32]; //0x18690 char pad_1E000[32]; //0x1E000
class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x186B0 class JoiningPlayerNameMap m_unused_joining_player_name_map; //0x1E020
char pad_19FD8[8]; //0x19FD8 char pad_1F948[8]; //0x1F948
class CNetBlacklist m_blacklist; //0x19FE0 class CNetBlacklist m_blacklist; //0x1F950
char pad_1A298[8]; //0x1A298 char pad_1FC08[8]; //0x1FC08
class InvitedGamers m_game_invited_gamers; //0x1A2A0 class InvitedGamers m_game_invited_gamers; //0x1FC10
char pad_1AF28[56]; //0x1AF28 char pad_20898[4864]; //0x20898
class SessionInfoBackup m_last_joined_transition; //0x1AF60 class SessionInfoBackup m_last_joined_transition; //0x21B98
uint32_t m_activity_max_players; //0x1AFDC uint32_t m_activity_max_players; //0x21C74
uint32_t m_activity_max_spectators; //0x1AFE0 uint32_t m_activity_max_spectators; //0x21C78
char pad_1AFE4[48]; //0x1AFE4 char pad_21C7C[48]; //0x21C7C
bool m_do_not_launch_from_join_as_migrated_host; //0x1B014 bool m_do_not_launch_from_join_as_migrated_host; //0x21CAC
char pad_1B015[7]; //0x1B015 char pad_21CAD[7]; //0x21CAD
bool m_is_activity_session; //0x1B01C bool m_is_activity_session; //0x21CB4
char pad_1B01D[35]; //0x1B01D char pad_21CB5[35]; //0x21CB5
class RemotePlayerData m_remote_player_data; //0x1B040 class RemotePlayerData m_remote_player_data; //0x21CD8
char pad_1B648[8]; //0x1B648 char pad_222E0[8]; //0x222E0
class rage::netGamePlayerData m_local_net_game_player_data; //0x1B650 class rage::netGamePlayerData m_local_net_game_player_data; //0x222E8
char pad_1B680[600]; //0x1B680 char pad_22318[608]; //0x22318
class rage::rlMatchmakingFindResult m_transition_matchmaking[4]; //0x1B8D8 class rage::rlMatchmakingFindResult m_transition_matchmaking[4]; //0x22578
class NetworkGameFilter m_transition_filters[4]; //0x29A98 class NetworkGameFilter m_transition_filters[4]; //0x33438
char pad_2A7A8[20]; //0x2A7A8 char pad_34148[20]; //0x34148
uint32_t m_transition_quickmatch_group_handle_count; //0x2A7BC uint32_t m_transition_quickmatch_group_handle_count; //0x3415C
class rage::rlGamerHandle m_transition_quickmatch_group_handles[32]; //0x2A7C0 class rage::rlGamerHandle m_transition_quickmatch_group_handles[32]; //0x34160
bool m_retain_activity_group; //0x2A9C0 bool m_retain_activity_group; //0x34360
char pad_2A9C1[7]; //0x2A9C1 char pad_34361[7]; //0x34361
class rage::rlSessionInfo m_transition_to_activity_session_info; //0x2A9C8 class rage::rlSessionInfo m_transition_to_activity_session_info; //0x34368
char pad_2AA38[48]; //0x2AA38 char pad_34438[48]; //0x34438
class MatchmakingSessionResult m_transition_matchmaking_session_results[10]; //0x2AA68 class MatchmakingSessionResult m_transition_matchmaking_session_results[10]; //0x34468
char pad_2D088[8]; //0x2D088 char pad_37208[8]; //0x37208
class InvitedGamers m_transition_invited_gamers; //0x2D090 class InvitedGamers m_transition_invited_gamers; //0x37210
char pad_2DD18[16]; //0x2DD18 char pad_37E98[16]; //0x37E98
class rage::rlGamerHandle m_transition_to_game_handle; //0x2DD28 class rage::rlGamerHandle m_transition_to_game_handle; //0x37EA8
class rage::rlSessionInfo m_transition_to_game_session_info; //0x2DD38 class rage::rlSessionInfo m_transition_to_game_session_info; //0x37EB8
char pad_2DDA8[4]; //0x2DDA8 char pad_37F88[4]; //0x37F88
uint32_t m_transition_to_game_session_participant_count; //0x2DDAC uint32_t m_transition_to_game_session_participant_count; //0x37F8C
class rage::rlGamerHandle m_transition_to_game_session_participants[32]; //0x2DDB0 class rage::rlGamerHandle m_transition_to_game_session_participants[32]; //0x37F90
char pad_2DFB0[72]; //0x2DFB0 char pad_38190[72]; //0x38190
class rage::rlGamerHandle m_follower_handles[32]; //0x2DFF8 class rage::rlGamerHandle m_follower_handles[32]; //0x381D8
uint32_t m_follower_count; //0x2E1F8 uint32_t m_follower_count; //0x383D8
char pad_2E1FC[628]; //0x2E1FC char pad_383DC[628]; //0x383DC
}; //Size: 0x2E470 }; //Size: 0x38650
static_assert(sizeof(Network) == 0x2E470); static_assert(sizeof(Network) == 0x38650);
#pragma pack(pop) #pragma pack(pop)

View File

@ -31,5 +31,5 @@ public:
uint32_t m_num_handles; //0x02C8 uint32_t m_num_handles; //0x02C8
class rage::rlGamerHandle m_handles[32]; //0x02D0 class rage::rlGamerHandle m_handles[32]; //0x02D0
}; //Size: 0x04D0 }; //Size: 0x04D0
static_assert(sizeof(RemoteGamerInfoMsg) == 0x4D0); static_assert(sizeof(RemoteGamerInfoMsg) == 0x530);
#pragma pack(pop) #pragma pack(pop)

View File

@ -2,6 +2,7 @@
#include <cstdint> #include <cstdint>
#include "../rage/netSyncTree.hpp" #include "../rage/netSyncTree.hpp"
#include "../base/atRTTI.hpp"
class CObject; class CObject;
namespace rage namespace rage
@ -20,17 +21,19 @@ namespace rage
char pad_004E[1]; //0x004E char pad_004E[1]; //0x004E
bool m_should_not_be_delete; //0x004F bool m_should_not_be_delete; //0x004F
virtual ~netObject() = 0; DEFINE_RAGE_RTTI(rage::netObject)
virtual void mov1() = 0;
virtual void mov2() = 0; virtual void mov1() = 0; // 0x38
virtual void m_8() = 0; virtual void mov2() = 0; // 0x40
virtual void m_10() = 0;
virtual void m_18() = 0; virtual void m_8() = 0; // 0x48
virtual void* m_20() = 0; virtual void m_10() = 0; // 0x50
virtual void m_28() = 0; virtual void m_18() = 0; // 0x58
virtual netSyncTree* GetSyncTree() = 0; virtual void* m_20() = 0; // 0x60
virtual void m_38() = 0; virtual void m_28() = 0; // 0x68
virtual void m_40() = 0; virtual netSyncTree* GetSyncTree() = 0; // 0x70
virtual void m_38() = 0; // 0x78
virtual void m_40() = 0; // 0x80
virtual void m_48() = 0; virtual void m_48() = 0;
virtual void m_50() = 0; virtual void m_50() = 0;
virtual void m_58() = 0; virtual void m_58() = 0;

View File

@ -15,7 +15,7 @@ namespace rage
uint64_t m_msg_id; //0x0000 uint64_t m_msg_id; //0x0000
class rage::rlGamerInfo m_player_data; //0x0008 class rage::rlGamerInfo m_player_data; //0x0008
}; //Size: 0x00A0 }; //Size: 0x00A0
static_assert(sizeof(rage::snPlayer) == 0xA0); static_assert(sizeof(rage::snPlayer) == 0x100);
class snPeer class snPeer
{ {
@ -23,7 +23,7 @@ namespace rage
class rage::rlGamerInfo m_peer_data; //0x0000 class rage::rlGamerInfo m_peer_data; //0x0000
char pad_0098[40]; //0x0098 char pad_0098[40]; //0x0098
}; //Size: 0x00C0 }; //Size: 0x00C0
static_assert(sizeof(rage::snPeer) == 0xC0); static_assert(sizeof(rage::snPeer) == 0x120);
class rlRemoteGamer class rlRemoteGamer
{ {
@ -40,15 +40,15 @@ namespace rage
class rlSession class rlSession
{ {
public: public:
char pad_0008[168]; //0x0008 char pad_0008[256]; //0x0008
class rage::rlSessionInfo m_session_info; //0x00B0 class rage::rlSessionInfo m_session_info; //0x0108
char pad_0120[288]; //0x0120 char pad_01D8[296]; //0x01D8
uint64_t m_session_id; //0x0240 uint64_t m_session_id; //0x0300
char pad_0248[1648]; //0x0248 char pad_0308[1136]; //0x0308
virtual ~rlSession() = default; virtual ~rlSession() = default;
}; //Size: 0x08B8 }; //Size: 0x0778
static_assert(sizeof(rage::rlSession) == 0x8B8); static_assert(sizeof(rage::rlSession) == 0x778);
class rlSessionDetail class rlSessionDetail
{ {
@ -74,7 +74,7 @@ namespace rage
uint8_t m_population_density; //0x0277 uint8_t m_population_density; //0x0277
char pad_0278[320]; //0x0278 char pad_0278[320]; //0x0278
}; //Size: 0x03CA }; //Size: 0x03CA
static_assert(sizeof(rlSessionDetail) == 0x3B8); static_assert(sizeof(rlSessionDetail) == 0x478);
class rlMatchmakingFindResult class rlMatchmakingFindResult
@ -83,7 +83,7 @@ namespace rage
class rage::rlSessionDetail m_result_session_details[15]; //0x0000 class rage::rlSessionDetail m_result_session_details[15]; //0x0000
char pad_37C8[168]; //0x37C8 char pad_37C8[168]; //0x37C8
}; //Size: 0x3870 }; //Size: 0x3870
static_assert(sizeof(rage::rlMatchmakingFindResult) == 0x3870); static_assert(sizeof(rage::rlMatchmakingFindResult) == 0x43B0);
class netGamePlayerData class netGamePlayerData
{ {
@ -168,7 +168,7 @@ namespace rage
} }
}; //Size: 0x3E70 }; //Size: 0x3E70
static_assert(sizeof(rage::snSession) == 0x3E70); static_assert(sizeof(rage::snSession) == 0x5590);
class snMsgRemoveGamersFromSessionCmd class snMsgRemoveGamersFromSessionCmd
{ {

View File

@ -7,7 +7,7 @@
#include "CPedInventory.hpp" #include "CPedInventory.hpp"
#include "../entities/fwEntity.hpp" #include "../entities/fwEntity.hpp"
#include "../rage/vector.hpp" #include "../rage/vector.hpp"
#include "CPedOxygenInfo.hpp" #include "CPedIntelligence.hpp"
#include "CPedBoneInfo.hpp" #include "CPedBoneInfo.hpp"
#include <cstdint> #include <cstdint>
@ -26,7 +26,7 @@ public:
char pad_0D18[896]; //0x0D18 char pad_0D18[896]; //0x0D18
uint32_t m_ped_type; //0x1098 uint32_t m_ped_type; //0x1098
char pad_109C[4]; //0x109C char pad_109C[4]; //0x109C
class CPedOxygenInfo* m_oxygen_info; //0x10A0 class CPedIntelligence* m_ped_intelligence; //0x10A0
class CPlayerInfo *m_player_info; //0x10A8 class CPlayerInfo *m_player_info; //0x10A8
class CPedInventory* m_inventory; //0x10B0 class CPedInventory* m_inventory; //0x10B0
class CPedWeaponManager *m_weapon_manager; //0x10B8 class CPedWeaponManager *m_weapon_manager; //0x10B8

View File

@ -1,11 +1,23 @@
#pragma once #pragma once
#include "CPed.hpp" #include "CPed.hpp"
class CPedFactory class CPedFactory
{ {
public: public:
char pad_0000[8]; //0x0000 enum class PedCreateFlags
{
IS_NETWORKED = (1 << 0),
IS_PLAYER = (1 << 1)
};
virtual ~CPedFactory() = default;
virtual CPed* CreatePed(std::uint8_t* flags, std::uint16_t* model_index, rage::fmatrix44* matrix, bool default_component_variation, bool register_network_object, bool give_default_loadout, bool, bool) = 0; // 0x08
virtual CPed* CreateClone(std::uint8_t* flags, std::uint16_t* model_index, rage::fmatrix44* matrix, bool default_component_variation, bool, bool register_network_object, bool) = 0; // 0x10
virtual CPed* ClonePed(CPed* ped, bool register_network_object, bool link_blends, bool clone_compressed_damage) = 0; // 0x18
virtual CPed* ClonePedToTarget(CPed* source, CPed* target, bool clone_compressed_damage) = 0; // 0x20
virtual CPed* CreatePlayer(std::uint8_t* flags, std::uint16_t model_index, rage::fmatrix44* matrix, CPlayerInfo* player_info) = 0; // 0x28
virtual void DestroyPed(CPed* ped) = 0; // 0x30
class CPed* m_local_ped; //0x0008 class CPed* m_local_ped; //0x0008
}; //Size: 0x0010 }; //Size: 0x0010
static_assert(sizeof(CPedFactory) == 0x10); static_assert(sizeof(CPedFactory) == 0x10);

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include <cstdint> #include <cstdint>
#include "../base/atRTTI.hpp"
class CPed; class CPed;
@ -8,13 +9,10 @@ class CPed;
class CPedInventory class CPedInventory
{ {
public: public:
virtual ~CPedInventory(); DEFINE_RAGE_RTTI(CPedInventory);
virtual void _0x0008();
virtual void _0x0010();
virtual void _0x0018();
uint64_t unk_0008; uint64_t unk_0008;
CPed* m_ped; CPed* m_ped; //0x0010
uint64_t unk_0018; uint64_t unk_0018;
uint32_t unk_0020; uint32_t unk_0020;
uint64_t unk_0028; uint64_t unk_0028;
@ -31,7 +29,8 @@ public:
char pad_006C[4]; char pad_006C[4];
char unk_0070; char unk_0070;
char pad_0071[7]; char pad_0071[7];
char unk_0078; bool m_infinite_ammo : 1;
bool m_infinite_clip : 1;
char pad_0079[7]; char pad_0079[7];
uint64_t unk_0080; uint64_t unk_0080;
}; };

View File

@ -14,5 +14,6 @@ public:
class CWeaponInfo* m_weapon_info; //0x0020 class CWeaponInfo* m_weapon_info; //0x0020
char pad_0028[72]; //0x0028 char pad_0028[72]; //0x0028
class CWeaponInfo* m_vehicle_weapon_info; //0x0070 class CWeaponInfo* m_vehicle_weapon_info; //0x0070
}; //Size: 0x0078 class CObject* m_weapon_object; //0x0078
static_assert(sizeof(CPedWeaponManager) == 0x78); }; //Size: 0x0080
static_assert(sizeof(CPedWeaponManager) == 0x80);

View File

@ -61,5 +61,5 @@ public:
char pad_0D24[8]; //0x0D24 char pad_0D24[8]; //0x0D24
float m_melee_weapon_defence_mult; //0x0D2C float m_melee_weapon_defence_mult; //0x0D2C
}; //Size: 0x0D30 }; //Size: 0x0D30
static_assert(sizeof(CPlayerInfo) == 0xD30); static_assert(sizeof(CPlayerInfo) == 0xD90);
#pragma pack(pop) #pragma pack(pop)

View File

@ -15,6 +15,6 @@ namespace rage
uint32_t m_ros_privilege; uint32_t m_ros_privilege;
char m_name[17]; char m_name[17];
}; //Size: 0x0098 }; //Size: 0x0098
static_assert(sizeof(rlGamerInfo) == 0x98); static_assert(sizeof(rlGamerInfo) == 0xF8);
#pragma pack(pop) #pragma pack(pop)
} }

View File

@ -21,6 +21,7 @@ namespace rage
class rlGamerInfoBase class rlGamerInfoBase
{ {
public: public:
char pad_0000[0x60];
uint64_t m_peer_id; //0x0000 uint64_t m_peer_id; //0x0000
rlGamerHandle m_gamer_handle; //0x008 rlGamerHandle m_gamer_handle; //0x008
char m_aes_key[32]; //0x0018 char m_aes_key[32]; //0x0018
@ -35,6 +36,6 @@ namespace rage
uint16_t m_internal_port; //0x0058 uint16_t m_internal_port; //0x0058
uint32_t unk_005C; //0x005C uint32_t unk_005C; //0x005C
}; };
static_assert(sizeof(rlGamerInfoBase) == 0x60); static_assert(sizeof(rlGamerInfoBase) == 0xC0);
#pragma pack(pop) #pragma pack(pop)
} }

View File

@ -12,5 +12,5 @@ namespace rage
uint64_t m_session_token; //0x0008 uint64_t m_session_token; //0x0008
rlGamerInfoBase m_net_player_data; //0x0010 rlGamerInfoBase m_net_player_data; //0x0010
}; };
static_assert(sizeof(rlSessionInfo) == 0x70); static_assert(sizeof(rlSessionInfo) == 0xD0);
} }

View File

@ -70,7 +70,7 @@ struct GSBD
SCR_ARRAY<uint64_t, 32> SpawnPositionCreationTimes; SCR_ARRAY<uint64_t, 32> SpawnPositionCreationTimes;
SCR_ARRAY<uint64_t, 32> SpawnPositionsValid; SCR_ARRAY<uint64_t, 32> SpawnPositionsValid;
SCR_ARRAY<uint64_t, 32> PAD_0294; SCR_ARRAY<uint64_t, 32> PAD_0294;
SCR_ARRAY<uint64_t, 32> SpawnPositionTokens; SCR_ARRAY<uint64_t, 32> SpawnPositionTokens;
SCR_INT SpawnPositionCounter; SCR_INT SpawnPositionCounter;
SCR_ARRAY<uint64_t, 32> RespawnVehicles; SCR_ARRAY<uint64_t, 32> RespawnVehicles;
SCR_ARRAY<uint64_t, 32> RespawnVehicleSeats; SCR_ARRAY<uint64_t, 32> RespawnVehicleSeats;

View File

@ -419,23 +419,23 @@ struct GlobalPlayerBDEntry
SCR_BITSET<eAnimationBitset> AnimationBitset; SCR_BITSET<eAnimationBitset> AnimationBitset;
SCR_INT NumSuccessfulHoldups; // resets every 12 minutes SCR_INT NumSuccessfulHoldups; // resets every 12 minutes
SCR_INT PAD_0037; SCR_INT PAD_0037;
SCR_INT PersonalVehicleNetId; NETWORK_INDEX PersonalVehicleNetId;
SCR_INT UnkVehicleNetId; NETWORK_INDEX UnkVehicleNetId;
SCR_INT UnkVehicleNetId2; NETWORK_INDEX UnkVehicleNetId2;
SCR_ARRAY<uint64_t, 2> UnkVehicleNetIds; SCR_ARRAY<uint64_t, 2> UnkVehicleNetIds;
SCR_INT DeliveryMechanicNetId; NETWORK_INDEX DeliveryMechanicNetId;
SCR_INT DeliveryMechanicNetId2; NETWORK_INDEX DeliveryMechanicNetId2;
SCR_INT SpawningVehicleLiveryIndex; SCR_INT SpawningVehicleLiveryIndex;
SCR_INT SpawningVehiclePrimaryColor; SCR_INT SpawningVehiclePrimaryColor;
SCR_INT SpawningVehicleSecondaryColor; SCR_INT SpawningVehicleSecondaryColor;
SCR_INT AvengerNetId; NETWORK_INDEX AvengerNetId;
SCR_INT DeliveryMechanicNetId3; // wtf is this? NETWORK_INDEX DeliveryMechanicNetId3; // wtf is this?
SCR_INT TerrorbyteNetId; // or is it the MOC? NETWORK_INDEX TerrorbyteNetId; // or is it the MOC?
SCR_INT SubmarineNetId; NETWORK_INDEX SubmarineNetId;
SCR_INT DinghyNetId; NETWORK_INDEX DinghyNetId;
SCR_INT DeliveryMechanicNetId4; // another one... NETWORK_INDEX DeliveryMechanicNetId4; // another one...
SCR_INT AcidLabNetId; NETWORK_INDEX AcidLabNetId;
SCR_INT DeliveryBikeNetId; // this is a guess, verify NETWORK_INDEX DeliveryBikeNetId; // this is a guess, verify
SCR_BOOL PAD_0057; SCR_BOOL PAD_0057;
uint64_t PAD_0058[15]; // confirmed these are not used by PC scripts uint64_t PAD_0058[15]; // confirmed these are not used by PC scripts
PLAYER_BLIP PlayerBlip; PLAYER_BLIP PlayerBlip;