diff --git a/datanodes/CPedAppearanceDataNode.hpp b/datanodes/CPedAppearanceDataNode.hpp new file mode 100644 index 0000000..6a14cc5 --- /dev/null +++ b/datanodes/CPedAppearanceDataNode.hpp @@ -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) \ No newline at end of file diff --git a/datanodes/CPedAttachDataNode.hpp b/datanodes/CPedAttachDataNode.hpp new file mode 100644 index 0000000..d6912e4 --- /dev/null +++ b/datanodes/CPedAttachDataNode.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/datanodes/CPedComponents.hpp b/datanodes/CPedComponents.hpp new file mode 100644 index 0000000..d6d75ec --- /dev/null +++ b/datanodes/CPedComponents.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/datanodes/CPedCreationDataNode.hpp b/datanodes/CPedCreationDataNode.hpp new file mode 100644 index 0000000..efc2a2e --- /dev/null +++ b/datanodes/CPedCreationDataNode.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/datanodes/CPhysicalAttachDataNode.hpp b/datanodes/CPhysicalAttachDataNode.hpp new file mode 100644 index 0000000..086f1ec --- /dev/null +++ b/datanodes/CPhysicalAttachDataNode.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/datanodes/CPlayerAppearanceDataNode.hpp b/datanodes/CPlayerAppearanceDataNode.hpp new file mode 100644 index 0000000..b888665 --- /dev/null +++ b/datanodes/CPlayerAppearanceDataNode.hpp @@ -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) \ No newline at end of file diff --git a/datanodes/CPlayerGameStateDataNode.hpp b/datanodes/CPlayerGameStateDataNode.hpp new file mode 100644 index 0000000..288b63f --- /dev/null +++ b/datanodes/CPlayerGameStateDataNode.hpp @@ -0,0 +1,151 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/datanodes/CPlayerGamerDataNode.hpp b/datanodes/CPlayerGamerDataNode.hpp new file mode 100644 index 0000000..ed829ad --- /dev/null +++ b/datanodes/CPlayerGamerDataNode.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/datanodes/CPlayerSectorPosNode.hpp b/datanodes/CPlayerSectorPosNode.hpp new file mode 100644 index 0000000..057bf2c --- /dev/null +++ b/datanodes/CPlayerSectorPosNode.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/datanodes/CTrainGameStateDataNode.hpp b/datanodes/CTrainGameStateDataNode.hpp new file mode 100644 index 0000000..d8507b5 --- /dev/null +++ b/datanodes/CTrainGameStateDataNode.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/datanodes/CVehicleCreationDataNode.hpp b/datanodes/CVehicleCreationDataNode.hpp new file mode 100644 index 0000000..8931986 --- /dev/null +++ b/datanodes/CVehicleCreationDataNode.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +#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) \ No newline at end of file diff --git a/ped/CPedAppearanceDataNode.hpp b/ped/CPedAppearanceDataNode.hpp deleted file mode 100644 index 2871782..0000000 --- a/ped/CPedAppearanceDataNode.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include "ped/CPedComponents.hpp" - -#include - -#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) diff --git a/ped/CPedComponents.hpp b/ped/CPedComponents.hpp deleted file mode 100644 index 0c640d2..0000000 --- a/ped/CPedComponents.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include - -#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) \ No newline at end of file diff --git a/player/CPlayerAppearanceDataNode.hpp b/player/CPlayerAppearanceDataNode.hpp deleted file mode 100644 index e3b3089..0000000 --- a/player/CPlayerAppearanceDataNode.hpp +++ /dev/null @@ -1,96 +0,0 @@ -#pragma once - -#include "ped/CPedComponents.hpp" - -#include - -#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) diff --git a/rage/netSyncDataNodeBase.hpp b/rage/netSyncDataNodeBase.hpp new file mode 100644 index 0000000..f0cb2cf --- /dev/null +++ b/rage/netSyncDataNodeBase.hpp @@ -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) +} \ No newline at end of file diff --git a/rage/netSyncNodeBase.hpp b/rage/netSyncNodeBase.hpp new file mode 100644 index 0000000..e102135 --- /dev/null +++ b/rage/netSyncNodeBase.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include + +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) +} \ No newline at end of file diff --git a/rage/netSyncTree.hpp b/rage/netSyncTree.hpp new file mode 100644 index 0000000..aa3c433 --- /dev/null +++ b/rage/netSyncTree.hpp @@ -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) +} \ No newline at end of file