feat(DataNodes): Add multiple data nodes and sync classes. (#14)

* feat(DataNodes): Add multiple data nodes and sync classes.

* fix(CPlayerAppearanceDataNode): Update class to 1.61.
This commit is contained in:
Reece Watson 2022-08-06 10:29:59 -04:00 committed by GitHub
parent ba4d0c3721
commit 634ccb0237
17 changed files with 623 additions and 149 deletions

View File

@ -0,0 +1,34 @@
#pragma once
#include "CPedComponents.hpp"
#pragma pack(push, 4)
class CPedAppearanceDataNode
{
public:
char pad_0xB0[192]; //0xB0
uint32_t unk_0xC0[6]; //0xC0
uint32_t unk_0xD8[6]; //0xD8
class CPedComponents components; //0xF0
char pad_0x1B8[8]; //0x1B8
uint32_t unk_0x1C0; //0x1C0
uint8_t unk_0x1C4; //0x1C4
uint8_t unk_0x1C5; //0x1C5
char pad_0x1C6[2]; //0x1C6
uint32_t unk_0x1C8; //0x1C8
uint32_t unk_0x1CC; //0x1CC
uint32_t unk_0x1D0; //0x1D0
bool unk_0x1D4; //0x1D4
bool unk_0x1D5; //0x1D5
bool unk_0x1D6; //0x1D6
uint8_t unk_0x1D7; //0x1D7
uint16_t unk_0x1D8; //0x1D8
uint16_t unk_0x1DA; //0x1DA
uint16_t unk_0x1DC; //0x1DC
bool unk_0x1DE; //0x1DE
bool unk_0x1DF; //0x1DF
bool unk_0x1E0; //0x1E0
uint8_t unk_0x1E1; //0x1E1
};
static_assert(sizeof(CPedAppearanceDataNode) == 0x1E4);
#pragma pack(pop)

View File

@ -0,0 +1,27 @@
#pragma once
#include <cstdint>
#pragma pack(push,4)
class CPedAttachDataNode
{
public:
char pad_0000[192]; //0x0000
float m_offset_x; //0x00C0
float m_offset_y; //0x00C4
float m_offset_z; //0x00C8
char pad_00CC[4]; //0x00CC
float m_orientation_x; //0x00D0
float m_orientation_y; //0x00D4
float m_orientation_z; //0x00D8
float m_orientation_w; //0x00DC
uint16_t m_attached_to; //0x00E0
uint16_t m_attachment_bone; //0x00E2
uint32_t m_attachment_flags; //0x00E4
float m_heading_1; //0x00E8
float m_heading_2; //0x00EC
bool m_attached; //0x00F0
bool unk_00F1; //0x00F1
};
static_assert(sizeof(CPedAttachDataNode) == 0xF4);
#pragma pack(pop)

View File

@ -0,0 +1,47 @@
#pragma once
#include <cstdint>
#pragma pack(push, 4)
class CPedComponents
{
public:
uint32_t m_component_bitset; //0x0
char pad_0x4[4]; //0x4
uint32_t unk_0x8[12]; //0x8
uint32_t m_drawables[12]; //0x38
uint32_t m_textures[12]; //0x68
uint32_t m_palettes[12]; //0x98
inline uint32_t get_drawable(int index)
{
if (m_component_bitset & (1 << index))
{
return m_drawables[index];
}
return 0;
}
inline uint32_t get_texture(int index)
{
if (m_component_bitset & (1 << index))
{
return m_textures[index];
}
return 0;
}
inline uint32_t get_palette(int index)
{
if (m_component_bitset & (1 << index))
{
return m_palettes[index];
}
return 0;
}
};
static_assert(sizeof(CPedComponents) == 0xC8);
#pragma pack(pop)

View File

@ -0,0 +1,29 @@
#pragma once
#include <cstdint>
#pragma pack(push,4)
class CPedCreationDataNode
{
public:
char pad_0000[192]; //0x0000
uint32_t m_pop_type; //0x00C0
uint32_t m_model; //0x00C4
uint32_t m_random_seed; //0x00C8
uint32_t m_max_health; //0x00CC
bool m_in_vehicle; //0x00D0
char pad_0xD1[1]; //0x00D1
uint16_t m_vehicle_id; //0x00D2
uint32_t m_vehicle_seat; //0x00D4
bool m_has_prop; //0x00D8
char pad_0xD9[3]; //0x00D9
uint32_t m_prop_model; //0x00DC
bool m_is_standing; //0x00E0
bool m_is_respawn_object_id; //0x00E1
bool m_is_respawn_flagged_for_removal; //0x00E2
bool m_has_attr_damage_to_player; //0x00E3
uint8_t m_attribute_damage_to_player; //0x00E4
uint32_t m_voice_hash; //0x00E8
}; //Size: 0x00EC
static_assert(sizeof(CPedCreationDataNode) == 0xEC);
#pragma pack(pop)

View File

@ -0,0 +1,38 @@
#pragma once
#include <cstdint>
#pragma pack(push,2)
class CPhysicalAttachDataNode
{
public:
char pad_0000[192]; //0x0000
bool m_attached; //0x00C0
bool unk_00C1; //0x00C1
uint16_t m_attached_to; //0x00C2
char pad_00C4[12]; //0x00C4
float m_offset_x; //0x00D0
float m_offset_y; //0x00D4
float m_offset_z; //0x00D8
char pad_00DC[4]; //0x00DC
float m_orientation_x; //0x00E0
float m_orientation_y; //0x00E4
float m_orientation_z; //0x00E8
float m_orientation_w; //0x00EC
float m_parent_offset_x; //0x00F0
float m_parent_offset_y; //0x00F4
float m_parent_offset_z; //0x00F8
char pad_00FC[4]; //0x00FC
uint16_t m_other_attach_bone; //0x0100
uint16_t m_attach_bone; //0x0102
uint32_t m_attach_flags; //0x0104
bool m_allow_initial_separation; //0x0108
char pad_00109[3]; //0x0109
float unk_010C; //0x010C
float unk_0110; //0x0110
bool unk_0114; //0x0114
bool unk_0115; //0x0115
bool m_is_cargo_vehicle; //0x0116
}; //Size: 0x0118
static_assert(sizeof(CPhysicalAttachDataNode) == 0x118);
#pragma pack(pop)

View File

@ -0,0 +1,94 @@
#pragma once
#include "CPedComponents.hpp"
#pragma pack(push, 4)
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
};
static_assert(sizeof(CPlayerAppearanceDataNode) == 0x45C);
#pragma pack(pop)

