Add more spoofing options and added clang-format (#1020)

* feat(Spoofing): add spoofing
* feat(Spoofing): prepare code for player attach
* remove(PlayerAttach): isn't going to work due to netsync architecture
* fix(GUI): fix scaling
* feat(Project): add clang-format file
* feat(Classes): update classes
* fix(BlackHole): remove unnecessary cleanup
* fix(Formatting): fix formatting for initializer lists
* feat(clang-format): Set tab width and 1 space before comment

Co-authored-by: Yimura <24669514+Yimura@users.noreply.github.com>
This commit is contained in:
maybegreat48
2023-03-01 21:27:15 +00:00
committed by GitHub
parent 6a2cd866c0
commit 9ccb77e8eb
467 changed files with 55742 additions and 36204 deletions

View File

@ -8,52 +8,52 @@ namespace rage
class Blip_t
{
public:
int32_t m_id; //0x0000
uint16_t m_blip_array_index; //0x0004
char pad_0006[4]; //0x0006
bool m_active; //0x000A
uint8_t N00000197; //0x000B
int32_t m_entity_id; //0x000C
float m_x; //0x0010
float m_y; //0x0014
float m_z; //0x0018
char pad_001C[4]; //0x001C
uint32_t m_display_bits; //0x0020
uint32_t m_render_bits; //0x0024
char *m_message; //0x0028
char pad_0030[8]; //0x0030
Hash m_description; //0x0038
char pad_003C[4]; //0x003C
int32_t m_icon; //0x0040
int16_t m_flash_interval; //0x0044
int16_t m_flash_timer; //0x0046
uint32_t m_color; //0x0048
int32_t m_id; //0x0000
uint16_t m_blip_array_index;//0x0004
char pad_0006[4]; //0x0006
bool m_active; //0x000A
uint8_t N00000197; //0x000B
int32_t m_entity_id; //0x000C
float m_x; //0x0010
float m_y; //0x0014
float m_z; //0x0018
char pad_001C[4]; //0x001C
uint32_t m_display_bits; //0x0020
uint32_t m_render_bits; //0x0024
char* m_message; //0x0028
char pad_0030[8]; //0x0030
Hash m_description; //0x0038
char pad_003C[4]; //0x003C
int32_t m_icon; //0x0040
int16_t m_flash_interval; //0x0044
int16_t m_flash_timer; //0x0046
uint32_t m_color; //0x0048
uint32_t m_secondary_color; //0x004C
float m_scale_x; //0x0050
float m_scale_y; //0x0054
float m_rotation; //0x0058
uint8_t m_mission_bits; //0x005C
uint8_t m_priority; //0x005D
uint8_t m_display_id; //0x005E
uint8_t m_alpha; //0x005F
int8_t m_category; //0x0060
int8_t m_show_number; //0x0061
char pad_0062[14]; //0x0062
}; //Size: 0x0070
float m_scale_x; //0x0050
float m_scale_y; //0x0054
float m_rotation; //0x0058
uint8_t m_mission_bits; //0x005C
uint8_t m_priority; //0x005D
uint8_t m_display_id; //0x005E
uint8_t m_alpha; //0x005F
int8_t m_category; //0x0060
int8_t m_show_number; //0x0061
char pad_0062[14]; //0x0062
}; //Size: 0x0070
static_assert(sizeof(Blip_t) == 0x70, "Blip_t is not sized properly.");
#pragma pack(pop)
class BlipEntry
{
public:
Blip_t* m_pBlip; //0x0000
Blip_t* m_pBlip;//0x0000
};//Size=0x0008
class BlipList
{
public:
BlipEntry m_Blips[1500]; //0x0000
BlipEntry m_Blips[1500];//0x0000
char _0x2EE0[56];
};//Size=0x2F18

View File

@ -6,14 +6,18 @@ namespace rage
struct rgbaColor
{
rgbaColor(std::uint8_t r = 0, std::uint8_t g = 0, std::uint8_t b = 0, std::uint8_t a = 255) :
r(r), g(g), b(b), a(a)
{}
r(r),
g(g),
b(b),
a(a)
{
}
std::uint8_t r;
std::uint8_t g;
std::uint8_t b;
std::uint8_t a;
};
static_assert(sizeof(rgbaColor) == sizeof(std::uint8_t) * 4);
}

View File

@ -10,24 +10,24 @@ namespace rage
class decal_controller
{
public:
char pad_0x0000[0xB0]; //0x0000
char pad_0x0000[0xB0];//0x0000
decal_list* ped_decal_list[69];
decal_list* all_tattoo_decals_active; //0x02D8
decal_list* all_tattoo_decals_active;//0x02D8
}; //Size=0x02E0
};//Size=0x02E0
class decal_list
{
public:
virtual ~decal_list() = default;
virtual ~decal_list() = default;
virtual __int64 refresh_list(__int64) = 0;
char pad_0x0000[0x15E0]; //0x0000
rage::atArray<decal> decal_array; //0x15E8
char pad_0x0000[0x15E0]; //0x0000
rage::atArray<decal> decal_array;//0x15E8
void clear_non_perm_decals_from_decal_array()
{
DWORD v1; // edx
BYTE* v2; // rax
DWORD v1;// edx
BYTE* v2;// rax
__int64 a1 = (__int64)this;
v1 = 0;
@ -43,48 +43,48 @@ namespace rage
}
*(DWORD*)(a1 + 0x15E0) = 0;
}
}; //Size=0x15F1
};//Size=0x15F1
class decal_helper
{
public:
virtual ~decal_helper() = default;
virtual ~decal_helper() = default;
virtual Hash* get_decal_type(char*) = 0;
};
class decal
{
public:
std::uint32_t N00000001; //0x0000
std::uint8_t N00000028; //0x0004
std::uint8_t N0000002A; //0x0005
char pad_0x0006[0x2]; //0x0006
std::uint64_t N00000002; //0x0008
std::uint64_t N00000003; //0x0010
std::uint64_t N00000004; //0x0018
std::uint32_t N00000005; //0x0020
std::uint32_t N00000022; //0x0024
std::uint32_t N00000006; //0x0028
char pad_0x002C[0x4]; //0x002C
decal_helper* m_decal_helper; //0x0030
std::uint32_t collection; //0x0038
std::uint32_t overlay; //0x003C
std::uint16_t N00000009; //0x0040
std::uint16_t N00000035; //0x0042
std::uint16_t N00000036; //0x0044
char pad_0x0046[0x2]; //0x0046
std::uint32_t N0000000A; //0x0048
std::uint32_t N00000041; //0x004C
std::uint32_t N0000000B; //0x0050
char pad_0x0054[0x4]; //0x0054
std::uint32_t N0000000C; //0x0058
std::uint32_t N00000046; //0x005C
std::uint32_t N0000000D; //0x0060
char pad_0x0064[0x4]; //0x0064
std::uint64_t N0000000E; //0x0068
std::uint8_t N0000000F; //0x0070
char pad_0x0071[0x7]; //0x0071
std::uint32_t N00000001; //0x0000
std::uint8_t N00000028; //0x0004
std::uint8_t N0000002A; //0x0005
char pad_0x0006[0x2]; //0x0006
std::uint64_t N00000002; //0x0008
std::uint64_t N00000003; //0x0010
std::uint64_t N00000004; //0x0018
std::uint32_t N00000005; //0x0020
std::uint32_t N00000022; //0x0024
std::uint32_t N00000006; //0x0028
char pad_0x002C[0x4]; //0x002C
decal_helper* m_decal_helper;//0x0030
std::uint32_t collection; //0x0038
std::uint32_t overlay; //0x003C
std::uint16_t N00000009; //0x0040
std::uint16_t N00000035; //0x0042
std::uint16_t N00000036; //0x0044
char pad_0x0046[0x2]; //0x0046
std::uint32_t N0000000A; //0x0048
std::uint32_t N00000041; //0x004C
std::uint32_t N0000000B; //0x0050
char pad_0x0054[0x4]; //0x0054
std::uint32_t N0000000C; //0x0058
std::uint32_t N00000046; //0x005C
std::uint32_t N0000000D; //0x0060
char pad_0x0064[0x4]; //0x0064
std::uint64_t N0000000E; //0x0068
std::uint8_t N0000000F; //0x0070
char pad_0x0071[0x7]; //0x0071
}; //Size=0x0078
static_assert (sizeof(decal) == 0x78, "decal is not sized properly.");
};//Size=0x0078
static_assert(sizeof(decal) == 0x78, "decal is not sized properly.");
}

View File