View File

@ -0,0 +1,151 @@
#pragma once
#include <cstdint>
#pragma pack(push,4)
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 unk_000CB; //0x00CB
bool unk_00CC; //0x00CC
bool unk_00CD; //0x00CD
bool unk_00CE; //0x00CE
bool unk_00CF; //0x00CF
bool unk_00D0; //0x00D0
bool unk_00D1; //0x00D1
bool m_random_peds_flee; //0x00D2
bool m_every_ped_back_away; //0x00D3
bool unk_00D4; //0x00D4
bool m_is_invincible; //0x00D5
bool unk_00D6; //0x00D6
bool unk_00D7; //0x00D7
bool unk_00D8; //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 unk_0114; //0x0114
uint16_t unk_0118; //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
uint32_t unk_0130; //0x0130
uint32_t unk_0134; //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 unk_0154; //0x0154
bool unk_0158; //0x0158
uint32_t m_decor_count; //0x015C
uint32_t m_decor_1_type; //0x0160
uint32_t m_decor_1_value; //0x0164
uint32_t m_decor_1_name; //0x0168
uint32_t m_decor_2_type; //0x016C
uint32_t m_decor_2_value; //0x0170
uint32_t m_decor_2_name; //0x0174
uint32_t m_decor_3_type; //0x0178
uint32_t m_decor_3_value; //0x017C
uint32_t m_decor_3_name; //0x0180
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 unk_018A; //0x018A
bool unk_018B; //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
}; //Size: 0x01F4
static_assert(sizeof(CPlayerGameStateDataNode) == 0x1F4);
#pragma pack(pop)

View File

@ -0,0 +1,49 @@
#pragma once
#include <cstdint>
#pragma pack(push, 1)
class CPlayerGamerDataNode
{
public:
char pad_0000[192]; //0x0000
int64_t unk_00C0; //0x00C0
int64_t m_clan_id; //0x00C8
int32_t unk_00D0; //0x00D0
int32_t unk_00D4; //0x00D4
int32_t unk_00D8; //0x00D8
bool m_is_rockstar_clan; //0x00DC
bool m_square_clan_tag; //0x00DD
char m_clan_name[25]; //0x00DE
char m_clan_tag[5]; //0x00F7
char unk_00FC[65]; //0x00FC
char pad_013D[3]; //0x013D
int64_t m_clan_id_2; //0x0140
char m_clan_role[25]; //0x0148
char pad_0161[3]; //0x0161
int32_t unk_0164; //0x0164
int64_t unk_0168; //0x0168
char pad_0170[8]; //0x0170
bool unk_0178; //0x0178
bool unk_0179; //0x0179
char unk_017A[25]; //0x017A
bool unk_0193; //0x0193
bool unk_0194; //0x0194
char unk_0195[125]; //0x0195
bool m_is_rockstar_dev; //0x0212
bool m_is_rockstar_qa; //0x0213
bool m_is_cheater; //0x0214
char pad_0215[3]; //0x0215
uint32_t unk_0218; //0x0218
bool unk_021C; //0x021C
char pad_021D[3]; //0x021D
int32_t unk_0220; //0x0220
int32_t unk_0224; //0x0224
uint32_t unk_0228; //0x0228
bool m_has_communication_privilege; //0x022C
char pad_022D[3]; //0x022D
int32_t unk_0230; //0x0230
char pad_0234[620]; //0x0234
}; //Size: 0x04A0
static_assert(sizeof(CPlayerGamerDataNode) == 0x4A0);
#pragma pack(pop)

View File

@ -0,0 +1,26 @@
#pragma once
#include <cstdint>
#pragma pack(push,4)
class CPlayerSectorPosNode
{
public:
char pax_0000[192]; //0x0000
float m_sector_pos_x; //0x00C0
float m_sector_pos_y; //0x00C4
float m_sector_pos_z; //0x00C8
bool m_is_standing_on_entity; //0x00CC
bool unk_00CD; //0x00CD
bool unk_00CE; //0x00CE
char pad_00CF[1]; //0x00CF
uint16_t m_entity_standing_on; //0x00D0
char pad_00D2[12]; //0x00D2
float m_standing_on_entity_offset_x; //0x00E0
float m_standing_on_entity_offset_y; //0x00E4
float m_standing_on_entity_offset_z; //0x00E8
char pad_00EC[8]; //0x00EC
uint32_t m_stealth_noise; //0x00F4
}; //Size: 0x00F8
static_assert(sizeof(CPlayerSectorPosNode) == 0xF8);
#pragma pack(pop)

View File

@ -0,0 +1,32 @@
#pragma once
#include <cstdint>
#pragma pack(push,4)
class CTrainGameStateDataNode
{
public:
char pad_0000[192]; //0x0000
bool m_is_engine; //0x00C0
bool m_is_caboose; //0x00C1
bool m_is_mission_train; //0x00C2
bool m_direction; //0x00C3
bool m_has_passenger_carriages; //0x00C4
bool m_render_derailed; //0x00C5
bool unk_00C6; //0x00C6
bool unk_00C7; //0x00C7
uint16_t m_engine_id; //0x00C8
int8_t m_train_config_index; //0x00CA
int8_t m_carriage_config_index; //0x00CB
int8_t m_track_id; //0x00CC
char pad_00CD[3]; //0x00CD
float m_distance_from_engine; //0x00D0
float m_cruise_speed; //0x00D4
uint16_t m_linked_to_backward_id; //0x00D8
uint16_t m_linked_to_forward_id; //0x00DA
uint32_t m_train_state; //0x0DC
bool unk_00E0; //0x00E0
bool m_force_doors_open; //0x0E1
}; //Size: 0x00E4
static_assert(sizeof(CTrainGameStateDataNode) == 0xE4);
#pragma pack(pop)

View File

@ -0,0 +1,22 @@
#pragma once
#include <cstdint>
#pragma pack(push,4)
class CVehicleCreationDataNode
{
public:
char pad_0000[192]; //0x00B0
uint32_t m_pop_type; //0x00C0
uint32_t m_random_seed; //0x00C4
uint32_t m_model; //0x00C8
uint32_t m_vehicle_status; //0x00CC
uint32_t m_max_health; //0x00D0
uint32_t m_creation_token; //0x00D4
bool m_car_budget; //0x00D8
bool m_needs_to_be_hotwired; //0x00D9
bool m_tires_dont_burst; //0x00DA
char pad_00DB[165]; //0x00DB
}; //Size: 0x0180
static_assert(sizeof(CVehicleCreationDataNode) == 0x180);
#pragma pack(pop)