@ -567,14 +567,14 @@ enum class BlipIcons
Number10,
GTAOCrew,
GTAOFriend,
CableCar = 36,
CableCar = 36,
RaceFinish = 38,
Safehouse = 40,
Safehouse = 40,
Cop2,
CopCar,
Helicopter,
ChatBubble = 47,
Garage = 50,
Garage = 50,
Drugs,
ConvenienceStore,
PoliceCar = 56,
@ -583,7 +583,7 @@ enum class BlipIcons
ConvenienceStore2,
ShieldWithStar,
Asterisk,
Helicopter2 = 64,
Helicopter2 = 64,
StrangersAndFreaks = 66,
ArmoredTruck,
TowTruck,
@ -604,8 +604,8 @@ enum class BlipIcons
FlightSchool,
Bar = 93,
ParachuteJump,
Heist2 = 96,
CarWash = 100,
Heist2 = 96,
CarWash = 100,
ComedyClub = 102,
Darts,
FIB = 106,
@ -613,7 +613,7 @@ enum class BlipIcons
DollarSign,
Golf,
AmmuNation,
Exile = 112,
Exile = 112,
ShootingRange = 119,
Solomon,
StripClub,
@ -626,7 +626,7 @@ enum class BlipIcons
Marijuana = 140,
Hunting,
ArmsTraffickingGround = 147,
Nigel = 149,
Nigel = 149,
AssaultRifle,
Bat,
Grenade,
@ -642,14 +642,14 @@ enum class BlipIcons
PointOfInterest,
GTAOPassive,
GTAOUsingMenu,
Link = 171,
Link = 171,
Minigun = 173,
GrenadeLauncher,
Armor,
Castle,
CameraIcon = 184,
Handcuffs = 188,
Yoga = 197,
Handcuffs = 188,
Yoga = 197,
Cab,
Number11,
Number12,
@ -661,9 +661,9 @@ enum class BlipIcons
Epsilon,
PersonalVehicleCar = 225,
PersonalVehicleBike,
Custody = 237,
Custody = 237,
ArmsTraffickingAir = 251,
Fairground = 266,
Fairground = 266,
PropertyManagement,
Altruist = 269,
Enemy,
@ -684,8 +684,8 @@ enum class BlipIcons
RaceAir,
RaceCar,
RaceSea,
GarbageTruck = 318,
Motorcycle = 348,
GarbageTruck = 318,
Motorcycle = 348,
SafehouseForSale = 350,
Package,
MartinMadrazo,
@ -1005,35 +1005,35 @@ enum class BlipColors
PlayerColor,
YellowMission,
FriendlyVehicle = 0x26,
MichaelColor = 0x2A,
MichaelColor = 0x2A,
FranklinColor,
TravorColor,
BlipColorEnemy = 0x31,
MissionVehicle = 0x36,
RedMission = 0x3B,
RedMission = 0x3B,
YellowMission2 = 0x3C,
Mission = 0x42,
WaypointColor = 0x54
Mission = 0x42,
WaypointColor = 0x54
};
enum class BlipDisplayBits
{
BlipIsBright = (1 << 1),
BlipEngageFlashing = (1 << 3),
BlipFlashForRoute = (1 << 5),
BlipIsOnMinimap = (1 << 6),
BlipIsHighDetail = (1 << 8),
BlipIsBright = (1 << 1),
BlipEngageFlashing = (1 << 3),
BlipFlashForRoute = (1 << 5),
BlipIsOnMinimap = (1 << 6),
BlipIsHighDetail = (1 << 8),
BlipUseBlipColorForDirection = (1 << 9),
BlipIsSmall = (1 << 10),
BlipShowCone = (1 << 11),
BlipIsMissionCreatorBlip = (1 << 12),
BlipShowCheckmark = (1 << 15),
BlipShowDollarSign = (1 << 16),
BlipShowHeadingIndicator = (1 << 17),
BlipShowFullCircle = (1 << 18),
BlipIsFriend = (1 << 19),
BlipIsCrew = (1 << 20),
BlipIsSelected = (1 << 22),
BlipIsSmall = (1 << 10),
BlipShowCone = (1 << 11),
BlipIsMissionCreatorBlip = (1 << 12),
BlipShowCheckmark = (1 << 15),
BlipShowDollarSign = (1 << 16),
BlipShowHeadingIndicator = (1 << 17),
BlipShowFullCircle = (1 << 18),
BlipIsFriend = (1 << 19),
BlipIsCrew = (1 << 20),
BlipIsSelected = (1 << 22),
};
enum class BlipRenderBits
@ -1043,10 +1043,10 @@ enum class BlipRenderBits
enum class eFrameFlags : std::uint32_t
{
eFrameFlagExplosiveAmmo = 1 << 11,
eFrameFlagFireAmmo = 1 << 12,
eFrameFlagExplosiveAmmo = 1 << 11,
eFrameFlagFireAmmo = 1 << 12,
eFrameFlagExplosiveMelee = 1 << 13,
eFrameFlagSuperJump = 1 << 14,
eFrameFlagSuperJump = 1 << 14,
};
enum class eNetObjType
@ -1070,7 +1070,7 @@ enum class eNetObjType
enum class eNetObjectFlags : std::uint16_t
{
NET_OBJ_FLAGS_FROM_SCRIPT = 1 << 2,
NET_OBJ_FLAGS_SCRIPTED = 1 << 6,
NET_OBJ_FLAGS_SCRIPTED = 1 << 6,
};
enum class eAckCode : std::uint32_t
@ -1088,362 +1088,362 @@ enum class eAckCode : std::uint32_t
enum class PedBones : std::uint32_t
{
SKEL_ROOT = 0x0,
SKEL_Pelvis = 0x2E28,
SKEL_L_Thigh = 0xE39F,
SKEL_L_Calf = 0xF9BB,
SKEL_L_Foot = 0x3779,
SKEL_L_Toe0 = 0x83C,
EO_L_Foot = 0x84C5,
EO_L_Toe = 0x68BD,
IK_L_Foot = 0xFEDD,
PH_L_Foot = 0xE175,
MH_L_Knee = 0xB3FE,
SKEL_R_Thigh = 0xCA72,
SKEL_R_Calf = 0x9000,
SKEL_R_Foot = 0xCC4D,
SKEL_R_Toe0 = 0x512D,
EO_R_Foot = 0x1096,
EO_R_Toe = 0x7163,
IK_R_Foot = 0x8AAE,
PH_R_Foot = 0x60E6,
MH_R_Knee = 0x3FCF,
RB_L_ThighRoll = 0x5C57,
RB_R_ThighRoll = 0x192A,
SKEL_Spine_Root = 0xE0FD,
SKEL_Spine0 = 0x5C01,
SKEL_Spine1 = 0x60F0,
SKEL_Spine2 = 0x60F1,
SKEL_Spine3 = 0x60F2,
SKEL_L_Clavicle = 0xFCD9,
SKEL_L_UpperArm = 0xB1C5,
SKEL_L_Forearm = 0xEEEB,
SKEL_L_Hand = 0x49D9,
SKEL_L_Finger00 = 0x67F2,
SKEL_L_Finger01 = 0xFF9,
SKEL_L_Finger02 = 0xFFA,
SKEL_L_Finger10 = 0x67F3,
SKEL_L_Finger11 = 0x1049,
SKEL_L_Finger12 = 0x104A,
SKEL_L_Finger20 = 0x67F4,
SKEL_L_Finger21 = 0x1059,
SKEL_L_Finger22 = 0x105A,
SKEL_L_Finger30 = 0x67F5,
SKEL_L_Finger31 = 0x1029,
SKEL_L_Finger32 = 0x102A,
SKEL_L_Finger40 = 0x67F6,
SKEL_L_Finger41 = 0x1039,
SKEL_L_Finger42 = 0x103A,
PH_L_Hand = 0xEB95,
IK_L_Hand = 0x8CBD,
RB_L_ForeArmRoll = 0xEE4F,
RB_L_ArmRoll = 0x1470,
MH_L_Elbow = 0x58B7,
SKEL_R_Clavicle = 0x29D2,
SKEL_R_UpperArm = 0x9D4D,
SKEL_R_Forearm = 0x6E5C,
SKEL_R_Hand = 0xDEAD,
SKEL_R_Finger00 = 0xE5F2,
SKEL_R_Finger01 = 0xFA10,
SKEL_R_Finger02 = 0xFA11,
SKEL_R_Finger10 = 0xE5F3,
SKEL_R_Finger11 = 0xFA60,
SKEL_R_Finger12 = 0xFA61,
SKEL_R_Finger20 = 0xE5F4,
SKEL_R_Finger21 = 0xFA70,
SKEL_R_Finger22 = 0xFA71,
SKEL_R_Finger30 = 0xE5F5,
SKEL_R_Finger31 = 0xFA40,
SKEL_R_Finger32 = 0xFA41,
SKEL_R_Finger40 = 0xE5F6,
SKEL_R_Finger41 = 0xFA50,
SKEL_R_Finger42 = 0xFA51,
PH_R_Hand = 0x6F06,
IK_R_Hand = 0x188E,
RB_R_ForeArmRoll = 0xAB22,
RB_R_ArmRoll = 0x90FF,
MH_R_Elbow = 0xBB0,
SKEL_Neck_1 = 0x9995,
SKEL_Head = 0x796E,
IK_Head = 0x322C,
FACIAL_facialRoot = 0xFE2C,
FB_L_Brow_Out_000 = 0xE3DB,
FB_L_Lid_Upper_000 = 0xB2B6,
FB_L_Eye_000 = 0x62AC,
FB_L_CheekBone_000 = 0x542E,
FB_L_Lip_Corner_000 = 0x74AC,
FB_R_Lid_Upper_000 = 0xAA10,
FB_R_Eye_000 = 0x6B52,
FB_R_CheekBone_000 = 0x4B88,
FB_R_Brow_Out_000 = 0x54C,
FB_R_Lip_Corner_000 = 0x2BA6,
FB_Brow_Centre_000 = 0x9149,
FB_UpperLipRoot_000 = 0x4ED2,
FB_UpperLip_000 = 0xF18F,
FB_L_Lip_Top_000 = 0x4F37,
FB_R_Lip_Top_000 = 0x4537,
FB_Jaw_000 = 0xB4A0,
FB_LowerLipRoot_000 = 0x4324,
FB_LowerLip_000 = 0x508F,
FB_L_Lip_Bot_000 = 0xB93B,
FB_R_Lip_Bot_000 = 0xC33B,
FB_Tongue_000 = 0xB987,
RB_Neck_1 = 0x8B93,
SPR_L_Breast = 0xFC8E,
SPR_R_Breast = 0x885F,
IK_Root = 0xDD1C,
SKEL_Neck_2 = 0x5FD4,
SKEL_Pelvis1 = 0xD003,
SKEL_PelvisRoot = 0x45FC,
SKEL_SADDLE = 0x9524,
MH_L_CalfBack = 0x1013,
MH_L_ThighBack = 0x600D,
SM_L_Skirt = 0xC419,
MH_R_CalfBack = 0xB013,
MH_R_ThighBack = 0x51A3,
SM_R_Skirt = 0x7712,
SM_M_BackSkirtRoll = 0xDBB,
SM_L_BackSkirtRoll = 0x40B2,
SM_R_BackSkirtRoll = 0xC141,
SM_M_FrontSkirtRoll = 0xCDBB,
SM_L_FrontSkirtRoll = 0x9B69,
SM_R_FrontSkirtRoll = 0x86F1,
SM_CockNBalls_ROOT = 0xC67D,
SM_CockNBalls = 0x9D34,
MH_L_Finger00 = 0x8C63,
MH_L_FingerBulge00 = 0x5FB8,
MH_L_Finger10 = 0x8C53,
MH_L_FingerTop00 = 0xA244,
MH_L_HandSide = 0xC78A,
MH_Watch = 0x2738,
MH_L_Sleeve = 0x933C,
MH_R_Finger00 = 0x2C63,
MH_R_FingerBulge00 = 0x69B8,
MH_R_Finger10 = 0x2C53,
MH_R_FingerTop00 = 0xEF4B,
MH_R_HandSide = 0x68FB,
MH_R_Sleeve = 0x92DC,
FACIAL_jaw = 0xB21,
FACIAL_underChin = 0x8A95,
FACIAL_L_underChin = 0x234E,
FACIAL_chin = 0xB578,
FACIAL_chinSkinBottom = 0x98BC,
FACIAL_L_chinSkinBottom = 0x3E8F,
FACIAL_R_chinSkinBottom = 0x9E8F,
FACIAL_tongueA = 0x4A7C,
FACIAL_tongueB = 0x4A7D,
FACIAL_tongueC = 0x4A7E,
FACIAL_tongueD = 0x4A7F,
FACIAL_tongueE = 0x4A80,
FACIAL_L_tongueE = 0x35F2,
FACIAL_R_tongueE = 0x2FF2,
FACIAL_L_tongueD = 0x35F1,
FACIAL_R_tongueD = 0x2FF1,
FACIAL_L_tongueC = 0x35F0,
FACIAL_R_tongueC = 0x2FF0,
FACIAL_L_tongueB = 0x35EF,
FACIAL_R_tongueB = 0x2FEF,
FACIAL_L_tongueA = 0x35EE,
FACIAL_R_tongueA = 0x2FEE,
FACIAL_chinSkinTop = 0x7226,
FACIAL_L_chinSkinTop = 0x3EB3,
FACIAL_chinSkinMid = 0x899A,
FACIAL_L_chinSkinMid = 0x4427,
FACIAL_L_chinSide = 0x4A5E,
FACIAL_R_chinSkinMid = 0xF5AF,
FACIAL_R_chinSkinTop = 0xF03B,
FACIAL_R_chinSide = 0xAA5E,
FACIAL_R_underChin = 0x2BF4,
FACIAL_L_lipLowerSDK = 0xB9E1,
FACIAL_L_lipLowerAnalog = 0x244A,
FACIAL_L_lipLowerThicknessV = 0xC749,
FACIAL_L_lipLowerThicknessH = 0xC67B,
FACIAL_lipLowerSDK = 0x7285,
FACIAL_lipLowerAnalog = 0xD97B,
FACIAL_lipLowerThicknessV = 0xC5BB,
FACIAL_lipLowerThicknessH = 0xC5ED,
FACIAL_R_lipLowerSDK = 0xA034,
FACIAL_R_lipLowerAnalog = 0xC2D9,
FACIAL_R_lipLowerThicknessV = 0xC6E9,
FACIAL_R_lipLowerThicknessH = 0xC6DB,
FACIAL_nose = 0x20F1,
FACIAL_L_nostril = 0x7322,
FACIAL_L_nostrilThickness = 0xC15F,
FACIAL_noseLower = 0xE05A,
FACIAL_L_noseLowerThickness = 0x79D5,
FACIAL_R_noseLowerThickness = 0x7975,
FACIAL_noseTip = 0x6A60,
FACIAL_R_nostril = 0x7922,
FACIAL_R_nostrilThickness = 0x36FF,
FACIAL_noseUpper = 0xA04F,
FACIAL_L_noseUpper = 0x1FB8,
FACIAL_noseBridge = 0x9BA3,
FACIAL_L_nasolabialFurrow = 0x5ACA,
FACIAL_L_nasolabialBulge = 0xCD78,
FACIAL_L_cheekLower = 0x6907,
FACIAL_L_cheekLowerBulge1 = 0xE3FB,
FACIAL_L_cheekLowerBulge2 = 0xE3FC,
FACIAL_L_cheekInner = 0xE7AB,
FACIAL_L_cheekOuter = 0x8161,
FACIAL_L_eyesackLower = 0x771B,
FACIAL_L_eyeball = 0x1744,
FACIAL_L_eyelidLower = 0x998C,
FACIAL_L_eyelidLowerOuterSDK = 0xFE4C,
FACIAL_L_eyelidLowerOuterAnalog = 0xB9AA,
FACIAL_L_eyelashLowerOuter = 0xD7F6,
FACIAL_L_eyelidLowerInnerSDK = 0xF151,
FACIAL_L_eyelidLowerInnerAnalog = 0x8242,
FACIAL_L_eyelashLowerInner = 0x4CCF,
FACIAL_L_eyelidUpper = 0x97C1,
FACIAL_L_eyelidUpperOuterSDK = 0xAF15,
FACIAL_L_eyelidUpperOuterAnalog = 0x67FA,
FACIAL_L_eyelashUpperOuter = 0x27B7,
FACIAL_L_eyelidUpperInnerSDK = 0xD341,
FACIAL_L_eyelidUpperInnerAnalog = 0xF092,
FACIAL_L_eyelashUpperInner = 0x9B1F,
FACIAL_L_eyesackUpperOuterBulge = 0xA559,
FACIAL_L_eyesackUpperInnerBulge = 0x2F2A,
SKEL_ROOT = 0x0,
SKEL_Pelvis = 0x2E28,
SKEL_L_Thigh = 0xE39F,
SKEL_L_Calf = 0xF9BB,
SKEL_L_Foot = 0x3779,
SKEL_L_Toe0 = 0x83C,
EO_L_Foot = 0x84C5,
EO_L_Toe = 0x68BD,
IK_L_Foot = 0xFEDD,
PH_L_Foot = 0xE175,
MH_L_Knee = 0xB3FE,
SKEL_R_Thigh = 0xCA72,
SKEL_R_Calf = 0x9000,
SKEL_R_Foot = 0xCC4D,
SKEL_R_Toe0 = 0x512D,
EO_R_Foot = 0x1096,
EO_R_Toe = 0x7163,
IK_R_Foot = 0x8AAE,
PH_R_Foot = 0x60E6,
MH_R_Knee = 0x3FCF,
RB_L_ThighRoll = 0x5C57,
RB_R_ThighRoll = 0x192A,
SKEL_Spine_Root = 0xE0FD,
SKEL_Spine0 = 0x5C01,
SKEL_Spine1 = 0x60F0,
SKEL_Spine2 = 0x60F1,
SKEL_Spine3 = 0x60F2,
SKEL_L_Clavicle = 0xFCD9,
SKEL_L_UpperArm = 0xB1C5,
SKEL_L_Forearm = 0xEEEB,
SKEL_L_Hand = 0x49D9,
SKEL_L_Finger00 = 0x67F2,
SKEL_L_Finger01 = 0xFF9,
SKEL_L_Finger02 = 0xFFA,
SKEL_L_Finger10 = 0x67F3,
SKEL_L_Finger11 = 0x1049,
SKEL_L_Finger12 = 0x104A,
SKEL_L_Finger20 = 0x67F4,
SKEL_L_Finger21 = 0x1059,
SKEL_L_Finger22 = 0x105A,
SKEL_L_Finger30 = 0x67F5,
SKEL_L_Finger31 = 0x1029,
SKEL_L_Finger32 = 0x102A,
SKEL_L_Finger40 = 0x67F6,
SKEL_L_Finger41 = 0x1039,
SKEL_L_Finger42 = 0x103A,
PH_L_Hand = 0xEB95,
IK_L_Hand = 0x8CBD,
RB_L_ForeArmRoll = 0xEE4F,
RB_L_ArmRoll = 0x1470,
MH_L_Elbow = 0x58B7,
SKEL_R_Clavicle = 0x29D2,
SKEL_R_UpperArm = 0x9D4D,
SKEL_R_Forearm = 0x6E5C,
SKEL_R_Hand = 0xDEAD,
SKEL_R_Finger00 = 0xE5F2,
SKEL_R_Finger01 = 0xFA10,
SKEL_R_Finger02 = 0xFA11,
SKEL_R_Finger10 = 0xE5F3,
SKEL_R_Finger11 = 0xFA60,
SKEL_R_Finger12 = 0xFA61,
SKEL_R_Finger20 = 0xE5F4,
SKEL_R_Finger21 = 0xFA70,
SKEL_R_Finger22 = 0xFA71,
SKEL_R_Finger30 = 0xE5F5,
SKEL_R_Finger31 = 0xFA40,
SKEL_R_Finger32 = 0xFA41,
SKEL_R_Finger40 = 0xE5F6,
SKEL_R_Finger41 = 0xFA50,
SKEL_R_Finger42 = 0xFA51,
PH_R_Hand = 0x6F06,
IK_R_Hand = 0x188E,
RB_R_ForeArmRoll = 0xAB22,
RB_R_ArmRoll = 0x90FF,
MH_R_Elbow = 0xBB0,
SKEL_Neck_1 = 0x9995,
SKEL_Head = 0x796E,
IK_Head = 0x322C,
FACIAL_facialRoot = 0xFE2C,
FB_L_Brow_Out_000 = 0xE3DB,
FB_L_Lid_Upper_000 = 0xB2B6,
FB_L_Eye_000 = 0x62AC,
FB_L_CheekBone_000 = 0x542E,
FB_L_Lip_Corner_000 = 0x74AC,
FB_R_Lid_Upper_000 = 0xAA10,
FB_R_Eye_000 = 0x6B52,
FB_R_CheekBone_000 = 0x4B88,
FB_R_Brow_Out_000 = 0x54C,
FB_R_Lip_Corner_000 = 0x2BA6,
FB_Brow_Centre_000 = 0x9149,
FB_UpperLipRoot_000 = 0x4ED2,
FB_UpperLip_000 = 0xF18F,
FB_L_Lip_Top_000 = 0x4F37,
FB_R_Lip_Top_000 = 0x4537,
FB_Jaw_000 = 0xB4A0,
FB_LowerLipRoot_000 = 0x4324,
FB_LowerLip_000 = 0x508F,
FB_L_Lip_Bot_000 = 0xB93B,
FB_R_Lip_Bot_000 = 0xC33B,
FB_Tongue_000 = 0xB987,
RB_Neck_1 = 0x8B93,
SPR_L_Breast = 0xFC8E,
SPR_R_Breast = 0x885F,
IK_Root = 0xDD1C,
SKEL_Neck_2 = 0x5FD4,
SKEL_Pelvis1 = 0xD003,
SKEL_PelvisRoot = 0x45FC,
SKEL_SADDLE = 0x9524,
MH_L_CalfBack = 0x1013,
MH_L_ThighBack = 0x600D,
SM_L_Skirt = 0xC419,
MH_R_CalfBack = 0xB013,
MH_R_ThighBack = 0x51A3,
SM_R_Skirt = 0x7712,
SM_M_BackSkirtRoll = 0xDBB,
SM_L_BackSkirtRoll = 0x40B2,
SM_R_BackSkirtRoll = 0xC141,
SM_M_FrontSkirtRoll = 0xCDBB,
SM_L_FrontSkirtRoll = 0x9B69,
SM_R_FrontSkirtRoll = 0x86F1,
SM_CockNBalls_ROOT = 0xC67D,
SM_CockNBalls = 0x9D34,
MH_L_Finger00 = 0x8C63,
MH_L_FingerBulge00 = 0x5FB8,
MH_L_Finger10 = 0x8C53,
MH_L_FingerTop00 = 0xA244,
MH_L_HandSide = 0xC78A,
MH_Watch = 0x2738,
MH_L_Sleeve = 0x933C,
MH_R_Finger00 = 0x2C63,
MH_R_FingerBulge00 = 0x69B8,
MH_R_Finger10 = 0x2C53,
MH_R_FingerTop00 = 0xEF4B,
MH_R_HandSide = 0x68FB,
MH_R_Sleeve = 0x92DC,
FACIAL_jaw = 0xB21,
FACIAL_underChin = 0x8A95,
FACIAL_L_underChin = 0x234E,
FACIAL_chin = 0xB578,
FACIAL_chinSkinBottom = 0x98BC,
FACIAL_L_chinSkinBottom = 0x3E8F,
FACIAL_R_chinSkinBottom = 0x9E8F,
FACIAL_tongueA = 0x4A7C,
FACIAL_tongueB = 0x4A7D,
FACIAL_tongueC = 0x4A7E,
FACIAL_tongueD = 0x4A7F,
FACIAL_tongueE = 0x4A80,
FACIAL_L_tongueE = 0x35F2,
FACIAL_R_tongueE = 0x2FF2,
FACIAL_L_tongueD = 0x35F1,
FACIAL_R_tongueD = 0x2FF1,
FACIAL_L_tongueC = 0x35F0,
FACIAL_R_tongueC = 0x2FF0,
FACIAL_L_tongueB = 0x35EF,
FACIAL_R_tongueB = 0x2FEF,
FACIAL_L_tongueA = 0x35EE,
FACIAL_R_tongueA = 0x2FEE,
FACIAL_chinSkinTop = 0x7226,
FACIAL_L_chinSkinTop = 0x3EB3,
FACIAL_chinSkinMid = 0x899A,
FACIAL_L_chinSkinMid = 0x4427,
FACIAL_L_chinSide = 0x4A5E,
FACIAL_R_chinSkinMid = 0xF5AF,
FACIAL_R_chinSkinTop = 0xF03B,
FACIAL_R_chinSide = 0xAA5E,
FACIAL_R_underChin = 0x2BF4,
FACIAL_L_lipLowerSDK = 0xB9E1,
FACIAL_L_lipLowerAnalog = 0x244A,
FACIAL_L_lipLowerThicknessV = 0xC749,
FACIAL_L_lipLowerThicknessH = 0xC67B,
FACIAL_lipLowerSDK = 0x7285,
FACIAL_lipLowerAnalog = 0xD97B,
FACIAL_lipLowerThicknessV = 0xC5BB,
FACIAL_lipLowerThicknessH = 0xC5ED,
FACIAL_R_lipLowerSDK = 0xA034,
FACIAL_R_lipLowerAnalog = 0xC2D9,
FACIAL_R_lipLowerThicknessV = 0xC6E9,
FACIAL_R_lipLowerThicknessH = 0xC6DB,
FACIAL_nose = 0x20F1,
FACIAL_L_nostril = 0x7322,
FACIAL_L_nostrilThickness = 0xC15F,
FACIAL_noseLower = 0xE05A,
FACIAL_L_noseLowerThickness = 0x79D5,
FACIAL_R_noseLowerThickness = 0x7975,
FACIAL_noseTip = 0x6A60,
FACIAL_R_nostril = 0x7922,
FACIAL_R_nostrilThickness = 0x36FF,
FACIAL_noseUpper = 0xA04F,
FACIAL_L_noseUpper = 0x1FB8,
FACIAL_noseBridge = 0x9BA3,
FACIAL_L_nasolabialFurrow = 0x5ACA,
FACIAL_L_nasolabialBulge = 0xCD78,
FACIAL_L_cheekLower = 0x6907,
FACIAL_L_cheekLowerBulge1 = 0xE3FB,
FACIAL_L_cheekLowerBulge2 = 0xE3FC,
FACIAL_L_cheekInner = 0xE7AB,
FACIAL_L_cheekOuter = 0x8161,
FACIAL_L_eyesackLower = 0x771B,
FACIAL_L_eyeball = 0x1744,
FACIAL_L_eyelidLower = 0x998C,
FACIAL_L_eyelidLowerOuterSDK = 0xFE4C,
FACIAL_L_eyelidLowerOuterAnalog = 0xB9AA,
FACIAL_L_eyelashLowerOuter = 0xD7F6,
FACIAL_L_eyelidLowerInnerSDK = 0xF151,
FACIAL_L_eyelidLowerInnerAnalog = 0x8242,
FACIAL_L_eyelashLowerInner = 0x4CCF,
FACIAL_L_eyelidUpper = 0x97C1,
FACIAL_L_eyelidUpperOuterSDK = 0xAF15,
FACIAL_L_eyelidUpperOuterAnalog = 0x67FA,
FACIAL_L_eyelashUpperOuter = 0x27B7,
FACIAL_L_eyelidUpperInnerSDK = 0xD341,
FACIAL_L_eyelidUpperInnerAnalog = 0xF092,
FACIAL_L_eyelashUpperInner = 0x9B1F,
FACIAL_L_eyesackUpperOuterBulge = 0xA559,
FACIAL_L_eyesackUpperInnerBulge = 0x2F2A,
FACIAL_L_eyesackUpperOuterFurrow = 0xC597,
FACIAL_L_eyesackUpperInnerFurrow = 0x52A7,
FACIAL_forehead = 0x9218,
FACIAL_L_foreheadInner = 0x843,
FACIAL_L_foreheadInnerBulge = 0x767C,
FACIAL_L_foreheadOuter = 0x8DCB,
FACIAL_skull = 0x4221,
FACIAL_foreheadUpper = 0xF7D6,
FACIAL_L_foreheadUpperInner = 0xCF13,
FACIAL_L_foreheadUpperOuter = 0x509B,
FACIAL_R_foreheadUpperInner = 0xCEF3,
FACIAL_R_foreheadUpperOuter = 0x507B,
FACIAL_L_temple = 0xAF79,
FACIAL_L_ear = 0x19DD,
FACIAL_L_earLower = 0x6031,
FACIAL_L_masseter = 0x2810,
FACIAL_L_jawRecess = 0x9C7A,
FACIAL_L_cheekOuterSkin = 0x14A5,
FACIAL_R_cheekLower = 0xF367,
FACIAL_R_cheekLowerBulge1 = 0x599B,
FACIAL_R_cheekLowerBulge2 = 0x599C,
FACIAL_R_masseter = 0x810,
FACIAL_R_jawRecess = 0x93D4,
FACIAL_R_ear = 0x1137,
FACIAL_R_earLower = 0x8031,
FACIAL_R_eyesackLower = 0x777B,
FACIAL_R_nasolabialBulge = 0xD61E,
FACIAL_R_cheekOuter = 0xD32,
FACIAL_R_cheekInner = 0x737C,
FACIAL_R_noseUpper = 0x1CD6,
FACIAL_R_foreheadInner = 0xE43,
FACIAL_R_foreheadInnerBulge = 0x769C,
FACIAL_R_foreheadOuter = 0x8FCB,
FACIAL_R_cheekOuterSkin = 0xB334,
FACIAL_forehead = 0x9218,
FACIAL_L_foreheadInner = 0x843,
FACIAL_L_foreheadInnerBulge = 0x767C,
FACIAL_L_foreheadOuter = 0x8DCB,
FACIAL_skull = 0x4221,
FACIAL_foreheadUpper = 0xF7D6,
FACIAL_L_foreheadUpperInner = 0xCF13,
FACIAL_L_foreheadUpperOuter = 0x509B,
FACIAL_R_foreheadUpperInner = 0xCEF3,
FACIAL_R_foreheadUpperOuter = 0x507B,
FACIAL_L_temple = 0xAF79,
FACIAL_L_ear = 0x19DD,
FACIAL_L_earLower = 0x6031,
FACIAL_L_masseter = 0x2810,
FACIAL_L_jawRecess = 0x9C7A,
FACIAL_L_cheekOuterSkin = 0x14A5,
FACIAL_R_cheekLower = 0xF367,
FACIAL_R_cheekLowerBulge1 = 0x599B,
FACIAL_R_cheekLowerBulge2 = 0x599C,
FACIAL_R_masseter = 0x810,
FACIAL_R_jawRecess = 0x93D4,
FACIAL_R_ear = 0x1137,
FACIAL_R_earLower = 0x8031,
FACIAL_R_eyesackLower = 0x777B,
FACIAL_R_nasolabialBulge = 0xD61E,
FACIAL_R_cheekOuter = 0xD32,
FACIAL_R_cheekInner = 0x737C,
FACIAL_R_noseUpper = 0x1CD6,
FACIAL_R_foreheadInner = 0xE43,
FACIAL_R_foreheadInnerBulge = 0x769C,
FACIAL_R_foreheadOuter = 0x8FCB,
FACIAL_R_cheekOuterSkin = 0xB334,
FACIAL_R_eyesackUpperInnerFurrow = 0x9FAE,
FACIAL_R_eyesackUpperOuterFurrow = 0x140F,
FACIAL_R_eyesackUpperInnerBulge = 0xA359,
FACIAL_R_eyesackUpperOuterBulge = 0x1AF9,
FACIAL_R_nasolabialFurrow = 0x2CAA,
FACIAL_R_temple = 0xAF19,
FACIAL_R_eyeball = 0x1944,
FACIAL_R_eyelidUpper = 0x7E14,
FACIAL_R_eyelidUpperOuterSDK = 0xB115,
FACIAL_R_eyelidUpperOuterAnalog = 0xF25A,
FACIAL_R_eyelashUpperOuter = 0xE0A,
FACIAL_R_eyelidUpperInnerSDK = 0xD541,
FACIAL_R_eyelidUpperInnerAnalog = 0x7C63,
FACIAL_R_eyelashUpperInner = 0x8172,
FACIAL_R_eyelidLower = 0x7FDF,
FACIAL_R_eyelidLowerOuterSDK = 0x1BD,
FACIAL_R_eyelidLowerOuterAnalog = 0x457B,
FACIAL_R_eyelashLowerOuter = 0xBE49,
FACIAL_R_eyelidLowerInnerSDK = 0xF351,
FACIAL_R_eyelidLowerInnerAnalog = 0xE13,
FACIAL_R_eyelashLowerInner = 0x3322,
FACIAL_L_lipUpperSDK = 0x8F30,
FACIAL_L_lipUpperAnalog = 0xB1CF,
FACIAL_L_lipUpperThicknessH = 0x37CE,
FACIAL_L_lipUpperThicknessV = 0x38BC,
FACIAL_lipUpperSDK = 0x1774,
FACIAL_lipUpperAnalog = 0xE064,
FACIAL_lipUpperThicknessH = 0x7993,
FACIAL_lipUpperThicknessV = 0x7981,
FACIAL_L_lipCornerSDK = 0xB1C,
FACIAL_L_lipCornerAnalog = 0xE568,
FACIAL_R_eyesackUpperInnerBulge = 0xA359,
FACIAL_R_eyesackUpperOuterBulge = 0x1AF9,
FACIAL_R_nasolabialFurrow = 0x2CAA,
FACIAL_R_temple = 0xAF19,
FACIAL_R_eyeball = 0x1944,
FACIAL_R_eyelidUpper = 0x7E14,
FACIAL_R_eyelidUpperOuterSDK = 0xB115,
FACIAL_R_eyelidUpperOuterAnalog = 0xF25A,
FACIAL_R_eyelashUpperOuter = 0xE0A,
FACIAL_R_eyelidUpperInnerSDK = 0xD541,
FACIAL_R_eyelidUpperInnerAnalog = 0x7C63,
FACIAL_R_eyelashUpperInner = 0x8172,
FACIAL_R_eyelidLower = 0x7FDF,
FACIAL_R_eyelidLowerOuterSDK = 0x1BD,
FACIAL_R_eyelidLowerOuterAnalog = 0x457B,
FACIAL_R_eyelashLowerOuter = 0xBE49,
FACIAL_R_eyelidLowerInnerSDK = 0xF351,
FACIAL_R_eyelidLowerInnerAnalog = 0xE13,
FACIAL_R_eyelashLowerInner = 0x3322,
FACIAL_L_lipUpperSDK = 0x8F30,
FACIAL_L_lipUpperAnalog = 0xB1CF,
FACIAL_L_lipUpperThicknessH = 0x37CE,
FACIAL_L_lipUpperThicknessV = 0x38BC,
FACIAL_lipUpperSDK = 0x1774,
FACIAL_lipUpperAnalog = 0xE064,
FACIAL_lipUpperThicknessH = 0x7993,
FACIAL_lipUpperThicknessV = 0x7981,
FACIAL_L_lipCornerSDK = 0xB1C,
FACIAL_L_lipCornerAnalog = 0xE568,
FACIAL_L_lipCornerThicknessUpper = 0x7BC,
FACIAL_L_lipCornerThicknessLower = 0xDD42,
FACIAL_R_lipUpperSDK = 0x7583,
FACIAL_R_lipUpperAnalog = 0x51CF,
FACIAL_R_lipUpperThicknessH = 0x382E,
FACIAL_R_lipUpperThicknessV = 0x385C,
FACIAL_R_lipCornerSDK = 0xB3C,
FACIAL_R_lipCornerAnalog = 0xEE0E,
FACIAL_R_lipUpperSDK = 0x7583,
FACIAL_R_lipUpperAnalog = 0x51CF,
FACIAL_R_lipUpperThicknessH = 0x382E,
FACIAL_R_lipUpperThicknessV = 0x385C,
FACIAL_R_lipCornerSDK = 0xB3C,
FACIAL_R_lipCornerAnalog = 0xEE0E,
FACIAL_R_lipCornerThicknessUpper = 0x54C3,
FACIAL_R_lipCornerThicknessLower = 0x2BBA,
MH_MulletRoot = 0x3E73,
MH_MulletScaler = 0xA1C2,
MH_Hair_Scale = 0xC664,
MH_Hair_Crown = 0x1675,
SM_Torch = 0x8D6,
FX_Light = 0x8959,
FX_Light_Scale = 0x5038,
FX_Light_Switch = 0xE18E,
BagRoot = 0xAD09,
BagPivotROOT = 0xB836,
BagPivot = 0x4D11,
BagBody = 0xAB6D,
BagBone_R = 0x937,
BagBone_L = 0x991,
SM_LifeSaver_Front = 0x9420,
SM_R_Pouches_ROOT = 0x2962,
SM_R_Pouches = 0x4141,
SM_L_Pouches_ROOT = 0x2A02,
SM_L_Pouches = 0x4B41,
SM_Suit_Back_Flapper = 0xDA2D,
SPR_CopRadio = 0x8245,
SM_LifeSaver_Back = 0x2127,
MH_BlushSlider = 0xA0CE,
SKEL_Tail_01 = 0x347,
SKEL_Tail_02 = 0x348,
MH_L_Concertina_B = 0xC988,
MH_L_Concertina_A = 0xC987,
MH_R_Concertina_B = 0xC8E8,
MH_R_Concertina_A = 0xC8E7,
MH_L_ShoulderBladeRoot = 0x8711,
MH_L_ShoulderBlade = 0x4EAF,
MH_R_ShoulderBladeRoot = 0x3A0A,
MH_R_ShoulderBlade = 0x54AF,
FB_R_Ear_000 = 0x6CDF,
SPR_R_Ear = 0x63B6,
FB_L_Ear_000 = 0x6439,
SPR_L_Ear = 0x5B10,
FB_TongueA_000 = 0x4206,
FB_TongueB_000 = 0x4207,
FB_TongueC_000 = 0x4208,
SKEL_L_Toe1 = 0x1D6B,
SKEL_R_Toe1 = 0xB23F,
SKEL_Tail_03 = 0x349,
SKEL_Tail_04 = 0x34A,
SKEL_Tail_05 = 0x34B,
SPR_Gonads_ROOT = 0xBFDE,
SPR_Gonads = 0x1C00,
FB_L_Brow_Out_001 = 0xE3DB,
FB_L_Lid_Upper_001 = 0xB2B6,
FB_L_Eye_001 = 0x62AC,
FB_L_CheekBone_001 = 0x542E,
FB_L_Lip_Corner_001 = 0x74AC,
FB_R_Lid_Upper_001 = 0xAA10,
FB_R_Eye_001 = 0x6B52,
FB_R_CheekBone_001 = 0x4B88,
FB_R_Brow_Out_001 = 0x54C,
FB_R_Lip_Corner_001 = 0x2BA6,
FB_Brow_Centre_001 = 0x9149,
FB_UpperLipRoot_001 = 0x4ED2,
FB_UpperLip_001 = 0xF18F,
FB_L_Lip_Top_001 = 0x4F37,
FB_R_Lip_Top_001 = 0x4537,
FB_Jaw_001 = 0xB4A0,
FB_LowerLipRoot_001 = 0x4324,
FB_LowerLip_001 = 0x508F,
FB_L_Lip_Bot_001 = 0xB93B,
FB_R_Lip_Bot_001 = 0xC33B,
FB_Tongue_001 = 0xB987
MH_MulletRoot = 0x3E73,
MH_MulletScaler = 0xA1C2,
MH_Hair_Scale = 0xC664,
MH_Hair_Crown = 0x1675,
SM_Torch = 0x8D6,
FX_Light = 0x8959,
FX_Light_Scale = 0x5038,
FX_Light_Switch = 0xE18E,
BagRoot = 0xAD09,
BagPivotROOT = 0xB836,
BagPivot = 0x4D11,
BagBody = 0xAB6D,
BagBone_R = 0x937,
BagBone_L = 0x991,
SM_LifeSaver_Front = 0x9420,
SM_R_Pouches_ROOT = 0x2962,
SM_R_Pouches = 0x4141,
SM_L_Pouches_ROOT = 0x2A02,
SM_L_Pouches = 0x4B41,
SM_Suit_Back_Flapper = 0xDA2D,
SPR_CopRadio = 0x8245,
SM_LifeSaver_Back = 0x2127,
MH_BlushSlider = 0xA0CE,
SKEL_Tail_01 = 0x347,
SKEL_Tail_02 = 0x348,
MH_L_Concertina_B = 0xC988,
MH_L_Concertina_A = 0xC987,
MH_R_Concertina_B = 0xC8E8,
MH_R_Concertina_A = 0xC8E7,
MH_L_ShoulderBladeRoot = 0x8711,
MH_L_ShoulderBlade = 0x4EAF,
MH_R_ShoulderBladeRoot = 0x3A0A,
MH_R_ShoulderBlade = 0x54AF,
FB_R_Ear_000 = 0x6CDF,
SPR_R_Ear = 0x63B6,
FB_L_Ear_000 = 0x6439,
SPR_L_Ear = 0x5B10,
FB_TongueA_000 = 0x4206,
FB_TongueB_000 = 0x4207,
FB_TongueC_000 = 0x4208,
SKEL_L_Toe1 = 0x1D6B,
SKEL_R_Toe1 = 0xB23F,
SKEL_Tail_03 = 0x349,
SKEL_Tail_04 = 0x34A,
SKEL_Tail_05 = 0x34B,
SPR_Gonads_ROOT = 0xBFDE,
SPR_Gonads = 0x1C00,
FB_L_Brow_Out_001 = 0xE3DB,
FB_L_Lid_Upper_001 = 0xB2B6,
FB_L_Eye_001 = 0x62AC,
FB_L_CheekBone_001 = 0x542E,
FB_L_Lip_Corner_001 = 0x74AC,
FB_R_Lid_Upper_001 = 0xAA10,
FB_R_Eye_001 = 0x6B52,
FB_R_CheekBone_001 = 0x4B88,
FB_R_Brow_Out_001 = 0x54C,
FB_R_Lip_Corner_001 = 0x2BA6,
FB_Brow_Centre_001 = 0x9149,
FB_UpperLipRoot_001 = 0x4ED2,
FB_UpperLip_001 = 0xF18F,
FB_L_Lip_Top_001 = 0x4F37,
FB_R_Lip_Top_001 = 0x4537,
FB_Jaw_001 = 0xB4A0,
FB_LowerLipRoot_001 = 0x4324,
FB_LowerLip_001 = 0x508F,
FB_L_Lip_Bot_001 = 0xB93B,
FB_R_Lip_Bot_001 = 0xC33B,
FB_Tongue_001 = 0xB987
};