View File

@ -1,36 +0,0 @@
#pragma once
#include "ped/CPedComponents.hpp"
#include <cstdint>
#pragma pack(push, 4)
class CPedAppearanceDataNode
{
public:
char pad_0x0[192]; //0x0000
uint32_t unk_0xC0[6]; //0x00C0
uint32_t unk_0xD8[6]; //0x00D8
class CPedComponents components; //0x00F0
char pad_0x1B8[8]; //0x01B8
uint32_t unk_0x1C0; //0x01C0
uint8_t unk_0x1C4; //0x01C4
uint8_t unk_0x1C5; //0x01C5
char pad_0x1C6[2]; //0x01C6
uint32_t unk_0x1C8; //0x01C8
uint32_t unk_0x1CC; //0x01CC
uint32_t unk_0x1D0; //0x01D0
bool unk_0x1D4; //0x01D4
bool unk_0x1D5; //0x01D5
bool unk_0x1D6; //0x01D6
uint8_t unk_0x1D7; //0x01D7
uint16_t unk_0x1D8; //0x01D8
uint16_t unk_0x1DA; //0x01DA
uint16_t unk_0x1DC; //0x01DC
bool unk_0x1DE; //0x01DE
bool unk_0x1DF; //0x01DF
bool unk_0x1E0; //0x01E0
uint8_t unk_0x1E1; //0x01E1
}; //Size: 0x01E4
static_assert(sizeof(CPedAppearanceDataNode) == 0x1E4);
#pragma(pop)

View File

@ -1,17 +0,0 @@
#pragma once
#include <cstdint>
#pragma pack(push, 4)
class CPedComponents
{
public:
uint32_t m_component_bitset; //0x0000
char pad_0x4[4]; //0x0004
uint32_t unk_0x8[12]; //0x0008
uint32_t m_drawables[12]; //0x0038
uint32_t m_textures[12]; //0x0068
uint32_t m_palettes[12]; //0x0098
}; //Size: 0x00C8
static_assert(sizeof(CPedComponents) == 0xC8);
#pragma pack(pop)

View File

@ -1,96 +0,0 @@
#pragma once
#include "ped/CPedComponents.hpp"
#include <cstdint>
#pragma pack(push, 4)
class CPlayerAppearanceDataNode
{
public:
char pad_0x0[192]; //0x00B0
uint32_t unk_0xC0[52]; //0x00C0
class CPedComponents components; //0x0190
char pad_0x258[8]; //0x0258
uint32_t unk_0x260[6]; //0x0260
uint32_t unk_0x278[6]; //0x0278
char pad_0x290[8]; //0x0290
float unk_0x298; //0x0298
uint8_t unk_0x29C; //0x029C
uint8_t unk_0x29D; //0x029D
char pad_0x29E[26]; //0x029E
float m_shape_mix; //0x02B8
float m_skin_mix; //0x02BC
float m_third_mix; //0x02C0
float unk_0x2C4; //0x02C4
float unk_0x2C8[13]; //0x02C8
float unk_0x2FC[13]; //0x02FC
float unk_0x330[20]; //0x0330
uint8_t unk_0x380[13]; //0x0380
uint8_t unk_0x38D[13]; //0x038D
uint8_t unk_0x39A[13]; //0x039A
uint8_t m_shape_first; //0x03A7
uint8_t m_shape_second; //0x03A8
uint8_t m_shape_third; //0x03A9
uint8_t m_skin_first; //0x03AA
uint8_t m_skin_second; //0x03AB
uint8_t m_skin_third; //0x03AC
uint8_t unk_0x3AD[13]; //0x03AD
uint8_t unk_0x3BA[11]; //0x03BA
int16_t unk_0x3C6; //0x03C6
uint8_t unk_0x3C8; //0x03C8
uint8_t unk_0x3C9; //0x03C9
char pad_0x3CA[1]; //0x03CA
bool unk_0x3CB; //0x03CB
bool unk_0x3CC; //0x03CC
char pad_0x3CD[3]; //0x03CD
uint32_t unk_0x3D0; //0x03D0
uint32_t unk_0x3D4; //0x03D4
uint32_t unk_0x3D8; //0x03D8
uint32_t unk_0x3DC; //0x03DC
uint32_t unk_0x3E0; //0x03E0
float unk_0x3E4; //0x03E4
float unk_0x3E8; //0x03E8
float unk_0x3EC; //0x03EC
uint32_t unk_0x3F0; //0x03F0
uint32_t unk_0x3F4; //0x03F4
uint32_t unk_0x3F8; //0x03F8
uint32_t unk_0x3FC; //0x03FC
uint32_t unk_0x400; //0x0400
bool unk_0x404; //0x0404
bool unk_0x405; //0x0405
bool unk_0x406; //0x0406
bool unk_0x407; //0x0407
bool unk_0x408; //0x0408
bool unk_0x409; //0x0409
uint32_t unk_0x40C; //0x040C
uint32_t m_model_hash; //0x0410
uint32_t m_voice_hash; //0x0414
uint32_t m_phone_mode; //0x0418
uint32_t unk_0x41C; //0x041C
uint8_t m_parachute_tint_index; //0x0420
uint8_t m_parachute_pack_tint_index; //0x0421
uint16_t m_respawn_object; //0x0422
bool m_has_head_blend_data; //0x0424
bool unk_0x425; //0x0425
bool m_has_respawn_object; //0x0426
char pad_0x427; //0x0427
uint32_t unk_0x428_clip_maybe; //0x0428
uint32_t unk_0x42C; //0x042C
uint32_t unk_0x430; //0x0430
bool unk_0x434; //0x0434
bool unk_0x435; //0x0435
bool unk_0x436; //0x0436
uint8_t unk_0x437; //0x0437
uint16_t unk_0x438; //0x0438
uint16_t unk_0x43A; //0x043A
uint16_t unk_0x43C; //0x043C
bool unk_0x43E; //0x043E
bool unk_0x43F; //0x043F
bool unk_0x440; //0x0440
uint8_t unk_0x441; //0x0441
uint32_t unk_0x442; //0x0442
uint32_t unk_0x446; //0x0446
}; //Size: 0x044C
static_assert(sizeof(CPlayerAppearanceDataNode) == 0x44C);
#pragma pack(pop)

View File

@ -0,0 +1,23 @@
#pragma once
#include "netSyncNodeBase.hpp"
namespace rage
{
#pragma pack(push, 8)
class netSyncDataNodeBase : public netSyncNodeBase
{
public:
uint32_t flags; //0x40
uint32_t pad3; //0x44
uint64_t pad4; //0x48
netSyncDataNodeBase* parentData; //0x50
uint32_t childCount; //0x58
netSyncDataNodeBase* children[8]; //0x5C
uint8_t syncFrequencies[8]; //0x9C
void* nodeBuffer; //0xA4
};
static_assert(sizeof(netSyncDataNodeBase) == 0xB0);
#pragma pack(pop)
}

30
rage/netSyncNodeBase.hpp Normal file
View File

@ -0,0 +1,30 @@
#pragma once
#include <cstdint>
namespace rage
{
#pragma pack(push, 8)
class netSyncNodeBase
{
public:
virtual ~netSyncNodeBase() = 0;
virtual bool IsDataNode() = 0;
virtual bool IsParentNode() = 0;
netSyncNodeBase* m_next_sibling; //0x0000
netSyncNodeBase* m_prev_sibling; //0x0008
netSyncNodeBase* m_root; //0x0010
netSyncNodeBase* m_parent; //0x0018
uint32_t m_flags1; //0x0020
uint32_t m_flags2; //0x0024
uint32_t m_flags3; //0x0028
uint32_t m_pad2; //0x002C
netSyncNodeBase* m_first_child; //0x0030
}; //Size: 0x0040
static_assert(sizeof(netSyncNodeBase) == 0x40);
#pragma pack(pop)
}

21
rage/netSyncTree.hpp Normal file
View File

@ -0,0 +1,21 @@
#pragma once
#include "netSyncNodeBase.hpp"
namespace rage
{
#pragma pack(push,8)
class netSyncTree
{
public:
virtual ~netSyncTree();
char pad_0008[8]; //0x0008
netSyncNodeBase* m_sync_node; //0x0010
char pad_0018[8]; //0x0018
uint32_t m_child_node_count; //0x0020
char pad_0024[12]; //0x0024
}; //Size: 0x0030
static_assert(sizeof(netSyncTree) == 0x30);
#pragma pack(pop)
}