View File

@ -1,9 +1,12 @@
#include "fidevice.hpp"
#include "pointers.hpp"
namespace rage
{
#define PURECALL() LOG(FATAL) << "pure fiDevice call (" __FUNCTION__ ")"; return 0
#define PURECALL() \
LOG(FATAL) << "pure fiDevice call (" __FUNCTION__ ")"; \
return 0
fiDeviceImplemented::fiDeviceImplemented()
{
@ -11,15 +14,16 @@ namespace rage
fiDeviceImplemented::~fiDeviceImplemented()
{
}
fiDevice::~fiDevice()
{
}
uint64_t fiDeviceImplemented::Open(const char* fileName, bool) { PURECALL(); }
uint64_t fiDeviceImplemented::Open(const char* fileName, bool)
{
PURECALL();
}
uint64_t fiDeviceImplemented::OpenBulk(const char* fileName, uint64_t* ptr)
{

View File

@ -1,7 +1,7 @@
#pragma once
#include "sysMemAllocator.hpp"
#include "pointers.hpp"
#include "sysMemAllocator.hpp"
#include <array>
@ -74,9 +74,9 @@ namespace rage
// dummy!
virtual int m_40(int) = 0;
virtual bool RemoveFile(const char* file) = 0;
virtual bool RemoveFile(const char* file) = 0;
virtual int RenameFile(const char* from, const char* to) = 0;
virtual int CreateDirectory(const char* dir) = 0;
virtual int CreateDirectory(const char* dir) = 0;
virtual int RemoveDirectory(const char* dir) = 0;
@ -84,12 +84,12 @@ namespace rage
virtual uint64_t GetFileLengthLong(const char* fileName) = 0;
virtual uint64_t GetFileTime(const char* file) = 0;
virtual uint64_t GetFileTime(const char* file) = 0;
virtual bool SetFileTime(const char* file, FILETIME fileTime) = 0;
virtual uint64_t FindFirst(const char* path, fiFindData* findData) = 0;
virtual bool FindNext(uint64_t handle, fiFindData* findData) = 0;
virtual int FindClose(uint64_t handle) = 0;
virtual bool FindNext(uint64_t handle, fiFindData* findData) = 0;
virtual int FindClose(uint64_t handle) = 0;
virtual rage::fiDevice* GetUnkDevice() = 0;
@ -116,13 +116,13 @@ namespace rage
virtual int32_t m_yz(void*) = 0;
virtual int32_t m_zx(void*) = 0; // return 0x40000000
virtual int32_t m_zx(void*) = 0;// return 0x40000000
virtual bool IsCollection() = 0;
virtual bool m_addedIn1290() = 0;
virtual fiDevice* GetCollection() = 0; // return this
virtual fiDevice* GetCollection() = 0;// return this
virtual bool m_ax() = 0;
@ -214,13 +214,13 @@ namespace rage
virtual int32_t m_yz(void*);
virtual int32_t m_zx(void*); // return 0x40000000
virtual int32_t m_zx(void*);// return 0x40000000
virtual bool IsCollection();
virtual bool m_addedIn1290();
virtual fiDevice* GetCollection(); // return this
virtual fiDevice* GetCollection();// return this
virtual bool m_ax();
@ -233,6 +233,7 @@ namespace rage
{
private:
char m_pad[272];
public:
fiDeviceRelative();
@ -256,7 +257,7 @@ namespace rage
void* m_0010;
char m_buffer[4096];
bool m_1018;
alignas(int) char m_pad[64]; // unsure
alignas(int) char m_pad[64];// unsure
private:
void* AllocKeyState(const uint8_t* key);
@ -271,6 +272,7 @@ namespace rage
{
private:
char m_pad[368 + (0x650 - 0x590)];
public:
fiPackfile();

View File

@ -2,7 +2,7 @@
namespace rage
{
template <typename T>
template<typename T>
class atArray;
class datBitBuffer;

View File

@ -8,7 +8,7 @@ struct GXT2_metadata
#pragma pack(push, 1)
struct GXT2_key
{
rage::joaat_t key_hash = -1;
rage::joaat_t key_hash = -1;
uint32_t file_offset_to_text = -1;
};
static_assert(sizeof(GXT2_key) == 8);

View File

@ -1,11 +1,11 @@
#pragma once
#include "rage/joaat.hpp"
#include <cstddef>
#include <cstdint>
#include <string_view>
#include <type_traits>
#include "rage/joaat.hpp"
namespace rage
{
inline consteval joaat_t consteval_joaat(const std::span<const char>& data)

View File

@ -6,8 +6,7 @@ namespace rage
class matrix4x4
{
public:
union
{
union {
struct
{
vector4 _1;

View File

@ -1,9 +1,9 @@
#pragma once
#include <cstdint>
#include <utility>
#include "fwddec.hpp"
#include <cstdint>
#include <script/types.hpp>
#include <utility>
namespace rage
{
@ -12,61 +12,63 @@ namespace rage
public:
void reset()
{
m_arg_count = 0;
m_arg_count = 0;
m_data_count = 0;
}
template <typename T>
void push_arg(T &&value)
template<typename T>
void push_arg(T&& value)
{
static_assert(sizeof(T) <= sizeof(std::uint64_t));
*reinterpret_cast<std::remove_cv_t<std::remove_reference_t<T>>*>(reinterpret_cast<std::uint64_t*>(m_args) + (m_arg_count++)) = std::forward<T>(value);
}
template <typename T>
T &get_arg(std::size_t index)
template<typename T>
T& get_arg(std::size_t index)
{
static_assert(sizeof(T) <= sizeof(std::uint64_t));
return *reinterpret_cast<T*>(reinterpret_cast<std::uint64_t*>(m_args) + index);
}
template <typename T>
void set_arg(std::size_t index, T &&value)
template<typename T>
void set_arg(std::size_t index, T&& value)
{
static_assert(sizeof(T) <= sizeof(std::uint64_t));
*reinterpret_cast<std::remove_cv_t<std::remove_reference_t<T>>*>(reinterpret_cast<std::uint64_t*>(m_args) + index) = std::forward<T>(value);
}
template <typename T>
T *get_return_value()
template<typename T>
T* get_return_value()
{
return reinterpret_cast<T*>(m_return_value);
}
template <typename T>
void set_return_value(T &&value)
template<typename T>
void set_return_value(T&& value)
{
*reinterpret_cast<std::remove_cv_t<std::remove_reference_t<T>>*>(m_return_value) = std::forward<T>(value);
}
template <typename T>
template<typename T>
void set_return_value(T& value)
{
*reinterpret_cast<std::remove_cv_t<std::remove_reference_t<T>>*>(m_return_value) = std::forward<T>(value);
}
protected:
void *m_return_value;
void* m_return_value;
std::uint32_t m_arg_count;
void *m_args;
void* m_args;
std::int32_t m_data_count;
std::uint32_t m_data[48];
};
static_assert(sizeof(scrNativeCallContext) == 0xE0);
using scrNativeHash = std::uint64_t;
using scrNativeHash = std::uint64_t;
using scrNativeMapping = std::pair<scrNativeHash, scrNativeHash>;
using scrNativeHandler = void(*)(scrNativeCallContext*);
using scrNativeHandler = void (*)(scrNativeCallContext*);
class scrNativeRegistration {
class scrNativeRegistration
{
public:
uint64_t m_nextRegistration1;
uint64_t m_nextRegistration2;
@ -74,26 +76,31 @@ namespace rage
uint32_t m_numEntries1;
uint32_t m_numEntries2;
uint64_t m_hashes;
scrNativeRegistration* get_next_registration() {
scrNativeRegistration* get_next_registration()
{
std::uintptr_t result;
auto nextReg = uintptr_t(&m_nextRegistration1);
auto newReg = nextReg ^ m_nextRegistration2;
auto nextReg = uintptr_t(&m_nextRegistration1);
auto newReg = nextReg ^ m_nextRegistration2;
auto charTableOfRegs = (char*)&result - nextReg;
for (auto i = 0; i < 3; i++) {
for (auto i = 0; i < 3; i++)
{
*(DWORD*)&charTableOfRegs[nextReg] = static_cast<DWORD>(newReg) ^ *(DWORD*)nextReg;
nextReg += 4;
}
return reinterpret_cast<scrNativeRegistration*>(result);
}
std::uint32_t get_num_entries() {
std::uint32_t get_num_entries()
{
return static_cast<std::uint32_t>(((std::uintptr_t)&m_numEntries1) ^ m_numEntries1 ^ m_numEntries2);
}
std::uint64_t get_hash(std::uint32_t index) {
std::uint64_t get_hash(std::uint32_t index)
{
auto nativeAddress = 16 * index + std::uintptr_t(&m_nextRegistration1) + 0x54;
std::uint64_t result;
auto charTableOfRegs = (char*)&result - nativeAddress;
auto addressIndex = nativeAddress ^ *(DWORD*)(nativeAddress + 8);
for (auto i = 0; i < 3; i++) {
auto addressIndex = nativeAddress ^ *(DWORD*)(nativeAddress + 8);
for (auto i = 0; i < 3; i++)
{
*(DWORD*)&charTableOfRegs[nativeAddress] = static_cast<DWORD>(addressIndex ^ *(DWORD*)(nativeAddress));
nativeAddress += 4;
}
@ -104,7 +111,7 @@ namespace rage
#pragma pack(push, 1)
class scrNativeRegistrationTable
{
scrNativeRegistration *m_entries[0xFF];
scrNativeRegistration* m_entries[0xFF];
std::uint32_t m_unk;
bool m_initialized;
};

View File

@ -1,5 +1,11 @@
#pragma once
#include "fwddec.hpp"
class CNetGamePlayer;
namespace rage
{
class netArrayHandlerBase;
}
class CGameArrayMgr
{
@ -14,38 +20,38 @@ namespace rage
class netSyncDataUnit_Dynamic
{
public:
virtual ~netSyncDataUnit_Dynamic() = default; // 0x00
virtual ~netSyncDataUnit_Dynamic() = default;// 0x00
virtual void _0x08() = 0;
virtual void _0x10() = 0;
virtual void set_data_counter(int index, uint16_t counter) = 0; // 0x18
virtual void set_data_counter(int index, uint16_t counter) = 0;// 0x18
virtual void reset_data_counter(int index) = 0; // 0x20
virtual void reset_data_counter(int index) = 0;// 0x20
// ...
int m_players_need_ack; // 0x08
int m_players_need_sync; // 0x0C
int m_players_need_sync;// 0x0C
};
class netSyncData_Dynamic
{
public:
virtual ~netSyncData_Dynamic() = default; // 0x00
virtual ~netSyncData_Dynamic() = default;// 0x00
virtual rage::datBitBuffer* _0x08() = 0;
virtual rage::datBitBuffer* _0x10() = 0;
virtual int get_num_receivers() = 0; // 0x18
virtual int get_num_receivers() = 0;// 0x18
virtual int _0x20() = 0;
virtual void _0x28() = 0; // same as get_sync_unit_for_element
virtual void _0x28() = 0;// same as get_sync_unit_for_element
virtual netSyncDataUnit_Dynamic* get_sync_unit_for_element(uint32_t element) = 0; // 0x30
virtual netSyncDataUnit_Dynamic* get_sync_unit_for_element(uint32_t element) = 0;// 0x30
// ...
};
@ -53,7 +59,7 @@ namespace rage
class netArrayHandlerBase
{
public:
virtual ~netArrayHandlerBase() = default; // 0x00
virtual ~netArrayHandlerBase() = default;// 0x00
virtual void _0x08() = 0;
@ -67,131 +73,131 @@ namespace rage
virtual void _0x30() = 0;
virtual void _0x38() = 0; //
virtual void _0x38() = 0;//
virtual void _0x40() = 0; //
virtual void _0x40() = 0;//
virtual int _0x48(CNetGamePlayer* player, int max_size, uint32_t* a3, uint32_t* a4) = 0; //
virtual int _0x48(CNetGamePlayer* player, int max_size, uint32_t* a3, uint32_t* a4) = 0;//
virtual int get_size(CNetGamePlayer* player, int max_size, uint32_t element) = 0; // 0x50
virtual int get_size(CNetGamePlayer* player, int max_size, uint32_t element) = 0;// 0x50
virtual int pack_array_data(CNetGamePlayer* player, rage::datBitBuffer* bit_buffer, uint16_t counter, uint32_t* elem_start, bool silent) = 0; // 0x58
virtual int pack_array_data(CNetGamePlayer* player, rage::datBitBuffer* bit_buffer, uint16_t counter, uint32_t* elem_start, bool silent) = 0;// 0x58
virtual void _0x60() = 0; //
virtual void _0x60() = 0;//
virtual bool _0x68(CNetGamePlayer* player) = 0; // is_player_out_of_scope or something like that
virtual bool _0x68(CNetGamePlayer* player) = 0;// is_player_out_of_scope or something like that
virtual void _0x70() = 0; //
virtual void _0x70() = 0;//
virtual bool can_send_update(CNetGamePlayer* player) = 0; // 0x78
virtual bool can_send_update(CNetGamePlayer* player) = 0;// 0x78
virtual void _0x80() = 0; //
virtual void _0x80() = 0;//
virtual void _0x88() = 0; //
virtual void _0x88() = 0;//
virtual void* get_identifier() = 0; // 0x90
virtual void* get_identifier() = 0;// 0x90
virtual void* _0x98() = 0; // same as get_identifier
virtual void* _0x98() = 0;// same as get_identifier
virtual void _0xA0() = 0; //
virtual void _0xA0() = 0;//
virtual bool can_verify_array_data() = 0; // 0xA8
virtual bool can_verify_array_data() = 0;// 0xA8
virtual void _0xB0() = 0; //
virtual void _0xB0() = 0;//
virtual void _0xB8() = 0; //
virtual void _0xB8() = 0;//
virtual void should_sync_element(uint32_t element) = 0; // 0xC0
virtual void should_sync_element(uint32_t element) = 0;// 0xC0
virtual void _0xC8() = 0; //
virtual void _0xC8() = 0;//
virtual void _0xD0() = 0; //
virtual void _0xD0() = 0;//
virtual bool are_all_elements_in_scope() = 0; // 0xD8
virtual bool are_all_elements_in_scope() = 0;// 0xD8
virtual void _0xE0() = 0; //
virtual void _0xE0() = 0;//
virtual void verify_array_data() = 0; // 0xE8
virtual void verify_array_data() = 0;// 0xE8
virtual void _0xF0() = 0; //
virtual void _0xF0() = 0;//
virtual char* get_name() = 0; // 0xF8
virtual char* get_name() = 0;// 0xF8
virtual bool is_local_player_owner_of_array() = 0; // 0x100
virtual bool is_local_player_owner_of_array() = 0;// 0x100
virtual CNetGamePlayer* get_owner_of_array() = 0; // 0x108
virtual CNetGamePlayer* get_owner_of_array() = 0;// 0x108
virtual void _0x110() = 0;
virtual uint32_t get_array_hash() = 0;
virtual int _0x120() = 0; // gets array size for hashing
virtual int _0x120() = 0;// gets array size for hashing
virtual netSyncData_Dynamic* _0x128() = 0; // same as get_dynamic_sync_data
virtual netSyncData_Dynamic* _0x128() = 0;// same as get_dynamic_sync_data
virtual netSyncData_Dynamic* get_dynamic_sync_data() = 0; // 0x130
virtual netSyncData_Dynamic* get_dynamic_sync_data() = 0;// 0x130
virtual void _0x138() = 0;
virtual bool is_element_in_scope(uint32_t element, CNetGamePlayer* player) = 0; // 0x140
virtual bool is_element_in_scope(uint32_t element, CNetGamePlayer* player) = 0;// 0x140
virtual int get_receiver_index_from_player(CNetGamePlayer*) = 0; // 0x148
virtual int get_receiver_index_from_player(CNetGamePlayer*) = 0;// 0x148
virtual void _0x150() = 0;
virtual void _0x158() = 0;
// pasted from fivem
virtual bool is_element_empty(uint32_t element) = 0; // 0x160
virtual bool is_element_empty(uint32_t element) = 0;// 0x160
virtual void set_element_empty(uint32_t element) = 0; // 0x168
virtual void set_element_empty(uint32_t element) = 0;// 0x168
virtual void write_element_index(rage::datBitBuffer& buffer, uint32_t) = 0; // 0x170
virtual void write_element_index(rage::datBitBuffer& buffer, uint32_t) = 0;// 0x170
virtual void read_element_index(rage::datBitBuffer& buffer, uint32_t&) = 0; // 0x178
virtual void read_element_index(rage::datBitBuffer& buffer, uint32_t&) = 0;// 0x178
virtual bool is_valid_index(uint32_t) = 0; // 0x180
virtual bool is_valid_index(uint32_t) = 0;// 0x180
virtual void recalculate_dirty_elements() = 0; // 0x188
virtual void recalculate_dirty_elements() = 0;// 0x188
virtual void reset_element_sync_data(uint32_t element) = 0; // 0x190
virtual void reset_element_sync_data(uint32_t element) = 0;// 0x190
virtual void do_post_read_processing() = 0; // 0x198
virtual void do_post_read_processing() = 0;// 0x198
virtual void do_post_element_read_processing(uint32_t element) = 0; // 0x1A0
virtual void do_post_element_read_processing(uint32_t element) = 0;// 0x1A0
virtual bool can_apply_element_data(uint32_t element, const rage::netPlayer& sender, bool force) = 0; // 0x1A8
virtual bool can_apply_element_data(uint32_t element, const rage::netPlayer& sender, bool force) = 0;// 0x1A8
virtual void extract_data_for_serializing(uint32_t elem) = 0; // 0x1B0
virtual void extract_data_for_serializing(uint32_t elem) = 0;// 0x1B0
virtual void write_element(rage::datBitBuffer& buffer, uint32_t elem, void* logger) = 0; // 0x1B8
virtual void write_element(rage::datBitBuffer& buffer, uint32_t elem, void* logger) = 0;// 0x1B8
virtual void read_element(rage::datBitBuffer& buffer, uint32_t elem, void* logger) = 0; // 0x1C0
virtual void read_element(rage::datBitBuffer& buffer, uint32_t elem, void* logger) = 0;// 0x1C0
virtual void log_element(uint32_t elem, void* logger) = 0; // 0x1C8
virtual void log_element(uint32_t elem, void* logger) = 0;// 0x1C8
virtual uint32_t get_current_element_size_in_bits(uint32_t elem) = 0; // 0x1D0
virtual uint32_t get_current_element_size_in_bits(uint32_t elem) = 0;// 0x1D0
virtual void apply_element_data(uint32_t element, const rage::netPlayer& sender) = 0; // 0x1D8
virtual void apply_element_data(uint32_t element, const rage::netPlayer& sender) = 0;// 0x1D8
virtual void _0x1E0() = 0;
virtual void _0x1E8(bool) = 0; // very important! changes send function to use some kind of cached buffer that prevents us from modifing array data per player
virtual void _0x1E8(bool) = 0;// very important! changes send function to use some kind of cached buffer that prevents us from modifing array data per player
void* m_something; // 0x10
void* m_something;// 0x10
netArrayHandlerBase* m_next; // 0x18
netArrayHandlerBase* m_next;// 0x18
uint8_t m_pad[100 - 0x18]; // +8
uint8_t m_pad[100 - 0x18];// +8
uint32_t m_hash;
uint8_t m_pad2[244 - 104]; // +8
uint16_t m_index; // 244
uint16_t m_count; // 246
uint8_t m_max_elements; // 248
uint8_t m_element_size; // 249
uint8_t m_pad2[244 - 104];// +8
uint16_t m_index; // 244
uint16_t m_count; // 246
uint8_t m_max_elements; // 248
uint8_t m_element_size; // 249
uint8_t m_element_size_2; // 250
uint8_t m_pad3[13]; // 251
void* m_array; // 264
uint8_t m_pad3[13]; // 251
void* m_array; // 264
#if 0
static inline netArrayHandlerBase* get_by_data(void* data)

View File

@ -1,7 +1,8 @@
#pragma once
#include <cstdint>
#include "pointers.hpp"
#include "fwddec.hpp"
#include "pointers.hpp"
#include <cstdint>
#pragma pack(push, 1)
namespace rage
@ -9,33 +10,33 @@ namespace rage
class CSyncDataBase
{
public:
virtual ~CSyncDataBase() = default;
virtual bool SerializeDword(uint32_t* dword, int size) = 0;
virtual bool SerializeWord(uint16_t* word, int size) = 0;
virtual bool SerializeByte(uint8_t* byte, int size) = 0;
virtual bool SerializeInt32(int32_t* i, int size) = 0;
virtual bool SerializeInt16(int16_t* i, int size) = 0;
virtual bool SerializeSignedByte(int8_t* byte, int size) = 0;
virtual bool SerializeBool(bool* flag) = 0;
virtual bool SerializeInt64(int64_t* i, int size) = 0;
virtual bool SerializeInt32Alt(int32_t* i, int size) = 0;
virtual bool SerializeInt16Alt(int16_t* i, int size) = 0;
virtual bool SerializeSignedByteAlt(int8_t* byte, int size) = 0;
virtual bool SerializeQword(uint64_t* qword, int size) = 0;
virtual bool SerializeDwordAlt(uint32_t* dword, int size) = 0;
virtual bool SerializeWordAlt(uint16_t* word, int size) = 0;
virtual bool SerializeByteAlt(uint8_t* byte, int size) = 0;
virtual bool SerializeSignedFloat(float* flt, float divisor, int size) = 0;
virtual bool SerializeFloat(float* flt, float divisor, int size) = 0;
virtual bool SerializeNetworkId(uint16_t* net_id) = 0;
virtual ~CSyncDataBase() = default;
virtual bool SerializeDword(uint32_t* dword, int size) = 0;
virtual bool SerializeWord(uint16_t* word, int size) = 0;
virtual bool SerializeByte(uint8_t* byte, int size) = 0;
virtual bool SerializeInt32(int32_t* i, int size) = 0;
virtual bool SerializeInt16(int16_t* i, int size) = 0;
virtual bool SerializeSignedByte(int8_t* byte, int size) = 0;
virtual bool SerializeBool(bool* flag) = 0;
virtual bool SerializeInt64(int64_t* i, int size) = 0;
virtual bool SerializeInt32Alt(int32_t* i, int size) = 0;
virtual bool SerializeInt16Alt(int16_t* i, int size) = 0;
virtual bool SerializeSignedByteAlt(int8_t* byte, int size) = 0;
virtual bool SerializeQword(uint64_t* qword, int size) = 0;
virtual bool SerializeDwordAlt(uint32_t* dword, int size) = 0;
virtual bool SerializeWordAlt(uint16_t* word, int size) = 0;
virtual bool SerializeByteAlt(uint8_t* byte, int size) = 0;
virtual bool SerializeSignedFloat(float* flt, float divisor, int size) = 0;
virtual bool SerializeFloat(float* flt, float divisor, int size) = 0;
virtual bool SerializeNetworkId(uint16_t* net_id) = 0;
virtual bool SerializeVector3(rage::fvector3* vec3, float divisor, int size) = 0;
virtual bool SerializeQuaternion(void* unk) = 0; // i have no clue what that is
virtual bool SerializeQuaternion(void* unk) = 0;// i have no clue what that is
virtual bool SerializeVector3SignedZComponent(rage::fvector3* vec3, float divisor, int size) = 0;
virtual bool SerializeOrientation(rage::fvector4* vec4, float size) = 0; // yes, the size is a float
virtual bool SerializeArray(void* array, int size) = 0;
virtual bool SerializeString(char* str, int max_length) = 0;
virtual bool IsSizeCalculator() = 0;
virtual bool IsSizeCalculator2() = 0;
virtual bool SerializeOrientation(rage::fvector4* vec4, float size) = 0;// yes, the size is a float
virtual bool SerializeArray(void* array, int size) = 0;
virtual bool SerializeString(char* str, int max_length) = 0;
virtual bool IsSizeCalculator() = 0;
virtual bool IsSizeCalculator2() = 0;
void* unk_0x8;
void* syncLog;
@ -47,45 +48,54 @@ namespace rage
class datBitBuffer
{
public:
datBitBuffer(void* data, uint32_t size) {
m_data = data;
m_bitOffset = 0;
m_maxBit = size * 8;
m_bitsRead = 0;
m_curBit = 0;
datBitBuffer(void* data, uint32_t size)
{
m_data = data;
m_bitOffset = 0;
m_maxBit = size * 8;
m_bitsRead = 0;
m_curBit = 0;
m_highestBitsRead = 0;
m_flagBits = 0;
m_flagBits = 0;
}
uint32_t GetPosition() {
uint32_t GetPosition()
{
return m_bitsRead;
}
bool Seek(uint32_t bits) {
if (bits >= 0) {
bool Seek(uint32_t bits)
{
if (bits >= 0)
{
uint32_t length = (m_flagBits & 1) ? m_maxBit : m_curBit;
if (bits <= length)
m_bitsRead = bits;
}
return false;
}
bool WriteBool(bool integer) {
bool WriteBool(bool integer)
{
return big::g_pointers->m_write_bitbuf_bool(this, integer, 1);
}
bool ReadBool(bool* integer) {
bool ReadBool(bool* integer)
{
return big::g_pointers->m_read_bitbuf_bool(this, integer, 1);
}
bool ReadPeerId(uint64_t* integer) {
bool ReadPeerId(uint64_t* integer)
{
return this->ReadQWord(integer, 0x40);
}
uint64_t ReadBits(size_t numBits) {
uint64_t ReadBits(size_t numBits)
{
auto const totalBits = (m_flagBits & 1) ? m_maxBit : m_curBit;
if ((m_flagBits & 2) || m_bitsRead + numBits > totalBits)
return 0;
auto const bufPos = m_bitsRead + m_bitOffset;
auto const bufPos = m_bitsRead + m_bitOffset;
auto const initialBitOffset = bufPos & 0b111;
auto const start = &((uint8_t*)m_data)[bufPos / 8];
auto const next = &start[1];
auto result = (start[0] << initialBitOffset) & 0xff;
for (auto i = 0; i < ((numBits - 1) / 8); i++) {
auto const start = &((uint8_t*)m_data)[bufPos / 8];
auto const next = &start[1];
auto result = (start[0] << initialBitOffset) & 0xff;
for (auto i = 0; i < ((numBits - 1) / 8); i++)
{
result <<= 8;
result |= next[i] << initialBitOffset;
}
@ -96,89 +106,113 @@ namespace rage
m_highestBitsRead = m_bitsRead;
return result >> ((8 - numBits) % 8);
}
int GetDataLength() {
int GetDataLength()
{
int leftoverBit = (m_curBit % 8) ? 1 : 0;
return (m_curBit / 8) + leftoverBit;
}
bool ReadString(char* string, int bits) {
bool ReadString(char* string, int bits)
{
return big::g_pointers->m_read_bitbuf_string(this, string, bits);
}
bool WriteByte(uint8_t integer, int bits) {
bool WriteByte(uint8_t integer, int bits)
{
return big::g_pointers->m_write_bitbuf_dword(this, integer, bits);
}
bool ReadByte(uint8_t* integer, int bits) {
bool ReadByte(uint8_t* integer, int bits)
{
uint32_t read;
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits)) {
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits))
{
*integer = read;
return true;
}
return false;
}
bool WriteWord(uint16_t integer, int bits) {
bool WriteWord(uint16_t integer, int bits)
{
return big::g_pointers->m_write_bitbuf_dword(this, integer, bits);
}
bool ReadWord(uint16_t* integer, int bits) {
bool ReadWord(uint16_t* integer, int bits)
{
uint32_t read;
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits)) {
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits))
{
*integer = read;
return true;
}
return false;
}
bool WriteDword(uint32_t integer, int bits) {
bool WriteDword(uint32_t integer, int bits)
{
return big::g_pointers->m_write_bitbuf_dword(this, integer, bits);
}
bool ReadDword(uint32_t* integer, int bits) {
bool ReadDword(uint32_t* integer, int bits)
{
return big::g_pointers->m_read_bitbuf_dword(this, integer, bits);
}
bool WriteInt32(int32_t integer, int bits) {
bool WriteInt32(int32_t integer, int bits)
{
return big::g_pointers->m_write_bitbuf_int32(this, integer, bits);
}
bool ReadInt32(int32_t* integer, int bits) {
bool ReadInt32(int32_t* integer, int bits)
{
int32_t v8;
int32_t v9;
if (ReadDword((uint32_t*)&v8, 1u) && ReadDword((uint32_t*)&v9, bits - 1)) {
if (ReadDword((uint32_t*)&v8, 1u) && ReadDword((uint32_t*)&v9, bits - 1))
{
*integer = v8 + (v9 ^ -v8);
return true;
}
return false;
}
bool WriteQWord(uint64_t integer, int bits) {
bool WriteQWord(uint64_t integer, int bits)
{
return big::g_pointers->m_write_bitbuf_qword(this, integer, bits);
}
bool ReadQWord(uint64_t* integer, int bits) {
if (bits <= 32) {
bool ReadQWord(uint64_t* integer, int bits)
{
if (bits <= 32)
{
uint32_t v10;
if (ReadDword(&v10, bits)) {
if (ReadDword(&v10, bits))
{
*integer = v10;
return true;
}
}
else {
else
{
uint32_t v10, v11;
if (ReadDword(&v11, 32u) && ReadDword(&v10, bits - 32u)) {
if (ReadDword(&v11, 32u) && ReadDword(&v10, bits - 32u))
{
*integer = v11 | ((uint64_t)v10 << 32);
return true;
}
}
return false;
}
bool WriteInt64(int64_t integer, int bits) {
bool WriteInt64(int64_t integer, int bits)
{
return big::g_pointers->m_write_bitbuf_int64(this, integer, bits);
}
bool ReadInt64(int64_t* integer, int bits) {
bool ReadInt64(int64_t* integer, int bits)
{
uint32_t v8;
uint64_t v9;
if (ReadDword(&v8, 1u) && ReadQWord(&v9, bits - 1)) {
if (ReadDword(&v8, 1u) && ReadQWord(&v9, bits - 1))
{
*integer = v8 + (v9 ^ -(int64_t)v8);
return true;
}
return false;
}
bool WriteArray(void* array, int size) {
bool WriteArray(void* array, int size)
{
return big::g_pointers->m_write_bitbuf_array(this, array, size, 0);
}
bool ReadArray(PVOID array, int size) {
bool ReadArray(PVOID array, int size)
{
return big::g_pointers->m_read_bitbuf_array(this, array, size, 0);
}
@ -215,9 +249,9 @@ namespace rage
template<typename T>
inline void WriteSigned(int length, T data)
{
int sign = data < 0;
int sign = data < 0;
int signEx = (data < 0) ? 0xFFFFFFFF : 0;
int d = (data ^ signEx);
int d = (data ^ signEx);
Write<int>(1, sign);
Write<int>(length - 1, d);
@ -233,7 +267,7 @@ namespace rage
inline void WriteFloat(int length, float divisor, float value)
{
float max = (1 << length) - 1;
float max = (1 << length) - 1;
int integer = (int)((value / divisor) * max);
Write<int>(length, integer);
@ -249,288 +283,289 @@ namespace rage
inline void WriteSignedFloat(int length, float divisor, float value)
{
float max = (1 << (length - 1)) - 1;
float max = (1 << (length - 1)) - 1;
int integer = (int)((value / divisor) * max);
WriteSigned<int>(length, integer);
}
public:
void* m_data; //0x0000
uint32_t m_bitOffset; //0x0008
uint32_t m_maxBit; //0x000C
uint32_t m_bitsRead; //0x0010
uint32_t m_curBit; //0x0014
uint32_t m_highestBitsRead; //0x0018
uint8_t m_flagBits; //0x001C
void* m_data; //0x0000
uint32_t m_bitOffset; //0x0008
uint32_t m_maxBit; //0x000C
uint32_t m_bitsRead; //0x0010
uint32_t m_curBit; //0x0014
uint32_t m_highestBitsRead;//0x0018
uint8_t m_flagBits; //0x001C
};
enum class eNetMessage : uint32_t
enum class eNetMessage : uint32_t
{
MsgInvalid = 0xFFFFF,
MsgSessionAcceptChat = 0x62,
MsgStartMatchCmd = 0x2D,
MsgSetInvitableCmd = 0x1F,
MsgSessionMemberIds = 0x23,
MsgRequestGamerInfo = 0x54,
MsgRemoveGamersFromSessionCmd = 0x53,
MsgNotMigrating = 0x35,
MsgMigrateHostResponse = 0x12,
MsgMigrateHostRequest = 0x66,
MsgJoinResponse = 0x2A,
MsgJoinRequest = 0x41,
MsgHostLeftWhilstJoiningCmd = 0x58,
MsgConfigResponse = 0x5F,
MsgConfigRequest = 0x48,
MsgChangeSessionAttributesCmd = 0x5A,
MsgAddGamerToSessionCmd = 0x64, // this is where send net info to lobby is called, among other things
MsgReassignResponse = 0x10,
MsgReassignNegotiate = 0x01,
MsgReassignConfirm = 0x26,
MsgPlayerData = 0x18,
MsgPackedReliables = 0x30,
MsgPackedCloneSyncACKs = 0x3B,
MsgNonPhysicalData = 0x16,
MsgNetArrayMgrUpdateAck = 0x5D,
MsgNetArrayMgrUpdate = 0x60,
MsgNetArrayMgrSplitUpdateAck = 0x25,
MsgScriptVerifyHostAck = 0x0B,
MsgScriptVerifyHost = 0x3E,
MsgScriptNewHost = 0x0E,
MsgScriptMigrateHostFailAck = 0x1A,
MsgScriptMigrateHost = 0x33,
MsgScriptLeaveAck = 0x40,
MsgScriptLeave = 0x17,
MsgScriptJoinHostAck = 0x4D,
MsgScriptJoinAck = 0x43,
MsgScriptJoin = 0x5C,
MsgScriptHostRequest = 0x67,
MsgScriptHandshakeAck = 0x5B,
MsgScriptHandshake = 0x57,
MsgScriptBotLeave = 0x2B, // unused?
MsgScriptBotJoinAck = 0x63, // unused?
MsgScriptBotJoin = 0x1C, // unused?
MsgScriptBotHandshakeAck = 0x31, // unused?
MsgScriptBotHandshake = 0x4B, // unused?
MsgPartyLeaveGame = 0x3D,
MsgPartyEnterGame = 0x1E,
MsgCloneSync = 0x4E, // aka clone_create, clone_sync etc.
MsgActivateNetworkBot = 0x65, // unused?
MsgRequestObjectIds = 0x29,
MsgInformObjectIds = 0x09,
MsgTextMessage = 0x24, // this one is for chat
MsgPlayerIsTyping = 0x61,
MsgPackedEvents = 0x4F, // aka received_event
MsgPackedEventReliablesMsgs = 0x20,
MsgRequestKickFromHost = 0x0D,
MsgTransitionToGameStart = 0x50,
MsgTransitionToGameNotify = 0x02,
MsgTransitionToActivityStart = 0x06,
MsgTransitionToActivityFinish = 0x36,
MsgTransitionParameters = 0x3C,
MsgTransitionParameterString = 0x37,
MsgTransitionLaunchNotify = 0x1B,
MsgTransitionLaunch = 0x19,
MsgTransitionGamerInstruction = 0x14,
MsgTextMessage2 = 0x0A, // this one is for phone message
MsgSessionEstablishedRequest = 0x52,
MsgSessionEstablished = 0x07,
MsgInvalid = 0xFFFFF,
MsgSessionAcceptChat = 0x62,
MsgStartMatchCmd = 0x2D,
MsgSetInvitableCmd = 0x1F,
MsgSessionMemberIds = 0x23,
MsgRequestGamerInfo = 0x54,
MsgRemoveGamersFromSessionCmd = 0x53,
MsgNotMigrating = 0x35,
MsgMigrateHostResponse = 0x12,
MsgMigrateHostRequest = 0x66,
MsgJoinResponse = 0x2A,
MsgJoinRequest = 0x41,
MsgHostLeftWhilstJoiningCmd = 0x58,
MsgConfigResponse = 0x5F,
MsgConfigRequest = 0x48,
MsgChangeSessionAttributesCmd = 0x5A,
MsgAddGamerToSessionCmd = 0x64,// this is where send net info to lobby is called, among other things
MsgReassignResponse = 0x10,
MsgReassignNegotiate = 0x01,
MsgReassignConfirm = 0x26,
MsgPlayerData = 0x18,
MsgPackedReliables = 0x30,
MsgPackedCloneSyncACKs = 0x3B,
MsgNonPhysicalData = 0x16,
MsgNetArrayMgrUpdateAck = 0x5D,
MsgNetArrayMgrUpdate = 0x60,
MsgNetArrayMgrSplitUpdateAck = 0x25,
MsgScriptVerifyHostAck = 0x0B,
MsgScriptVerifyHost = 0x3E,
MsgScriptNewHost = 0x0E,
MsgScriptMigrateHostFailAck = 0x1A,
MsgScriptMigrateHost = 0x33,
MsgScriptLeaveAck = 0x40,
MsgScriptLeave = 0x17,
MsgScriptJoinHostAck = 0x4D,
MsgScriptJoinAck = 0x43,
MsgScriptJoin = 0x5C,
MsgScriptHostRequest = 0x67,
MsgScriptHandshakeAck = 0x5B,
MsgScriptHandshake = 0x57,
MsgScriptBotLeave = 0x2B,// unused?
MsgScriptBotJoinAck = 0x63,// unused?
MsgScriptBotJoin = 0x1C,// unused?
MsgScriptBotHandshakeAck = 0x31,// unused?
MsgScriptBotHandshake = 0x4B,// unused?
MsgPartyLeaveGame = 0x3D,
MsgPartyEnterGame = 0x1E,
MsgCloneSync = 0x4E,// aka clone_create, clone_sync etc.
MsgActivateNetworkBot = 0x65,// unused?
MsgRequestObjectIds = 0x29,
MsgInformObjectIds = 0x09,
MsgTextMessage = 0x24,// this one is for chat
MsgPlayerIsTyping = 0x61,
MsgPackedEvents = 0x4F,// aka received_event
MsgPackedEventReliablesMsgs = 0x20,
MsgRequestKickFromHost = 0x0D,
MsgTransitionToGameStart = 0x50,
MsgTransitionToGameNotify = 0x02,
MsgTransitionToActivityStart = 0x06,
MsgTransitionToActivityFinish = 0x36,
MsgTransitionParameters = 0x3C,
MsgTransitionParameterString = 0x37,
MsgTransitionLaunchNotify = 0x1B,
MsgTransitionLaunch = 0x19,
MsgTransitionGamerInstruction = 0x14,
MsgTextMessage2 = 0x0A,// this one is for phone message
MsgSessionEstablishedRequest = 0x52,
MsgSessionEstablished = 0x07,
MsgRequestTransitionParameters = 0x42,
MsgRadioStationSyncRequest = 0x47,
MsgRadioStationSync = 0x46,
MsgPlayerCardSync = 0x3A,
MsgPlayerCardRequest = 0x6A,
MsgLostConnectionToHost = 0x81,
MsgKickPlayer = 0x34, // host kick
MsgDebugStall = 0x7E, // unused?
MsgRadioStationSyncRequest = 0x47,
MsgRadioStationSync = 0x46,
MsgPlayerCardSync = 0x3A,
MsgPlayerCardRequest = 0x6A,
MsgLostConnectionToHost = 0x81,
MsgKickPlayer = 0x34,// host kick
MsgDebugStall = 0x7E,// unused?
MsgCheckQueuedJoinRequestReply = 0x59,
MsgCheckQueuedJoinRequest = 0x51,
MsgBlacklist = 0x0C,
MsgCheckQueuedJoinRequest = 0x51,
MsgBlacklist = 0x0C,
MsgRoamingRequestBubbleRequiredResponse = 0x83,
MsgRoamingRequestBubbleRequiredCheck = 0x82,
MsgRoamingRequestBubble = 0x2E,
MsgRoamingJoinBubble = 0x4C,
MsgRoamingJoinBubbleAck = 0x3F,
MsgRoamingInitialBubble = 0x32,
MsgVoiceStatus = 0x03,
MsgTextChatStatus = 0x00,
MsgJoinResponse2 = 0x08,
MsgJoinRequest2 = 0x68,
MsgNetTimeSync = 0x38, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 37
MsgNetComplaint = 0x55, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 54
MsgNetLagPing = 0x27, // unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 26
MsgSearchResponse = 0x6B, // unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 6A
MsgSearchRequest = 0x05, // unused?
MsgQosProbeResponse = 0x2C, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2B
MsgQosProbeRequest = 0x1D, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 1C
MsgCxnRelayAddressChanged = 0x49, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 48
MsgCxnRequestRemoteTimeout = 0x2F, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2E
MsgSessionDetailRequest = 0x22, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 21
MsgSessionDetailResponse = 0x13, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 12
MsgKeyExchangeOffer = 0x0F, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 0E (last result)
MsgKeyExchangeAnswer = 0x44, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 43
Msg_0x87 = 0x87,
Msg_0x88 = 0x88,
Msg_0x80 = 0x80,
Msg_0x28 = 0x28,
Msg_0x11 = 0x11,
Msg_0x45 = 0x45,
Msg_0x89 = 0x89,
Msg_0x86 = 0x86,
MsgRoamingRequestBubbleRequiredCheck = 0x82,
MsgRoamingRequestBubble = 0x2E,
MsgRoamingJoinBubble = 0x4C,
MsgRoamingJoinBubbleAck = 0x3F,
MsgRoamingInitialBubble = 0x32,
MsgVoiceStatus = 0x03,
MsgTextChatStatus = 0x00,
MsgJoinResponse2 = 0x08,
MsgJoinRequest2 = 0x68,
MsgNetTimeSync = 0x38,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 37
MsgNetComplaint = 0x55,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 54
MsgNetLagPing = 0x27,// unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 26
MsgSearchResponse = 0x6B,// unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 6A
MsgSearchRequest = 0x05,// unused?
MsgQosProbeResponse = 0x2C,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2B
MsgQosProbeRequest = 0x1D,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 1C
MsgCxnRelayAddressChanged = 0x49,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 48
MsgCxnRequestRemoteTimeout = 0x2F,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2E
MsgSessionDetailRequest = 0x22,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 21
MsgSessionDetailResponse = 0x13,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 12
MsgKeyExchangeOffer = 0x0F,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 0E (last result)
MsgKeyExchangeAnswer = 0x44,// ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 43
Msg_0x87 = 0x87,
Msg_0x88 = 0x88,
Msg_0x80 = 0x80,
Msg_0x28 = 0x28,
Msg_0x11 = 0x11,
Msg_0x45 = 0x45,
Msg_0x89 = 0x89,
Msg_0x86 = 0x86,
};
namespace netConnection
namespace netConnection
{
class InFrame
{
public:
enum class EventType
{
ConnectionClosed = 3,
FrameReceived = 4,
ConnectionClosed = 3,
FrameReceived = 4,
BandwidthExceeded = 6,
OutOfMemory = 7
OutOfMemory = 7
};
virtual ~InFrame() = default;
virtual void destroy() = 0;
virtual void destroy() = 0;
virtual EventType get_event_type() = 0;
virtual uint32_t _0x18() = 0;
virtual uint32_t _0x18() = 0;
uint32_t m_timestamp; //0x0008
char pad_0008[52]; //0x000C
uint32_t m_msg_id; //0x0040
uint32_t m_connection_identifier; //0x0044
InFrame* m_this; //0x0048
uint32_t m_peer_id; //0x0050
char pad_0050[44]; //0x0058
uint32_t m_length; //0x0080
char pad_007C[4]; //0x0084
void* m_data; //0x0088
uint32_t m_timestamp; //0x0008
char pad_0008[52]; //0x000C
uint32_t m_msg_id; //0x0040
uint32_t m_connection_identifier;//0x0044
InFrame* m_this; //0x0048
uint32_t m_peer_id; //0x0050
char pad_0050[44]; //0x0058
uint32_t m_length; //0x0080
char pad_007C[4]; //0x0084
void* m_data; //0x0088
};
static_assert(sizeof(rage::netConnection::InFrame) == 0x90);
}
enum class eEventNetworkType : int64_t
{
CEventNetworkPlayerJoinScript = 153,
CEventNetworkPlayerLeftScript = 154,
CEventNetworkStorePlayerLeft = 155,
CEventNetworkStartSession = 156,
CEventNetworkEndSession = 157,
CEventNetworkStartMatch = 158,
CEventNetworkRemovedFromSessionDueToStall = 160,
CEventNetworkRemovedFromSessionDueToComplaints = 161,
CEventNetworkConnectionTimeout = 162,
CEventNetworkPedDroppedWeapon = 163,
CEventNetworkPlayerSpawn = 164,
CEventNetworkPlayerCollectedPickup = 165,
CEventNetworkPlayerCollectedAmbientPickup = 166,
CEventNetworkPlayerCollectedPortablePickup = 167,
CEventNetworkPlayerDroppedPortablePickup = 168,
CEventNetworkInviteAccepted = 170,
CEventNetworkInviteConfirmed = 171,
CEventNetworkInviteRejected = 172,
CEventNetworkSummo = 173,
CEventNetworkScriptEvent = 174,
CEventNetworkSignInStateChanged = 176,
CEventNetworkSignInChangeActioned = 177,
CEventNetworkRosChanged = 178,
CEventNetworkBail = 179,
CEventNetworkHostMigration = 180,
CEventNetworkFindSession = 181,
EventNetworkHostSession = 182,
CEventNetworkJoinSession = 183,
CEventNetworkJoinSessionResponse = 184,
CEventNetworkCheatTriggered = 185,
CEventNetworkEntityDamage = 186,
CEventNetworkPlayerArrest = 187,
CEventNetworkTimedExplosion = 188,
CEventNetworkPrimaryClanChanged = 189,
CEventNetworkClanJoined = 190,
CEventNetworkClanLeft = 191,
CEventNetworkClanInviteReceived = 192,
CEventNetworkVoiceSessionStarted = 193,
CEventNetworkVoiceSessionEnded = 194,
CEventNetworkVoiceConnectionRequested = 195,
CEventNetworkVoiceConnectionResponse = 196,
CEventNetworkVoiceConnectionTerminated = 197,
CEventNetworkTextMessageReceived = 198,
CEventNetworkCloudFileResponse = 199,
CEventNetworkPickupRespawned = 200,
CEventNetworkPresence_StatUpdate = 201,
CEventNetworkPedLeftBehind = 202,
CEventNetwork_InboxMsgReceived = 203,
CEventNetworkAttemptHostMigration = 204,
CEventNetworkIncrementStat = 205,
CEventNetworkSessionEvent = 206,
CEventNetworkTransitionStarted = 207,
CEventNetworkTransitionEvent = 208,
CEventNetworkTransitionMemberJoined = 209,
CEventNetworkTransitionMemberLeft = 210,
CEventNetworkTransitionParameterChanged = 211,
CEventNetworkClanKicked = 212,
CEventNetworkTransitionStringChanged = 213,
EventNetworkTransitionGamerInstruction = 214,
CEventNetworkPresenceInvite = 215,
EventNetworkPresenceInviteRemoved = 216,
EventNetworkPresenceInviteReply = 217,
CEventNetworkCashTransactionLog = 218,
CEventNetworkClanRankChanged = 219,
CEventNetworkVehicleUndrivable = 220,
CEventNetworkPresenceTriggerEvent = 221,
CEventNetworkEmailReceivedEvent = 222,
CEventNetworkFollowInviteReceived = 223,
CEventNetworkSpectateLocal = 225,
CEventNetworkCloudEvent = 226,
CEventNetworkShopTransaction = 227,
CEventNetworkOnlinePermissionsUpdated = 230,
CEventNetworkSystemServiceEvent = 231,
CEventNetworkRequestDelay = 232,
CEventNetworkSocialClubAccountLinked = 233,
CEventNetworkScAdminPlayerUpdated = 234,
CEventNetworkScAdminReceivedCash = 235,
CEventNetworkClanInviteRequestReceived = 236,
CEventNetworkMarketingEmailReceivedEvent = 237,
CEventNetworkStuntPerformed = 238,
CEventNetworkFiredDummyProjectile = 239,
CEventNetworkPlayerEnteredVehicle = 240,
CEventNetworkPlayerActivatedSpecialAbility = 241,
CEventNetworkPlayerDeactivatedSpecialAbility = 242,
CEventNetworkPlayerJoinScript = 153,
CEventNetworkPlayerLeftScript = 154,
CEventNetworkStorePlayerLeft = 155,
CEventNetworkStartSession = 156,
CEventNetworkEndSession = 157,
CEventNetworkStartMatch = 158,
CEventNetworkRemovedFromSessionDueToStall = 160,
CEventNetworkRemovedFromSessionDueToComplaints = 161,
CEventNetworkConnectionTimeout = 162,
CEventNetworkPedDroppedWeapon = 163,
CEventNetworkPlayerSpawn = 164,
CEventNetworkPlayerCollectedPickup = 165,
CEventNetworkPlayerCollectedAmbientPickup = 166,
CEventNetworkPlayerCollectedPortablePickup = 167,
CEventNetworkPlayerDroppedPortablePickup = 168,
CEventNetworkInviteAccepted = 170,
CEventNetworkInviteConfirmed = 171,
CEventNetworkInviteRejected = 172,
CEventNetworkSummo = 173,
CEventNetworkScriptEvent = 174,
CEventNetworkSignInStateChanged = 176,
CEventNetworkSignInChangeActioned = 177,
CEventNetworkRosChanged = 178,
CEventNetworkBail = 179,
CEventNetworkHostMigration = 180,
CEventNetworkFindSession = 181,
EventNetworkHostSession = 182,
CEventNetworkJoinSession = 183,
CEventNetworkJoinSessionResponse = 184,
CEventNetworkCheatTriggered = 185,
CEventNetworkEntityDamage = 186,
CEventNetworkPlayerArrest = 187,
CEventNetworkTimedExplosion = 188,
CEventNetworkPrimaryClanChanged = 189,
CEventNetworkClanJoined = 190,
CEventNetworkClanLeft = 191,
CEventNetworkClanInviteReceived = 192,
CEventNetworkVoiceSessionStarted = 193,
CEventNetworkVoiceSessionEnded = 194,
CEventNetworkVoiceConnectionRequested = 195,
CEventNetworkVoiceConnectionResponse = 196,
CEventNetworkVoiceConnectionTerminated = 197,
CEventNetworkTextMessageReceived = 198,
CEventNetworkCloudFileResponse = 199,
CEventNetworkPickupRespawned = 200,
CEventNetworkPresence_StatUpdate = 201,
CEventNetworkPedLeftBehind = 202,
CEventNetwork_InboxMsgReceived = 203,
CEventNetworkAttemptHostMigration = 204,
CEventNetworkIncrementStat = 205,
CEventNetworkSessionEvent = 206,
CEventNetworkTransitionStarted = 207,
CEventNetworkTransitionEvent = 208,
CEventNetworkTransitionMemberJoined = 209,
CEventNetworkTransitionMemberLeft = 210,
CEventNetworkTransitionParameterChanged = 211,
CEventNetworkClanKicked = 212,
CEventNetworkTransitionStringChanged = 213,
EventNetworkTransitionGamerInstruction = 214,
CEventNetworkPresenceInvite = 215,
EventNetworkPresenceInviteRemoved = 216,
EventNetworkPresenceInviteReply = 217,
CEventNetworkCashTransactionLog = 218,
CEventNetworkClanRankChanged = 219,
CEventNetworkVehicleUndrivable = 220,
CEventNetworkPresenceTriggerEvent = 221,
CEventNetworkEmailReceivedEvent = 222,
CEventNetworkFollowInviteReceived = 223,
CEventNetworkSpectateLocal = 225,
CEventNetworkCloudEvent = 226,
CEventNetworkShopTransaction = 227,
CEventNetworkOnlinePermissionsUpdated = 230,
CEventNetworkSystemServiceEvent = 231,
CEventNetworkRequestDelay = 232,
CEventNetworkSocialClubAccountLinked = 233,
CEventNetworkScAdminPlayerUpdated = 234,
CEventNetworkScAdminReceivedCash = 235,
CEventNetworkClanInviteRequestReceived = 236,
CEventNetworkMarketingEmailReceivedEvent = 237,
CEventNetworkStuntPerformed = 238,
CEventNetworkFiredDummyProjectile = 239,
CEventNetworkPlayerEnteredVehicle = 240,
CEventNetworkPlayerActivatedSpecialAbility = 241,
CEventNetworkPlayerDeactivatedSpecialAbility = 242,
CEventNetworkPlayerSpecialAbilityFailedActivation = 243,
CEventNetworkFiredVehicleProjectile = 244,
CEventNetworkFiredVehicleProjectile = 244,
};
class CEventNetwork
{
public:
virtual ~CEventNetwork() = default; //0x0000 (0)
virtual void unk_0008() = 0; //0x0008 (1)
virtual void unk_0010() = 0; //0x0010 (2)
virtual eEventNetworkType get_type() = 0; //0x0018 (3)
virtual void unk_0020() = 0; //0x0020 (4)
virtual void unk_0028() = 0; //0x0028 (5)
virtual bool get_extra_information(void* info_array, int check) = 0; //0x0030 (6)
virtual void unk_0038() = 0; //0x0038 (7)
}; //Size: 0x0008
virtual ~CEventNetwork() = default;//0x0000 (0)
virtual void unk_0008() = 0; //0x0008 (1)
virtual void unk_0010() = 0; //0x0010 (2)
virtual eEventNetworkType get_type() = 0; //0x0018 (3)
virtual void unk_0020() = 0; //0x0020 (4)
virtual void unk_0028() = 0; //0x0028 (5)
virtual bool get_extra_information(void* info_array, int check) = 0; //0x0030 (6)
virtual void unk_0038() = 0; //0x0038 (7)
}; //Size: 0x0008
class sEntityDamagedData
{
public:
alignas(8) Entity m_victim_index; //0x0000
alignas(8) Entity m_damager_index; //0x0008
alignas(8) float m_damage; //0x0010
alignas(8) float m_endurance_damage; //0x0018
alignas(8) bool m_victim_incapacitated; //0x0020
alignas(8) bool m_victim_destroyed; //0x0028
alignas(8) int m_weapon_used; //0x0030
alignas(8) float m_victim_speed; //0x0038
alignas(8) float m_damager_speed; //0x0040
alignas(8) bool m_is_responsible_for_collision; //0x0048
alignas(8) bool m_is_headshot; //0x0050
alignas(8) bool m_is_with_melee_weapon; //0x0058
alignas(8) int m_hit_material; //0x0060
}; //Size: 0x0068
alignas(8) Entity m_victim_index; //0x0000
alignas(8) Entity m_damager_index; //0x0008
alignas(8) float m_damage; //0x0010
alignas(8) float m_endurance_damage; //0x0018
alignas(8) bool m_victim_incapacitated; //0x0020
alignas(8) bool m_victim_destroyed; //0x0028
alignas(8) int m_weapon_used; //0x0030
alignas(8) float m_victim_speed; //0x0038
alignas(8) float m_damager_speed; //0x0040
alignas(8) bool m_is_responsible_for_collision;//0x0048
alignas(8) bool m_is_headshot; //0x0050
alignas(8) bool m_is_with_melee_weapon; //0x0058
alignas(8) int m_hit_material; //0x0060
}; //Size: 0x0068
static_assert(sizeof(sEntityDamagedData) == 0x68);
class netGameEvent
@ -538,48 +573,80 @@ namespace rage
public:
virtual ~netGameEvent() = default;
virtual const char* get_name() { return 0; };
virtual bool is_in_scope(netPlayer* player) { return 0; };
virtual bool time_to_resend(std::uint32_t time) { return 0; };
virtual bool can_change_scope() { return 0; };
virtual const char* get_name()
{
return 0;
};
virtual bool is_in_scope(netPlayer* player)
{
return 0;
};
virtual bool time_to_resend(std::uint32_t time)
{
return 0;
};
virtual bool can_change_scope()
{
return 0;
};
virtual void prepare_data(datBitBuffer* buffer, netPlayer* source_player, netPlayer* target_player) {};
virtual void handle_data(datBitBuffer* buffer, netPlayer* source_player, netPlayer* target_player) {};
virtual void prepare_data(datBitBuffer* buffer, netPlayer* source_player, netPlayer* target_player){};
virtual void handle_data(datBitBuffer* buffer, netPlayer* source_player, netPlayer* target_player){};
virtual bool decide(netPlayer* source_player, netPlayer* target_player) { return 0; };
virtual bool decide(netPlayer* source_player, netPlayer* target_player)
{
return 0;
};
virtual void prepare_reply(datBitBuffer* buffer, netPlayer* reply_player) {};
virtual void handle_reply(datBitBuffer* buffer, netPlayer* souce_player) {};
virtual void prepare_reply(datBitBuffer* buffer, netPlayer* reply_player){};
virtual void handle_reply(datBitBuffer* buffer, netPlayer* souce_player){};
virtual void prepare_extra_data(datBitBuffer* buffer, bool is_reply, netPlayer* player, netPlayer* player2) {};
virtual void handle_extra_data(datBitBuffer* buffer, bool is_reply, netPlayer* player, netPlayer* player2) {};
virtual void prepare_extra_data(datBitBuffer* buffer, bool is_reply, netPlayer* player, netPlayer* player2){};
virtual void handle_extra_data(datBitBuffer* buffer, bool is_reply, netPlayer* player, netPlayer* player2){};
private:
virtual void unk_0x60() {};
virtual void unk_0x68() {};
virtual void unk_0x70() {};
virtual void unk_0x78() {};
public:
virtual bool operator==(netGameEvent const& other) { return 0; };
virtual bool operator!=(netGameEvent const& other) { return 0; };
virtual void unk_0x60(){};
virtual void unk_0x68(){};
virtual void unk_0x70(){};
virtual void unk_0x78(){};
virtual bool must_persist() { return 0; };
virtual bool must_persist_when_out_of_scope() { return 0; };
virtual bool has_timed_out() { return 0; };
public:
std::uint16_t m_id; // 0x08
bool m_requires_reply; // 0x0A
private:
char m_padding1[0x05]; // 0x0B
virtual bool operator==(netGameEvent const& other)
{
return 0;
};
virtual bool operator!=(netGameEvent const& other)
{
return 0;
};
virtual bool must_persist()
{
return 0;
};
virtual bool must_persist_when_out_of_scope()
{
return 0;
};
virtual bool has_timed_out()
{
return 0;
};
public:
netPlayer* m_source_player; // 0x10
netPlayer* m_target_player; // 0x18
std::uint32_t m_resend_time; // 0x20
std::uint16_t m_id; // 0x08
bool m_requires_reply;// 0x0A
private:
std::uint16_t m_0x24; // 0x24
std::uint8_t m_0x26; // 0x26
std::uint8_t m_0x27; // 0x27
std::uint32_t m_0x28; // 0x28
char m_padding1[0x05];// 0x0B
public:
netPlayer* m_source_player; // 0x10
netPlayer* m_target_player; // 0x18
std::uint32_t m_resend_time;// 0x20
private:
std::uint16_t m_0x24;// 0x24
std::uint8_t m_0x26; // 0x26
std::uint8_t m_0x27; // 0x27
std::uint32_t m_0x28;// 0x28
char m_padding2[0x04];
};
}
@ -587,16 +654,16 @@ namespace rage
class CScriptedGameEvent : public rage::netGameEvent
{
public:
char m_padding[0x40]; // 0x30
std::int64_t m_args[54]; // 0x70
std::uint32_t m_bitset; // 0x220
std::uint32_t m_args_size; // 0x224
char m_padding[0x40]; // 0x30
std::int64_t m_args[54]; // 0x70
std::uint32_t m_bitset; // 0x220
std::uint32_t m_args_size;// 0x224
};
class CNetworkIncrementStatEvent : public rage::netGameEvent
{
public:
Hash m_stat; // 0x30
std::uint32_t m_amount; // 0x34
Hash m_stat; // 0x30
std::uint32_t m_amount;// 0x34
};
#pragma pack(pop)

View File

@ -1,7 +1,7 @@
#pragma once
#include "node_list.hpp"
#include "enums.hpp"
#include "../pointers.hpp"
#include "enums.hpp"
#include "node_list.hpp"
#include "replay.hpp"
class CNetGamePlayer;
@ -11,39 +11,61 @@ namespace rage
class CPlayerSyncTree
{
public:
char pad_0000[8]; //0x0000
netObject* player_object; //0x0008
char pad_0010[256]; //0x0010
}; //Size: 0x0110
char pad_0000[8]; //0x0000
netObject* player_object;//0x0008
char pad_0010[256]; //0x0010
}; //Size: 0x0110
class CNetworkSyncDataULBase
{
public:
virtual ~CNetworkSyncDataULBase() = default;
inline virtual void m_8() { }
inline virtual void m_10() { }
inline virtual void m_18() { }
inline virtual void m_20() { }
inline virtual void m_28() { }
inline virtual void m_30() { }
inline virtual void m_38() { }
inline virtual void m_40() { }
inline virtual void m_48() { }
inline virtual void m_50() { }
inline virtual void SetCloningFrequency(int player, int frequency) { }
inline virtual void m_8()
{
}
inline virtual void m_10()
{
}
inline virtual void m_18()
{
}
inline virtual void m_20()
{
}
inline virtual void m_28()
{
}
inline virtual void m_30()
{
}
inline virtual void m_38()
{
}
inline virtual void m_40()
{
}
inline virtual void m_48()
{
}
inline virtual void m_50()
{
}
inline virtual void SetCloningFrequency(int player, int frequency)
{
}
public:
uint8_t pad_10h[49];
uint8_t ownerId;
uint8_t nextOwnerId;
uint8_t isRemote;
uint8_t wantsToDelete : 1; // netobj+76
uint8_t wantsToDelete : 1;// netobj+76
uint8_t unk1 : 1;
uint8_t shouldNotBeDeleted : 1;
uint8_t pad_4Dh[3];
uint8_t pad_50h[32];
uint32_t creationAckedPlayers; // netobj+112
uint32_t creationAckedPlayers;// netobj+112
uint32_t m64;
uint32_t m68;
uint32_t m6C;
@ -68,41 +90,42 @@ namespace rage
virtual ~netObjectMgrBase() = default;
virtual void Initialize() = 0;
virtual void Shutdown() = 0;
virtual void Shutdown() = 0;
virtual void Update(bool) = 0;
virtual void AddEntity(void*, void*) = 0;
virtual void UnregisterNetworkObject_(void *unk, bool force) = 0;
virtual void UnregisterNetworkObject(netObject *object, int reason, bool force1, bool force2) = 0;
virtual void AddEntity(void*, void*) = 0;
virtual void UnregisterNetworkObject_(void* unk, bool force) = 0;
virtual void UnregisterNetworkObject(netObject* object, int reason, bool force1, bool force2) = 0;
virtual void ChangeOwner(netObject *object, CNetGamePlayer *player, int migrationType) = 0;
virtual void ChangeOwner(netObject* object, CNetGamePlayer* player, int migrationType) = 0;
virtual void HandleJoiningPlayer(CNetGamePlayer *player) = 0;
virtual void HandleLeavingPlayer(CNetGamePlayer *player) = 0;
virtual void HandleJoiningPlayer(CNetGamePlayer* player) = 0;
virtual void HandleLeavingPlayer(CNetGamePlayer* player) = 0;
virtual void _0x50(CNetGamePlayer *player) = 0;
virtual void _0x58() = 0;
virtual void _0x50(CNetGamePlayer* player) = 0;
virtual void _0x58() = 0;
virtual void RegisterNetworkObject(netObject *object) = 0;
virtual void RegisterNetworkObject(netObject* object) = 0;
virtual void PackCloneCreate(netObject *object, CNetGamePlayer *player, datBitBuffer *buffer) = 0;
virtual bool PackCloneRemove(netObject *object, CNetGamePlayer *player, bool) = 0;
virtual void PackCloneCreate(netObject* object, CNetGamePlayer* player, datBitBuffer* buffer) = 0;
virtual bool PackCloneRemove(netObject* object, CNetGamePlayer* player, bool) = 0;
virtual void _0x78(netObject *object, void*) = 0;
virtual void _0x80() = 0;
virtual void _0x88() = 0;
virtual const char *_0x90(int) = 0;
virtual void _0x78(netObject* object, void*) = 0;
virtual void _0x80() = 0;
virtual void _0x88() = 0;
virtual const char* _0x90(int) = 0;
virtual bool HandleCloneCreate(CNetGamePlayer *source, CNetGamePlayer *target, eNetObjType object_type, std::uint16_t object_id, eNetObjectFlags object_flags, void*, std::uint32_t timestamp) = 0;
virtual void HandleCloneCreateAck(CNetGamePlayer *source, CNetGamePlayer *target, std::uint16_t object_flags, eAckCode ack_code) = 0;
virtual bool HandleCloneCreate(CNetGamePlayer* source, CNetGamePlayer* target, eNetObjType object_type, std::uint16_t object_id, eNetObjectFlags object_flags, void*, std::uint32_t timestamp) = 0;
virtual void HandleCloneCreateAck(CNetGamePlayer* source, CNetGamePlayer* target, std::uint16_t object_flags, eAckCode ack_code) = 0;
virtual int HandleCloneSync(CNetGamePlayer *source, CNetGamePlayer *target, eNetObjType object_type, std::uint16_t object_id, void*, std::uint16_t, std::uint32_t timestamp) = 0;
virtual void HandleCloneSyncAck(CNetGamePlayer *source, CNetGamePlayer *target, void *, std::uint16_t objectId, eAckCode ack_code) = 0;
virtual int HandleCloneSync(CNetGamePlayer* source, CNetGamePlayer* target, eNetObjType object_type, std::uint16_t object_id, void*, std::uint16_t, std::uint32_t timestamp) = 0;
virtual void HandleCloneSyncAck(CNetGamePlayer* source, CNetGamePlayer* target, void*, std::uint16_t objectId, eAckCode ack_code) = 0;
virtual void HandleCloneRemove(CNetGamePlayer *source, CNetGamePlayer *target, std::uint16_t object_id, int) = 0;
virtual void HandleCloneRemoveAck(CNetGamePlayer *source, CNetGamePlayer *target, std::uint16_t object_id, eAckCode ack_code) = 0;
virtual void HandleCloneRemove(CNetGamePlayer* source, CNetGamePlayer* target, std::uint16_t object_id, int) = 0;
virtual void HandleCloneRemoveAck(CNetGamePlayer* source, CNetGamePlayer* target, std::uint16_t object_id, eAckCode ack_code) = 0;
virtual void _0xC8() = 0;
public:
atDList<atDNetObjectNode> m_objects_owned_by_player[32];
};

View File

@ -1,23 +1,24 @@
#pragma once
#include "fwddec.hpp"
#include <base/datBase.hpp>
namespace rage
{
template <typename T, typename Base = datBase>
template<typename T, typename Base = datBase>
class atDNode : public Base
{
public:
T m_data;
void *m_unk;
atDNode<T, Base> *m_next;
void* m_unk;
atDNode<T, Base>* m_next;
};
template <typename Node>
template<typename Node>
class atDList
{
public:
Node *m_head;
Node *m_tail;
Node* m_head;
Node* m_tail;
};
}

View File

@ -1,9 +1,4 @@
#pragma once
#include "fwddec.hpp"
class CPedFactory
{
public:
virtual ~CPedFactory() = default;
CPed *m_local_ped;
};
#include <ped/CPedFactory.hpp>

View File

@ -1,160 +1,160 @@
#pragma once
#include "natives.hpp"
#include "gta/joaat.hpp"
#include "natives.hpp"
enum Rewards : Hash
{
REWARD_AMMO_ADVANCEDRIFLE = RAGE_JOAAT("REWARD_AMMO_ADVANCEDRIFLE"),
REWARD_AMMO_APPISTOL = RAGE_JOAAT("REWARD_AMMO_APPISTOL"),
REWARD_AMMO_ASSAULTRIFLE = RAGE_JOAAT("REWARD_AMMO_ASSAULTRIFLE"),
REWARD_AMMO_ASSAULTSHOTGUN = RAGE_JOAAT("REWARD_AMMO_ASSAULTSHOTGUN"),
REWARD_AMMO_ASSAULTSMG = RAGE_JOAAT("REWARD_AMMO_ASSAULTSMG"),
REWARD_AMMO_AUTOSHOTGUN = RAGE_JOAAT("REWARD_AMMO_AUTOSHOTGUN"),
REWARD_AMMO_BULLET_MP = RAGE_JOAAT("REWARD_AMMO_BULLET_MP"),
REWARD_AMMO_BULLPUPRIFLE = RAGE_JOAAT("REWARD_AMMO_BULLPUPRIFLE"),
REWARD_AMMO_BULLPUPSHOTGUN = RAGE_JOAAT("REWARD_AMMO_BULLPUPSHOTGUN"),
REWARD_AMMO_CARBINERIFLE = RAGE_JOAAT("REWARD_AMMO_CARBINERIFLE"),
REWARD_AMMO_COMBATMG = RAGE_JOAAT("REWARD_AMMO_COMBATMG"),
REWARD_AMMO_COMBATPDW = RAGE_JOAAT("REWARD_AMMO_COMBATPDW"),
REWARD_AMMO_COMBATPISTOL = RAGE_JOAAT("REWARD_AMMO_COMBATPISTOL"),
REWARD_AMMO_COMPACTLAUNCHER = RAGE_JOAAT("REWARD_AMMO_COMPACTLAUNCHER"),
REWARD_AMMO_COMPACTRIFLE = RAGE_JOAAT("REWARD_AMMO_COMPACTRIFLE"),
REWARD_AMMO_DBSHOTGUN = RAGE_JOAAT("REWARD_AMMO_DBSHOTGUN"),
REWARD_AMMO_DOUBLEACTION = RAGE_JOAAT("REWARD_AMMO_DOUBLEACTION"),
REWARD_AMMO_FIREWORK = RAGE_JOAAT("REWARD_AMMO_FIREWORK"),
REWARD_AMMO_FIREWORK_MP = RAGE_JOAAT("REWARD_AMMO_FIREWORK_MP"),
REWARD_AMMO_FLAREGUN = RAGE_JOAAT("REWARD_AMMO_FLAREGUN"),
REWARD_AMMO_GRENADE = RAGE_JOAAT("REWARD_AMMO_GRENADE"),
REWARD_AMMO_GRENADELAUNCHER = RAGE_JOAAT("REWARD_AMMO_GRENADELAUNCHER"),
REWARD_AMMO_GRENADELAUNCHER_MP = RAGE_JOAAT("REWARD_AMMO_GRENADELAUNCHER_MP"),
REWARD_AMMO_GUSENBERG = RAGE_JOAAT("REWARD_AMMO_GUSENBERG"),
REWARD_AMMO_HEAVYPISTOL = RAGE_JOAAT("REWARD_AMMO_HEAVYPISTOL"),
REWARD_AMMO_HEAVYSHOTGUN = RAGE_JOAAT("REWARD_AMMO_HEAVYSHOTGUN"),
REWARD_AMMO_HEAVYSNIPER = RAGE_JOAAT("REWARD_AMMO_HEAVYSNIPER"),
REWARD_AMMO_HOMINGLAUNCHER = RAGE_JOAAT("REWARD_AMMO_HOMINGLAUNCHER"),
REWARD_AMMO_MACHINEPISTOL = RAGE_JOAAT("REWARD_AMMO_MACHINEPISTOL"),
REWARD_AMMO_MARKSMANPISTOL = RAGE_JOAAT("REWARD_AMMO_MARKSMANPISTOL"),
REWARD_AMMO_MARKSMANRIFLE = RAGE_JOAAT("REWARD_AMMO_MARKSMANRIFLE"),
REWARD_AMMO_MG = RAGE_JOAAT("REWARD_AMMO_MG"),
REWARD_AMMO_MICROSMG = RAGE_JOAAT("REWARD_AMMO_MICROSMG"),
REWARD_AMMO_MINIGUN = RAGE_JOAAT("REWARD_AMMO_MINIGUN"),
REWARD_AMMO_MINISMG = RAGE_JOAAT("REWARD_AMMO_MINISMG"),
REWARD_AMMO_MISSILE_MP = RAGE_JOAAT("REWARD_AMMO_MISSILE_MP"),
REWARD_AMMO_MOLOTOV = RAGE_JOAAT("REWARD_AMMO_MOLOTOV"),
REWARD_AMMO_MUSKET = RAGE_JOAAT("REWARD_AMMO_MUSKET"),
REWARD_AMMO_PETROLCAN = RAGE_JOAAT("REWARD_AMMO_PETROLCAN"),
REWARD_AMMO_PIPEBOMB = RAGE_JOAAT("REWARD_AMMO_PIPEBOMB"),
REWARD_AMMO_PISTOL = RAGE_JOAAT("REWARD_AMMO_PISTOL"),
REWARD_AMMO_PISTOL50 = RAGE_JOAAT("REWARD_AMMO_PISTOL50"),
REWARD_AMMO_PROXMINE = RAGE_JOAAT("REWARD_AMMO_PROXMINE"),
REWARD_AMMO_PUMPSHOTGUN = RAGE_JOAAT("REWARD_AMMO_PUMPSHOTGUN"),
REWARD_AMMO_ADVANCEDRIFLE = RAGE_JOAAT("REWARD_AMMO_ADVANCEDRIFLE"),
REWARD_AMMO_APPISTOL = RAGE_JOAAT("REWARD_AMMO_APPISTOL"),
REWARD_AMMO_ASSAULTRIFLE = RAGE_JOAAT("REWARD_AMMO_ASSAULTRIFLE"),
REWARD_AMMO_ASSAULTSHOTGUN = RAGE_JOAAT("REWARD_AMMO_ASSAULTSHOTGUN"),
REWARD_AMMO_ASSAULTSMG = RAGE_JOAAT("REWARD_AMMO_ASSAULTSMG"),
REWARD_AMMO_AUTOSHOTGUN = RAGE_JOAAT("REWARD_AMMO_AUTOSHOTGUN"),
REWARD_AMMO_BULLET_MP = RAGE_JOAAT("REWARD_AMMO_BULLET_MP"),
REWARD_AMMO_BULLPUPRIFLE = RAGE_JOAAT("REWARD_AMMO_BULLPUPRIFLE"),
REWARD_AMMO_BULLPUPSHOTGUN = RAGE_JOAAT("REWARD_AMMO_BULLPUPSHOTGUN"),
REWARD_AMMO_CARBINERIFLE = RAGE_JOAAT("REWARD_AMMO_CARBINERIFLE"),
REWARD_AMMO_COMBATMG = RAGE_JOAAT("REWARD_AMMO_COMBATMG"),
REWARD_AMMO_COMBATPDW = RAGE_JOAAT("REWARD_AMMO_COMBATPDW"),
REWARD_AMMO_COMBATPISTOL = RAGE_JOAAT("REWARD_AMMO_COMBATPISTOL"),
REWARD_AMMO_COMPACTLAUNCHER = RAGE_JOAAT("REWARD_AMMO_COMPACTLAUNCHER"),
REWARD_AMMO_COMPACTRIFLE = RAGE_JOAAT("REWARD_AMMO_COMPACTRIFLE"),
REWARD_AMMO_DBSHOTGUN = RAGE_JOAAT("REWARD_AMMO_DBSHOTGUN"),
REWARD_AMMO_DOUBLEACTION = RAGE_JOAAT("REWARD_AMMO_DOUBLEACTION"),
REWARD_AMMO_FIREWORK = RAGE_JOAAT("REWARD_AMMO_FIREWORK"),
REWARD_AMMO_FIREWORK_MP = RAGE_JOAAT("REWARD_AMMO_FIREWORK_MP"),
REWARD_AMMO_FLAREGUN = RAGE_JOAAT("REWARD_AMMO_FLAREGUN"),
REWARD_AMMO_GRENADE = RAGE_JOAAT("REWARD_AMMO_GRENADE"),
REWARD_AMMO_GRENADELAUNCHER = RAGE_JOAAT("REWARD_AMMO_GRENADELAUNCHER"),
REWARD_AMMO_GRENADELAUNCHER_MP = RAGE_JOAAT("REWARD_AMMO_GRENADELAUNCHER_MP"),
REWARD_AMMO_GUSENBERG = RAGE_JOAAT("REWARD_AMMO_GUSENBERG"),
REWARD_AMMO_HEAVYPISTOL = RAGE_JOAAT("REWARD_AMMO_HEAVYPISTOL"),
REWARD_AMMO_HEAVYSHOTGUN = RAGE_JOAAT("REWARD_AMMO_HEAVYSHOTGUN"),
REWARD_AMMO_HEAVYSNIPER = RAGE_JOAAT("REWARD_AMMO_HEAVYSNIPER"),
REWARD_AMMO_HOMINGLAUNCHER = RAGE_JOAAT("REWARD_AMMO_HOMINGLAUNCHER"),
REWARD_AMMO_MACHINEPISTOL = RAGE_JOAAT("REWARD_AMMO_MACHINEPISTOL"),
REWARD_AMMO_MARKSMANPISTOL = RAGE_JOAAT("REWARD_AMMO_MARKSMANPISTOL"),
REWARD_AMMO_MARKSMANRIFLE = RAGE_JOAAT("REWARD_AMMO_MARKSMANRIFLE"),
REWARD_AMMO_MG = RAGE_JOAAT("REWARD_AMMO_MG"),
REWARD_AMMO_MICROSMG = RAGE_JOAAT("REWARD_AMMO_MICROSMG"),
REWARD_AMMO_MINIGUN = RAGE_JOAAT("REWARD_AMMO_MINIGUN"),
REWARD_AMMO_MINISMG = RAGE_JOAAT("REWARD_AMMO_MINISMG"),
REWARD_AMMO_MISSILE_MP = RAGE_JOAAT("REWARD_AMMO_MISSILE_MP"),
REWARD_AMMO_MOLOTOV = RAGE_JOAAT("REWARD_AMMO_MOLOTOV"),
REWARD_AMMO_MUSKET = RAGE_JOAAT("REWARD_AMMO_MUSKET"),
REWARD_AMMO_PETROLCAN = RAGE_JOAAT("REWARD_AMMO_PETROLCAN"),
REWARD_AMMO_PIPEBOMB = RAGE_JOAAT("REWARD_AMMO_PIPEBOMB"),
REWARD_AMMO_PISTOL = RAGE_JOAAT("REWARD_AMMO_PISTOL"),
REWARD_AMMO_PISTOL50 = RAGE_JOAAT("REWARD_AMMO_PISTOL50"),
REWARD_AMMO_PROXMINE = RAGE_JOAAT("REWARD_AMMO_PROXMINE"),
REWARD_AMMO_PUMPSHOTGUN = RAGE_JOAAT("REWARD_AMMO_PUMPSHOTGUN"),
REWARD_AMMO_PUMPSHOTGUN_ENTER_VEHICLE = RAGE_JOAAT("REWARD_AMMO_PUMPSHOTGUN_ENTER_VEHICLE"),
REWARD_AMMO_RAILGUN = RAGE_JOAAT("REWARD_AMMO_RAILGUN"),
REWARD_AMMO_RAYPISTOL = RAGE_JOAAT("REWARD_AMMO_RAYPISTOL"),
REWARD_AMMO_REVOLVER = RAGE_JOAAT("REWARD_AMMO_REVOLVER"),
REWARD_AMMO_RPG = RAGE_JOAAT("REWARD_AMMO_RPG"),
REWARD_AMMO_SAWNOFFSHOTGUN = RAGE_JOAAT("REWARD_AMMO_SAWNOFFSHOTGUN"),
REWARD_AMMO_SMG = RAGE_JOAAT("REWARD_AMMO_SMG"),
REWARD_AMMO_SMOKEGRENADE = RAGE_JOAAT("REWARD_AMMO_SMOKEGRENADE"),
REWARD_AMMO_SNIPERRIFLE = RAGE_JOAAT("REWARD_AMMO_SNIPERRIFLE"),
REWARD_AMMO_SNSPISTOL = RAGE_JOAAT("REWARD_AMMO_SNSPISTOL"),
REWARD_AMMO_SPECIALCARBINE = RAGE_JOAAT("REWARD_AMMO_SPECIALCARBINE"),
REWARD_AMMO_STICKYBOMB = RAGE_JOAAT("REWARD_AMMO_STICKYBOMB"),
REWARD_AMMO_STUNGUN = RAGE_JOAAT("REWARD_AMMO_STUNGUN"),
REWARD_AMMO_VINTAGEPISTOL = RAGE_JOAAT("REWARD_AMMO_VINTAGEPISTOL"),
REWARD_ARMOUR = RAGE_JOAAT("REWARD_ARMOUR"),
REWARD_HEALTH = RAGE_JOAAT("REWARD_HEALTH"),
REWARD_HEALTH_ENTER_VEHICLE = RAGE_JOAAT("REWARD_HEALTH_ENTER_VEHICLE"),
REWARD_HEALTH_VARIABLE = RAGE_JOAAT("REWARD_HEALTH_VARIABLE"),
REWARD_MONEY_VARIABLE = RAGE_JOAAT("REWARD_MONEY_VARIABLE"),
REWARD_PARACHUTE = RAGE_JOAAT("REWARD_PARACHUTE"),
REWARD_STAT_HEALTH = RAGE_JOAAT("REWARD_STAT_HEALTH"),
REWARD_STAT_HEALTH_VARIABLE = RAGE_JOAAT("REWARD_STAT_HEALTH_VARIABLE"),
REWARD_STAT_WEAPON = RAGE_JOAAT("REWARD_STAT_WEAPON"),
REWARD_VEHICLE_FIX = RAGE_JOAAT("REWARD_VEHICLE_FIX"),
REWARD_WEAPON_ADVANCEDRIFLE = RAGE_JOAAT("REWARD_WEAPON_ADVANCEDRIFLE"),
REWARD_WEAPON_APPISTOL = RAGE_JOAAT("REWARD_WEAPON_APPISTOL"),
REWARD_WEAPON_ASSAULTRIFLE = RAGE_JOAAT("REWARD_WEAPON_ASSAULTRIFLE"),
REWARD_WEAPON_ASSAULTRIFLE_MK2 = RAGE_JOAAT("REWARD_WEAPON_ASSAULTRIFLE_MK2"),
REWARD_WEAPON_ASSAULTSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_ASSAULTSHOTGUN"),
REWARD_WEAPON_ASSAULTSMG = RAGE_JOAAT("REWARD_WEAPON_ASSAULTSMG"),
REWARD_WEAPON_AUTOSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_AUTOSHOTGUN"),
REWARD_WEAPON_BAT = RAGE_JOAAT("REWARD_WEAPON_BAT"),
REWARD_WEAPON_BATTLEAXE = RAGE_JOAAT("REWARD_WEAPON_BATTLEAXE"),
REWARD_WEAPON_BOTTLE = RAGE_JOAAT("REWARD_WEAPON_BOTTLE"),
REWARD_WEAPON_BULLPUPRIFLE = RAGE_JOAAT("REWARD_WEAPON_BULLPUPRIFLE"),
REWARD_WEAPON_BULLPUPRIFLE_MK2 = RAGE_JOAAT("REWARD_WEAPON_BULLPUPRIFLE_MK2"),
REWARD_WEAPON_BULLPUPSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_BULLPUPSHOTGUN"),
REWARD_WEAPON_CARBINERIFLE = RAGE_JOAAT("REWARD_WEAPON_CARBINERIFLE"),
REWARD_WEAPON_CARBINERIFLE_MK2 = RAGE_JOAAT("REWARD_WEAPON_CARBINERIFLE_MK2"),
REWARD_WEAPON_COMBATMG = RAGE_JOAAT("REWARD_WEAPON_COMBATMG"),
REWARD_WEAPON_COMBATMG_MK2 = RAGE_JOAAT("REWARD_WEAPON_COMBATMG_MK2"),
REWARD_WEAPON_COMBATPDW = RAGE_JOAAT("REWARD_WEAPON_COMBATPDW"),
REWARD_WEAPON_COMBATPISTOL = RAGE_JOAAT("REWARD_WEAPON_COMBATPISTOL"),
REWARD_WEAPON_COMPACTLAUNCHER = RAGE_JOAAT("REWARD_WEAPON_COMPACTLAUNCHER"),
REWARD_WEAPON_COMPACTRIFLE = RAGE_JOAAT("REWARD_WEAPON_COMPACTRIFLE"),
REWARD_WEAPON_CROWBAR = RAGE_JOAAT("REWARD_WEAPON_CROWBAR"),
REWARD_WEAPON_DAGGER = RAGE_JOAAT("REWARD_WEAPON_DAGGER"),
REWARD_WEAPON_DBSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_DBSHOTGUN"),
REWARD_WEAPON_DOUBLEACTION = RAGE_JOAAT("REWARD_WEAPON_DOUBLEACTION"),
REWARD_WEAPON_FIREWORK = RAGE_JOAAT("REWARD_WEAPON_FIREWORK"),
REWARD_WEAPON_FLAREGUN = RAGE_JOAAT("REWARD_WEAPON_FLAREGUN"),
REWARD_WEAPON_FLASHLIGHT = RAGE_JOAAT("REWARD_WEAPON_FLASHLIGHT"),
REWARD_WEAPON_GOLFCLUB = RAGE_JOAAT("REWARD_WEAPON_GOLFCLUB"),
REWARD_WEAPON_GRENADE = RAGE_JOAAT("REWARD_WEAPON_GRENADE"),
REWARD_WEAPON_GRENADELAUNCHER = RAGE_JOAAT("REWARD_WEAPON_GRENADELAUNCHER"),
REWARD_WEAPON_GUSENBERG = RAGE_JOAAT("REWARD_WEAPON_GUSENBERG"),
REWARD_WEAPON_HAMMER = RAGE_JOAAT("REWARD_WEAPON_HAMMER"),
REWARD_WEAPON_HATCHET = RAGE_JOAAT("REWARD_WEAPON_HATCHET"),
REWARD_WEAPON_HEAVYPISTOL = RAGE_JOAAT("REWARD_WEAPON_HEAVYPISTOL"),
REWARD_WEAPON_HEAVYSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_HEAVYSHOTGUN"),
REWARD_WEAPON_HEAVYSNIPER = RAGE_JOAAT("REWARD_WEAPON_HEAVYSNIPER"),
REWARD_WEAPON_HEAVYSNIPER_MK2 = RAGE_JOAAT("REWARD_WEAPON_HEAVYSNIPER_MK2"),
REWARD_WEAPON_HOMINGLAUNCHER = RAGE_JOAAT("REWARD_WEAPON_HOMINGLAUNCHER"),
REWARD_WEAPON_KNIFE = RAGE_JOAAT("REWARD_WEAPON_KNIFE"),
REWARD_WEAPON_KNUCKLE = RAGE_JOAAT("REWARD_WEAPON_KNUCKLE"),
REWARD_WEAPON_MACHETE = RAGE_JOAAT("REWARD_WEAPON_MACHETE"),
REWARD_WEAPON_MACHINEPISTOL = RAGE_JOAAT("REWARD_WEAPON_MACHINEPISTOL"),
REWARD_WEAPON_MARKSMANPISTOL = RAGE_JOAAT("REWARD_WEAPON_MARKSMANPISTOL"),
REWARD_WEAPON_MARKSMANRIFLE = RAGE_JOAAT("REWARD_WEAPON_MARKSMANRIFLE"),
REWARD_WEAPON_MARKSMANRIFLE_MK2 = RAGE_JOAAT("REWARD_WEAPON_MARKSMANRIFLE_MK2"),
REWARD_WEAPON_MG = RAGE_JOAAT("REWARD_WEAPON_MG"),
REWARD_WEAPON_MICROSMG = RAGE_JOAAT("REWARD_WEAPON_MICROSMG"),
REWARD_WEAPON_MINIGUN = RAGE_JOAAT("REWARD_WEAPON_MINIGUN"),
REWARD_WEAPON_MINISMG = RAGE_JOAAT("REWARD_WEAPON_MINISMG"),
REWARD_WEAPON_MOLOTOV = RAGE_JOAAT("REWARD_WEAPON_MOLOTOV"),
REWARD_WEAPON_MUSKET = RAGE_JOAAT("REWARD_WEAPON_MUSKET"),
REWARD_WEAPON_NIGHTSTICK = RAGE_JOAAT("REWARD_WEAPON_NIGHTSTICK"),
REWARD_WEAPON_PETROLCAN = RAGE_JOAAT("REWARD_WEAPON_PETROLCAN"),
REWARD_WEAPON_PIPEBOMB = RAGE_JOAAT("REWARD_WEAPON_PIPEBOMB"),
REWARD_WEAPON_PISTOL = RAGE_JOAAT("REWARD_WEAPON_PISTOL"),
REWARD_WEAPON_PISTOL50 = RAGE_JOAAT("REWARD_WEAPON_PISTOL50"),
REWARD_WEAPON_PISTOL_MK2 = RAGE_JOAAT("REWARD_WEAPON_PISTOL_MK2"),
REWARD_WEAPON_POOLCUE = RAGE_JOAAT("REWARD_WEAPON_POOLCUE"),
REWARD_WEAPON_PROXMINE = RAGE_JOAAT("REWARD_WEAPON_PROXMINE"),
REWARD_WEAPON_PUMPSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_PUMPSHOTGUN"),
REWARD_WEAPON_PUMPSHOTGUN_MK2 = RAGE_JOAAT("REWARD_WEAPON_PUMPSHOTGUN_MK2"),
REWARD_WEAPON_RAILGUN = RAGE_JOAAT("REWARD_WEAPON_RAILGUN"),
REWARD_WEAPON_RAYCARBINE = RAGE_JOAAT("REWARD_WEAPON_RAYCARBINE"),
REWARD_WEAPON_RAYMINIGUN = RAGE_JOAAT("REWARD_WEAPON_RAYMINIGUN"),
REWARD_WEAPON_RAYPISTOL = RAGE_JOAAT("REWARD_WEAPON_RAYPISTOL"),
REWARD_WEAPON_REVOLVER = RAGE_JOAAT("REWARD_WEAPON_REVOLVER"),
REWARD_WEAPON_REVOLVER_MK2 = RAGE_JOAAT("REWARD_WEAPON_REVOLVER_MK2"),
REWARD_WEAPON_RPG = RAGE_JOAAT("REWARD_WEAPON_RPG"),
REWARD_WEAPON_SAWNOFFSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_SAWNOFFSHOTGUN"),
REWARD_WEAPON_SMG = RAGE_JOAAT("REWARD_WEAPON_SMG"),
REWARD_WEAPON_SMG_MK2 = RAGE_JOAAT("REWARD_WEAPON_SMG_MK2"),
REWARD_WEAPON_SMOKEGRENADE = RAGE_JOAAT("REWARD_WEAPON_SMOKEGRENADE"),
REWARD_WEAPON_SNIPERRIFLE = RAGE_JOAAT("REWARD_WEAPON_SNIPERRIFLE"),
REWARD_WEAPON_SNSPISTOL = RAGE_JOAAT("REWARD_WEAPON_SNSPISTOL"),
REWARD_WEAPON_SNSPISTOL_MK2 = RAGE_JOAAT("REWARD_WEAPON_SNSPISTOL_MK2"),
REWARD_WEAPON_SPECIALCARBINE = RAGE_JOAAT("REWARD_WEAPON_SPECIALCARBINE"),
REWARD_WEAPON_SPECIALCARBINE_MK2 = RAGE_JOAAT("REWARD_WEAPON_SPECIALCARBINE_MK2"),
REWARD_WEAPON_STICKYBOMB = RAGE_JOAAT("REWARD_WEAPON_STICKYBOMB"),
REWARD_WEAPON_STONE_HATCHET = RAGE_JOAAT("REWARD_WEAPON_STONE_HATCHET"),
REWARD_WEAPON_STUNGUN = RAGE_JOAAT("REWARD_WEAPON_STUNGUN"),
REWARD_WEAPON_SWITCHBLADE = RAGE_JOAAT("REWARD_WEAPON_SWITCHBLADE"),
REWARD_WEAPON_VINTAGEPISTOL = RAGE_JOAAT("REWARD_WEAPON_VINTAGEPISTOL"),
REWARD_WEAPON_WRENCH = RAGE_JOAAT("REWARD_WEAPON_WRENCH")
REWARD_AMMO_RAILGUN = RAGE_JOAAT("REWARD_AMMO_RAILGUN"),
REWARD_AMMO_RAYPISTOL = RAGE_JOAAT("REWARD_AMMO_RAYPISTOL"),
REWARD_AMMO_REVOLVER = RAGE_JOAAT("REWARD_AMMO_REVOLVER"),
REWARD_AMMO_RPG = RAGE_JOAAT("REWARD_AMMO_RPG"),
REWARD_AMMO_SAWNOFFSHOTGUN = RAGE_JOAAT("REWARD_AMMO_SAWNOFFSHOTGUN"),
REWARD_AMMO_SMG = RAGE_JOAAT("REWARD_AMMO_SMG"),
REWARD_AMMO_SMOKEGRENADE = RAGE_JOAAT("REWARD_AMMO_SMOKEGRENADE"),
REWARD_AMMO_SNIPERRIFLE = RAGE_JOAAT("REWARD_AMMO_SNIPERRIFLE"),
REWARD_AMMO_SNSPISTOL = RAGE_JOAAT("REWARD_AMMO_SNSPISTOL"),
REWARD_AMMO_SPECIALCARBINE = RAGE_JOAAT("REWARD_AMMO_SPECIALCARBINE"),
REWARD_AMMO_STICKYBOMB = RAGE_JOAAT("REWARD_AMMO_STICKYBOMB"),
REWARD_AMMO_STUNGUN = RAGE_JOAAT("REWARD_AMMO_STUNGUN"),
REWARD_AMMO_VINTAGEPISTOL = RAGE_JOAAT("REWARD_AMMO_VINTAGEPISTOL"),
REWARD_ARMOUR = RAGE_JOAAT("REWARD_ARMOUR"),
REWARD_HEALTH = RAGE_JOAAT("REWARD_HEALTH"),
REWARD_HEALTH_ENTER_VEHICLE = RAGE_JOAAT("REWARD_HEALTH_ENTER_VEHICLE"),
REWARD_HEALTH_VARIABLE = RAGE_JOAAT("REWARD_HEALTH_VARIABLE"),
REWARD_MONEY_VARIABLE = RAGE_JOAAT("REWARD_MONEY_VARIABLE"),
REWARD_PARACHUTE = RAGE_JOAAT("REWARD_PARACHUTE"),
REWARD_STAT_HEALTH = RAGE_JOAAT("REWARD_STAT_HEALTH"),
REWARD_STAT_HEALTH_VARIABLE = RAGE_JOAAT("REWARD_STAT_HEALTH_VARIABLE"),
REWARD_STAT_WEAPON = RAGE_JOAAT("REWARD_STAT_WEAPON"),
REWARD_VEHICLE_FIX = RAGE_JOAAT("REWARD_VEHICLE_FIX"),
REWARD_WEAPON_ADVANCEDRIFLE = RAGE_JOAAT("REWARD_WEAPON_ADVANCEDRIFLE"),
REWARD_WEAPON_APPISTOL = RAGE_JOAAT("REWARD_WEAPON_APPISTOL"),
REWARD_WEAPON_ASSAULTRIFLE = RAGE_JOAAT("REWARD_WEAPON_ASSAULTRIFLE"),
REWARD_WEAPON_ASSAULTRIFLE_MK2 = RAGE_JOAAT("REWARD_WEAPON_ASSAULTRIFLE_MK2"),
REWARD_WEAPON_ASSAULTSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_ASSAULTSHOTGUN"),
REWARD_WEAPON_ASSAULTSMG = RAGE_JOAAT("REWARD_WEAPON_ASSAULTSMG"),
REWARD_WEAPON_AUTOSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_AUTOSHOTGUN"),
REWARD_WEAPON_BAT = RAGE_JOAAT("REWARD_WEAPON_BAT"),
REWARD_WEAPON_BATTLEAXE = RAGE_JOAAT("REWARD_WEAPON_BATTLEAXE"),
REWARD_WEAPON_BOTTLE = RAGE_JOAAT("REWARD_WEAPON_BOTTLE"),
REWARD_WEAPON_BULLPUPRIFLE = RAGE_JOAAT("REWARD_WEAPON_BULLPUPRIFLE"),
REWARD_WEAPON_BULLPUPRIFLE_MK2 = RAGE_JOAAT("REWARD_WEAPON_BULLPUPRIFLE_MK2"),
REWARD_WEAPON_BULLPUPSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_BULLPUPSHOTGUN"),
REWARD_WEAPON_CARBINERIFLE = RAGE_JOAAT("REWARD_WEAPON_CARBINERIFLE"),
REWARD_WEAPON_CARBINERIFLE_MK2 = RAGE_JOAAT("REWARD_WEAPON_CARBINERIFLE_MK2"),
REWARD_WEAPON_COMBATMG = RAGE_JOAAT("REWARD_WEAPON_COMBATMG"),
REWARD_WEAPON_COMBATMG_MK2 = RAGE_JOAAT("REWARD_WEAPON_COMBATMG_MK2"),
REWARD_WEAPON_COMBATPDW = RAGE_JOAAT("REWARD_WEAPON_COMBATPDW"),
REWARD_WEAPON_COMBATPISTOL = RAGE_JOAAT("REWARD_WEAPON_COMBATPISTOL"),
REWARD_WEAPON_COMPACTLAUNCHER = RAGE_JOAAT("REWARD_WEAPON_COMPACTLAUNCHER"),
REWARD_WEAPON_COMPACTRIFLE = RAGE_JOAAT("REWARD_WEAPON_COMPACTRIFLE"),
REWARD_WEAPON_CROWBAR = RAGE_JOAAT("REWARD_WEAPON_CROWBAR"),
REWARD_WEAPON_DAGGER = RAGE_JOAAT("REWARD_WEAPON_DAGGER"),
REWARD_WEAPON_DBSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_DBSHOTGUN"),
REWARD_WEAPON_DOUBLEACTION = RAGE_JOAAT("REWARD_WEAPON_DOUBLEACTION"),
REWARD_WEAPON_FIREWORK = RAGE_JOAAT("REWARD_WEAPON_FIREWORK"),
REWARD_WEAPON_FLAREGUN = RAGE_JOAAT("REWARD_WEAPON_FLAREGUN"),
REWARD_WEAPON_FLASHLIGHT = RAGE_JOAAT("REWARD_WEAPON_FLASHLIGHT"),
REWARD_WEAPON_GOLFCLUB = RAGE_JOAAT("REWARD_WEAPON_GOLFCLUB"),
REWARD_WEAPON_GRENADE = RAGE_JOAAT("REWARD_WEAPON_GRENADE"),
REWARD_WEAPON_GRENADELAUNCHER = RAGE_JOAAT("REWARD_WEAPON_GRENADELAUNCHER"),
REWARD_WEAPON_GUSENBERG = RAGE_JOAAT("REWARD_WEAPON_GUSENBERG"),
REWARD_WEAPON_HAMMER = RAGE_JOAAT("REWARD_WEAPON_HAMMER"),
REWARD_WEAPON_HATCHET = RAGE_JOAAT("REWARD_WEAPON_HATCHET"),
REWARD_WEAPON_HEAVYPISTOL = RAGE_JOAAT("REWARD_WEAPON_HEAVYPISTOL"),
REWARD_WEAPON_HEAVYSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_HEAVYSHOTGUN"),
REWARD_WEAPON_HEAVYSNIPER = RAGE_JOAAT("REWARD_WEAPON_HEAVYSNIPER"),
REWARD_WEAPON_HEAVYSNIPER_MK2 = RAGE_JOAAT("REWARD_WEAPON_HEAVYSNIPER_MK2"),
REWARD_WEAPON_HOMINGLAUNCHER = RAGE_JOAAT("REWARD_WEAPON_HOMINGLAUNCHER"),
REWARD_WEAPON_KNIFE = RAGE_JOAAT("REWARD_WEAPON_KNIFE"),
REWARD_WEAPON_KNUCKLE = RAGE_JOAAT("REWARD_WEAPON_KNUCKLE"),
REWARD_WEAPON_MACHETE = RAGE_JOAAT("REWARD_WEAPON_MACHETE"),
REWARD_WEAPON_MACHINEPISTOL = RAGE_JOAAT("REWARD_WEAPON_MACHINEPISTOL"),
REWARD_WEAPON_MARKSMANPISTOL = RAGE_JOAAT("REWARD_WEAPON_MARKSMANPISTOL"),
REWARD_WEAPON_MARKSMANRIFLE = RAGE_JOAAT("REWARD_WEAPON_MARKSMANRIFLE"),
REWARD_WEAPON_MARKSMANRIFLE_MK2 = RAGE_JOAAT("REWARD_WEAPON_MARKSMANRIFLE_MK2"),
REWARD_WEAPON_MG = RAGE_JOAAT("REWARD_WEAPON_MG"),
REWARD_WEAPON_MICROSMG = RAGE_JOAAT("REWARD_WEAPON_MICROSMG"),
REWARD_WEAPON_MINIGUN = RAGE_JOAAT("REWARD_WEAPON_MINIGUN"),
REWARD_WEAPON_MINISMG = RAGE_JOAAT("REWARD_WEAPON_MINISMG"),
REWARD_WEAPON_MOLOTOV = RAGE_JOAAT("REWARD_WEAPON_MOLOTOV"),
REWARD_WEAPON_MUSKET = RAGE_JOAAT("REWARD_WEAPON_MUSKET"),
REWARD_WEAPON_NIGHTSTICK = RAGE_JOAAT("REWARD_WEAPON_NIGHTSTICK"),
REWARD_WEAPON_PETROLCAN = RAGE_JOAAT("REWARD_WEAPON_PETROLCAN"),
REWARD_WEAPON_PIPEBOMB = RAGE_JOAAT("REWARD_WEAPON_PIPEBOMB"),
REWARD_WEAPON_PISTOL = RAGE_JOAAT("REWARD_WEAPON_PISTOL"),
REWARD_WEAPON_PISTOL50 = RAGE_JOAAT("REWARD_WEAPON_PISTOL50"),
REWARD_WEAPON_PISTOL_MK2 = RAGE_JOAAT("REWARD_WEAPON_PISTOL_MK2"),
REWARD_WEAPON_POOLCUE = RAGE_JOAAT("REWARD_WEAPON_POOLCUE"),
REWARD_WEAPON_PROXMINE = RAGE_JOAAT("REWARD_WEAPON_PROXMINE"),
REWARD_WEAPON_PUMPSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_PUMPSHOTGUN"),
REWARD_WEAPON_PUMPSHOTGUN_MK2 = RAGE_JOAAT("REWARD_WEAPON_PUMPSHOTGUN_MK2"),
REWARD_WEAPON_RAILGUN = RAGE_JOAAT("REWARD_WEAPON_RAILGUN"),
REWARD_WEAPON_RAYCARBINE = RAGE_JOAAT("REWARD_WEAPON_RAYCARBINE"),
REWARD_WEAPON_RAYMINIGUN = RAGE_JOAAT("REWARD_WEAPON_RAYMINIGUN"),
REWARD_WEAPON_RAYPISTOL = RAGE_JOAAT("REWARD_WEAPON_RAYPISTOL"),
REWARD_WEAPON_REVOLVER = RAGE_JOAAT("REWARD_WEAPON_REVOLVER"),
REWARD_WEAPON_REVOLVER_MK2 = RAGE_JOAAT("REWARD_WEAPON_REVOLVER_MK2"),
REWARD_WEAPON_RPG = RAGE_JOAAT("REWARD_WEAPON_RPG"),
REWARD_WEAPON_SAWNOFFSHOTGUN = RAGE_JOAAT("REWARD_WEAPON_SAWNOFFSHOTGUN"),
REWARD_WEAPON_SMG = RAGE_JOAAT("REWARD_WEAPON_SMG"),
REWARD_WEAPON_SMG_MK2 = RAGE_JOAAT("REWARD_WEAPON_SMG_MK2"),
REWARD_WEAPON_SMOKEGRENADE = RAGE_JOAAT("REWARD_WEAPON_SMOKEGRENADE"),
REWARD_WEAPON_SNIPERRIFLE = RAGE_JOAAT("REWARD_WEAPON_SNIPERRIFLE"),
REWARD_WEAPON_SNSPISTOL = RAGE_JOAAT("REWARD_WEAPON_SNSPISTOL"),
REWARD_WEAPON_SNSPISTOL_MK2 = RAGE_JOAAT("REWARD_WEAPON_SNSPISTOL_MK2"),
REWARD_WEAPON_SPECIALCARBINE = RAGE_JOAAT("REWARD_WEAPON_SPECIALCARBINE"),
REWARD_WEAPON_SPECIALCARBINE_MK2 = RAGE_JOAAT("REWARD_WEAPON_SPECIALCARBINE_MK2"),
REWARD_WEAPON_STICKYBOMB = RAGE_JOAAT("REWARD_WEAPON_STICKYBOMB"),
REWARD_WEAPON_STONE_HATCHET = RAGE_JOAAT("REWARD_WEAPON_STONE_HATCHET"),
REWARD_WEAPON_STUNGUN = RAGE_JOAAT("REWARD_WEAPON_STUNGUN"),
REWARD_WEAPON_SWITCHBLADE = RAGE_JOAAT("REWARD_WEAPON_SWITCHBLADE"),
REWARD_WEAPON_VINTAGEPISTOL = RAGE_JOAAT("REWARD_WEAPON_VINTAGEPISTOL"),
REWARD_WEAPON_WRENCH = RAGE_JOAAT("REWARD_WEAPON_WRENCH")
};

View File

@ -9,47 +9,48 @@ namespace rage
class CObject : public fwEntity
{
public:
}; //Size: 0x018C
};//Size: 0x018C
class CPedFactory
{
public:
virtual ~CPedFactory() = default;
class CPed* m_local_ped; //0x0008
}; //Size: 0x0010
class CPed* m_local_ped;//0x0008
}; //Size: 0x0010
//CUSTOM CLASS TO IMPROVE R* SHIT CLASS STRUCTURE
class CEntityHandle {
class CEntityHandle
{
public:
class fwEntity* m_entity_ptr; //0x0000
int32_t m_handle; //0x0008
char pad_000C[4]; //0x000C
}; //Size: 0x0010
class fwEntity* m_entity_ptr;//0x0000
int32_t m_handle; //0x0008
char pad_000C[4]; //0x000C
}; //Size: 0x0010
static_assert(sizeof(CEntityHandle) == 0x10, "CEntityHandle is not properly sized");
class CObjectHandle
{
public:
class CObject* m_object; //0x0000
int32_t m_handle; //0x0008
char pad_000C[4]; //0x000C
}; //Size: 0x0010
class CObject* m_object;//0x0000
int32_t m_handle; //0x0008
char pad_000C[4]; //0x000C
}; //Size: 0x0010
static_assert(sizeof(CObjectHandle) == 0x10, "CObjectHandle is not properly sized");
class CObjectList
{
public:
class CEntityHandle m_objects[2300]; //0x0000
}; //Size: 0x8FC0
class CEntityHandle m_objects[2300];//0x0000
}; //Size: 0x8FC0
class CObjectInterface
{
public:
char pad_0000[344]; //0x0000
class CObjectList* m_object_list; //0x0158
int32_t m_max_objects; //0x0160
char pad_0164[4]; //0x0164
int32_t m_cur_objects; //0x0168
char pad_0000[344]; //0x0000
class CObjectList* m_object_list;//0x0158
int32_t m_max_objects; //0x0160
char pad_0164[4]; //0x0164
int32_t m_cur_objects; //0x0168
rage::fwEntity* get_object(const int& index)
{
@ -57,32 +58,32 @@ namespace rage
return m_object_list->m_objects[index].m_entity_ptr;
return nullptr;
}
}; //Size: 0x016C
};//Size: 0x016C
class CPedHandle
{
public:
class CPed* m_ped; //0x0000
class CPed* m_ped;//0x0000
int32_t m_handle; //0x0008
char pad_000C[4]; //0x000C
}; //Size: 0x0010
}; //Size: 0x0010
static_assert(sizeof(CPedHandle) == 0x10, "CPedHandle is not properly sized");
class CPedList
{
public:
//CHANGED FROM CPedHandle
class CEntityHandle m_peds[256]; //0x0000
}; //Size: 0x1000
class CEntityHandle m_peds[256];//0x0000
}; //Size: 0x1000
class CPedInterface
{
public:
char pad_0000[256]; //0x0000
class CPedList* m_ped_list; //0x0100
int32_t m_max_peds; //0x0108
char pad_010C[4]; //0x010C
int32_t m_cur_peds; //0x0110
char pad_0000[256]; //0x0000
class CPedList* m_ped_list;//0x0100
int32_t m_max_peds; //0x0108
char pad_010C[4]; //0x010C
int32_t m_cur_peds; //0x0110
fwEntity* get_ped(const int& index)
{
@ -90,32 +91,32 @@ namespace rage
return m_ped_list->m_peds[index].m_entity_ptr;
return nullptr;
}
}; //Size: 0x0114
};//Size: 0x0114
class CVehicleHandle
{
public:
class CAutomobile* m_vehicle; //0x0000
int32_t m_handle; //0x0008
char pad_000C[4]; //0x000C
}; //Size: 0x0010
class CAutomobile* m_vehicle;//0x0000
int32_t m_handle; //0x0008
char pad_000C[4]; //0x000C
}; //Size: 0x0010
static_assert(sizeof(CVehicleHandle) == 0x10, "CVehicleHandle is not properly sized");
class CVehicleList
{
public:
//CHANGED FROM CVehicleHandle
class CEntityHandle m_vehicles[300]; //0x0000
}; //Size: 0x12C0
class CEntityHandle m_vehicles[300];//0x0000
}; //Size: 0x12C0
class CVehicleInterface
{
public:
char pad_0000[384]; //0x0000
class CVehicleList* m_vehicle_list; //0x0180
int32_t m_max_vehicles; //0x0188
char pad_018C[4]; //0x018C
int32_t m_cur_vehicles; //0x0190
char pad_0000[384]; //0x0000
class CVehicleList* m_vehicle_list;//0x0180
int32_t m_max_vehicles; //0x0188
char pad_018C[4]; //0x018C
int32_t m_cur_vehicles; //0x0190
fwEntity* get_vehicle(const int& index)
{
@ -123,17 +124,17 @@ namespace rage
return m_vehicle_list->m_vehicles[index].m_entity_ptr;
return nullptr;
}
}; //Size: 0x0194
};//Size: 0x0194
class CReplayInterface
{
public:
char pad_0000[16]; //0x0000
class CVehicleInterface* m_vehicle_interface; //0x0010
class CPedInterface* m_ped_interface; //0x0018
char pad_0020[8]; //0x0020
class CObjectInterface* m_object_interface; //0x0028
}; //Size: 0x0030
char pad_0000[16]; //0x0000
class CVehicleInterface* m_vehicle_interface;//0x0010
class CPedInterface* m_ped_interface; //0x0018
char pad_0020[8]; //0x0020
class CObjectInterface* m_object_interface; //0x0028
}; //Size: 0x0030
}
#pragma pack(pop)

View File

@ -1,5 +1,7 @@
#include "script_handler.hpp"
#include "pointers.hpp"
#include <network/CNetworkPlayerMgr.hpp>
int CGameScriptHandlerNetComponent::get_participant_index(CNetGamePlayer* player)

View File

@ -1,9 +1,10 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "node_list.hpp"
#include "script_id.hpp"
#include <cstdint>
#pragma pack(push, 1)
namespace rage
{
@ -16,10 +17,10 @@ namespace rage
class scriptResourceEntry
{
public:
scriptResource* m_data; // 0x00
std::uint32_t m_unk; // 0x04
char m_padding[0x0C]; // 0x0C
scriptResourceEntry* m_next; // 0x18
scriptResource* m_data; // 0x00
std::uint32_t m_unk; // 0x04
char m_padding[0x0C]; // 0x0C
scriptResourceEntry* m_next;// 0x18
};
class scriptHandlerNetComponent
@ -28,7 +29,7 @@ namespace rage
virtual ~scriptHandlerNetComponent() = default;
public:
scriptHandler* m_script_handler; // 0x08
scriptHandler* m_script_handler;// 0x08
};
class scriptHandler
@ -37,65 +38,66 @@ namespace rage
class atDScriptObjectNode : public atDNode<scriptHandlerObject*>
{
};
public:
virtual ~scriptHandler() = default; // 0 (0x00)
virtual ~scriptHandler() = default;// 0 (0x00)
virtual bool _0x08() = 0; // 1 (0x08)
virtual bool _0x08() = 0;// 1 (0x08)
virtual void _0x10() = 0; // 2 (0x10)
virtual void _0x10() = 0;// 2 (0x10)
virtual void cleanup_objects() = 0; // 3 (0x18)
virtual void cleanup_objects() = 0;// 3 (0x18)
virtual scriptId* _0x20() = 0; // 4 (0x20)
virtual scriptId* _0x20() = 0;// 4 (0x20)
virtual scriptId* get_id() = 0; // 5 (0x28)
virtual scriptId* get_id() = 0;// 5 (0x28)
// Returns whether the script handler belongs to a networked script.
virtual bool is_networked() = 0; // 6 (0x30)
virtual bool is_networked() = 0;// 6 (0x30)
// Initializes the network component for the script handler.
virtual void init_net_component() = 0; // 7 (0x38)
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)
virtual void reset_net_component() = 0;// 8 (0x40)
// Destroys the script handler.
virtual bool destroy() = 0; // 9 (0x48)
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)
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 _0x58(void*) = 0;// 11 (0x58)
virtual void register_resource(scriptResource*, void*) = 0; // 12 (0x60)
virtual void register_resource(scriptResource*, void*) = 0;// 12 (0x60)
virtual void _0x68() = 0; // 13 (0x68)
virtual void _0x68() = 0;// 13 (0x68)
virtual void _0x70() = 0; // 14 (0x70)
virtual void _0x70() = 0;// 14 (0x70)
virtual void _0x78() = 0; // 15 (0x78)
virtual void _0x78() = 0;// 15 (0x78)
virtual void _0x80() = 0; // 16 (0x80)
virtual void _0x80() = 0;// 16 (0x80)
virtual void _0x88() = 0; // 17 (0x88)
virtual void _0x88() = 0;// 17 (0x88)
virtual void _0x90() = 0; // 18 (0x90)
virtual void _0x90() = 0;// 18 (0x90)
virtual void _0x98() = 0; // 19 (0x98)
virtual void _0x98() = 0;// 19 (0x98)
public:
void* m_0x08; // 0x08
void* m_0x10; // 0x10
scrThread* m_script_thread; // 0x18
atDList<atDScriptObjectNode> 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
void* m_0x08; // 0x08
void* m_0x10; // 0x10
scrThread* m_script_thread; // 0x18
atDList<atDScriptObjectNode> 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
};
class scriptHandlerMgr
@ -104,41 +106,41 @@ namespace rage
virtual ~scriptHandlerMgr() = default;
// Initializes some scripting-related pools.
virtual bool initialize() = 0; // 1 (0x08)
virtual bool initialize() = 0;// 1 (0x08)
// Called every tick.
virtual void _0x10() = 0; // 2 (0x10)
virtual void _0x10() = 0;// 2 (0x10)
// Frees some scripting-related pools.
virtual void shutdown() = 0; // 3 (0x18)
virtual void shutdown() = 0;// 3 (0x18)
virtual void _0x20() = 0; // 4 (0x20)
virtual void _0x28() = 0; // 5 (0x28)
virtual void _0x30() = 0; // 6 (0x30)
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)
virtual void _0x38(scrThread*) = 0;// 7 (0x38)
// Allocates and constructs a script handler.
virtual scriptHandler* create_script_handler() = 0; // 8 (0x40)
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)
virtual scriptHandler* get_script_handler(scriptId*) = 0;// 9 (0x48)
// Attaches a script thread.
virtual void attach_thread(scrThread*) = 0; // 10 (0x50)
virtual void attach_thread(scrThread*) = 0;// 10 (0x50)
// Detaches a script thread.
virtual void detach_thread(scrThread*) = 0; // 11 (0x58)
virtual void detach_thread(scrThread*) = 0;// 11 (0x58)
// Called when a player joins.
virtual void on_player_join(netPlayer*) = 0; // 12 (0x60)
virtual void on_player_join(netPlayer*) = 0;// 12 (0x60)
// Called when a player leaves.
virtual void on_player_left(netPlayer*) = 0; // 13 (0x68)
virtual void on_player_left(netPlayer*) = 0;// 13 (0x68)
virtual std::int32_t _0x70() = 0; // 14 (0x70)
virtual void* _0x78() = 0; // 15 (0x78)
virtual std::int32_t _0x70() = 0;// 14 (0x70)
virtual void* _0x78() = 0;// 15 (0x78)
public:
char pad_0008[104];
};
@ -147,39 +149,39 @@ namespace rage
class CGameScriptHandler : public rage::scriptHandler
{
public:
CGameScriptId m_script_id; // 0x60
CGameScriptId m_script_id;// 0x60
};
class CGameScriptHandlerNetwork : public CGameScriptHandler
{
public:
std::uint8_t m_0xA0; // 0xA0
std::uint8_t m_0xA1; // 0xA1
std::uint8_t m_0xA2; // 0xA2
std::uint8_t m_0xA3; // 0xA3
std::uint8_t m_num_players; // 0xA4
std::uint8_t m_0xA5; // 0xA5
std::uint8_t m_0xA6; // 0xA6
std::uint8_t m_0xA7; // 0xA7
std::uint8_t m_0xA8; // 0xA8
std::uint8_t m_0xA9; // 0xA9
std::uint8_t m_0xAA; // 0xAA
std::uint8_t m_0xAB; // 0xAB
std::uint8_t m_0xAC; // 0xAC
std::uint8_t m_0xAD; // 0xAD
std::uint8_t m_0xAE; // 0xAE
std::uint8_t m_0xAF; // 0xAF
std::uint8_t m_0xA0; // 0xA0
std::uint8_t m_0xA1; // 0xA1
std::uint8_t m_0xA2; // 0xA2
std::uint8_t m_0xA3; // 0xA3
std::uint8_t m_num_players;// 0xA4
std::uint8_t m_0xA5; // 0xA5
std::uint8_t m_0xA6; // 0xA6
std::uint8_t m_0xA7; // 0xA7
std::uint8_t m_0xA8; // 0xA8
std::uint8_t m_0xA9; // 0xA9
std::uint8_t m_0xAA; // 0xAA
std::uint8_t m_0xAB; // 0xAB
std::uint8_t m_0xAC; // 0xAC
std::uint8_t m_0xAD; // 0xAD
std::uint8_t m_0xAE; // 0xAE
std::uint8_t m_0xAF; // 0xAF
};
class CScriptParticipant
{
public:
char pad_0000[16]; //0x0000
class CNetGamePlayer* m_net_game_player; //0x0010
char pad_0018[2]; //0x0018
int16_t m_participant_index; //0x001A
char pad_001C[12]; //0x001C
}; //Size: 0x0028
char pad_0000[16]; //0x0000
class CNetGamePlayer* m_net_game_player;//0x0010
char pad_0018[2]; //0x0018
int16_t m_participant_index; //0x001A
char pad_001C[12]; //0x001C
}; //Size: 0x0028
static_assert(sizeof(CScriptParticipant) == 0x28);
class CGameScriptHandlerNetComponent
@ -189,7 +191,7 @@ public:
virtual bool _0x08(void*) = 0;
virtual void _0x10(CNetGamePlayer*) = 0; // creates a scriptId?
virtual void _0x10(CNetGamePlayer*) = 0;// creates a scriptId?
virtual void* player_left(CNetGamePlayer* player) = 0;
@ -199,7 +201,7 @@ public:
virtual void* player_joined_ack(void**, void* msg_ctx) = 0;
virtual bool _0x38(void*, void*) = 0; // join_script?
virtual bool _0x38(void*, void*) = 0;// join_script?
virtual void* _0x40(void*, void*) = 0;
@ -221,7 +223,7 @@ public:
virtual void* _0x88(void*, void*) = 0;
virtual void* _0x90(void*, void*) = 0; // HOST_MIGRATION_FAILED
virtual void* _0x90(void*, void*) = 0;// HOST_MIGRATION_FAILED
virtual bool _0x98(void*, void*) = 0;
@ -235,41 +237,41 @@ public:
virtual bool register_player_broadcast_data(int a1, int size, bool a3) = 0;
virtual bool _0xC8() = 0; // something to do to joining session
virtual bool _0xC8() = 0;// something to do to joining session
virtual bool _0xD0() = 0;
virtual bool add_player_to_script(CNetGamePlayer* player, short* outParticipantID, short* outSlot, int* outFailReason) = 0;
virtual bool add_player_to_script_internal(CNetGamePlayer* player, short participantID, short slot) = 0; // player aka participant
virtual bool add_player_to_script_internal(CNetGamePlayer* player, short participantID, short slot) = 0;// player aka participant
virtual bool remove_player_from_script(CNetGamePlayer* player) = 0;
virtual void* player_left_impl(CNetGamePlayer*, bool) = 0;
virtual bool do_host_migration(CNetGamePlayer* player, short host_token, bool unk) = 0; // aka _0xF8
virtual bool do_host_migration(CNetGamePlayer* player, short host_token, bool unk) = 0;// aka _0xF8
virtual void* leave_from_script() = 0; // calls above function with player = nullptr
virtual void* leave_from_script() = 0;// calls above function with player = nullptr
virtual bool _0x108() = 0;
virtual void* _0x110() = 0;
virtual bool _0x118() = 0; // related to above function
virtual bool _0x118() = 0;// related to above function
CGameScriptHandler* m_script_handler; //0x0008
char pad_0010[32]; //0x0010
class CScriptParticipant* m_host; //0x0030
int16_t m_local_participant_index; //0x0038
char pad_003A[6]; //0x003A
uint32_t m_participant_bitset; //0x0040
char pad_0044[36]; //0x0044
class CScriptParticipant* m_participants[32]; //0x0068
char pad_0168[12]; //0x0168
int16_t m_num_participants; //0x0174
char pad_0176[28]; //0x0176
uint8_t m_host_migration_flags; //0x0192
char pad_0193[29]; //0x0193
CGameScriptHandler* m_script_handler; //0x0008
char pad_0010[32]; //0x0010
class CScriptParticipant* m_host; //0x0030
int16_t m_local_participant_index; //0x0038
char pad_003A[6]; //0x003A
uint32_t m_participant_bitset; //0x0040
char pad_0044[36]; //0x0044
class CScriptParticipant* m_participants[32];//0x0068
char pad_0168[12]; //0x0168
int16_t m_num_participants; //0x0174
char pad_0176[28]; //0x0176
uint8_t m_host_migration_flags; //0x0192
char pad_0193[29]; //0x0193
int get_participant_index(CNetGamePlayer* player);
bool is_player_a_participant(CNetGamePlayer* player);
@ -277,7 +279,7 @@ public:
inline bool is_local_player_host()
{
if (!m_host)
return true; // or return false?
return true;// or return false?
return m_host->m_participant_index == m_local_participant_index;
}
@ -299,43 +301,43 @@ public:
m_host_migration_flags &= ~(1 << 7);
}
}; //Size: 0x01B0
};//Size: 0x01B0
static_assert(sizeof(CGameScriptHandlerNetComponent) == 0x1B0);
class CRemoteScriptInfo : public CGameScriptId
{
public:
uint32_t m_participants; //0x0040
char pad_0044[4]; //0x0044
class CNetGamePlayer* m_host; //0x0048
uint32_t m_timestamp_2; //0x0050
uint16_t m_host_token; //0x0054
uint8_t m_reserved_peds; //0x0056
uint32_t m_participants; //0x0040
char pad_0044[4]; //0x0044
class CNetGamePlayer* m_host;//0x0048
uint32_t m_timestamp_2; //0x0050
uint16_t m_host_token; //0x0054
uint8_t m_reserved_peds; //0x0056
uint8_t m_reserved_vehicles; //0x0057
uint8_t m_reserved_objects; //0x0058
uint8_t m_reserved_unk1; //0x0059
uint8_t m_reserved_unk2; //0x005A
uint8_t m_reserved_unk3; //0x005B
uint8_t m_reserved_unk4; //0x005C
char pad_005D[3]; //0x005D
}; //Size: 0x0060
uint8_t m_reserved_objects; //0x0058
uint8_t m_reserved_unk1; //0x0059
uint8_t m_reserved_unk2; //0x005A
uint8_t m_reserved_unk3; //0x005B
uint8_t m_reserved_unk4; //0x005C
char pad_005D[3]; //0x005D
}; //Size: 0x0060
static_assert(sizeof(CRemoteScriptInfo) == 0x60);
class CGameScriptHandlerMgr : public rage::scriptHandlerMgr
{
public:
char pad_0070[56]; //0x0070
class CRemoteScriptInfo m_remote_script_infos[320]; //0x00A8
char pad_78A8[4]; //0x78A8
uint32_t m_remote_script_start_idx; //0x78AC
uint32_t m_remote_script_count; //0x78B0
char pad_78B4[4]; //0x78B4
class CRemoteScriptInfo m_detached_remote_script_infos[64]; //0x78B8
char pad_90B8[4]; //0x90B8
uint32_t m_detached_remote_script_start_idx; //0x90BC
uint32_t m_detached_remote_script_count; //0x90C0
char pad_90C4[28]; //0x90C4
}; //Size: 0x90E0
char pad_0070[56]; //0x0070
class CRemoteScriptInfo m_remote_script_infos[320]; //0x00A8
char pad_78A8[4]; //0x78A8
uint32_t m_remote_script_start_idx; //0x78AC
uint32_t m_remote_script_count; //0x78B0
char pad_78B4[4]; //0x78B4
class CRemoteScriptInfo m_detached_remote_script_infos[64];//0x78B8
char pad_90B8[4]; //0x90B8
uint32_t m_detached_remote_script_start_idx; //0x90BC
uint32_t m_detached_remote_script_count; //0x90C0
char pad_90C4[28]; //0x90C4
}; //Size: 0x90E0
static_assert(sizeof(CGameScriptHandlerMgr) == 0x90E0);

View File

@ -1,71 +1,98 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "joaat.hpp"
#include <cstdint>
#pragma pack(push, 1)
namespace rage
{
class scriptIdBase
{
public:
virtual ~scriptIdBase() = default; // 0 (0x00)
virtual ~scriptIdBase() = default;// 0 (0x00)
// Assumes the script thread's identity.
virtual void assume_thread_identity(scrThread*) {}; // 1 (0x08)
virtual void assume_thread_identity(scrThread*){};// 1 (0x08)
// Returns whether the hash of the script id is valid.
virtual bool is_valid() { return false; }; // 2 (0x10)
virtual bool is_valid()
{
return false;
};// 2 (0x10)
// Gets the hash of the script id.
virtual joaat_t* get_hash(joaat_t* out) { return 0; }; // 3 (0x18)
virtual joaat_t* get_hash(joaat_t* out)
{
return 0;
};// 3 (0x18)
// Gets an unknown value from the script id.
virtual std::uint32_t* get_hash2(std::uint32_t* out) { return 0; }; // 4 (0x20)
virtual std::uint32_t* get_hash2(std::uint32_t* out)
{
return 0;
};// 4 (0x20)
// Gets the name of the script id.
virtual const char* get_name() { return nullptr; }; // 5 (0x28)
virtual const char* get_name()
{
return nullptr;
};// 5 (0x28)
// Serializes the script id from the buffer.
virtual void deserialize(datBitBuffer* buffer) {}; // 6 (0x30)
virtual void deserialize(datBitBuffer* buffer){};// 6 (0x30)
// Serializes the script id to the buffer.
virtual void serialize(datBitBuffer* buffer) {}; // 7 (0x38)
virtual void serialize(datBitBuffer* buffer){};// 7 (0x38)
// Calculates some information with the position hash & instance id.
virtual std::uint32_t _0x40() { return 0; }; // 8 (0x40)
virtual std::uint32_t _0x40()
{
return 0;
};// 8 (0x40)
// Calls _0x40 and returns it's value added to another value.
virtual std::uint32_t _0x48() { return 0; }; // 9 (0x48)
virtual std::uint32_t _0x48()
{
return 0;
};// 9 (0x48)
// Logs some information about the script id.
virtual void log_information(netLoggingInterface* logger) {}; // 10 (0x50)
// Copies the information of other to this object.
virtual void copy_data(scriptIdBase *other) {} // 11 (0x58)
// Returns whether the other script id is equal.
virtual bool operator==(scriptIdBase*) { return false; }; // 12 (0x60)
virtual void log_information(netLoggingInterface* logger){};// 10 (0x50)
virtual bool _0x68(void*) { return false; }; // 13 (0x68)
// Copies the information of other to this object.
virtual void copy_data(scriptIdBase* other)
{
}// 11 (0x58)
// Returns whether the other script id is equal.
virtual bool operator==(scriptIdBase*)
{
return false;
};// 12 (0x60)
virtual bool _0x68(void*)
{
return false;
};// 13 (0x68)
};
class scriptId : public scriptIdBase
{
public:
joaat_t m_hash; // 0x08
char m_name[0x20]; // 0x0C
joaat_t m_hash; // 0x08
char m_name[0x20];// 0x0C
};
}
class CGameScriptId : public rage::scriptId
{
public:
char m_padding[0x04]; // 0x2C
std::int32_t m_timestamp; // 0x30
std::int32_t m_position_hash; // 0x34
std::int32_t m_instance_id; // 0x38
std::int32_t m_unk; // 0x3C
char m_padding[0x04]; // 0x2C
std::int32_t m_timestamp; // 0x30
std::int32_t m_position_hash;// 0x34
std::int32_t m_instance_id; // 0x38
std::int32_t m_unk; // 0x3C
};
static_assert(sizeof(CGameScriptId) == 0x40);

View File

@ -1,33 +1,34 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "base.hpp"
#include "fwddec.hpp"
#include "joaat.hpp"
#include "script_id.hpp"
#include <cstdint>
#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
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
{
@ -101,17 +102,17 @@ namespace rage
class scrProgramTableEntry
{
public:
scrProgram* m_program; // 0x00
char m_Pad1[0x04]; // 0x08
joaat_t m_hash; // 0x0C
scrProgram* m_program;// 0x00
char m_Pad1[0x04]; // 0x08
joaat_t m_hash; // 0x0C
};
class scrProgramTable
{
public:
scrProgramTableEntry* m_data; // 0x00
char m_padding[0x10]; // 0x08
std::uint32_t m_size; // 0x18
scrProgramTableEntry* m_data;// 0x00
char m_padding[0x10]; // 0x08
std::uint32_t m_size; // 0x18
std::list<joaat_t> all_script_hashes()
{
@ -170,4 +171,3 @@ namespace rage
static_assert(sizeof(scrProgramTable) == 0x1C);
}
#pragma pack(pop)

View File

@ -1,9 +1,10 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "joaat.hpp"
#include "tls_context.hpp"
#include <cstdint>
class CGameScriptHandlerNetComponent;
namespace rage
@ -20,64 +21,65 @@ namespace rage
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
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);
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; // 4 (0x20)
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; // 4 (0x20)
inline static scrThread* get()
{
return rage::tlsContext::get()->m_script_thread;
}
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
std::uint32_t m_name_hash; // 0xCC
char m_name[0x40]; // 0xD4
scriptHandler* m_handler; // 0x114
CGameScriptHandlerNetComponent* m_net_component; // 0x11C
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
std::uint32_t m_name_hash; // 0xCC
char m_name[0x40]; // 0xD4
scriptHandler* m_handler; // 0x114
CGameScriptHandlerNetComponent* m_net_component;// 0x11C
};
}
class GtaThread : public rage::scrThread
{
public:
rage::joaat_t m_script_hash; // 0x120
char m_padding3[0x14]; // 0x124
std::int32_t m_instance_id; // 0x138
char m_padding4[0x04]; // 0x13C
std::uint8_t m_flag1; // 0x140
bool m_safe_for_network_game; // 0x141
char m_padding5[0x02]; // 0x142
bool m_is_minigame_script; // 0x144
char m_padding6[0x02]; // 0x145
bool m_can_be_paused; // 0x147
bool m_can_remove_blips_from_other_scripts; // 0x148
char m_padding7[0x0F]; // 0x149
rage::joaat_t m_script_hash; // 0x120
char m_padding3[0x14]; // 0x124
std::int32_t m_instance_id; // 0x138
char m_padding4[0x04]; // 0x13C
std::uint8_t m_flag1; // 0x140
bool m_safe_for_network_game; // 0x141
char m_padding5[0x02]; // 0x142
bool m_is_minigame_script; // 0x144
char m_padding6[0x02]; // 0x145
bool m_can_be_paused; // 0x147
bool m_can_remove_blips_from_other_scripts;// 0x148
char m_padding7[0x0F]; // 0x149
};
static_assert(sizeof(GtaThread) == 0x160);

View File

@ -1,3 +1,4 @@
#pragma once
#include "fwddec.hpp"
#include <rage/sysMemAllocator.hpp>

View File

@ -1,17 +1,18 @@
#pragma once
#include <intrin.h>
#include "fwddec.hpp"
#include <intrin.h>
namespace rage
{
class tlsContext
{
public:
char m_padding1[0xB8]; // 0x00
sysMemAllocator* m_allocator; // 0xB8
char m_padding2[0x788]; // 0xD0
scrThread* m_script_thread; // 0x848
bool m_is_script_thread_active; // 0x850
char m_padding1[0xB8]; // 0x00
sysMemAllocator* m_allocator; // 0xB8
char m_padding2[0x788]; // 0xD0
scrThread* m_script_thread; // 0x848
bool m_is_script_thread_active;// 0x850
static tlsContext* get()
{

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff