refactor!: Replace premake5 with CMake. (#551)

Co-authored-by: tupoy-ya <tupoy-ya@users.noreply.github.com>
This commit is contained in:
tupoy-ya
2022-11-08 21:08:58 +00:00
committed by GitHub
parent 146c2b8ce8
commit 1087146e56
340 changed files with 19298 additions and 19449 deletions

160
src/gta/PickupRewards.h Normal file
View File

@ -0,0 +1,160 @@
#pragma once
#include "natives.hpp"
#include "gta\joaat.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_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")
};

3141
src/gta/VehicleValues.h Normal file

File diff suppressed because it is too large Load Diff

829
src/gta/Vehicles.h Normal file
View File

@ -0,0 +1,829 @@
#pragma once
#include "gta\joaat.hpp"
#include "natives.hpp"
enum Boats : Hash
{
VEHICLE_DINGHY = RAGE_JOAAT("DINGHY"),
VEHICLE_DINGHY2 = RAGE_JOAAT("DINGHY2"),
VEHICLE_DINGHY3 = RAGE_JOAAT("DINGHY3"),
VEHICLE_DINGHY4 = RAGE_JOAAT("DINGHY4"),
VEHICLE_JETMAX = RAGE_JOAAT("JETMAX"),
VEHICLE_MARQUIS = RAGE_JOAAT("MARQUIS"),
VEHICLE_SEASHARK = RAGE_JOAAT("SEASHARK"),
VEHICLE_SEASHARK2 = RAGE_JOAAT("SEASHARK2"),
VEHICLE_SEASHARK3 = RAGE_JOAAT("SEASHARK3"),
VEHICLE_SPEEDER = RAGE_JOAAT("SPEEDER"),
VEHICLE_SPEEDER2 = RAGE_JOAAT("SPEEDER2"),
VEHICLE_SQUALO = RAGE_JOAAT("SQUALO"),
VEHICLE_SUBMERSIBLE = RAGE_JOAAT("SUBMERSIBLE"),
VEHICLE_SUBMERSIBLE2 = RAGE_JOAAT("SUBMERSIBLE2"),
VEHICLE_SUNTRAP = RAGE_JOAAT("SUNTRAP"),
VEHICLE_TORO = RAGE_JOAAT("TORO"),
VEHICLE_TORO2 = RAGE_JOAAT("TORO2"),
VEHICLE_TROPIC = RAGE_JOAAT("TROPIC"),
VEHICLE_TROPIC2 = RAGE_JOAAT("TROPIC2"),
VEHICLE_TUG = RAGE_JOAAT("TUG"),
};
enum Commericals : Hash
{
VEHICLE_BENSON = RAGE_JOAAT("BENSON"),
VEHICLE_BIFF = RAGE_JOAAT("BIFF"),
VEHICLE_HAULER = RAGE_JOAAT("HAULER"),
VEHICLE_HAULER2 = RAGE_JOAAT("HAULER2"),
VEHICLE_MULE = RAGE_JOAAT("MULE"),
VEHICLE_MULE2 = RAGE_JOAAT("MULE2"),
VEHICLE_MULE3 = RAGE_JOAAT("MULE3"),
VEHICLE_MULE4 = RAGE_JOAAT("MULE4"),
VEHICLE_PACKER = RAGE_JOAAT("PACKER"),
VEHICLE_PHANTOM = RAGE_JOAAT("PHANTOM"),
VEHICLE_PHANTOM2 = RAGE_JOAAT("PHANTOM2"),
VEHICLE_PHANTOM3 = RAGE_JOAAT("PHANTOM3"),
VEHICLE_POUNDER = RAGE_JOAAT("POUNDER"),
VEHICLE_POUNDER2 = RAGE_JOAAT("POUNDER2"),
VEHICLE_STOCKADE = RAGE_JOAAT("STOCKADE"),
VEHICLE_STOCKADE3 = RAGE_JOAAT("STOCKADE3"),
VEHICLE_TERBYTE = RAGE_JOAAT("TERBYTE"),
};
enum Compacts : Hash
{
VEHICLE_BLISTA = RAGE_JOAAT("BLISTA"),
VEHICLE_BRIOSO = RAGE_JOAAT("BRIOSO"),
VEHICLE_DILETTANTE = RAGE_JOAAT("DILETTANTE"),
VEHICLE_DILETTANTE2 = RAGE_JOAAT("DILETTANTE2"),
VEHICLE_ISSI2 = RAGE_JOAAT("ISSI2"),
VEHICLE_ISSI3 = RAGE_JOAAT("ISSI3"),
VEHICLE_PANTO = RAGE_JOAAT("PANTO"),
VEHICLE_PRAIRIE = RAGE_JOAAT("PRAIRIE"),
VEHICLE_RHAPSODY = RAGE_JOAAT("RHAPSODY"),
};
enum Coupes : Hash
{
VEHICLE_COGCABRIO = RAGE_JOAAT("COGCABRIO"),
VEHICLE_EXEMPLAR = RAGE_JOAAT("EXEMPLAR"),
VEHICLE_F620 = RAGE_JOAAT("F620"),
VEHICLE_FELON = RAGE_JOAAT("FELON"),
VEHICLE_FELON2 = RAGE_JOAAT("FELON2"),
VEHICLE_JACKAL = RAGE_JOAAT("JACKAL"),
VEHICLE_ORACLE = RAGE_JOAAT("ORACLE"),
VEHICLE_ORACLE2 = RAGE_JOAAT("ORACLE2"),
VEHICLE_SENTINEL = RAGE_JOAAT("SENTINEL"),
VEHICLE_SENTINEL2 = RAGE_JOAAT("SENTINEL2"),
VEHICLE_WINDSOR = RAGE_JOAAT("WINDSOR"),
VEHICLE_WINDSOR2 = RAGE_JOAAT("WINDSOR2"),
VEHICLE_ZION = RAGE_JOAAT("ZION"),
VEHICLE_ZION2 = RAGE_JOAAT("ZION2"),
};
enum Bikes : Hash
{
VEHICLE_BMX = RAGE_JOAAT("BMX"),
VEHICLE_CRUISER = RAGE_JOAAT("CRUISER"),
VEHICLE_FIXTER = RAGE_JOAAT("FIXTER"),
VEHICLE_SCORCHER = RAGE_JOAAT("SCORCHER"),
VEHICLE_TRIBIKE = RAGE_JOAAT("TRIBIKE"),
VEHICLE_TRIBIKE2 = RAGE_JOAAT("TRIBIKE2"),
VEHICLE_TRIBIKE3 = RAGE_JOAAT("TRIBIKE3"),
};
enum Emergency : Hash
{
VEHICLE_AMBULANCE = RAGE_JOAAT("AMBULANCE"),
VEHICLE_FBI = RAGE_JOAAT("FBI"),
VEHICLE_FBI2 = RAGE_JOAAT("FBI2"),
VEHICLE_FIRETRUK = RAGE_JOAAT("FIRETRUK"),
VEHICLE_LGUARD = RAGE_JOAAT("LGUARD"),
VEHICLE_PBUS = RAGE_JOAAT("PBUS"),
VEHICLE_POLICE = RAGE_JOAAT("POLICE"),
VEHICLE_POLICE2 = RAGE_JOAAT("POLICE2"),
VEHICLE_POLICE3 = RAGE_JOAAT("POLICE3"),
VEHICLE_POLICE4 = RAGE_JOAAT("POLICE4"),
VEHICLE_POLICEB = RAGE_JOAAT("POLICEB"),
VEHICLE_POLMAV = RAGE_JOAAT("POLMAV"),
VEHICLE_POLICEOLD1 = RAGE_JOAAT("POLICEOLD1"),
VEHICLE_POLICEOLD2 = RAGE_JOAAT("POLICEOLD2"),
VEHICLE_POLICET = RAGE_JOAAT("POLICET"),
VEHICLE_PRANGER = RAGE_JOAAT("PRANGER"),
VEHICLE_PREDATOR = RAGE_JOAAT("PREDATOR"),
VEHICLE_RIOT = RAGE_JOAAT("RIOT"),
VEHICLE_RIOT2 = RAGE_JOAAT("RIOT2"),
VEHICLE_SHERIFF = RAGE_JOAAT("SHERIFF"),
VEHICLE_SHERIFF2 = RAGE_JOAAT("SHERIFF2"),
};
enum Helicopters : Hash
{
VEHICLE_AKULA = RAGE_JOAAT("AKULA"),
VEHICLE_ANNIHILATOR = RAGE_JOAAT("ANNIHILATOR"),
VEHICLE_BUZZARD = RAGE_JOAAT("BUZZARD"),
VEHICLE_BUZZARD2 = RAGE_JOAAT("BUZZARD2"),
VEHICLE_CARGOBOB = RAGE_JOAAT("CARGOBOB"),
VEHICLE_CARGOBOB2 = RAGE_JOAAT("CARGOBOB2"),
VEHICLE_CARGOBOB3 = RAGE_JOAAT("CARGOBOB3"),
VEHICLE_CARGOBOB4 = RAGE_JOAAT("CARGOBOB4"),
VEHICLE_FROGGER = RAGE_JOAAT("FROGGER"),
VEHICLE_FROGGER2 = RAGE_JOAAT("FROGGER2"),
VEHICLE_HAVOK = RAGE_JOAAT("HAVOK"),
VEHICLE_HUNTER = RAGE_JOAAT("HUNTER"),
VEHICLE_MAVERICK = RAGE_JOAAT("MAVERICK"),
VEHICLE_SAVAGE = RAGE_JOAAT("SAVAGE"),
VEHICLE_SKYLIFT = RAGE_JOAAT("SKYLIFT"),
VEHICLE_SUPERVOLITO = RAGE_JOAAT("SUPERVOLITO"),
VEHICLE_SUPERVOLITO2 = RAGE_JOAAT("SUPERVOLITO2"),
VEHICLE_SWIFT = RAGE_JOAAT("SWIFT"),
VEHICLE_SWIFT2 = RAGE_JOAAT("SWIFT2"),
VEHICLE_VALKYRIE = RAGE_JOAAT("VALKYRIE"),
VEHICLE_VALKYRIE2 = RAGE_JOAAT("VALKYRIE2"),
VEHICLE_VOLATUS = RAGE_JOAAT("VOLATUS"),
};
enum Industrial : Hash
{
VEHICLE_BULLDOZER = RAGE_JOAAT("BULLDOZER"),
VEHICLE_CUTTER = RAGE_JOAAT("CUTTER"),
VEHICLE_DUMP = RAGE_JOAAT("DUMP"),
VEHICLE_FLATBED = RAGE_JOAAT("FLATBED"),
VEHICLE_GUARDIAN = RAGE_JOAAT("GUARDIAN"),
VEHICLE_HANDLER = RAGE_JOAAT("HANDLER"),
VEHICLE_MIXER = RAGE_JOAAT("MIXER"),
VEHICLE_MIXER2 = RAGE_JOAAT("MIXER2"),
VEHICLE_RUBBLE = RAGE_JOAAT("RUBBLE"),
VEHICLE_TIPTRUCK = RAGE_JOAAT("TIPTRUCK"),
VEHICLE_TIPTRUCK2 = RAGE_JOAAT("TIPTRUCK2"),
};
enum Military : Hash
{
VEHICLE_APC = RAGE_JOAAT("APC"),
VEHICLE_BARRACKS = RAGE_JOAAT("BARRACKS"),
VEHICLE_BARRACKS2 = RAGE_JOAAT("BARRACKS2"),
VEHICLE_BARRACKS3 = RAGE_JOAAT("BARRACKS3"),
VEHICLE_BARRAGE = RAGE_JOAAT("BARRAGE"),
VEHICLE_CHERNOBOG = RAGE_JOAAT("CHERNOBOG"),
VEHICLE_CRUSADER = RAGE_JOAAT("CRUSADER"),
VEHICLE_HALFTRACK = RAGE_JOAAT("HALFTRACK"),
VEHICLE_KHANJALI = RAGE_JOAAT("KHANJALI"),
VEHICLE_RHINO = RAGE_JOAAT("RHINO"),
VEHICLE_THRUSTER = RAGE_JOAAT("THRUSTER"),
VEHICLE_TRAILERSMALL2 = RAGE_JOAAT("TRAILERSMALL2"),
};
enum Motorcycles : Hash
{
VEHICLE_AKUMA = RAGE_JOAAT("AKUMA"),
VEHICLE_AVARUS = RAGE_JOAAT("AVARUS"),
VEHICLE_BAGGER = RAGE_JOAAT("BAGGER"),
VEHICLE_BATI = RAGE_JOAAT("BATI"),
VEHICLE_BATI2 = RAGE_JOAAT("BATI2"),
VEHICLE_BF400 = RAGE_JOAAT("BF400"),
VEHICLE_CARBONRS = RAGE_JOAAT("CARBONRS"),
VEHICLE_CHIMERA = RAGE_JOAAT("CHIMERA"),
VEHICLE_CLIFFHANGER = RAGE_JOAAT("CLIFFHANGER"),
VEHICLE_DAEMON = RAGE_JOAAT("DAEMON"),
VEHICLE_DAEMON2 = RAGE_JOAAT("DAEMON2"),
VEHICLE_DEFILER = RAGE_JOAAT("DEFILER"),
VEHICLE_DIABLOUS = RAGE_JOAAT("DIABLOUS"),
VEHICLE_DIABLOUS2 = RAGE_JOAAT("DIABLOUS2"),
VEHICLE_DOUBLE = RAGE_JOAAT("DOUBLE"),
VEHICLE_ENDURO = RAGE_JOAAT("ENDURO"),
VEHICLE_ESSKEY = RAGE_JOAAT("ESSKEY"),
VEHICLE_FAGGIO = RAGE_JOAAT("FAGGIO"),
VEHICLE_FAGGIO2 = RAGE_JOAAT("FAGGIO2"),
VEHICLE_FAGGIO3 = RAGE_JOAAT("FAGGIO3"),
VEHICLE_FCR = RAGE_JOAAT("FCR"),
VEHICLE_FCR2 = RAGE_JOAAT("FCR2"),
VEHICLE_GARGOYLE = RAGE_JOAAT("GARGOYLE"),
VEHICLE_HAKUCHOU = RAGE_JOAAT("HAKUCHOU"),
VEHICLE_HAKUCHOU2 = RAGE_JOAAT("HAKUCHOU2"),
VEHICLE_HEXER = RAGE_JOAAT("HEXER"),
VEHICLE_INNOVATION = RAGE_JOAAT("INNOVATION"),
VEHICLE_LECTRO = RAGE_JOAAT("LECTRO"),
VEHICLE_MANCHEZ = RAGE_JOAAT("MANCHEZ"),
VEHICLE_NEMESIS = RAGE_JOAAT("NEMESIS"),
VEHICLE_NIGHTBLADE = RAGE_JOAAT("NIGHTBLADE"),
VEHICLE_OPPRESSOR = RAGE_JOAAT("OPPRESSOR"),
VEHICLE_OPPRESSOR2 = RAGE_JOAAT("OPPRESSOR2"),
VEHICLE_PCJ = RAGE_JOAAT("PCJ"),
VEHICLE_RATBIKE = RAGE_JOAAT("RATBIKE"),
VEHICLE_RUFFIAN = RAGE_JOAAT("RUFFIAN"),
VEHICLE_SANCHEZ2 = RAGE_JOAAT("SANCHEZ2"),
VEHICLE_SANCTUS = RAGE_JOAAT("SANCTUS"),
VEHICLE_SHOTARO = RAGE_JOAAT("SHOTARO"),
VEHICLE_SOVEREIGN = RAGE_JOAAT("SOVEREIGN"),
VEHICLE_THRUST = RAGE_JOAAT("THRUST"),
VEHICLE_VADER = RAGE_JOAAT("VADER"),
VEHICLE_VINDICATOR = RAGE_JOAAT("VINDICATOR"),
VEHICLE_VORTEX = RAGE_JOAAT("VORTEX"),
VEHICLE_WOLFSBANE = RAGE_JOAAT("WOLFSBANE"),
VEHICLE_ZOMBIEA = RAGE_JOAAT("ZOMBIEA"),
VEHICLE_ZOMBIEB = RAGE_JOAAT("ZOMBIEB"),
};
enum Muscle : Hash
{
VEHICLE_BLADE = RAGE_JOAAT("BLADE"),
VEHICLE_BUCCANEER = RAGE_JOAAT("BUCCANEER"),
VEHICLE_BUCCANEER2 = RAGE_JOAAT("BUCCANEER2"),
VEHICLE_CHINO = RAGE_JOAAT("CHINO"),
VEHICLE_CHINO2 = RAGE_JOAAT("CHINO2"),
VEHICLE_COQUETTE3 = RAGE_JOAAT("COQUETTE3"),
VEHICLE_DOMINATOR = RAGE_JOAAT("DOMINATOR"),
VEHICLE_DOMINATOR2 = RAGE_JOAAT("DOMINATOR2"),
VEHICLE_DOMINATOR3 = RAGE_JOAAT("DOMINATOR3"),
VEHICLE_DUKES = RAGE_JOAAT("DUKES"),
VEHICLE_DUKES2 = RAGE_JOAAT("DUKES2"),
VEHICLE_ELLIE = RAGE_JOAAT("ELLIE"),
VEHICLE_FACTION = RAGE_JOAAT("FACTION"),
VEHICLE_FACTION2 = RAGE_JOAAT("FACTION2"),
VEHICLE_FACTION3 = RAGE_JOAAT("FACTION3"),
VEHICLE_GAUNTLET = RAGE_JOAAT("GAUNTLET"),
VEHICLE_GAUNTLET2 = RAGE_JOAAT("GAUNTLET2"),
VEHICLE_HERMES = RAGE_JOAAT("HERMES"),
VEHICLE_HOTKNIFE = RAGE_JOAAT("HOTKNIFE"),
VEHICLE_LURCHER = RAGE_JOAAT("LURCHER"),
VEHICLE_MOONBEAM = RAGE_JOAAT("MOONBEAM"),
VEHICLE_MOONBEAM2 = RAGE_JOAAT("MOONBEAM2"),
VEHICLE_NIGHTSHADE = RAGE_JOAAT("NIGHTSHADE"),
VEHICLE_PHOENIX = RAGE_JOAAT("PHOENIX"),
VEHICLE_PICADOR = RAGE_JOAAT("PICADOR"),
VEHICLE_RATLOADER = RAGE_JOAAT("RATLOADER"),
VEHICLE_RATLOADER2 = RAGE_JOAAT("RATLOADER2"),
VEHICLE_RUINER = RAGE_JOAAT("RUINER"),
VEHICLE_RUINER2 = RAGE_JOAAT("RUINER2"),
VEHICLE_RUINER3 = RAGE_JOAAT("RUINER3"),
VEHICLE_SABREGT = RAGE_JOAAT("SABREGT"),
VEHICLE_SABREGT2 = RAGE_JOAAT("SABREGT2"),
VEHICLE_SLAMVAN = RAGE_JOAAT("SLAMVAN"),
VEHICLE_SLAMVAN2 = RAGE_JOAAT("SLAMVAN2"),
VEHICLE_SLAMVAN3 = RAGE_JOAAT("SLAMVAN3"),
VEHICLE_STALION = RAGE_JOAAT("STALION"),
VEHICLE_STALION2 = RAGE_JOAAT("STALION2"),
VEHICLE_TAMPA = RAGE_JOAAT("TAMPA"),
VEHICLE_TAMPA3 = RAGE_JOAAT("TAMPA3"),
VEHICLE_VIGERO = RAGE_JOAAT("VIGERO"),
VEHICLE_VIRGO = RAGE_JOAAT("VIRGO"),
VEHICLE_VIRGO2 = RAGE_JOAAT("VIRGO2"),
VEHICLE_VIRGO3 = RAGE_JOAAT("VIRGO3"),
VEHICLE_VOODOO = RAGE_JOAAT("VOODOO"),
VEHICLE_VOODOO2 = RAGE_JOAAT("VOODOO2"),
VEHICLE_YOSEMITE = RAGE_JOAAT("YOSEMITE"),
};
enum OffRoad : Hash
{
VEHICLE_BFINJECTION = RAGE_JOAAT("BFINJECTION"),
VEHICLE_BIFTA = RAGE_JOAAT("BIFTA"),
VEHICLE_BLAZER = RAGE_JOAAT("BLAZER"),
VEHICLE_BLAZER2 = RAGE_JOAAT("BLAZER2"),
VEHICLE_BLAZER3 = RAGE_JOAAT("BLAZER3"),
VEHICLE_BLAZER4 = RAGE_JOAAT("BLAZER4"),
VEHICLE_BLAZER5 = RAGE_JOAAT("BLAZER5"),
VEHICLE_BODHI2 = RAGE_JOAAT("BODHI2"),
VEHICLE_BRAWLER = RAGE_JOAAT("BRAWLER"),
VEHICLE_DLOADER = RAGE_JOAAT("DLOADER"),
VEHICLE_DUBSTA3 = RAGE_JOAAT("DUBSTA3"),
VEHICLE_DUNE = RAGE_JOAAT("DUNE"),
VEHICLE_DUNE2 = RAGE_JOAAT("DUNE2"),
VEHICLE_DUNE3 = RAGE_JOAAT("DUNE3"),
VEHICLE_DUNE4 = RAGE_JOAAT("DUNE4"),
VEHICLE_DUNE5 = RAGE_JOAAT("DUNE5"),
VEHICLE_FREECRAWLER = RAGE_JOAAT("FREECRAWLER"),
VEHICLE_INSURGENT = RAGE_JOAAT("INSURGENT"),
VEHICLE_INSURGENT2 = RAGE_JOAAT("INSURGENT2"),
VEHICLE_INSURGENT3 = RAGE_JOAAT("INSURGENT3"),
VEHICLE_KALAHARI = RAGE_JOAAT("KALAHARI"),
VEHICLE_KAMACHO = RAGE_JOAAT("KAMACHO"),
VEHICLE_MARSHALL = RAGE_JOAAT("MARSHALL"),
VEHICLE_MESA3 = RAGE_JOAAT("MESA3"),
VEHICLE_MONSTER = RAGE_JOAAT("MONSTER"),
VEHICLE_MENACER = RAGE_JOAAT("MENACER"),
VEHICLE_NIGHTSHARK = RAGE_JOAAT("NIGHTSHARK"),
VEHICLE_RANCHERXL = RAGE_JOAAT("RANCHERXL"),
VEHICLE_RANCHERXL2 = RAGE_JOAAT("RANCHERXL2"),
VEHICLE_REBEL = RAGE_JOAAT("REBEL"),
VEHICLE_REBEL2 = RAGE_JOAAT("REBEL2"),
VEHICLE_RIATA = RAGE_JOAAT("RIATA"),
VEHICLE_SANDKING = RAGE_JOAAT("SANDKING"),
VEHICLE_SANDKING2 = RAGE_JOAAT("SANDKING2"),
VEHICLE_TECHNICAL = RAGE_JOAAT("TECHNICAL"),
VEHICLE_TECHNICAL2 = RAGE_JOAAT("TECHNICAL2"),
VEHICLE_TECHNICAL3 = RAGE_JOAAT("TECHNICAL3"),
VEHICLE_TROPHYTRUCK = RAGE_JOAAT("TROPHYTRUCK"),
VEHICLE_TROPHYTRUCK2 = RAGE_JOAAT("TROPHYTRUCK2"),
};
enum Planes : Hash
{
VEHICLE_ALPHAZ1 = RAGE_JOAAT("ALPHAZ1"),
VEHICLE_AVENGER = RAGE_JOAAT("AVENGER"),
VEHICLE_BESRA = RAGE_JOAAT("BESRA"),
VEHICLE_BLIMP = RAGE_JOAAT("BLIMP"),
VEHICLE_BLIMP2 = RAGE_JOAAT("BLIMP2"),
VEHICLE_BLIMP3 = RAGE_JOAAT("BLIMP3"),
VEHICLE_BOMBUSHKA = RAGE_JOAAT("BOMBUSHKA"),
VEHICLE_CARGOPLANE = RAGE_JOAAT("CARGOPLANE"),
VEHICLE_CUBAN800 = RAGE_JOAAT("CUBAN800"),
VEHICLE_DODO = RAGE_JOAAT("DODO"),
VEHICLE_DUSTER = RAGE_JOAAT("DUSTER"),
VEHICLE_HOWARD = RAGE_JOAAT("HOWARD"),
VEHICLE_HYDRA = RAGE_JOAAT("HYDRA"),
VEHICLE_JET = RAGE_JOAAT("JET"),
VEHICLE_LAZER = RAGE_JOAAT("LAZER"),
VEHICLE_LUXOR = RAGE_JOAAT("LUXOR"),
VEHICLE_LUXOR2 = RAGE_JOAAT("LUXOR2"),
VEHICLE_MAMMATUS = RAGE_JOAAT("MAMMATUS"),
VEHICLE_MICROLIGHT = RAGE_JOAAT("MICROLIGHT"),
VEHICLE_MILJET = RAGE_JOAAT("MILJET"),
VEHICLE_MOGUL = RAGE_JOAAT("MOGUL"),
VEHICLE_MOLOTOK = RAGE_JOAAT("MOLOTOK"),
VEHICLE_NIMBUS = RAGE_JOAAT("NIMBUS"),
VEHICLE_NOKOTA = RAGE_JOAAT("NOKOTA"),
VEHICLE_PYRO = RAGE_JOAAT("PYRO"),
VEHICLE_ROGUE = RAGE_JOAAT("ROGUE"),
VEHICLE_SEABREEZE = RAGE_JOAAT("SEABREEZE"),
VEHICLE_SHAMAL = RAGE_JOAAT("SHAMAL"),
VEHICLE_STARLING = RAGE_JOAAT("STARLING"),
VEHICLE_STRIKEFORCE = RAGE_JOAAT("STRIKEFORCE"),
VEHICLE_STUNT = RAGE_JOAAT("STUNT"),
VEHICLE_TITAN = RAGE_JOAAT("TITAN"),
VEHICLE_TULA = RAGE_JOAAT("TULA"),
VEHICLE_VELUM = RAGE_JOAAT("VELUM"),
VEHICLE_VELUM2 = RAGE_JOAAT("VELUM2"),
VEHICLE_VESTRA = RAGE_JOAAT("VESTRA"),
VEHICLE_VOLATOL = RAGE_JOAAT("VOLATOL"),
};
enum SUVs : Hash
{
VEHICLE_BALLER = RAGE_JOAAT("BALLER"),
VEHICLE_BALLER2 = RAGE_JOAAT("BALLER2"),
VEHICLE_BALLER3 = RAGE_JOAAT("BALLER3"),
VEHICLE_BALLER4 = RAGE_JOAAT("BALLER4"),
VEHICLE_BALLER5 = RAGE_JOAAT("BALLER5"),
VEHICLE_BALLER6 = RAGE_JOAAT("BALLER6"),
VEHICLE_BJXL = RAGE_JOAAT("BJXL"),
VEHICLE_CAVALCADE = RAGE_JOAAT("CAVALCADE"),
VEHICLE_CAVALCADE2 = RAGE_JOAAT("CAVALCADE2"),
VEHICLE_CONTENDER = RAGE_JOAAT("CONTENDER"),
VEHICLE_DUBSTA = RAGE_JOAAT("DUBSTA"),
VEHICLE_DUBSTA2 = RAGE_JOAAT("DUBSTA2"),
VEHICLE_FQ2 = RAGE_JOAAT("FQ2"),
VEHICLE_GRANGER = RAGE_JOAAT("GRANGER"),
VEHICLE_GRESLEY = RAGE_JOAAT("GRESLEY"),
VEHICLE_HABANERO = RAGE_JOAAT("HABANERO"),
VEHICLE_HUNTLEY = RAGE_JOAAT("HUNTLEY"),
VEHICLE_LANDSTALKER = RAGE_JOAAT("LANDSTALKER"),
VEHICLE_MESA = RAGE_JOAAT("MESA"),
VEHICLE_MESA2 = RAGE_JOAAT("MESA2"),
VEHICLE_PATRIOT = RAGE_JOAAT("PATRIOT"),
VEHICLE_PATRIOT2 = RAGE_JOAAT("PATRIOT2"),
VEHICLE_RADI = RAGE_JOAAT("RADI"),
VEHICLE_ROCOTO = RAGE_JOAAT("ROCOTO"),
VEHICLE_SEMINOLE = RAGE_JOAAT("SEMINOLE"),
VEHICLE_SERRANO = RAGE_JOAAT("SERRANO"),
VEHICLE_XLS = RAGE_JOAAT("XLS"),
VEHICLE_XLS2 = RAGE_JOAAT("XLS2"),
};
enum Sedans : Hash
{
VEHICLE_ASEA = RAGE_JOAAT("ASEA"),
VEHICLE_ASEA2 = RAGE_JOAAT("ASEA2"),
VEHICLE_ASTEROPE = RAGE_JOAAT("ASTEROPE"),
VEHICLE_CHEBUREK = RAGE_JOAAT("CHEBUREK"),
VEHICLE_COG55 = RAGE_JOAAT("COG55"),
VEHICLE_COG552 = RAGE_JOAAT("COG552"),
VEHICLE_COGNOSCENTI = RAGE_JOAAT("COGNOSCENTI"),
VEHICLE_COGNOSCENTI2 = RAGE_JOAAT("COGNOSCENTI2"),
VEHICLE_EMPEROR = RAGE_JOAAT("EMPEROR"),
VEHICLE_EMPEROR2 = RAGE_JOAAT("EMPEROR2"),
VEHICLE_EMPEROR3 = RAGE_JOAAT("EMPEROR3"),
VEHICLE_FUGITIVE = RAGE_JOAAT("FUGITIVE"),
VEHICLE_GLENDALE = RAGE_JOAAT("GLENDALE"),
VEHICLE_INGOT = RAGE_JOAAT("INGOT"),
VEHICLE_INTRUDER = RAGE_JOAAT("INTRUDER"),
VEHICLE_LIMO2 = RAGE_JOAAT("LIMO2"),
VEHICLE_PREMIER = RAGE_JOAAT("PREMIER"),
VEHICLE_PRIMO = RAGE_JOAAT("PRIMO"),
VEHICLE_PRIMO2 = RAGE_JOAAT("PRIMO2"),
VEHICLE_REGINA = RAGE_JOAAT("REGINA"),
VEHICLE_ROMERO = RAGE_JOAAT("ROMERO"),
VEHICLE_SCHAFTER2 = RAGE_JOAAT("SCHAFTER2"),
VEHICLE_SCHAFTER5 = RAGE_JOAAT("SCHAFTER5"),
VEHICLE_SCHAFTER6 = RAGE_JOAAT("SCHAFTER6"),
VEHICLE_STAFFORD = RAGE_JOAAT("STAFFORD"),
VEHICLE_STANIER = RAGE_JOAAT("STANIER"),
VEHICLE_STRATUM = RAGE_JOAAT("STRATUM"),
VEHICLE_STRETCH = RAGE_JOAAT("STRETCH"),
VEHICLE_SUPERD = RAGE_JOAAT("SUPERD"),
VEHICLE_SURGE = RAGE_JOAAT("SURGE"),
VEHICLE_TAILGATER = RAGE_JOAAT("TAILGATER"),
VEHICLE_WARRENER = RAGE_JOAAT("WARRENER"),
VEHICLE_WASHINGTON = RAGE_JOAAT("WASHINGTON"),
};
enum Service : Hash
{
VEHICLE_AIRBUS = RAGE_JOAAT("AIRBUS"),
VEHICLE_BRICKADE = RAGE_JOAAT("BRICKADE"),
VEHICLE_BUS = RAGE_JOAAT("BUS"),
VEHICLE_COACH = RAGE_JOAAT("COACH"),
VEHICLE_PBUS2 = RAGE_JOAAT("PBUS2"),
VEHICLE_RALLYTRUCK = RAGE_JOAAT("RALLYTRUCK"),
VEHICLE_RENTALBUS = RAGE_JOAAT("RENTALBUS"),
VEHICLE_TAXI = RAGE_JOAAT("TAXI"),
VEHICLE_TOURBUS = RAGE_JOAAT("TOURBUS"),
VEHICLE_TRASH = RAGE_JOAAT("TRASH"),
VEHICLE_TRASH2 = RAGE_JOAAT("TRASH2"),
VEHICLE_WASTELANDER = RAGE_JOAAT("WASTELANDER"),
};
enum Sports : Hash
{
VEHICLE_ALPHA = RAGE_JOAAT("ALPHA"),
VEHICLE_BANSHEE = RAGE_JOAAT("BANSHEE"),
VEHICLE_BESTIAGTS = RAGE_JOAAT("BESTIAGTS"),
VEHICLE_BLISTA2 = RAGE_JOAAT("BLISTA2"),
VEHICLE_BLISTA3 = RAGE_JOAAT("BLISTA3"),
VEHICLE_BUFFALO = RAGE_JOAAT("BUFFALO"),
VEHICLE_BUFFALO2 = RAGE_JOAAT("BUFFALO2"),
VEHICLE_BUFFALO3 = RAGE_JOAAT("BUFFALO3"),
VEHICLE_CARBONIZZARE = RAGE_JOAAT("CARBONIZZARE"),
VEHICLE_COMET2 = RAGE_JOAAT("COMET2"),
VEHICLE_COMET3 = RAGE_JOAAT("COMET3"),
VEHICLE_COMET4 = RAGE_JOAAT("COMET4"),
VEHICLE_COMET5 = RAGE_JOAAT("COMET5"),
VEHICLE_COQUETTE = RAGE_JOAAT("COQUETTE"),
VEHICLE_ELEGY = RAGE_JOAAT("ELEGY"),
VEHICLE_ELEGY2 = RAGE_JOAAT("ELEGY2"),
VEHICLE_FELTZER2 = RAGE_JOAAT("FELTZER2"),
VEHICLE_FLASHGT = RAGE_JOAAT("FLASHGT"),
VEHICLE_FUROREGT = RAGE_JOAAT("FUROREGT"),
VEHICLE_FUSILADE = RAGE_JOAAT("FUSILADE"),
VEHICLE_FUTO = RAGE_JOAAT("FUTO"),
VEHICLE_GB200 = RAGE_JOAAT("GB200"),
VEHICLE_HOTRING = RAGE_JOAAT("HOTRING"),
VEHICLE_JESTER = RAGE_JOAAT("JESTER"),
VEHICLE_JESTER2 = RAGE_JOAAT("JESTER2"),
VEHICLE_JESTER3 = RAGE_JOAAT("JESTER3"),
VEHICLE_KHAMELION = RAGE_JOAAT("KHAMELION"),
VEHICLE_KURUMA = RAGE_JOAAT("KURUMA"),
VEHICLE_KURUMA2 = RAGE_JOAAT("KURUMA2"),
VEHICLE_LYNX2 = RAGE_JOAAT("LYNX2"),
VEHICLE_MASSACRO = RAGE_JOAAT("MASSACRO"),
VEHICLE_MASSACRO2 = RAGE_JOAAT("MASSACRO2"),
VEHICLE_NEON = RAGE_JOAAT("NEON"),
VEHICLE_NINEF = RAGE_JOAAT("NINEF"),
VEHICLE_NINEF2 = RAGE_JOAAT("NINEF2"),
VEHICLE_OMNIS = RAGE_JOAAT("OMNIS"),
VEHICLE_PARIAH = RAGE_JOAAT("PARIAH"),
VEHICLE_PENUMBRA = RAGE_JOAAT("PENUMBRA"),
VEHICLE_RAIDEN = RAGE_JOAAT("RAIDEN"),
VEHICLE_RAPIDGT = RAGE_JOAAT("RAPIDGT"),
VEHICLE_RAPIDGT2 = RAGE_JOAAT("RAPIDGT2"),
VEHICLE_RAPTOR = RAGE_JOAAT("RAPTOR"),
VEHICLE_REVOLTER = RAGE_JOAAT("REVOLTER"),
VEHICLE_RUSTON = RAGE_JOAAT("RUSTON"),
VEHICLE_SCHAFTER3 = RAGE_JOAAT("SCHAFTER3"),
VEHICLE_SCHAFTER4 = RAGE_JOAAT("SCHAFTER4"),
VEHICLE_SCHWARZER = RAGE_JOAAT("SCHWARZER"),
VEHICLE_SENTINEL3 = RAGE_JOAAT("SENTINEL3"),
VEHICLE_SEVEN70 = RAGE_JOAAT("SEVEN70"),
VEHICLE_SPECTER = RAGE_JOAAT("SPECTER"),
VEHICLE_SPECTER2 = RAGE_JOAAT("SPECTER2"),
VEHICLE_STREITER = RAGE_JOAAT("STREITER"),
VEHICLE_SULTAN = RAGE_JOAAT("SULTAN"),
VEHICLE_SURANO = RAGE_JOAAT("SURANO"),
VEHICLE_TAMPA2 = RAGE_JOAAT("TAMPA2"),
VEHICLE_TROPOS = RAGE_JOAAT("TROPOS"),
VEHICLE_VERLIERER2 = RAGE_JOAAT("VERLIERER2"),
};
enum SportsClassic : Hash
{
VEHICLE_ARDENT = RAGE_JOAAT("ARDENT"),
VEHICLE_BTYPE = RAGE_JOAAT("BTYPE"),
VEHICLE_BTYPE2 = RAGE_JOAAT("BTYPE2"),
VEHICLE_BTYPE3 = RAGE_JOAAT("BTYPE3"),
VEHICLE_CASCO = RAGE_JOAAT("CASCO"),
VEHICLE_CHEETAH2 = RAGE_JOAAT("CHEETAH2"),
VEHICLE_COQUETTE2 = RAGE_JOAAT("COQUETTE2"),
VEHICLE_DELUXO = RAGE_JOAAT("DELUXO"),
VEHICLE_FAGALOA = RAGE_JOAAT("FAGALOA"),
VEHICLE_FELTZER3 = RAGE_JOAAT("FELTZER3"),
VEHICLE_GT500 = RAGE_JOAAT("GT500"),
VEHICLE_HUSTLER = RAGE_JOAAT("HUSTLER"),
VEHICLE_INFERNUS2 = RAGE_JOAAT("INFERNUS2"),
VEHICLE_JB700 = RAGE_JOAAT("JB700"),
VEHICLE_MAMBA = RAGE_JOAAT("MAMBA"),
VEHICLE_MANANA = RAGE_JOAAT("MANANA"),
VEHICLE_MICHELLI = RAGE_JOAAT("MICHELLI"),
VEHICLE_MONROE = RAGE_JOAAT("MONROE"),
VEHICLE_PEYOTE = RAGE_JOAAT("PEYOTE"),
VEHICLE_PIGALLE = RAGE_JOAAT("PIGALLE"),
VEHICLE_RAPIDGT3 = RAGE_JOAAT("RAPIDGT3"),
VEHICLE_RETINUE = RAGE_JOAAT("RETINUE"),
VEHICLE_SAVESTRA = RAGE_JOAAT("SAVESTRA"),
VEHICLE_STINGER = RAGE_JOAAT("STINGER"),
VEHICLE_STINGERGT = RAGE_JOAAT("STINGERGT"),
VEHICLE_STROMBERG = RAGE_JOAAT("STROMBERG"),
VEHICLE_SWINGER = RAGE_JOAAT("SWINGER"),
VEHICLE_TORERO = RAGE_JOAAT("TORERO"),
VEHICLE_TORNADO = RAGE_JOAAT("TORNADO"),
VEHICLE_TORNADO2 = RAGE_JOAAT("TORNADO2"),
VEHICLE_TORNADO3 = RAGE_JOAAT("TORNADO3"),
VEHICLE_TORNADO4 = RAGE_JOAAT("TORNADO4"),
VEHICLE_TORNADO5 = RAGE_JOAAT("TORNADO5"),
VEHICLE_TORNADO6 = RAGE_JOAAT("TORNADO6"),
VEHICLE_TURISMO2 = RAGE_JOAAT("TURISMO2"),
VEHICLE_VISERIS = RAGE_JOAAT("VISERIS"),
VEHICLE_Z190 = RAGE_JOAAT("Z190"),
VEHICLE_ZTYPE = RAGE_JOAAT("ZTYPE"),
};
enum Super : Hash
{
VEHICLE_ADDER = RAGE_JOAAT("ADDER"),
VEHICLE_AUTARCH = RAGE_JOAAT("AUTARCH"),
VEHICLE_BANSHEE2 = RAGE_JOAAT("BANSHEE2"),
VEHICLE_BULLETGT = RAGE_JOAAT("BULLET"),
VEHICLE_CHEETAH = RAGE_JOAAT("CHEETAH"),
VEHICLE_CYCLONE = RAGE_JOAAT("CYCLONE"),
VEHICLE_ENTITYXF = RAGE_JOAAT("ENTITYXF"),
VEHICLE_ENTITY2 = RAGE_JOAAT("ENTITY2"),
VEHICLE_FMJ = RAGE_JOAAT("FMJ"),
VEHICLE_GP1 = RAGE_JOAAT("GP1"),
VEHICLE_INFERNUS = RAGE_JOAAT("INFERNUS"),
VEHICLE_ITALIGTB = RAGE_JOAAT("ITALIGTB"),
VEHICLE_ITALIGTB2 = RAGE_JOAAT("ITALIGTB2"),
VEHICLE_LE7B = RAGE_JOAAT("LE7B"),
VEHICLE_NERO = RAGE_JOAAT("NERO"),
VEHICLE_NERO2 = RAGE_JOAAT("NERO2"),
VEHICLE_OSIRIS = RAGE_JOAAT("OSIRIS"),
VEHICLE_PENETRATOR = RAGE_JOAAT("PENETRATOR"),
VEHICLE_PFISTER811 = RAGE_JOAAT("PFISTER811"),
VEHICLE_PROTOTIPO = RAGE_JOAAT("PROTOTIPO"),
VEHICLE_REAPER = RAGE_JOAAT("REAPER"),
VEHICLE_SC1 = RAGE_JOAAT("SC1"),
VEHICLE_SCRAMJET = RAGE_JOAAT("SCRAMJET"),
VEHICLE_SHEAVA = RAGE_JOAAT("SHEAVA"),
VEHICLE_SULTANRS = RAGE_JOAAT("SULTANRS"),
VEHICLE_T20 = RAGE_JOAAT("T20"),
VEHICLE_TAIPAN = RAGE_JOAAT("TAIPAN"),
VEHICLE_TEMPESTA = RAGE_JOAAT("TEMPESTA"),
VEHICLE_TEZERACT = RAGE_JOAAT("TEZERACT"),
VEHICLE_TURISMOR = RAGE_JOAAT("TURISMOR"),
VEHICLE_TYRANT = RAGE_JOAAT("TYRANT"),
VEHICLE_TYRUS = RAGE_JOAAT("TYRUS"),
VEHICLE_VACCA = RAGE_JOAAT("VACCA"),
VEHICLE_VAGNER = RAGE_JOAAT("VAGNER"),
VEHICLE_VIGILANTE = RAGE_JOAAT("VIGILANTE"),
VEHICLE_VISIONE = RAGE_JOAAT("VISIONE"),
VEHICLE_VOLTIC = RAGE_JOAAT("VOLTIC"),
VEHICLE_VOLTIC2 = RAGE_JOAAT("VOLTIC2"),
VEHICLE_XA21 = RAGE_JOAAT("XA21"),
VEHICLE_ZENTORNO = RAGE_JOAAT("ZENTORNO"),
};
enum Trailers : Hash
{
VEHICLE_ARMYTANKER = RAGE_JOAAT("ARMYTANKER"),
VEHICLE_ARMYTRAILER2 = RAGE_JOAAT("ARMYTRAILER2"),
VEHICLE_BALETRAILER = RAGE_JOAAT("BALETRAILER"),
VEHICLE_BOATTRAILER = RAGE_JOAAT("BOATTRAILER"),
VEHICLE_CABLECAR = RAGE_JOAAT("CABLECAR"),
VEHICLE_DOCKTRAILER = RAGE_JOAAT("DOCKTRAILER"),
VEHICLE_GRAINTRAILER = RAGE_JOAAT("GRAINTRAILER"),
VEHICLE_PROPTRAILER = RAGE_JOAAT("PROPTRAILER"),
VEHICLE_RAKETRAILER = RAGE_JOAAT("RAKETRAILER"),
VEHICLE_TR2 = RAGE_JOAAT("TR2"),
VEHICLE_TR3 = RAGE_JOAAT("TR3"),
VEHICLE_TR4 = RAGE_JOAAT("TR4"),
VEHICLE_TRFLAT = RAGE_JOAAT("TRFLAT"),
VEHICLE_TVTRAILER = RAGE_JOAAT("TVTRAILER"),
VEHICLE_TANKER = RAGE_JOAAT("TANKER"),
VEHICLE_TANKER2 = RAGE_JOAAT("TANKER2"),
VEHICLE_TRAILERLOGS = RAGE_JOAAT("TRAILERLOGS"),
VEHICLE_TRAILERSMALL = RAGE_JOAAT("TRAILERSMALL"),
VEHICLE_TRAILERS = RAGE_JOAAT("TRAILERS"),
VEHICLE_TRAILERS2 = RAGE_JOAAT("TRAILERS2"),
VEHICLE_TRAILERS3 = RAGE_JOAAT("TRAILERS3"),
};
enum Trains : Hash
{
VEHICLE_FREIGHT = RAGE_JOAAT("FREIGHT"),
VEHICLE_FREIGHTCAR = RAGE_JOAAT("FREIGHTCAR"),
VEHICLE_FREIGHTCONT1 = RAGE_JOAAT("FREIGHTCONT1"),
VEHICLE_FREIGHTCONT2 = RAGE_JOAAT("FREIGHTCONT2"),
VEHICLE_FREIGHTGRAIN = RAGE_JOAAT("FREIGHTGRAIN"),
VEHICLE_TANKERCAR = RAGE_JOAAT("TANKERCAR"),
};
enum Utility : Hash
{
VEHICLE_AIRTUG = RAGE_JOAAT("AIRTUG"),
VEHICLE_CADDY = RAGE_JOAAT("CADDY"),
VEHICLE_CADDY2 = RAGE_JOAAT("CADDY2"),
VEHICLE_CADDY3 = RAGE_JOAAT("CADDY3"),
VEHICLE_CARACARA = RAGE_JOAAT("CARACARA"),
VEHICLE_DOCKTUG = RAGE_JOAAT("DOCKTUG"),
VEHICLE_FORKLIFT = RAGE_JOAAT("FORKLIFT"),
VEHICLE_MOWER = RAGE_JOAAT("MOWER"),
VEHICLE_RIPLEY = RAGE_JOAAT("RIPLEY"),
VEHICLE_SADLER = RAGE_JOAAT("SADLER"),
VEHICLE_SADLER2 = RAGE_JOAAT("SADLER2"),
VEHICLE_SCRAP = RAGE_JOAAT("SCRAP"),
VEHICLE_TOWTRUCK = RAGE_JOAAT("TOWTRUCK"),
VEHICLE_TOWTRUCK2 = RAGE_JOAAT("TOWTRUCK2"),
VEHICLE_TRACTOR = RAGE_JOAAT("TRACTOR"),
VEHICLE_TRACTOR2 = RAGE_JOAAT("TRACTOR2"),
VEHICLE_TRACTOR3 = RAGE_JOAAT("TRACTOR3"),
VEHICLE_UTILLITRUCK = RAGE_JOAAT("UTILLITRUCK"),
VEHICLE_UTILLITRUCK2 = RAGE_JOAAT("UTILLITRUCK2"),
VEHICLE_UTILLITRUCK3 = RAGE_JOAAT("UTILLITRUCK3"),
};
enum Vans : Hash
{
VEHICLE_BISON = RAGE_JOAAT("BISON"),
VEHICLE_BISON2 = RAGE_JOAAT("BISON2"),
VEHICLE_BISON3 = RAGE_JOAAT("BISON3"),
VEHICLE_BOBCATXL = RAGE_JOAAT("BOBCATXL"),
VEHICLE_BOXVILLE = RAGE_JOAAT("BOXVILLE"),
VEHICLE_BOXVILLE2 = RAGE_JOAAT("BOXVILLE2"),
VEHICLE_BOXVILLE3 = RAGE_JOAAT("BOXVILLE3"),
VEHICLE_BOXVILLE4 = RAGE_JOAAT("BOXVILLE4"),
VEHICLE_BOXVILLE5 = RAGE_JOAAT("BOXVILLE5"),
VEHICLE_BURRITO = RAGE_JOAAT("BURRITO"),
VEHICLE_BURRITO2 = RAGE_JOAAT("BURRITO2"),
VEHICLE_BURRITO3 = RAGE_JOAAT("BURRITO3"),
VEHICLE_BURRITO4 = RAGE_JOAAT("BURRITO4"),
VEHICLE_BURRITO5 = RAGE_JOAAT("BURRITO5"),
VEHICLE_CAMPER = RAGE_JOAAT("CAMPER"),
VEHICLE_GBURRITO = RAGE_JOAAT("GBURRITO"),
VEHICLE_GBURRITO2 = RAGE_JOAAT("GBURRITO2"),
VEHICLE_JOURNEY = RAGE_JOAAT("JOURNEY"),
VEHICLE_MINIVAN = RAGE_JOAAT("MINIVAN"),
VEHICLE_MINIVAN2 = RAGE_JOAAT("MINIVAN2"),
VEHICLE_PARADISE = RAGE_JOAAT("PARADISE"),
VEHICLE_PONY = RAGE_JOAAT("PONY"),
VEHICLE_PONY2 = RAGE_JOAAT("PONY2"),
VEHICLE_RUMPO = RAGE_JOAAT("RUMPO"),
VEHICLE_RUMPO2 = RAGE_JOAAT("RUMPO2"),
VEHICLE_RUMPO3 = RAGE_JOAAT("RUMPO3"),
VEHICLE_SPEEDO = RAGE_JOAAT("SPEEDO"),
VEHICLE_SPEEDO2 = RAGE_JOAAT("SPEEDO2"),
VEHICLE_SPEEDO4 = RAGE_JOAAT("SPEEDO4"),
VEHICLE_SURFER = RAGE_JOAAT("SURFER"),
VEHICLE_SURFER2 = RAGE_JOAAT("SURFER2"),
VEHICLE_TACO = RAGE_JOAAT("TACO"),
VEHICLE_YOUGA = RAGE_JOAAT("YOUGA"),
VEHICLE_YOUGA2 = RAGE_JOAAT("YOUGA2"),
};
enum ArenaWar : Hash
{
VEHICLE_BRUISER = RAGE_JOAAT("BRUISER"),
VEHICLE_BRUISER2 = RAGE_JOAAT("BRUISER2"),
VEHICLE_BRUISER3 = RAGE_JOAAT("BRUISER3"),
VEHICLE_BRUTUS = RAGE_JOAAT("BRUTUS"),
VEHICLE_BRUTUS2 = RAGE_JOAAT("BRUTUS2"),
VEHICLE_BRUTUS3 = RAGE_JOAAT("BRUTUS3"),
VEHICLE_CERBERUS = RAGE_JOAAT("CERBERUS"),
VEHICLE_CERBERUS2 = RAGE_JOAAT("CERBERUS2"),
VEHICLE_CERBERUS3 = RAGE_JOAAT("CERBERUS3"),
VEHICLE_CLIQUE = RAGE_JOAAT("CLIQUE"),
VEHICLE_DEATHBIKE = RAGE_JOAAT("DEATHBIKE"),
VEHICLE_DEATHBIKE2 = RAGE_JOAAT("DEATHBIKE2"),
VEHICLE_DEATHBIKE3 = RAGE_JOAAT("DEATHBIKE3"),
VEHICLE_DEVESTE = RAGE_JOAAT("DEVESTE"),
VEHICLE_DEVIANT = RAGE_JOAAT("DEVIANT"),
VEHICLE_DOMINATOR4 = RAGE_JOAAT("DOMINATOR4"),
VEHICLE_DOMINATOR5 = RAGE_JOAAT("DOMINATOR5"),
VEHICLE_DOMINATOR6 = RAGE_JOAAT("DOMINATOR6"),
VEHICLE_IMPALER = RAGE_JOAAT("IMPALER"),
VEHICLE_IMPALER2 = RAGE_JOAAT("IMPALER2"),
VEHICLE_IMPALER3 = RAGE_JOAAT("IMPALER3"),
VEHICLE_IMPALER4 = RAGE_JOAAT("IMPALER4"),
VEHICLE_IMPERATOR = RAGE_JOAAT("IMPERATOR"),
VEHICLE_IMPERATOR2 = RAGE_JOAAT("IMPERATOR2"),
VEHICLE_IMPERATOR3 = RAGE_JOAAT("IMPERATOR3"),
VEHICLE_ISSI4 = RAGE_JOAAT("ISSI4"),
VEHICLE_ISSI5 = RAGE_JOAAT("ISSI5"),
VEHICLE_ISSI6 = RAGE_JOAAT("ISSI6"),
VEHICLE_ITALIGTO = RAGE_JOAAT("ITALIGTO"),
VEHICLE_MONSTER3 = RAGE_JOAAT("MONSTER3"),
VEHICLE_MONSTER4 = RAGE_JOAAT("MONSTER4"),
VEHICLE_MONSTER5 = RAGE_JOAAT("MONSTER5"),
VEHICLE_RCBANDITO = RAGE_JOAAT("RCBANDITO"),
VEHICLE_SCARAB2 = RAGE_JOAAT("SCARAB2"),
VEHICLE_SCARAB3 = RAGE_JOAAT("SCARAB3"),
VEHICLE_SCHLAGEN = RAGE_JOAAT("SCHLAGEN"),
VEHICLE_SLAMVAN4 = RAGE_JOAAT("SLAMVAN4"),
VEHICLE_SLAMVAN5 = RAGE_JOAAT("SLAMVAN5"),
VEHICLE_SLAMVAN6 = RAGE_JOAAT("SLAMVAN6"),
VEHICLE_TOROS = RAGE_JOAAT("TOROS"),
VEHICLE_TULIP = RAGE_JOAAT("TULIP"),
VEHICLE_VAMOS = RAGE_JOAAT("VAMOS"),
VEHICLE_ZR380 = RAGE_JOAAT("ZR380"),
VEHICLE_ZR3802 = RAGE_JOAAT("ZR3802"),
VEHICLE_ZR3803 = RAGE_JOAAT("ZR3803"),
};
enum CasinoUpdate : Hash
{
VEHICLE_CARACARA2 = RAGE_JOAAT("CARACARA2"),
VEHICLE_DRAFTER = RAGE_JOAAT("DRAFTER"),
VEHICLE_DYNASTY = RAGE_JOAAT("DYNASTY"),
VEHICLE_EMERUS = RAGE_JOAAT("EMERUS"),
VEHICLE_GAUNTLET3 = RAGE_JOAAT("GAUNTLET3"),
VEHICLE_GAUNTLET4 = RAGE_JOAAT("GAUNTLET4"),
VEHICLE_HELLION = RAGE_JOAAT("HELLION"),
VEHICLE_ISSI7 = RAGE_JOAAT("ISSI7"),
VEHICLE_JUGULAR = RAGE_JOAAT("JUGULAR"),
VEHICLE_KRIEGER = RAGE_JOAAT("KRIEGER"),
VEHICLE_LOCUST = RAGE_JOAAT("LOCUST"),
VEHICLE_NEBULA = RAGE_JOAAT("NEBULA"),
VEHICLE_NEO = RAGE_JOAAT("NEO"),
VEHICLE_NOVAK = RAGE_JOAAT("NOVAK"),
VEHICLE_PARAGON = RAGE_JOAAT("PARAGON"),
VEHICLE_PARAGON2 = RAGE_JOAAT("PARAGON2"),
VEHICLE_PEYOTE2 = RAGE_JOAAT("PEYOTE2"),
VEHICLE_RROCKET = RAGE_JOAAT("RROCKET"),
VEHICLE_S80 = RAGE_JOAAT("S80"),
VEHICLE_THRAX = RAGE_JOAAT("THRAX"),
VEHICLE_ZION3 = RAGE_JOAAT("ZION3"),
VEHICLE_ZORRUSSO = RAGE_JOAAT("ZORRUSSO")
};
enum CasinoHeist : Hash
{
VEHICLE_ASBO = RAGE_JOAAT("ABSO"),
VEHICLE_EVERON = RAGE_JOAAT("EVERON"),
VEHICLE_FORMULA = RAGE_JOAAT("FORMULA"),
VEHICLE_FORMULA2 = RAGE_JOAAT("FORMULA2"),
VEHICLE_FURIA = RAGE_JOAAT("FURIA"),
VEHICLE_IMORGON = RAGE_JOAAT("IMORGON"),
VEHICLE_JB7002 = RAGE_JOAAT("JB7002"),
VEHICLE_KANJO = RAGE_JOAAT("KANJO"),
VEHICLE_KOMODA = RAGE_JOAAT("KOMODA"),
VEHICLE_MINITANK = RAGE_JOAAT("MINITANK"),
VEHICLE_OUTLAW = RAGE_JOAAT("OUTLAW"),
VEHICLE_REBLA = RAGE_JOAAT("REBLA"),
VEHICLE_RETINUE2 = RAGE_JOAAT("RETINUE2"),
VEHICLE_STRYDER = RAGE_JOAAT("STRYDER"),
VEHICLE_SUGOI = RAGE_JOAAT("SUGOI"),
VEHICLE_SULTAN2 = RAGE_JOAAT("SULTAN2"),
VEHICLE_VAGRANT = RAGE_JOAAT("VAGRANT"),
VEHICLE_VSTR = RAGE_JOAAT("VSTR"),
VEHICLE_YOSEMITE2 = RAGE_JOAAT("YOSEMITE2"),
VEHICLE_ZHABA = RAGE_JOAAT("ZHABA"),
};
enum SummerUpdate : Hash
{
VEHICLE_CLUB = RAGE_JOAAT("CLUB"),
VEHICLE_COQUETTE4 = RAGE_JOAAT("VEHICLE_COQUETTE4"),
VEHICLE_DUKES3 = RAGE_JOAAT("DUKES3"),
VEHICLE_GAUNTLET5 = RAGE_JOAAT("GAUNTLET5"),
VEHICLE_GLENDALE2 = RAGE_JOAAT("GLENDALE2"),
VEHICLE_LANDSTALKER2 = RAGE_JOAAT("LANDSTALKER2"),
VEHICLE_MANANA2 = RAGE_JOAAT("MANANA2"),
VEHICLE_OPENWHEEL1 = RAGE_JOAAT("OPENWHEEL1"),
VEHICLE_OPENWHEEL2 = RAGE_JOAAT("OPENWHEEL2"),
VEHICLE_PENUMBRA2 = RAGE_JOAAT("PENUMBRA2"),
VEHICLE_PEYOTE3 = RAGE_JOAAT("PEYOTE3"),
VEHICLE_SEMINOLE2 = RAGE_JOAAT("SEMINOLE2"),
VEHICLE_TIGON = RAGE_JOAAT("TIGON"),
VEHICLE_YOSEMITE3 = RAGE_JOAAT("YOSEMITE3"),
VEHICLE_YOUGA3 = RAGE_JOAAT("YOUGA3")
};
enum CayoPericoHeist : Hash
{
VEHICLE_ALKONOST = RAGE_JOAAT("ALKONOST"),
VEHICLE_ANNIHILATOR2 = RAGE_JOAAT("ANNIHILATOR2"),
VEHICLE_AVISA = RAGE_JOAAT("AVISA"),
VEHICLE_BRIOSO2 = RAGE_JOAAT("BRIOSO2"),
VEHICLE_DINGHY5 = RAGE_JOAAT("DINGHY5"),
VEHICLE_ITALIRSX = RAGE_JOAAT("ITALIRSX"),
VEHICLE_KOSATKA = RAGE_JOAAT("KOSATKA"),
VEHICLE_LONGFIN = RAGE_JOAAT("LONGFIN"),
VEHICLE_MANCHEZE = RAGE_JOAAT("MANCHEZE"),
VEHICLE_PATROLBOAT = RAGE_JOAAT("PATROLBOAT"),
VEHICLE_SEASPARROW2 = RAGE_JOAAT("SEASPARROW2"),
VEHICLE_SLAMTRUCK = RAGE_JOAAT("SLAMTRUCK"),
VEHICLE_SQUADDIE = RAGE_JOAAT("SQUADDIE"),
VEHICLE_TOREADOR = RAGE_JOAAT("TOREADOR"),
VEHICLE_VERUS = RAGE_JOAAT("VERUS"),
VEHICLE_VETIR = RAGE_JOAAT("VETIR"),
VEHICLE_VETO = RAGE_JOAAT("VETO"),
VEHICLE_VETO2 = RAGE_JOAAT("VETO2"),
VEHICLE_WEEVIL = RAGE_JOAAT("WEEVIL"),
VEHICLE_WINKY = RAGE_JOAAT("WINKY")
};

649
src/gta/Weapons.h Normal file
View File

@ -0,0 +1,649 @@
#pragma once
#include "natives.hpp"
#include "gta\joaat.hpp"
enum WeaponHashes : Hash
{
WEAPON_ADVANCEDRIFLE = RAGE_JOAAT("WEAPON_ADVANCEDRIFLE"),
WEAPON_APPISTOL = RAGE_JOAAT("WEAPON_APPISTOL"),
WEAPON_ASSAULTRIFLE = RAGE_JOAAT("WEAPON_ASSAULTRIFLE"),
WEAPON_ASSAULTRIFLE_MK2 = RAGE_JOAAT("WEAPON_ASSAULTRIFLE_MK2"),
WEAPON_ASSAULTSHOTGUN = RAGE_JOAAT("WEAPON_ASSAULTSHOTGUN"),
WEAPON_ASSAULTSMG = RAGE_JOAAT("WEAPON_ASSAULTSMG"),
WEAPON_BALL = RAGE_JOAAT("WEAPON_BALL"),
WEAPON_BAT = RAGE_JOAAT("WEAPON_BAT"),
WEAPON_BATTLEAXE = RAGE_JOAAT("WEAPON_BATTLEAXE"),
WEAPON_BOTTLE = RAGE_JOAAT("WEAPON_BOTTLE"),
WEAPON_BULLPUPRIFLE = RAGE_JOAAT("WEAPON_BULLPUPRIFLE"),
WEAPON_BULLPUPRIFLE_MK2 = RAGE_JOAAT("WEAPON_BULLPUPRIFLE_MK2"),
WEAPON_BULLPUPSHOTGUN = RAGE_JOAAT("WEAPON_BULLPUPSHOTGUN"),
WEAPON_BZGAS = RAGE_JOAAT("WEAPON_BZGAS"),
WEAPON_CARBINERIFLE = RAGE_JOAAT("WEAPON_CARBINERIFLE"),
WEAPON_CARBINERIFLE_MK2 = RAGE_JOAAT("WEAPON_CARBINERIFLE_MK2"),
WEAPON_COMBATMG = RAGE_JOAAT("WEAPON_COMBATMG"),
WEAPON_COMBATMG_MK2 = RAGE_JOAAT("WEAPON_COMBATMG_MK2"),
WEAPON_COMBATPDW = RAGE_JOAAT("WEAPON_COMBATPDW"),
WEAPON_COMBATPISTOL = RAGE_JOAAT("WEAPON_COMBATPISTOL"),
WEAPON_COMPACTLAUNCHER = RAGE_JOAAT("WEAPON_COMPACTLAUNCHER"),
WEAPON_COMPACTRIFLE = RAGE_JOAAT("WEAPON_COMPACTRIFLE"),
WEAPON_CROWBAR = RAGE_JOAAT("WEAPON_CROWBAR"),
WEAPON_DAGGER = RAGE_JOAAT("WEAPON_DAGGER"),
WEAPON_DOUBLEACTION = RAGE_JOAAT("WEAPON_DOUBLEACTION"),
WEAPON_EMPLAUNCHER = RAGE_JOAAT("WEAPON_EMPLAUNCHER"),
WEAPON_FERTILIZERCAN = RAGE_JOAAT("WEAPON_FERTILIZERCAN"),
WEAPON_FIREEXTINGUISHER = RAGE_JOAAT("WEAPON_FIREEXTINGUISHER"),
WEAPON_FIREWORK = RAGE_JOAAT("WEAPON_FIREWORK"),
WEAPON_FLARE = RAGE_JOAAT("WEAPON_FLARE"),
WEAPON_FLAREGUN = RAGE_JOAAT("WEAPON_FLAREGUN"),
WEAPON_FLASHLIGHT = RAGE_JOAAT("WEAPON_FLASHLIGHT"),
WEAPON_GOLFCLUB = RAGE_JOAAT("WEAPON_GOLFCLUB"),
WEAPON_GRENADE = RAGE_JOAAT("WEAPON_GRENADE"),
WEAPON_GRENADELAUNCHER = RAGE_JOAAT("WEAPON_GRENADELAUNCHER"),
WEAPON_GRENADELAUNCHER_SMOKE = RAGE_JOAAT("WEAPON_GRENADELAUNCHER_SMOKE"),
WEAPON_GUSENBERG = RAGE_JOAAT("WEAPON_GUSENBERG"),
WEAPON_HAMMER = RAGE_JOAAT("WEAPON_HAMMER"),
WEAPON_HATCHET = RAGE_JOAAT("WEAPON_HATCHET"),
WEAPON_HAZARDCAN = RAGE_JOAAT("WEAPON_HAZARDCAN"),
WEAPON_HEAVYPISTOL = RAGE_JOAAT("WEAPON_HEAVYPISTOL"),
WEAPON_HEAVYRIFLE = RAGE_JOAAT("WEAPON_HEAVYRIFLE"),
WEAPON_HEAVYSHOTGUN = RAGE_JOAAT("WEAPON_HEAVYSHOTGUN"),
WEAPON_HEAVYSNIPER = RAGE_JOAAT("WEAPON_HEAVYSNIPER"),
WEAPON_HEAVYSNIPER_MK2 = RAGE_JOAAT("WEAPON_HEAVYSNIPER_MK2"),
WEAPON_HOMINGLAUNCHER = RAGE_JOAAT("WEAPON_HOMINGLAUNCHER"),
WEAPON_KNIFE = RAGE_JOAAT("WEAPON_KNIFE"),
WEAPON_KNUCKLE = RAGE_JOAAT("WEAPON_KNUCKLE"),
WEAPON_MACHETE = RAGE_JOAAT("WEAPON_MACHETE"),
WEAPON_MACHINEPISTOL = RAGE_JOAAT("WEAPON_MACHINEPISTOL"),
WEAPON_MARKSMANPISTOL = RAGE_JOAAT("WEAPON_MARKSMANPISTOL"),
WEAPON_MARKSMANRIFLE = RAGE_JOAAT("WEAPON_MARKSMANRIFLE"),
WEAPON_MARKSMANRIFLE_MK2 = RAGE_JOAAT("WEAPON_MARKSMANRIFLE_MK2"),
WEAPON_MG = RAGE_JOAAT("WEAPON_MG"),
WEAPON_MICROSMG = RAGE_JOAAT("WEAPON_MICROSMG"),
WEAPON_MILITARYRIFLE = RAGE_JOAAT("WEAPON_MILITARYRIFLE"),
WEAPON_MINIGUN = RAGE_JOAAT("WEAPON_MINIGUN"),
WEAPON_MINISMG = RAGE_JOAAT("WEAPON_MINISMG"),
WEAPON_MOLOTOV = RAGE_JOAAT("WEAPON_MOLOTOV"),
WEAPON_MUSKET = RAGE_JOAAT("WEAPON_MUSKET"),
WEAPON_NIGHTSTICK = RAGE_JOAAT("WEAPON_NIGHTSTICK"),
WEAPON_PETROLCAN = RAGE_JOAAT("WEAPON_PETROLCAN"),
WEAPON_PIPEBOMB = RAGE_JOAAT("WEAPON_PIPEBOMB"),
WEAPON_PISTOL50 = RAGE_JOAAT("WEAPON_PISTOL50"),
WEAPON_PISTOL = RAGE_JOAAT("WEAPON_PISTOL"),
WEAPON_PISTOL_MK2 = RAGE_JOAAT("WEAPON_PISTOL_MK2"),
WEAPON_POOLCUE = RAGE_JOAAT("WEAPON_POOLCUE"),
WEAPON_PROXMINE = RAGE_JOAAT("WEAPON_PROXMINE"),
WEAPON_PUMPSHOTGUN = RAGE_JOAAT("WEAPON_PUMPSHOTGUN"),
WEAPON_PUMPSHOTGUN_MK2 = RAGE_JOAAT("WEAPON_PUMPSHOTGUN_MK2"),
WEAPON_RAILGUN = RAGE_JOAAT("WEAPON_RAILGUN"),
WEAPON_RAYCARBINE = RAGE_JOAAT("WEAPON_RAYCARBINE"),
WEAPON_RAYPISTOL = RAGE_JOAAT("WEAPON_RAYPISTOL"),
WEAPON_RAYMINIGUN = RAGE_JOAAT("WEAPON_RAYMINIGUN"),
WEAPON_REVOLVER = RAGE_JOAAT("WEAPON_REVOLVER"),
WEAPON_REVOLVER_MK2 = RAGE_JOAAT("WEAPON_REVOLVER_MK2"),
WEAPON_RPG = RAGE_JOAAT("WEAPON_RPG"),
WEAPON_SAWNOFFSHOTGUN = RAGE_JOAAT("WEAPON_SAWNOFFSHOTGUN"),
WEAPON_SMG = RAGE_JOAAT("WEAPON_SMG"),
WEAPON_SMG_MK2 = RAGE_JOAAT("WEAPON_SMG_MK2"),
WEAPON_SMOKEGRENADE = RAGE_JOAAT("WEAPON_SMOKEGRENADE"),
WEAPON_SNIPERRIFLE = RAGE_JOAAT("WEAPON_SNIPERRIFLE"),
WEAPON_SNOWBALL = RAGE_JOAAT("WEAPON_SNOWBALL"),
WEAPON_SNSPISTOL = RAGE_JOAAT("WEAPON_SNSPISTOL"),
WEAPON_SNSPISTOL_MK2 = RAGE_JOAAT("WEAPON_SNSPISTOL_MK2"),
WEAPON_SPECIALCARBINE = RAGE_JOAAT("WEAPON_SPECIALCARBINE"),
WEAPON_SPECIALCARBINE_MK2 = RAGE_JOAAT("WEAPON_SPECIALCARBINE_MK2"),
WEAPON_STICKYBOMB = RAGE_JOAAT("WEAPON_STICKYBOMB"),
WEAPON_STINGER = RAGE_JOAAT("WEAPON_STINGER"),
WEAPON_STONE_HATCHET = RAGE_JOAAT("WEAPON_STONE_HATCHET"),
WEAPON_STUNGUN = RAGE_JOAAT("WEAPON_STUNGUN"),
WEAPON_STUNGUN_MP = RAGE_JOAAT("WEAPON_STUNGUN_MP"),
WEAPON_SWITCHBLADE = RAGE_JOAAT("WEAPON_SWITCHBLADE"),
WEAPON_UNARMED = RAGE_JOAAT("WEAPON_UNARMED"),
WEAPON_VINTAGEPISTOL = RAGE_JOAAT("WEAPON_VINTAGEPISTOL"),
WEAPON_WRENCH = RAGE_JOAAT("WEAPON_WRENCH"),
};
constexpr uint32_t weapon_list[]
{
WEAPON_ADVANCEDRIFLE,
WEAPON_APPISTOL,
WEAPON_ASSAULTRIFLE,
WEAPON_ASSAULTRIFLE_MK2,
WEAPON_ASSAULTSHOTGUN,
WEAPON_ASSAULTSMG,
WEAPON_BALL,
WEAPON_BAT,
WEAPON_BATTLEAXE,
WEAPON_BOTTLE,
WEAPON_BULLPUPRIFLE,
WEAPON_BULLPUPRIFLE_MK2,
WEAPON_BULLPUPSHOTGUN,
WEAPON_BZGAS,
WEAPON_CARBINERIFLE,
WEAPON_CARBINERIFLE_MK2,
WEAPON_COMBATMG,
WEAPON_COMBATMG_MK2,
WEAPON_COMBATPDW,
WEAPON_COMBATPISTOL,
WEAPON_COMPACTLAUNCHER,
WEAPON_COMPACTRIFLE,
WEAPON_CROWBAR,
WEAPON_DAGGER,
WEAPON_DOUBLEACTION,
WEAPON_EMPLAUNCHER,
WEAPON_FERTILIZERCAN,
WEAPON_FIREEXTINGUISHER,
WEAPON_FIREWORK,
WEAPON_FLARE,
WEAPON_FLAREGUN,
WEAPON_FLASHLIGHT,
WEAPON_GOLFCLUB,
WEAPON_GRENADE,
WEAPON_GRENADELAUNCHER,
WEAPON_GRENADELAUNCHER_SMOKE,
WEAPON_GUSENBERG,
WEAPON_HAMMER,
WEAPON_HATCHET,
WEAPON_HAZARDCAN,
WEAPON_HEAVYPISTOL,
WEAPON_HEAVYRIFLE,
WEAPON_HEAVYSHOTGUN,
WEAPON_HEAVYSNIPER,
WEAPON_HEAVYSNIPER_MK2,
WEAPON_HOMINGLAUNCHER,
WEAPON_KNIFE,
WEAPON_KNUCKLE,
WEAPON_MACHETE,
WEAPON_MACHINEPISTOL,
WEAPON_MARKSMANPISTOL,
WEAPON_MARKSMANRIFLE,
WEAPON_MARKSMANRIFLE_MK2,
WEAPON_MG,
WEAPON_MICROSMG,
WEAPON_MILITARYRIFLE,
WEAPON_MINIGUN,
WEAPON_MINISMG,
WEAPON_MOLOTOV,
WEAPON_MUSKET,
WEAPON_NIGHTSTICK,
WEAPON_PETROLCAN,
WEAPON_PIPEBOMB,
WEAPON_PISTOL,
WEAPON_PISTOL50,
WEAPON_PISTOL_MK2,
WEAPON_POOLCUE,
WEAPON_PROXMINE,
WEAPON_PUMPSHOTGUN,
WEAPON_PUMPSHOTGUN_MK2,
WEAPON_RAILGUN,
WEAPON_RAYCARBINE,
WEAPON_RAYMINIGUN,
WEAPON_RAYPISTOL,
WEAPON_REVOLVER,
WEAPON_REVOLVER_MK2,
WEAPON_RPG,
WEAPON_SAWNOFFSHOTGUN,
WEAPON_SMG,
WEAPON_SMG_MK2,
WEAPON_SMOKEGRENADE,
WEAPON_SNIPERRIFLE,
WEAPON_SNOWBALL,
WEAPON_SNSPISTOL,
WEAPON_SNSPISTOL_MK2,
WEAPON_SPECIALCARBINE,
WEAPON_SPECIALCARBINE_MK2,
WEAPON_STICKYBOMB,
WEAPON_STINGER,
WEAPON_STONE_HATCHET,
WEAPON_STUNGUN,
WEAPON_STUNGUN_MP,
WEAPON_SWITCHBLADE,
WEAPON_UNARMED,
WEAPON_VINTAGEPISTOL,
WEAPON_WRENCH,
};
enum Gadgets : Hash
{
GADGET_OBJECT = RAGE_JOAAT("OBJECT"),
GADGET_PARACHUTE = RAGE_JOAAT("GADGET_PARACHUTE")
};
enum WeaponComponents : Hash
{
COMPONENT_ADVANCEDRIFLE_CLIP_01 = RAGE_JOAAT("COMPONENT_ADVANCEDRIFLE_CLIP_01"),
COMPONENT_ADVANCEDRIFLE_CLIP_02 = RAGE_JOAAT("COMPONENT_ADVANCEDRIFLE_CLIP_02"),
COMPONENT_ADVANCEDRIFLE_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_ADVANCEDRIFLE_VARMOD_LUXE"),
COMPONENT_APPISTOL_CLIP_01 = RAGE_JOAAT("COMPONENT_APPISTOL_CLIP_01"),
COMPONENT_APPISTOL_CLIP_02 = RAGE_JOAAT("COMPONENT_APPISTOL_CLIP_02"),
COMPONENT_APPISTOL_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_APPISTOL_VARMOD_LUXE"),
COMPONENT_ASSAULTRIFLE_CLIP_01 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_CLIP_01"),
COMPONENT_ASSAULTRIFLE_CLIP_02 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_CLIP_02"),
COMPONENT_ASSAULTRIFLE_CLIP_03 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_CLIP_03"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_02"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_03"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_04"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_05"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_06"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_07"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_08"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_09"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_10"),
COMPONENT_ASSAULTRIFLE_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CAMO_IND_01"),
COMPONENT_ASSAULTRIFLE_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CLIP_01"),
COMPONENT_ASSAULTRIFLE_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CLIP_02"),
COMPONENT_ASSAULTRIFLE_MK2_CLIP_ARMORPIERCING = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CLIP_ARMORPIERCING"),
COMPONENT_ASSAULTRIFLE_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CLIP_FMJ"),
COMPONENT_ASSAULTRIFLE_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CLIP_INCENDIARY"),
COMPONENT_ASSAULTRIFLE_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_MK2_CLIP_TRACER"),
COMPONENT_ASSAULTRIFLE_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_ASSAULTRIFLE_VARMOD_LUXE"),
COMPONENT_ASSAULTSHOTGUN_CLIP_01 = RAGE_JOAAT("COMPONENT_ASSAULTSHOTGUN_CLIP_01"),
COMPONENT_ASSAULTSHOTGUN_CLIP_02 = RAGE_JOAAT("COMPONENT_ASSAULTSHOTGUN_CLIP_02"),
COMPONENT_ASSAULTSMG_CLIP_01 = RAGE_JOAAT("COMPONENT_ASSAULTSMG_CLIP_01"),
COMPONENT_ASSAULTSMG_CLIP_02 = RAGE_JOAAT("COMPONENT_ASSAULTSMG_CLIP_02"),
COMPONENT_ASSAULTSMG_VARMOD_LOWRIDER = RAGE_JOAAT("COMPONENT_ASSAULTSMG_VARMOD_LOWRIDER"),
COMPONENT_AT_AR_AFGRIP = RAGE_JOAAT("COMPONENT_AT_AR_AFGRIP"),
COMPONENT_AT_AR_AFGRIP_02 = RAGE_JOAAT("COMPONENT_AT_AR_AFGRIP_02"),
COMPONENT_AT_AR_BARREL_01 = RAGE_JOAAT("COMPONENT_AT_AR_BARREL_01"),
COMPONENT_AT_AR_BARREL_02 = RAGE_JOAAT("COMPONENT_AT_AR_BARREL_02"),
COMPONENT_AT_AR_FLSH = RAGE_JOAAT("COMPONENT_AT_AR_FLSH"),
COMPONENT_AT_AR_SUPP = RAGE_JOAAT("COMPONENT_AT_AR_SUPP"),
COMPONENT_AT_AR_SUPP_02 = RAGE_JOAAT("COMPONENT_AT_AR_SUPP_02"),
COMPONENT_AT_BP_BARREL_01 = RAGE_JOAAT("COMPONENT_AT_BP_BARREL_01"),
COMPONENT_AT_BP_BARREL_02 = RAGE_JOAAT("COMPONENT_AT_BP_BARREL_02"),
COMPONENT_AT_CR_BARREL_01 = RAGE_JOAAT("COMPONENT_AT_CR_BARREL_01"),
COMPONENT_AT_CR_BARREL_02 = RAGE_JOAAT("COMPONENT_AT_CR_BARREL_02"),
COMPONENT_AT_MG_BARREL_01 = RAGE_JOAAT("COMPONENT_AT_MG_BARREL_01"),
COMPONENT_AT_MG_BARREL_02 = RAGE_JOAAT("COMPONENT_AT_MG_BARREL_02"),
COMPONENT_AT_MRFL_BARREL_01 = RAGE_JOAAT("COMPONENT_AT_MRFL_BARREL_01"),
COMPONENT_AT_MRFL_BARREL_02 = RAGE_JOAAT("COMPONENT_AT_MRFL_BARREL_02"),
COMPONENT_AT_MUZZLE_01 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_01"),
COMPONENT_AT_MUZZLE_02 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_02"),
COMPONENT_AT_MUZZLE_03 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_03"),
COMPONENT_AT_MUZZLE_04 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_04"),
COMPONENT_AT_MUZZLE_05 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_05"),
COMPONENT_AT_MUZZLE_06 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_06"),
COMPONENT_AT_MUZZLE_07 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_07"),
COMPONENT_AT_MUZZLE_08 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_08"),
COMPONENT_AT_MUZZLE_09 = RAGE_JOAAT("COMPONENT_AT_MUZZLE_09"),
COMPONENT_AT_PI_COMP = RAGE_JOAAT("COMPONENT_AT_PI_COMP"),
COMPONENT_AT_PI_COMP_02 = RAGE_JOAAT("COMPONENT_AT_PI_COMP_02"),
COMPONENT_AT_PI_COMP_03 = RAGE_JOAAT("COMPONENT_AT_PI_COMP_03"),
COMPONENT_AT_PI_FLSH = RAGE_JOAAT("COMPONENT_AT_PI_FLSH"),
COMPONENT_AT_PI_FLSH_02 = RAGE_JOAAT("COMPONENT_AT_PI_FLSH_02"),
COMPONENT_AT_PI_FLSH_03 = RAGE_JOAAT("COMPONENT_AT_PI_FLSH_03"),
COMPONENT_AT_PI_RAIL = RAGE_JOAAT("COMPONENT_AT_PI_RAIL"),
COMPONENT_AT_PI_RAIL_02 = RAGE_JOAAT("COMPONENT_AT_PI_RAIL_02"),
COMPONENT_AT_PI_SUPP = RAGE_JOAAT("COMPONENT_AT_PI_SUPP"),
COMPONENT_AT_PI_SUPP_02 = RAGE_JOAAT("COMPONENT_AT_PI_SUPP_02"),
COMPONENT_AT_SB_BARREL_01 = RAGE_JOAAT("COMPONENT_AT_SB_BARREL_01"),
COMPONENT_AT_SB_BARREL_02 = RAGE_JOAAT("COMPONENT_AT_SB_BARREL_02"),
COMPONENT_AT_SCOPE_LARGE = RAGE_JOAAT("COMPONENT_AT_SCOPE_LARGE"),
COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM = RAGE_JOAAT("COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM"),
COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM_MK2 = RAGE_JOAAT("COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM_MK2"),
COMPONENT_AT_SCOPE_LARGE_MK2 = RAGE_JOAAT("COMPONENT_AT_SCOPE_LARGE_MK2"),
COMPONENT_AT_SCOPE_MACRO = RAGE_JOAAT("COMPONENT_AT_SCOPE_MACRO"),
COMPONENT_AT_SCOPE_MACRO_02 = RAGE_JOAAT("COMPONENT_AT_SCOPE_MACRO_02"),
COMPONENT_AT_SCOPE_MACRO_02_MK2 = RAGE_JOAAT("COMPONENT_AT_SCOPE_MACRO_02_MK2"),
COMPONENT_AT_SCOPE_MACRO_02_SMG_MK2 = RAGE_JOAAT("COMPONENT_AT_SCOPE_MACRO_02_SMG_MK2"),
COMPONENT_AT_SCOPE_MACRO_MK2 = RAGE_JOAAT("COMPONENT_AT_SCOPE_MACRO_MK2"),
COMPONENT_AT_SCOPE_MAX = RAGE_JOAAT("COMPONENT_AT_SCOPE_MAX"),
COMPONENT_AT_SCOPE_MEDIUM = RAGE_JOAAT("COMPONENT_AT_SCOPE_MEDIUM"),
COMPONENT_AT_SCOPE_MEDIUM_MK2 = RAGE_JOAAT("COMPONENT_AT_SCOPE_MEDIUM_MK2"),
COMPONENT_AT_SCOPE_NV = RAGE_JOAAT("COMPONENT_AT_SCOPE_NV"),
COMPONENT_AT_SCOPE_SMALL = RAGE_JOAAT("COMPONENT_AT_SCOPE_SMALL"),
COMPONENT_AT_SCOPE_SMALL_02 = RAGE_JOAAT("COMPONENT_AT_SCOPE_SMALL_02"),
COMPONENT_AT_SCOPE_SMALL_MK2 = RAGE_JOAAT("COMPONENT_AT_SCOPE_SMALL_MK2"),
COMPONENT_AT_SCOPE_SMALL_SMG_MK2 = RAGE_JOAAT("COMPONENT_AT_SCOPE_SMALL_SMG_MK2"),
COMPONENT_AT_SCOPE_THERMAL = RAGE_JOAAT("COMPONENT_AT_SCOPE_THERMAL"),
COMPONENT_AT_SC_BARREL_01 = RAGE_JOAAT("COMPONENT_AT_SC_BARREL_01"),
COMPONENT_AT_SC_BARREL_02 = RAGE_JOAAT("COMPONENT_AT_SC_BARREL_02"),
COMPONENT_AT_SIGHTS = RAGE_JOAAT("COMPONENT_AT_SIGHTS"),
COMPONENT_AT_SIGHTS_SMG = RAGE_JOAAT("COMPONENT_AT_SIGHTS_SMG"),
COMPONENT_AT_SR_BARREL_01 = RAGE_JOAAT("COMPONENT_AT_SR_BARREL_01"),
COMPONENT_AT_SR_BARREL_02 = RAGE_JOAAT("COMPONENT_AT_SR_BARREL_02"),
COMPONENT_AT_SR_SUPP = RAGE_JOAAT("COMPONENT_AT_SR_SUPP"),
COMPONENT_AT_SR_SUPP_03 = RAGE_JOAAT("COMPONENT_AT_SR_SUPP_03"),
COMPONENT_BULLPUPRIFLE_CLIP_01 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_CLIP_01"),
COMPONENT_BULLPUPRIFLE_CLIP_02 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_CLIP_02"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_02"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_03"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_04"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_05"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_06"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_07"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_08"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_09"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_10"),
COMPONENT_BULLPUPRIFLE_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CAMO_IND_01"),
COMPONENT_BULLPUPRIFLE_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CLIP_01"),
COMPONENT_BULLPUPRIFLE_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CLIP_02"),
COMPONENT_BULLPUPRIFLE_MK2_CLIP_ARMORPIERCING = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CLIP_ARMORPIERCING"),
COMPONENT_BULLPUPRIFLE_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CLIP_FMJ"),
COMPONENT_BULLPUPRIFLE_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CLIP_INCENDIARY"),
COMPONENT_BULLPUPRIFLE_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_MK2_CLIP_TRACER"),
COMPONENT_BULLPUPRIFLE_VARMOD_LOW = RAGE_JOAAT("COMPONENT_BULLPUPRIFLE_VARMOD_LOW"),
COMPONENT_CARBINERIFLE_CLIP_01 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_CLIP_01"),
COMPONENT_CARBINERIFLE_CLIP_02 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_CLIP_02"),
COMPONENT_CARBINERIFLE_CLIP_03 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_CLIP_03"),
COMPONENT_CARBINERIFLE_MK2_CAMO = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO"),
COMPONENT_CARBINERIFLE_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_02"),
COMPONENT_CARBINERIFLE_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_03"),
COMPONENT_CARBINERIFLE_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_04"),
COMPONENT_CARBINERIFLE_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_05"),
COMPONENT_CARBINERIFLE_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_06"),
COMPONENT_CARBINERIFLE_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_07"),
COMPONENT_CARBINERIFLE_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_08"),
COMPONENT_CARBINERIFLE_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_09"),
COMPONENT_CARBINERIFLE_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_10"),
COMPONENT_CARBINERIFLE_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CAMO_IND_01"),
COMPONENT_CARBINERIFLE_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CLIP_01"),
COMPONENT_CARBINERIFLE_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CLIP_02"),
COMPONENT_CARBINERIFLE_MK2_CLIP_ARMORPIERCING = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CLIP_ARMORPIERCING"),
COMPONENT_CARBINERIFLE_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CLIP_FMJ"),
COMPONENT_CARBINERIFLE_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CLIP_INCENDIARY"),
COMPONENT_CARBINERIFLE_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_CARBINERIFLE_MK2_CLIP_TRACER"),
COMPONENT_CARBINERIFLE_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_CARBINERIFLE_VARMOD_LUXE"),
COMPONENT_COMBATMG_CLIP_01 = RAGE_JOAAT("COMPONENT_COMBATMG_CLIP_01"),
COMPONENT_COMBATMG_CLIP_02 = RAGE_JOAAT("COMPONENT_COMBATMG_CLIP_02"),
COMPONENT_COMBATMG_MK2_CAMO = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO"),
COMPONENT_COMBATMG_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_02"),
COMPONENT_COMBATMG_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_03"),
COMPONENT_COMBATMG_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_04"),
COMPONENT_COMBATMG_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_05"),
COMPONENT_COMBATMG_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_06"),
COMPONENT_COMBATMG_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_07"),
COMPONENT_COMBATMG_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_08"),
COMPONENT_COMBATMG_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_09"),
COMPONENT_COMBATMG_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_10"),
COMPONENT_COMBATMG_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CAMO_IND_01"),
COMPONENT_COMBATMG_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CLIP_01"),
COMPONENT_COMBATMG_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CLIP_02"),
COMPONENT_COMBATMG_MK2_CLIP_ARMORPIERCING = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CLIP_ARMORPIERCING"),
COMPONENT_COMBATMG_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CLIP_FMJ"),
COMPONENT_COMBATMG_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CLIP_INCENDIARY"),
COMPONENT_COMBATMG_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_COMBATMG_MK2_CLIP_TRACER"),
COMPONENT_COMBATMG_VARMOD_LOWRIDER = RAGE_JOAAT("COMPONENT_COMBATMG_VARMOD_LOWRIDER"),
COMPONENT_COMBATPDW_CLIP_01 = RAGE_JOAAT("COMPONENT_COMBATPDW_CLIP_01"),
COMPONENT_COMBATPDW_CLIP_02 = RAGE_JOAAT("COMPONENT_COMBATPDW_CLIP_02"),
COMPONENT_COMBATPDW_CLIP_03 = RAGE_JOAAT("COMPONENT_COMBATPDW_CLIP_03"),
COMPONENT_COMBATPISTOL_CLIP_01 = RAGE_JOAAT("COMPONENT_COMBATPISTOL_CLIP_01"),
COMPONENT_COMBATPISTOL_CLIP_02 = RAGE_JOAAT("COMPONENT_COMBATPISTOL_CLIP_02"),
COMPONENT_COMBATPISTOL_VARMOD_LOWRIDER = RAGE_JOAAT("COMPONENT_COMBATPISTOL_VARMOD_LOWRIDER"),
COMPONENT_COMPACTRIFLE_CLIP_01 = RAGE_JOAAT("COMPONENT_COMPACTRIFLE_CLIP_01"),
COMPONENT_COMPACTRIFLE_CLIP_02 = RAGE_JOAAT("COMPONENT_COMPACTRIFLE_CLIP_02"),
COMPONENT_COMPACTRIFLE_CLIP_03 = RAGE_JOAAT("COMPONENT_COMPACTRIFLE_CLIP_03"),
COMPONENT_GRENADELAUNCHER_CLIP_01 = RAGE_JOAAT("COMPONENT_GRENADELAUNCHER_CLIP_01"),
COMPONENT_GUSENBERG_CLIP_01 = RAGE_JOAAT("COMPONENT_GUSENBERG_CLIP_01"),
COMPONENT_GUSENBERG_CLIP_02 = RAGE_JOAAT("COMPONENT_GUSENBERG_CLIP_02"),
COMPONENT_HEAVYPISTOL_CLIP_01 = RAGE_JOAAT("COMPONENT_HEAVYPISTOL_CLIP_01"),
COMPONENT_HEAVYPISTOL_CLIP_02 = RAGE_JOAAT("COMPONENT_HEAVYPISTOL_CLIP_02"),
COMPONENT_HEAVYPISTOL_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_HEAVYPISTOL_VARMOD_LUXE"),
COMPONENT_HEAVYSHOTGUN_CLIP_01 = RAGE_JOAAT("COMPONENT_HEAVYSHOTGUN_CLIP_01"),
COMPONENT_HEAVYSHOTGUN_CLIP_02 = RAGE_JOAAT("COMPONENT_HEAVYSHOTGUN_CLIP_02"),
COMPONENT_HEAVYSHOTGUN_CLIP_03 = RAGE_JOAAT("COMPONENT_HEAVYSHOTGUN_CLIP_03"),
COMPONENT_HEAVYSNIPER_CLIP_01 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_CLIP_01"),
COMPONENT_HEAVYSNIPER_MK2_CAMO = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_02"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_03"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_04"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_05"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_06"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_07"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_08"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_09"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_10"),
COMPONENT_HEAVYSNIPER_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CAMO_IND_01"),
COMPONENT_HEAVYSNIPER_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CLIP_01"),
COMPONENT_HEAVYSNIPER_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CLIP_02"),
COMPONENT_HEAVYSNIPER_MK2_CLIP_ARMORPIERCING = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CLIP_ARMORPIERCING"),
COMPONENT_HEAVYSNIPER_MK2_CLIP_EXPLOSIVE = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CLIP_EXPLOSIVE"),
COMPONENT_HEAVYSNIPER_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CLIP_FMJ"),
COMPONENT_HEAVYSNIPER_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_HEAVYSNIPER_MK2_CLIP_INCENDIARY"),
COMPONENT_KNUCKLE_VARMOD_BALLAS = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_BALLAS"),
COMPONENT_KNUCKLE_VARMOD_BASE = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_BASE"),
COMPONENT_KNUCKLE_VARMOD_DIAMOND = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_DIAMOND"),
COMPONENT_KNUCKLE_VARMOD_DOLLAR = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_DOLLAR"),
COMPONENT_KNUCKLE_VARMOD_HATE = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_HATE"),
COMPONENT_KNUCKLE_VARMOD_KING = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_KING"),
COMPONENT_KNUCKLE_VARMOD_LOVE = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_LOVE"),
COMPONENT_KNUCKLE_VARMOD_PIMP = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_PIMP"),
COMPONENT_KNUCKLE_VARMOD_PLAYER = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_PLAYER"),
COMPONENT_KNUCKLE_VARMOD_VAGOS = RAGE_JOAAT("COMPONENT_KNUCKLE_VARMOD_VAGOS"),
COMPONENT_MACHINEPISTOL_CLIP_01 = RAGE_JOAAT("COMPONENT_MACHINEPISTOL_CLIP_01"),
COMPONENT_MACHINEPISTOL_CLIP_02 = RAGE_JOAAT("COMPONENT_MACHINEPISTOL_CLIP_02"),
COMPONENT_MACHINEPISTOL_CLIP_03 = RAGE_JOAAT("COMPONENT_MACHINEPISTOL_CLIP_03"),
COMPONENT_MARKSMANRIFLE_CLIP_01 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_CLIP_01"),
COMPONENT_MARKSMANRIFLE_CLIP_02 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_CLIP_02"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_02"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_03"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_04"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_05"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_06"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_07"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_08"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_09"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_10"),
COMPONENT_MARKSMANRIFLE_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CAMO_IND_01"),
COMPONENT_MARKSMANRIFLE_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CLIP_01"),
COMPONENT_MARKSMANRIFLE_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CLIP_02"),
COMPONENT_MARKSMANRIFLE_MK2_CLIP_ARMORPIERCING = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CLIP_ARMORPIERCING"),
COMPONENT_MARKSMANRIFLE_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CLIP_FMJ"),
COMPONENT_MARKSMANRIFLE_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CLIP_INCENDIARY"),
COMPONENT_MARKSMANRIFLE_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_MK2_CLIP_TRACER"),
COMPONENT_MARKSMANRIFLE_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_MARKSMANRIFLE_VARMOD_LUXE"),
COMPONENT_MG_CLIP_01 = RAGE_JOAAT("COMPONENT_MG_CLIP_01"),
COMPONENT_MG_CLIP_02 = RAGE_JOAAT("COMPONENT_MG_CLIP_02"),
COMPONENT_MG_VARMOD_LOWRIDER = RAGE_JOAAT("COMPONENT_MG_VARMOD_LOWRIDER"),
COMPONENT_MICROSMG_CLIP_01 = RAGE_JOAAT("COMPONENT_MICROSMG_CLIP_01"),
COMPONENT_MICROSMG_CLIP_02 = RAGE_JOAAT("COMPONENT_MICROSMG_CLIP_02"),
COMPONENT_MICROSMG_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_MICROSMG_VARMOD_LUXE"),
COMPONENT_MINISMG_CLIP_01 = RAGE_JOAAT("COMPONENT_MINISMG_CLIP_01"),
COMPONENT_MINISMG_CLIP_02 = RAGE_JOAAT("COMPONENT_MINISMG_CLIP_02"),
COMPONENT_PISTOL50_CLIP_01 = RAGE_JOAAT("COMPONENT_PISTOL50_CLIP_01"),
COMPONENT_PISTOL50_CLIP_02 = RAGE_JOAAT("COMPONENT_PISTOL50_CLIP_02"),
COMPONENT_PISTOL50_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_PISTOL50_VARMOD_LUXE"),
COMPONENT_PISTOL_CLIP_01 = RAGE_JOAAT("COMPONENT_PISTOL_CLIP_01"),
COMPONENT_PISTOL_CLIP_02 = RAGE_JOAAT("COMPONENT_PISTOL_CLIP_02"),
COMPONENT_PISTOL_MK2_CAMO = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO"),
COMPONENT_PISTOL_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_02"),
COMPONENT_PISTOL_MK2_CAMO_02_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_02_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_03"),
COMPONENT_PISTOL_MK2_CAMO_03_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_03_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_04"),
COMPONENT_PISTOL_MK2_CAMO_04_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_04_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_05"),
COMPONENT_PISTOL_MK2_CAMO_05_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_05_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_06"),
COMPONENT_PISTOL_MK2_CAMO_06_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_06_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_07"),
COMPONENT_PISTOL_MK2_CAMO_07_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_07_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_08"),
COMPONENT_PISTOL_MK2_CAMO_08_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_08_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_09"),
COMPONENT_PISTOL_MK2_CAMO_09_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_09_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_10"),
COMPONENT_PISTOL_MK2_CAMO_10_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_10_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_IND_01"),
COMPONENT_PISTOL_MK2_CAMO_IND_01_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_IND_01_SLIDE"),
COMPONENT_PISTOL_MK2_CAMO_SLIDE = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CAMO_SLIDE"),
COMPONENT_PISTOL_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CLIP_01"),
COMPONENT_PISTOL_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CLIP_02"),
COMPONENT_PISTOL_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CLIP_FMJ"),
COMPONENT_PISTOL_MK2_CLIP_HOLLOWPOINT = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CLIP_HOLLOWPOINT"),
COMPONENT_PISTOL_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CLIP_INCENDIARY"),
COMPONENT_PISTOL_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_PISTOL_MK2_CLIP_TRACER"),
COMPONENT_PISTOL_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_PISTOL_VARMOD_LUXE"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_02"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_03"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_04"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_05"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_06"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_07"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_08"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_09"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_10"),
COMPONENT_PUMPSHOTGUN_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CAMO_IND_01"),
COMPONENT_PUMPSHOTGUN_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CLIP_01"),
COMPONENT_PUMPSHOTGUN_MK2_CLIP_ARMORPIERCING = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CLIP_ARMORPIERCING"),
COMPONENT_PUMPSHOTGUN_MK2_CLIP_EXPLOSIVE = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CLIP_EXPLOSIVE"),
COMPONENT_PUMPSHOTGUN_MK2_CLIP_HOLLOWPOINT = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CLIP_HOLLOWPOINT"),
COMPONENT_PUMPSHOTGUN_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_MK2_CLIP_INCENDIARY"),
COMPONENT_PUMPSHOTGUN_VARMOD_LOWRIDER = RAGE_JOAAT("COMPONENT_PUMPSHOTGUN_VARMOD_LOWRIDER"),
COMPONENT_REVOLVER_CLIP_01 = RAGE_JOAAT("COMPONENT_REVOLVER_CLIP_01"),
COMPONENT_REVOLVER_MK2_CAMO = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO"),
COMPONENT_REVOLVER_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_02"),
COMPONENT_REVOLVER_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_03"),
COMPONENT_REVOLVER_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_04"),
COMPONENT_REVOLVER_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_05"),
COMPONENT_REVOLVER_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_06"),
COMPONENT_REVOLVER_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_07"),
COMPONENT_REVOLVER_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_08"),
COMPONENT_REVOLVER_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_09"),
COMPONENT_REVOLVER_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_10"),
COMPONENT_REVOLVER_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CAMO_IND_01"),
COMPONENT_REVOLVER_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CLIP_01"),
COMPONENT_REVOLVER_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CLIP_FMJ"),
COMPONENT_REVOLVER_MK2_CLIP_HOLLOWPOINT = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CLIP_HOLLOWPOINT"),
COMPONENT_REVOLVER_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CLIP_INCENDIARY"),
COMPONENT_REVOLVER_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_REVOLVER_MK2_CLIP_TRACER"),
COMPONENT_REVOLVER_VARMOD_BOSS = RAGE_JOAAT("COMPONENT_REVOLVER_VARMOD_BOSS"),
COMPONENT_REVOLVER_VARMOD_GOON = RAGE_JOAAT("COMPONENT_REVOLVER_VARMOD_GOON"),
COMPONENT_SAWNOFFSHOTGUN_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_SAWNOFFSHOTGUN_VARMOD_LUXE"),
COMPONENT_SMG_CLIP_01 = RAGE_JOAAT("COMPONENT_SMG_CLIP_01"),
COMPONENT_SMG_CLIP_02 = RAGE_JOAAT("COMPONENT_SMG_CLIP_02"),
COMPONENT_SMG_CLIP_03 = RAGE_JOAAT("COMPONENT_SMG_CLIP_03"),
COMPONENT_SMG_MK2_CAMO = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO"),
COMPONENT_SMG_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_02"),
COMPONENT_SMG_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_03"),
COMPONENT_SMG_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_04"),
COMPONENT_SMG_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_05"),
COMPONENT_SMG_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_06"),
COMPONENT_SMG_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_07"),
COMPONENT_SMG_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_08"),
COMPONENT_SMG_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_09"),
COMPONENT_SMG_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_10"),
COMPONENT_SMG_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_SMG_MK2_CAMO_IND_01"),
COMPONENT_SMG_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_SMG_MK2_CLIP_01"),
COMPONENT_SMG_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_SMG_MK2_CLIP_02"),
COMPONENT_SMG_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_SMG_MK2_CLIP_FMJ"),
COMPONENT_SMG_MK2_CLIP_HOLLOWPOINT = RAGE_JOAAT("COMPONENT_SMG_MK2_CLIP_HOLLOWPOINT"),
COMPONENT_SMG_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_SMG_MK2_CLIP_INCENDIARY"),
COMPONENT_SMG_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_SMG_MK2_CLIP_TRACER"),
COMPONENT_SMG_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_SMG_VARMOD_LUXE"),
COMPONENT_SNIPERRIFLE_CLIP_01 = RAGE_JOAAT("COMPONENT_SNIPERRIFLE_CLIP_01"),
COMPONENT_SNIPERRIFLE_VARMOD_LUXE = RAGE_JOAAT("COMPONENT_SNIPERRIFLE_VARMOD_LUXE"),
COMPONENT_SNSPISTOL_CLIP_01 = RAGE_JOAAT("COMPONENT_SNSPISTOL_CLIP_01"),
COMPONENT_SNSPISTOL_CLIP_02 = RAGE_JOAAT("COMPONENT_SNSPISTOL_CLIP_02"),
COMPONENT_SNSPISTOL_MK2_CAMO = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO"),
COMPONENT_SNSPISTOL_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_02"),
COMPONENT_SNSPISTOL_MK2_CAMO_02_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_02_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_03"),
COMPONENT_SNSPISTOL_MK2_CAMO_03_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_03_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_04"),
COMPONENT_SNSPISTOL_MK2_CAMO_04_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_04_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_05"),
COMPONENT_SNSPISTOL_MK2_CAMO_05_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_05_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_06"),
COMPONENT_SNSPISTOL_MK2_CAMO_06_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_06_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_07"),
COMPONENT_SNSPISTOL_MK2_CAMO_07_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_07_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_08"),
COMPONENT_SNSPISTOL_MK2_CAMO_08_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_08_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_09"),
COMPONENT_SNSPISTOL_MK2_CAMO_09_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_09_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_10"),
COMPONENT_SNSPISTOL_MK2_CAMO_10_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_10_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_IND_01"),
COMPONENT_SNSPISTOL_MK2_CAMO_IND_01_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_IND_01_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CAMO_SLIDE = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CAMO_SLIDE"),
COMPONENT_SNSPISTOL_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CLIP_01"),
COMPONENT_SNSPISTOL_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CLIP_02"),
COMPONENT_SNSPISTOL_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CLIP_FMJ"),
COMPONENT_SNSPISTOL_MK2_CLIP_HOLLOWPOINT = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CLIP_HOLLOWPOINT"),
COMPONENT_SNSPISTOL_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CLIP_INCENDIARY"),
COMPONENT_SNSPISTOL_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_SNSPISTOL_MK2_CLIP_TRACER"),
COMPONENT_SNSPISTOL_VARMOD_LOWRIDER = RAGE_JOAAT("COMPONENT_SNSPISTOL_VARMOD_LOWRIDER"),
COMPONENT_SPECIALCARBINE_CLIP_01 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_CLIP_01"),
COMPONENT_SPECIALCARBINE_CLIP_02 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_CLIP_02"),
COMPONENT_SPECIALCARBINE_CLIP_03 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_CLIP_03"),
COMPONENT_SPECIALCARBINE_MK2_CAMO = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_02 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_02"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_03 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_03"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_04 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_04"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_05 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_05"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_06 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_06"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_07 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_07"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_08 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_08"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_09 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_09"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_10 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_10"),
COMPONENT_SPECIALCARBINE_MK2_CAMO_IND_01 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CAMO_IND_01"),
COMPONENT_SPECIALCARBINE_MK2_CLIP_01 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CLIP_01"),
COMPONENT_SPECIALCARBINE_MK2_CLIP_02 = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CLIP_02"),
COMPONENT_SPECIALCARBINE_MK2_CLIP_ARMORPIERCING = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CLIP_ARMORPIERCING"),
COMPONENT_SPECIALCARBINE_MK2_CLIP_FMJ = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CLIP_FMJ"),
COMPONENT_SPECIALCARBINE_MK2_CLIP_INCENDIARY = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CLIP_INCENDIARY"),
COMPONENT_SPECIALCARBINE_MK2_CLIP_TRACER = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_MK2_CLIP_TRACER"),
COMPONENT_SPECIALCARBINE_VARMOD_LOWRIDER = RAGE_JOAAT("COMPONENT_SPECIALCARBINE_VARMOD_LOWRIDER"),
COMPONENT_SWITCHBLADE_VARMOD_BASE = RAGE_JOAAT("COMPONENT_SWITCHBLADE_VARMOD_BASE"),
COMPONENT_SWITCHBLADE_VARMOD_VAR1 = RAGE_JOAAT("COMPONENT_SWITCHBLADE_VARMOD_VAR1"),
COMPONENT_SWITCHBLADE_VARMOD_VAR2 = RAGE_JOAAT("COMPONENT_SWITCHBLADE_VARMOD_VAR2"),
COMPONENT_VINTAGEPISTOL_CLIP_01 = RAGE_JOAAT("COMPONENT_VINTAGEPISTOL_CLIP_01"),
COMPONENT_VINTAGEPISTOL_CLIP_02 = RAGE_JOAAT("COMPONENT_VINTAGEPISTOL_CLIP_02")
};
enum AmmoTypeHashes : Hash
{
AMMO_NULL = 0x0, //Melee
AMMO_PISTOL = RAGE_JOAAT("AMMO_PISTOL"),
AMMO_SMG = RAGE_JOAAT("AMMO_SMG"),
AMMO_RIFLE = RAGE_JOAAT("AMMO_RIFLE"),
AMMO_MG = RAGE_JOAAT("AMMO_MG"),
AMMO_SHOTGUN = RAGE_JOAAT("AMMO_SHOTGUN"),
AMMO_STUNGUN = RAGE_JOAAT("AMMO_STUNGUN"),
AMMO_SNIPER = RAGE_JOAAT("AMMO_SNIPER"),
AMMO_SNIPER_REMOTE = RAGE_JOAAT("AMMO_SNIPER_REMOTE"),
AMMO_GRENADELAUNCHER = RAGE_JOAAT("AMMO_GRENADELAUNCHER"),
AMMO_GRENADELAUNCHER_SMOKE = RAGE_JOAAT("AMMO_GRENADELAUNCHER_SMOKE"),
AMMO_RPG = RAGE_JOAAT("AMMO_RPG"),
AMMO_STINGER = RAGE_JOAAT("AMMO_STINGER"),
AMMO_MINIGUN = RAGE_JOAAT("AMMO_MINIGUN"),
AMMO_GRENADE = RAGE_JOAAT("AMMO_GRENADE"),
AMMO_STICKYBOMB = RAGE_JOAAT("AMMO_STICKYBOMB"),
AMMO_SMOKEGRENADE = RAGE_JOAAT("AMMO_SMOKEGRENADE"),
AMMO_BZGAS = RAGE_JOAAT("AMMO_BZGAS"),
AMMO_MOLOTOV = RAGE_JOAAT("AMMO_MOLOTOV"),
AMMO_FIREEXTINGUISHER = RAGE_JOAAT("AMMO_FIREEXTINGUISHER"),
AMMO_PETROLCAN = RAGE_JOAAT("AMMO_PETROLCAN"),
AMMO_BALL = RAGE_JOAAT("AMMO_BALL"),
AMMO_FLARE = RAGE_JOAAT("AMMO_FLARE"),
AMMO_TANK = RAGE_JOAAT("AMMO_TANK"),
AMMO_SPACE_ROCKET = RAGE_JOAAT("AMMO_SPACE_ROCKET"),
AMMO_PLANE_ROCKET = RAGE_JOAAT("AMMO_PLANE_ROCKET"),
AMMO_PLAYER_LASER = RAGE_JOAAT("AMMO_PLAYER_LASER"),
AMMO_ENEMY_LASER = RAGE_JOAAT("AMMO_ENEMY_LASER"),
AMMO_BIRD_CRAP = RAGE_JOAAT("AMMO_BIRD_CRAP")
};
enum WeaponGroup : Hash
{
GROUP_MELEE = RAGE_JOAAT("GROUP_MELEE"),
GROUP_UNARMED = RAGE_JOAAT("GROUP_UNARMED"),
GROUP_PISTOL = RAGE_JOAAT("GROUP_PISTOL"),
GROUP_RIFLE = RAGE_JOAAT("GROUP_RIFLE"),
GROUP_MG = RAGE_JOAAT("GROUP_MG"),
GROUP_SHOTGUN = RAGE_JOAAT("GROUP_SHOTGUN"),
GROUP_STUNGUN = RAGE_JOAAT("GROUP_STUNGUN"),
GROUP_SNIPER = RAGE_JOAAT("GROUP_SNIPER"),
GROUP_HEAVY = RAGE_JOAAT("GROUP_HEAVY"),
GROUP_THROWN = RAGE_JOAAT("GROUP_THROWN"),
GROUP_FIREEXTINGUISHER = RAGE_JOAAT("GROUP_FIREEXTINGUISHER"),
GROUP_PETROLCAN = RAGE_JOAAT("GROUP_PETROLCAN"),
GROUP_DIGISCANNER = RAGE_JOAAT("GROUP_DIGISCANNER"),
GROUP_NIGHTVISION = RAGE_JOAAT("GROUP_NIGHTVISION"),
GROUP_PARACHUTE = RAGE_JOAAT("GROUP_PARACHUTE")
};

206
src/gta/array.hpp Normal file
View File

@ -0,0 +1,206 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "sysMemAllocator.hpp"
namespace rage
{
#pragma pack(push, 8)
template <typename T>
class atArray
{
public:
atArray()
{
m_data = nullptr;
m_count = 0;
m_size = 0;
}
atArray(const atArray& right)
{
m_count = right.m_count;
m_size = right.m_size;
m_data = (T*)rage::GetAllocator()->allocate(m_size * sizeof(T), 16, 0);
std::uninitialized_copy(right.m_data, right.m_data + right.m_count, m_data);
}
atArray(int capacity)
{
m_data = (T*)rage::GetAllocator()->allocate(capacity * sizeof(T), 16, 0);
m_count = 0;
m_size = capacity;
}
void clear()
{
m_count = 0;
m_size = 0;
if (m_data)
{
rage::GetAllocator()->free(m_data);
m_data = nullptr;
}
}
void append(atArray<T> array_value)
{
auto value_array_size = array_value.size();
auto old_capacity = m_count;
if ((value_array_size + m_count) > std::numeric_limits<uint16_t>::max())
LOG(FATAL) << "RAGE atArray::append was given too large of an atArray to append";
auto size = (uint16_t)value_array_size;
expand(m_count + size);
m_size += size;
auto i = old_capacity;
for (auto weapon_hash : array_value)
{
m_data[i] = weapon_hash;
i++;
}
}
void append(std::vector<T> value_array)
{
auto value_array_size = value_array.size();
auto old_capacity = m_count;
if ((value_array_size + m_count) > std::numeric_limits<uint16_t>::max())
LOG(FATAL) << "RAGE atArray::append was given too large of a vector to append";
auto size = (uint16_t)value_array_size;
expand(m_count + size);
m_size += size;
auto i = old_capacity;
for (auto weapon_hash : value_array)
{
m_data[i] = weapon_hash;
i++;
}
}
void append(const std::initializer_list<T> value_array)
{
auto value_array_size = value_array.size();
auto old_capacity = m_count;
if ((value_array_size + m_count) > std::numeric_limits<uint16_t>::max())
LOG(FATAL) << "RAGE atArray::append was given too large of a list to append";
auto size = (uint16_t)value_array_size;
expand(m_count + size);
m_size += size;
auto i = old_capacity;
for (const T* it = value_array.begin(); it != value_array.end(); ++it)
{
m_data[i] = *it;
i++;
}
}
void append(T value)
{
set(m_count, value);
}
void set(uint16_t offset, const T& value)
{
if (offset >= m_count)
{
expand(offset + 1);
}
if (offset >= m_size)
{
m_size = offset + 1;
}
m_data[offset] = value;
}
void expand(uint16_t newSize)
{
if (m_count >= newSize)
{
return;
}
T* newOffset = (T*)rage::GetAllocator()->allocate(newSize * sizeof(T), 16, 0);
// initialize the new entries
std::uninitialized_fill(newOffset, newOffset + newSize, T());
// copy the existing entries
if (m_data)
{
std::copy(m_data, m_data + m_size, newOffset);
rage::GetAllocator()->free(m_data);
}
m_data = newOffset;
m_count = newSize;
}
T* begin() const
{
return &m_data[0];
}
T* end() const
{
return &m_data[m_size];
}
T* data() const
{
return m_data;
}
std::uint16_t size() const
{
return m_size;
}
std::uint16_t count() const
{
return m_count;
}
T& operator[](std::uint16_t index) const
{
return m_data[index];
}
friend std::ostream& operator<<(std::ostream& o, const atArray<T>& j)
{
o << "Array Size: " << j.size() << std::endl;
for(int i = 0; i < j.size(); i++)
{
T item = j[i];
if (std::is_pointer<T>())
o << "\tArray Pointer: " << HEX_TO_UPPER(item) << " Item: [" << HEX_TO_UPPER(*(T*)item) << "]";
else
o << "\tArray Item: " << item;
if (i != j.size() - 1)
o << std::endl;
}
return o;
}
private:
T* m_data;
std::uint16_t m_size;
std::uint16_t m_count;
};
static_assert(sizeof(rage::atArray<Hash>) == 0x10, "rage::atArray is not properly sized");
#pragma pack(pop)
}

4
src/gta/base.hpp Normal file
View File

@ -0,0 +1,4 @@
#pragma once
#include "base/datBase.hpp"
#include "base/pgBase.hpp"

60
src/gta/blip.hpp Normal file
View File

@ -0,0 +1,60 @@
#pragma once
#include "natives.hpp"
namespace rage
{
#pragma pack(push, 1)
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
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
static_assert(sizeof(Blip_t) == 0x70, "Blip_t is not sized properly.");
#pragma pack(pop)
class BlipEntry
{
public:
Blip_t* m_pBlip; //0x0000
};//Size=0x0008
class BlipList
{
public:
BlipEntry m_Blips[1500]; //0x0000
char _0x2EE0[56];
};//Size=0x2F18
}

19
src/gta/color.hpp Normal file
View File

@ -0,0 +1,19 @@
#pragma once
#include <cstdint>
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)
{}
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

@ -0,0 +1,90 @@
#pragma once
#include "array.hpp"
namespace rage
{
class decal;
class decal_list;
class decal_controller
{
public:
char pad_0x0000[0xB0]; //0x0000
decal_list* ped_decal_list[69];
decal_list* all_tattoo_decals_active; //0x02D8
}; //Size=0x02E0
class decal_list
{
public:
virtual ~decal_list() = default;
virtual __int64 refresh_list(__int64) = 0;
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
__int64 a1 = (__int64)this;
v1 = 0;
if (*(DWORD*)(a1 + 0x15E0) > 0)
{
v2 = (BYTE*)(a1 + 0x1E4);
do
{
*v2 |= 0x40u;
++v1;
v2 += 0x28;
} while (v1 < *(DWORD*)(a1 + 0x15E0));
}
*(DWORD*)(a1 + 0x15E0) = 0;
}
}; //Size=0x15F1
class decal_helper
{
public:
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
}; //Size=0x0078
static_assert (sizeof(decal) == 0x78, "decal is not sized properly.");
}

1660
src/gta/enums.hpp Normal file

File diff suppressed because it is too large Load Diff

7
src/gta/extensible.hpp Normal file
View File

@ -0,0 +1,7 @@
#pragma once
#include <cstdint>
#include "ref_aware.hpp"
#include "base/fwExtension.hpp"
#include "base/fwExtensibleBase.hpp"
#include "base/fwExtensionContainer.hpp"

263
src/gta/fidevice.cpp Normal file
View File

@ -0,0 +1,263 @@
#include "fidevice.hpp"
#include "pointers.hpp"
namespace rage
{
#define PURECALL() LOG(FATAL) << "pure fiDevice call (" __FUNCTION__ ")"; return 0
fiDeviceImplemented::fiDeviceImplemented()
{
}
fiDeviceImplemented::~fiDeviceImplemented()
{
}
fiDevice::~fiDevice()
{
}
uint64_t fiDeviceImplemented::Open(const char* fileName, bool) { PURECALL(); }
uint64_t fiDeviceImplemented::OpenBulk(const char* fileName, uint64_t* ptr)
{
PURECALL();
}
uint64_t fiDeviceImplemented::OpenBulkWrap(const char* fileName, uint64_t* ptr, void* a3)
{
PURECALL();
}
uint64_t fiDeviceImplemented::CreateLocal(const char* fileName)
{
PURECALL();
}
uint64_t fiDeviceImplemented::Create(const char*)
{
PURECALL();
}
uint32_t fiDeviceImplemented::Read(uint64_t handle, void* buffer, uint32_t toRead)
{
PURECALL();
}
uint32_t fiDeviceImplemented::ReadBulk(uint64_t handle, uint64_t ptr, void* buffer, uint32_t toRead)
{
PURECALL();
}
uint32_t fiDeviceImplemented::WriteBulk(uint64_t, int, int, int, int)
{
PURECALL();
}
uint32_t fiDeviceImplemented::Write(uint64_t, void*, int)
{
PURECALL();
}
uint32_t fiDeviceImplemented::Seek(uint64_t handle, int32_t distance, uint32_t method)
{
PURECALL();
}
uint64_t fiDeviceImplemented::SeekLong(uint64_t handle, int64_t distance, uint32_t method)
{
PURECALL();
}
int32_t fiDeviceImplemented::Close(uint64_t handle)
{
PURECALL();
}
int32_t fiDeviceImplemented::CloseBulk(uint64_t handle)
{
PURECALL();
}
int fiDeviceImplemented::GetFileLength(uint64_t handle)
{
PURECALL();
}
int fiDeviceImplemented::m_40(int)
{
PURECALL();
}
bool fiDeviceImplemented::RemoveFile(const char* file)
{
PURECALL();
}
int fiDeviceImplemented::RenameFile(const char* from, const char* to)
{
PURECALL();
}
int fiDeviceImplemented::CreateDirectory(const char* dir)
{
PURECALL();
}
int fiDeviceImplemented::RemoveDirectory(const char* dir)
{
PURECALL();
}
uint64_t fiDeviceImplemented::GetFileLengthUInt64(uint64_t file)
{
PURECALL();
}
uint64_t fiDeviceImplemented::GetFileLengthLong(const char* fileName)
{
PURECALL();
}
uint64_t fiDeviceImplemented::GetFileTime(const char* file)
{
PURECALL();
}
bool fiDeviceImplemented::SetFileTime(const char* file, FILETIME fileTime)
{
PURECALL();
}
uint64_t fiDeviceImplemented::FindFirst(const char* path, fiFindData* findData)
{
PURECALL();
}
bool fiDeviceImplemented::FindNext(uint64_t handle, fiFindData* findData)
{
PURECALL();
}
int fiDeviceImplemented::FindClose(uint64_t handle)
{
PURECALL();
}
rage::fiDevice* fiDeviceImplemented::GetUnkDevice()
{
PURECALL();
}
void* fiDeviceImplemented::m_xy(void* a1, int a2, void* a3)
{
PURECALL();
}
bool fiDeviceImplemented::Truncate(uint64_t handle)
{
PURECALL();
}
uint32_t fiDeviceImplemented::GetFileAttributes(const char* path)
{
PURECALL();
}
bool fiDeviceImplemented::m_xz()
{
PURECALL();
}
bool fiDeviceImplemented::SetFileAttributes(const char* file, uint32_t FileAttributes)
{
PURECALL();
}
void fiDeviceImplemented::m_xx()
{
return;
}
bool fiDeviceImplemented::ReadFull(uint64_t handle, void* buffer, uint32_t length)
{
PURECALL();
}
bool fiDeviceImplemented::WriteFull(uint64_t handle, void* buffer, uint32_t length)
{
PURECALL();
}
int32_t fiDeviceImplemented::GetResourceVersion(const char* fileName, ResourceFlags* flags)
{
PURECALL();
}
int fiDeviceImplemented::m_yx()
{
PURECALL();
}
int fiDeviceImplemented::m_yy()
{
PURECALL();
}
int fiDeviceImplemented::m_yz(void*)
{
PURECALL();
}
int fiDeviceImplemented::m_zx(void*)
{
PURECALL();
}
bool fiDeviceImplemented::IsCollection()
{
PURECALL();
}
bool fiDeviceImplemented::m_addedIn1290()
{
PURECALL();
}
fiDevice* fiDeviceImplemented::GetCollection()
{
PURECALL();
}
bool fiDeviceImplemented::m_ax()
{
PURECALL();
}
int fiDeviceImplemented::GetCollectionId()
{
PURECALL();
}
const char* fiDeviceImplemented::GetName()
{
PURECALL();
}
fiPackfile::fiPackfile()
{
big::g_pointers->m_fipackfile_ctor(this);
}
bool fiPackfile::OpenPackfile(const char* archive, bool b_true, int type, intptr_t very_false)
{
return big::g_pointers->m_fipackfile_open_archive(this, archive, b_true, type, very_false);
}
bool fiPackfile::Mount(const char* mount_point)
{
return big::g_pointers->m_fipackfile_mount(this, mount_point);
}
}

286
src/gta/fidevice.hpp Normal file
View File

@ -0,0 +1,286 @@
#pragma once
#include "sysMemAllocator.hpp"
#include "pointers.hpp"
#include <array>
namespace rage
{
struct fiFindData
{
char fileName[256];
uint64_t fileSize;
FILETIME lastWriteTime;
DWORD fileAttributes;
};
struct ResourceFlags
{
// TODO: figure out which is physical and which is virtual
uint32_t flag1;
uint32_t flag2;
};
// since Payne, RAGE devices are thread-safe (might not apply to V?)
// in V, RAGE devices use UTF-8
class fiDevice
{
public:
static inline fiDevice* GetDevice(const char* path, bool allowRoot)
{
return big::g_pointers->m_fidevice_get_device(path, allowRoot);
}
static bool MountGlobal(const char* mountPoint, fiDevice* device, bool allowRoot);
static void Unmount(const char* rootPath);
static void Unmount(fiDevice const& device);
public:
virtual ~fiDevice() = 0;
virtual uint64_t Open(const char* fileName, bool readOnly) = 0;
virtual uint64_t OpenBulk(const char* fileName, uint64_t* ptr) = 0;
virtual uint64_t OpenBulkWrap(const char* fileName, uint64_t* ptr, void*) = 0;
virtual uint64_t CreateLocal(const char* fileName) = 0;
virtual uint64_t Create(const char* fileName) = 0;
virtual uint32_t Read(uint64_t handle, void* buffer, uint32_t toRead) = 0;
virtual uint32_t ReadBulk(uint64_t handle, uint64_t ptr, void* buffer, uint32_t toRead) = 0;
virtual uint32_t WriteBulk(uint64_t, int, int, int, int) = 0;
virtual uint32_t Write(uint64_t, void*, int) = 0;
virtual uint32_t Seek(uint64_t handle, int32_t distance, uint32_t method) = 0;
virtual uint64_t SeekLong(uint64_t handle, int64_t distance, uint32_t method) = 0;
virtual int32_t Close(uint64_t handle) = 0;
virtual int32_t CloseBulk(uint64_t handle) = 0;
virtual int GetFileLength(uint64_t handle) = 0;
virtual uint64_t GetFileLengthUInt64(uint64_t handle) = 0;
// dummy!
virtual int m_40(int) = 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 RemoveDirectory(const char* dir) = 0;
virtual void m_xx() = 0;
virtual uint64_t GetFileLengthLong(const char* fileName) = 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 rage::fiDevice* GetUnkDevice() = 0;
virtual void* m_xy(void*, int, void*) = 0;
virtual bool Truncate(uint64_t handle) = 0;
virtual uint32_t GetFileAttributes(const char* path) = 0;
virtual bool m_xz() = 0;
virtual bool SetFileAttributes(const char* file, uint32_t FileAttributes) = 0;
virtual int m_yx() = 0;
// read even if read() returns less than length
virtual bool ReadFull(uint64_t handle, void* buffer, uint32_t length) = 0;
virtual bool WriteFull(uint64_t handle, void* buffer, uint32_t length) = 0;
virtual int32_t GetResourceVersion(const char* fileName, ResourceFlags* flags) = 0;
virtual int32_t m_yy() = 0;
virtual int32_t m_yz(void*) = 0;
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 bool m_ax() = 0;
virtual int32_t GetCollectionId() = 0;
virtual const char* GetName() = 0;
};
class fiDeviceImplemented : public fiDevice
{
protected:
fiDeviceImplemented();
public:
virtual ~fiDeviceImplemented();
virtual uint64_t Open(const char* fileName, bool readOnly);
virtual uint64_t OpenBulk(const char* fileName, uint64_t* ptr);
virtual uint64_t OpenBulkWrap(const char* fileName, uint64_t* ptr, void* a3);
virtual uint64_t CreateLocal(const char* fileName);
virtual uint64_t Create(const char* fileName);
virtual uint32_t Read(uint64_t handle, void* buffer, uint32_t toRead);
virtual uint32_t ReadBulk(uint64_t handle, uint64_t ptr, void* buffer, uint32_t toRead);
virtual uint32_t WriteBulk(uint64_t, int, int, int, int);
virtual uint32_t Write(uint64_t, void*, int);
virtual uint32_t Seek(uint64_t handle, int32_t distance, uint32_t method);
virtual uint64_t SeekLong(uint64_t handle, int64_t distance, uint32_t method);
virtual int32_t Close(uint64_t handle);
virtual int32_t CloseBulk(uint64_t handle);
virtual int GetFileLength(uint64_t handle);
virtual uint64_t GetFileLengthUInt64(uint64_t handle);
// dummy!
virtual int m_40(int);
virtual bool RemoveFile(const char* file);
virtual int RenameFile(const char* from, const char* to);
virtual int CreateDirectory(const char* dir);
virtual int RemoveDirectory(const char* dir);
virtual void m_xx();
virtual uint64_t GetFileLengthLong(const char* fileName);
virtual uint64_t GetFileTime(const char* file);
virtual bool SetFileTime(const char* file, FILETIME fileTime);
virtual uint64_t FindFirst(const char* path, fiFindData* findData);
virtual bool FindNext(uint64_t handle, fiFindData* findData);
virtual int FindClose(uint64_t handle);
virtual rage::fiDevice* GetUnkDevice();
virtual void* m_xy(void* a1, int a2, void* a3);
virtual bool Truncate(uint64_t handle);
virtual uint32_t GetFileAttributes(const char* path);
virtual bool m_xz();
virtual bool SetFileAttributes(const char* file, uint32_t FileAttributes);
virtual int m_yx();
// read even if read() returns less than length
virtual bool ReadFull(uint64_t handle, void* buffer, uint32_t length);
virtual bool WriteFull(uint64_t handle, void* buffer, uint32_t length);
virtual int32_t GetResourceVersion(const char* fileName, ResourceFlags* version);
virtual int32_t m_yy();
virtual int32_t m_yz(void*);
virtual int32_t m_zx(void*); // return 0x40000000
virtual bool IsCollection();
virtual bool m_addedIn1290();
virtual fiDevice* GetCollection(); // return this
virtual bool m_ax();
virtual int32_t GetCollectionId();
virtual const char* GetName();
};
class fiDeviceRelative : public fiDeviceImplemented
{
private:
char m_pad[272];
public:
fiDeviceRelative();
// any RAGE path can be used; including root-relative paths
void SetPath(const char* relativeTo, rage::fiDevice* baseDevice, bool allowRoot);
// compatibility wrapper for NY code
inline void SetPath(const char* relativeTo, bool allowRoot)
{
SetPath(relativeTo, nullptr, allowRoot);
}
// mounts the device in the device stack
void Mount(const char* mountPoint);
};
class fiEncryptingDevice : public fiDeviceImplemented
{
private:
void* m_keyState;
void* m_0010;
char m_buffer[4096];
bool m_1018;
alignas(int) char m_pad[64]; // unsure
private:
void* AllocKeyState(const uint8_t* key);
public:
fiEncryptingDevice(const std::array<uint8_t, 32>& key);
void FreeKeyState();
};
class fiPackfile : public fiDeviceImplemented
{
private:
char m_pad[368 + (0x650 - 0x590)];
public:
fiPackfile();
// any RAGE path can be used; including root-relative paths
bool OpenPackfile(const char* archive, bool bTrue, int type, intptr_t veryFalse);
// mounts the device in the device stack
bool Mount(const char* mountPoint);
// closes the package file
void ClosePackfile();
};
}

76
src/gta/fwddec.hpp Normal file
View File

@ -0,0 +1,76 @@
#pragma once
namespace rage
{
template <typename T>
class atArray;
class datBitBuffer;
class sysMemAllocator;
class scriptIdBase;
class scriptId;
class scriptHandler;
class scriptHandlerNetComponent;
class scriptHandlerObject;
class scriptHandlerMgr;
class scrProgram;
class scrProgramTable;
class scrThreadContext;
class scrThread;
class tlsContext;
class netLoggingInterface;
class netLogStub;
class netPlayer;
class netPlayerMgr;
class netGameEvent;
class netEventMgr;
class netSyncTree;
class netObject;
class netObjectMgrBase;
class scrNativeCallContext;
class scrNativeRegistration;
class scrNativeRegistrationTable;
class fwRefAwareBase;
class fwExtensibleBase;
class fwArchetype;
class fiDevice;
class fiPackfile;
class rlSessionInfo;
class rlSessionByGamerTaskResult;
}
class GtaThread;
class CGameScriptId;
class CGameScriptHandler;
class CGameScriptHandlerNetwork;
class CGameScriptHandlerMgr;
class CEntity;
class CDynamicEntity;
class CPhysical;
class CObject;
class CPickup;
class CPedFactory;
class CVehicleFactory;
class Network;
class CNetGamePlayer;
class CNetworkPlayerMgr;
class CPlayerInfo;
class CNetworkObjectMgr;
class CNetComplaintMgr;

21
src/gta/gxt2.hpp Normal file
View File

@ -0,0 +1,21 @@
#pragma once
struct GXT2_metadata
{
static constexpr auto header = "2TXG";
};
#pragma pack(push, 1)
struct GXT2_key
{
rage::joaat_t key_hash = -1;
uint32_t file_offset_to_text = -1;
};
static_assert(sizeof(GXT2_key) == 8);
#pragma pack(pop)
struct GXT2_entry
{
rage::joaat_t hash = -1;
std::string text;
};

33
src/gta/joaat.hpp Normal file
View File

@ -0,0 +1,33 @@
#pragma once
#include <cstddef>
#include <cstdint>
#include <string_view>
#include <type_traits>
#include "rage/joaat.hpp"
namespace rage
{
template <std::size_t CharCount>
struct constexpr_joaat {
char data[CharCount];
template <std::size_t... Indices>
constexpr constexpr_joaat(const char *str, std::index_sequence<Indices...>) : data{ (str[Indices])... } {}
constexpr joaat_t operator()()
{
joaat_t hash = 0;
for (std::size_t i = 0; i < CharCount; ++i) {
hash += joaat_to_lower(data[i]);
hash += (hash << 10);
hash ^= (hash >> 6);
}
hash += (hash << 3);
hash ^= (hash >> 11);
hash += (hash << 15);
return hash;
}
};
}
#define RAGE_JOAAT_IMPL(str) (::rage::constexpr_joaat<sizeof(str) - 1>((str), std::make_index_sequence<sizeof(str) - 1>())())
#define RAGE_JOAAT(str) (std::integral_constant<rage::joaat_t, RAGE_JOAAT_IMPL(str)>::value)

34
src/gta/matrix.hpp Normal file
View File

@ -0,0 +1,34 @@
#pragma once
#include "vector.hpp"
namespace rage
{
class matrix4x4
{
public:
union
{
struct
{
vector4 _1;
vector4 _2;
vector4 _3;
vector4 _4;
};
float raw[4 * 4] = {};
};
};
class CViewPort
{
public:
char _0x0000[0x24C];
float m_matrix[0x10];
};
struct ScreenResolution
{
uint32_t w, h;
};
}

122
src/gta/natives.hpp Normal file
View File

@ -0,0 +1,122 @@
#pragma once
#include <cstdint>
#include <utility>
#include "fwddec.hpp"
#include "vector.hpp"
namespace rage
{
class scrNativeCallContext
{
public:
void reset()
{
m_arg_count = 0;
m_data_count = 0;
}
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)
{
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)
{
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()
{
return reinterpret_cast<T*>(m_return_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);
}
protected:
void *m_return_value;
std::uint32_t m_arg_count;
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 scrNativeMapping = std::pair<scrNativeHash, scrNativeHash>;
using scrNativeHandler = void(*)(scrNativeCallContext*);
class scrNativeRegistration {
public:
uint64_t m_nextRegistration1;
uint64_t m_nextRegistration2;
void* m_handlers[7];
uint32_t m_numEntries1;
uint32_t m_numEntries2;
uint64_t m_hashes;
scrNativeRegistration* get_next_registration() {
std::uintptr_t result;
auto nextReg = uintptr_t(&m_nextRegistration1);
auto newReg = nextReg ^ m_nextRegistration2;
auto charTableOfRegs = (char*)&result - nextReg;
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() {
return static_cast<std::uint32_t>(((std::uintptr_t)&m_numEntries1) ^ m_numEntries1 ^ m_numEntries2);
}
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++) {
*(DWORD*)&charTableOfRegs[nativeAddress] = static_cast<DWORD>(addressIndex ^ *(DWORD*)(nativeAddress));
nativeAddress += 4;
}
return result;
}
};
#pragma pack(push, 1)
class scrNativeRegistrationTable
{
scrNativeRegistration *m_entries[0xFF];
std::uint32_t m_unk;
bool m_initialized;
};
#pragma pack(pop)
}
using Void = void;
using Any = int;
using Hash = std::uint32_t;
using Entity = std::int32_t;
using Player = std::int32_t;
using FireId = std::int32_t;
using Interior = std::int32_t;
using Ped = Entity;
using Vehicle = Entity;
using Cam = std::int32_t;
using Object = Entity;
using Pickup = Object;
using Blip = std::int32_t;
using Camera = Entity;
using ScrHandle = Entity;
using Vector3 = rage::scrVector;

380
src/gta/net_game_event.hpp Normal file
View File

@ -0,0 +1,380 @@
#pragma once
#include <cstdint>
#include "pointers.hpp"
#include "fwddec.hpp"
#pragma pack(push, 1)
namespace rage
{
class netPlayer;
class datBitBuffer
{
public:
datBitBuffer(uint8_t* 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;
}
uint32_t GetPosition() {
return m_bitsRead;
}
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) {
return big::g_pointers->m_write_bitbuf_bool(this, integer, 1);
}
bool ReadBool(bool* integer) {
return big::g_pointers->m_read_bitbuf_bool(this, integer, 1);
}
bool ReadPeerId(uint64_t* integer) {
return this->ReadQWord(integer, 0x32);
}
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 initialBitOffset = bufPos & 0b111;
auto const start = &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;
}
if (initialBitOffset)
result |= next[0] >> (8 - initialBitOffset);
m_bitsRead += static_cast<uint32_t>(numBits);
if (m_bitsRead > m_highestBitsRead)
m_highestBitsRead = m_bitsRead;
return result >> ((8 - numBits) % 8);
}
int GetDataLength() {
int leftoverBit = (m_curBit % 8) ? 1 : 0;
return (m_curBit / 8) + leftoverBit;
}
bool ReadString(char* string, int bits) {
return big::g_pointers->m_read_bitbuf_string(this, string, 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) {
uint32_t read;
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits)) {
*integer = read;
return true;
}
return false;
}
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) {
uint32_t read;
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits)) {
*integer = read;
return true;
}
return false;
}
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) {
return big::g_pointers->m_read_bitbuf_dword(this, integer, 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) {
int32_t v8;
int32_t v9;
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) {
return big::g_pointers->m_write_bitbuf_qword(this, integer, bits);
}
bool ReadQWord(uint64_t* integer, int bits) {
if (bits <= 32) {
uint32_t v10;
if (ReadDword(&v10, bits)) {
*integer = v10;
return true;
}
}
else {
uint32_t v10, v11;
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) {
return big::g_pointers->m_write_bitbuf_int64(this, integer, bits);
}
bool ReadInt64(int64_t* integer, int bits) {
uint32_t v8;
uint64_t v9;
if (ReadDword(&v8, 1u) && ReadQWord(&v9, bits - 1)) {
*integer = v8 + (v9 ^ -(int64_t)v8);
return true;
}
return false;
}
bool WriteArray(uint8_t* array, int size) {
return big::g_pointers->m_write_bitbuf_array(this, array, size, 0);
}
bool ReadArray(PVOID array, int size) {
return big::g_pointers->m_read_bitbuf_array(this, array, size, 0);
}
public:
uint8_t* 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 {
CMsgInvalid = 0xFFFFF,
CMsgSessionAcceptChat = 0x62,
CMsgStartMatchCmd = 0x2D,
CMsgSetInvitableCmd = 0x1F,
CMsgSessionMemberIds = 0x23,
CMsgRequestGamerInfo = 0x54,
CMsgRemoveGamersFromSessionCmd = 0x53,
CMsgNotMigrating = 0x35,
CMsgMigrateHostResponse = 0x12,
CMsgMigrateHostRequest = 0x66,
CMsgJoinResponse = 0x2A,
CMsgJoinRequest = 0x41,
CMsgHostLeftWhilstJoiningCmd = 0x58,
CMsgConfigResponse = 0x5F,
CMsgConfigRequest = 0x48,
CMsgChangeSessionAttributesCmd = 0x5A,
CMsgAddGamerToSessionCmd = 0x64, // this is where send net info to lobby is called, among other things
CMsgReassignResponse = 0x10,
CMsgReassignNegotiate = 0x01,
CMsgReassignConfirm = 0x26,
CMsgPlayerData = 0x18,
CMsgPackedReliables = 0x30,
CMsgPackedCloneSyncACKs = 0x3B,
CMsgNonPhysicalData = 0x16,
CMsgNetArrayMgrUpdateAck = 0x5D,
CMsgNetArrayMgrUpdate = 0x60,
CMsgNetArrayMgrSplitUpdateAck = 0x25,
CMsgScriptVerifyHostAck = 0x0B,
CMsgScriptVerifyHost = 0x3E,
CMsgScriptNewHost = 0x0E,
CMsgScriptMigrateHostFailAck = 0x1A,
CMsgScriptMigrateHost = 0x33,
CMsgScriptLeaveAck = 0x40,
CMsgScriptLeave = 0x17,
CMsgScriptJoinHostAck = 0x4D,
CMsgScriptJoinAck = 0x43,
CMsgScriptJoin = 0x5C,
CMsgScriptHostRequest = 0x67,
CMsgScriptHandshakeAck = 0x5B,
CMsgScriptHandshake = 0x57,
CMsgScriptBotLeave = 0x2B, // unused?
CMsgScriptBotJoinAck = 0x63, // unused?
CMsgScriptBotJoin = 0x1C, // unused?
CMsgScriptBotHandshakeAck = 0x31, // unused?
CMsgScriptBotHandshake = 0x4B, // unused?
CMsgPartyLeaveGame = 0x3D,
CMsgPartyEnterGame = 0x1E,
CMsgCloneSync = 0x4E, // aka clone_create, clone_sync etc.
CMsgActivateNetworkBot = 0x65, // unused?
CMsgRequestObjectIds = 0x29,
CMsgInformObjectIds = 0x09,
CMsgTextMessage = 0x24, // this one is for chat
CMsgPlayerIsTyping = 0x61,
CMsgPackedEvents = 0x4F, // aka received_event
CMsgPackedEventReliablesCMsgs = 0x20,
CMsgRequestKickFromHost = 0x0D,
CMsgTransitionToGameStart = 0x50,
CMsgTransitionToGameNotify = 0x02,
CMsgTransitionToActivityStart = 0x06,
CMsgTransitionToActivityFinish = 0x36,
CMsgTransitionParameters = 0x3C,
CMsgTransitionParameterString = 0x37,
CMsgTransitionLaunchNotify = 0x1B,
CMsgTransitionLaunch = 0x19,
CMsgTransitionGamerInstruction = 0x14,
CMsgTextMessage2 = 0x0A, // this one is for phone message
CMsgSessionEstablishedRequest = 0x52,
CMsgSessionEstablished = 0x07,
CMsgRequestTransitionParameters = 0x42,
CMsgRadioStationSyncRequest = 0x47,
CMsgRadioStationSync = 0x46,
CMsgPlayerCardSync = 0x3A,
CMsgPlayerCardRequest = 0x6A,
CMsgLostConnectionToHost = 0x81,
CMsgKickPlayer = 0x34, // host kick
CMsgDebugStall = 0x7E, // unused?
CMsgCheckQueuedJoinRequestReply = 0x59,
CMsgCheckQueuedJoinRequest = 0x51,
CMsgBlacklist = 0x0C,
CMsgRoamingRequestBubbleRequiredResponse = 0x83,
CMsgRoamingRequestBubbleRequiredCheck = 0x82,
CMsgRoamingRequestBubble = 0x2E,
CMsgRoamingJoinBubble = 0x4C,
CMsgRoamingJoinBubbleAck = 0x3F,
CMsgRoamingInitialBubble = 0x32,
CMsgVoiceStatus = 0x03,
CMsgTextChatStatus = 0x00,
CMsgJoinResponse2 = 0x08,
CMsgJoinRequest2 = 0x68,
CMsgNetTimeSync = 0x38, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 37
CMsgNetComplaint = 0x55, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 54
CMsgNetLagPing = 0x27, // unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 26
CMsgSearchResponse = 0x6B, // unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 6A
CMsgSearchRequest = 0x05, // unused?
CMsgQosProbeResponse = 0x2C, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2B
CMsgQosProbeRequest = 0x1D, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 1C
CMsgCxnRelayAddressChanged = 0x49, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 48
CMsgCxnRequestRemoteTimeout = 0x2F, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2E
CMsgSessionDetailRequest = 0x22, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 21
CMsgSessionDetailResponse = 0x13, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 12
CMsgKeyExchangeOffer = 0x0F, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 0E (last result)
CMsgKeyExchangeAnswer = 0x44, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 43
CMsg_0x87 = 0x87,
CMsg_0x88 = 0x88,
CMsg_0x80 = 0x80,
CMsg_0x28 = 0x28,
CMsg_0x11 = 0x11,
CMsg_0x45 = 0x45,
CMsg_0x89 = 0x89,
CMsg_0x86 = 0x86,
};
namespace netConnection {
class InFrame
{
public:
enum class EventType
{
ConnectionClosed = 3,
FrameReceived = 4,
BandwidthExceeded = 6,
OutOfMemory = 7
};
virtual ~InFrame() = default;
virtual void destroy() = 0;
virtual EventType get_event_type() = 0;
virtual uint32_t _0x18() = 0;
char pad_0008[56]; //0x0008
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[36]; //0x0058
uint32_t m_length; //0x0078
char pad_007C[4]; //0x007C
void* m_data; //0x0080
};
static_assert(sizeof(rage::netConnection::InFrame) == 0x88);
}
class CEventNetwork
{
public:
virtual ~CEventNetwork() = default;
virtual void unk_0x8() = 0;
virtual void unk_0x10() = 0;
virtual __int64 get_type() = 0;
virtual void unk_0x20() = 0;
virtual void unk_0x28() = 0;
virtual bool get_extra_information(__int64* info_array, int check) = 0;
virtual void unk_0x38() = 0;
};
class netGameEvent
{
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 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 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) {};
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 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
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];
};
}
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
};
class CNetworkIncrementStatEvent : public rage::netGameEvent
{
public:
Hash m_stat; // 0x30
std::uint32_t m_amount; // 0x34
};
#pragma pack(pop)

270
src/gta/net_object_mgr.hpp Normal file
View File

@ -0,0 +1,270 @@
#include "node_list.hpp"
#include "enums.hpp"
#include "..\pointers.hpp"
#include "replay.hpp"
#pragma once
namespace rage
{
class CPlayerSyncTree
{
public:
char pad_0000[8]; //0x0000
netObject* player_object; //0x0008
char pad_0010[256]; //0x0010
}; //Size: 0x0110
class CPlayerAppearanceDataNode
{
public:
char pad_0000[24]; //0x0000
CPlayerSyncTree* sync_tree; //0x0018
char pad_0020[992]; //0x0020
uint32_t model; //0x0400
char pad_0404[124]; //0x0404
}; //Size: 0x0480
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) { }
public:
uint8_t pad_10h[49];
uint8_t ownerId;
uint8_t nextOwnerId;
uint8_t isRemote;
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 m64;
uint32_t m68;
uint32_t m6C;
public:
inline bool IsCreationAckedByPlayer(int index)
{
return (creationAckedPlayers & (1 << index)) != 0;
}
};
class netSyncTree
{
public:
char pad_0000[48]; //0x0000
class netSyncTreeNode* m_sync_tree_node; //0x0030
}; //Size: 0x0038
class netSyncTreeNode
{
public:
char pad_0000[192]; //0x0000
uint32_t m_player_model; //0x00C0
uint32_t m_ped_model; //0x00C4
uint32_t m_vehicle_model; //0x00C8
char pad_00CC[84]; //0x00CC
uint32_t m_pickup_model; //0x0120
char pad_0124[44]; //0x0124
uint32_t m_object_model; //0x0150
char pad_0154[692]; //0x0154
}; //Size: 0x0408
class netObject
{
public:
int16_t object_type; //0x0008
int16_t object_id; //0x000A
char pad_000C[61]; //0x000C
int8_t owner_id; //0x0049
int8_t control_id; //0x004A
int8_t next_owner_id; //0x004B
bool is_remote; //0x004C
bool wants_to_delete; //0x004D
char pad_004E[1]; //0x004E
bool should_not_be_deleted; //0x004F
char pad_0050[32]; //0x0050
uint32_t players_acked; //0x0070
char pad_0074[116]; //0x0074
virtual ~netObject() = 0;
virtual void m_8() = 0;
virtual void m_10() = 0;
virtual void m_18() = 0;
virtual void* m_20() = 0;
virtual void m_28() = 0;
virtual netSyncTree* GetSyncTree() = 0;
virtual void m_38() = 0;
virtual void m_40() = 0;
virtual void m_48() = 0;
virtual void m_50() = 0;
virtual void m_58() = 0;
virtual void m_60() = 0;
virtual void m_68() = 0;
virtual void m_70() = 0;
virtual void m_78() = 0;
virtual rage::CObject* GetGameObject() = 0;
virtual void m_88() = 0;
virtual void m_90() = 0;
virtual void m_98() = 0;
virtual int GetObjectFlags() = 0;
virtual void m_A8() = 0;
virtual void m_B0() = 0;
virtual void m_B8() = 0;
virtual void m_C0() = 0;
virtual void m_C8() = 0;
virtual int GetSyncFrequency() = 0;
virtual void m_D8() = 0;
virtual void m_E0() = 0;
virtual void m_E8() = 0;
virtual void m_F0() = 0;
virtual void m_F8() = 0;
virtual void Update() = 0;
virtual bool m_108_1604() = 0; // added in 1604
virtual void m_108() = 0;
virtual void m_110() = 0;
virtual void m_118() = 0;
virtual void m_120() = 0;
virtual void m_128() = 0;
virtual void m_130() = 0;
virtual void m_138() = 0;
virtual void m_140() = 0;
virtual void m_148() = 0;
virtual void m_150() = 0;
virtual bool m_158(void* player, int type, int* outReason) = 0;
virtual void m_160() = 0;
virtual bool m_168(int* outReason) = 0;
virtual void m_170() = 0;
virtual void m_178() = 0;
virtual void m_180() = 0;
virtual void m_188() = 0;
virtual void m_190() = 0;
virtual void m_198() = 0;
virtual void m_1A0() = 0;
virtual void m_1A8() = 0;
virtual void m_1B0() = 0;
virtual void m_1B8() = 0;
virtual void m_1C0() = 0;
virtual void m_1C8() = 0;
virtual void m_1D0() = 0;
virtual void m_1D8() = 0;
virtual void m_1E0() = 0;
virtual void m_1E8() = 0;
virtual void m_1F0() = 0;
virtual void m_1F8() = 0;
virtual void m_200() = 0;
virtual void m_208() = 0;
virtual void m_210() = 0;
virtual void m_218() = 0;
virtual void m_220() = 0;
virtual void m_228() = 0;
virtual void m_230() = 0;
virtual void m_238() = 0;
virtual void m_240() = 0;
virtual void m_248() = 0;
virtual void m_250() = 0;
virtual void m_258() = 0;
virtual void m_260() = 0;
virtual void m_268() = 0;
virtual void m_270() = 0;
virtual void m_278() = 0;
virtual void m_280() = 0;
virtual void m_288() = 0;
virtual void m_290() = 0;
virtual void m_298() = 0;
virtual void m_2A0() = 0;
virtual void m_2A8() = 0;
virtual void m_2B0() = 0;
virtual void m_2B8() = 0;
virtual void m_2C0() = 0;
virtual void m_2C8() = 0;
virtual void m_2D0() = 0;
virtual void m_2D8() = 0;
virtual void m_2E0() = 0;
virtual void m_2E8() = 0;
virtual void m_2F0() = 0;
virtual void m_2F8() = 0;
virtual void m_300() = 0;
virtual void m_308() = 0;
virtual void m_310() = 0;
virtual void m_318() = 0;
virtual void m_320() = 0;
virtual void UpdatePendingVisibilityChanges() = 0;
};
class CNetGamePlayer;
class netObjectMgrBase
{
public:
class atDNetObjectNode : public atDNode<netObject*>
{
};
public:
virtual ~netObjectMgrBase() = default;
virtual void Initialize() = 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 ChangeOwner(netObject *object, CNetGamePlayer *player, int migrationType) = 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 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 _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 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 _0xC8() = 0;
public:
atDList<atDNetObjectNode> m_objects_owned_by_player[32];
};
}
class CNetworkObjectMgr : public rage::netObjectMgrBase
{
public:
rage::netObject* find_object_by_id(std::uint16_t object_id, bool can_delete_be_pending)
{
return big::g_pointers->m_find_object_by_id(this, object_id, can_delete_be_pending);
};
};

23
src/gta/node_list.hpp Normal file
View File

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

9
src/gta/ped_factory.hpp Normal file
View File

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

11
src/gta/player.hpp Normal file
View File

@ -0,0 +1,11 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "extensible.hpp"
#include "vector.hpp"
#include "gta\natives.hpp"
namespace gta
{
inline constexpr auto num_players = 32;
}

4
src/gta/ref_aware.hpp Normal file
View File

@ -0,0 +1,4 @@
#pragma once
#include "base.hpp"
#include "gta/ref_aware.hpp"

139
src/gta/replay.hpp Normal file
View File

@ -0,0 +1,139 @@
#pragma once
#pragma pack(push, 4)
#include "common.hpp"
#include "fwddec.hpp"
namespace rage
{
class CObject : public fwEntity
{
public:
}; //Size: 0x018C
class CPedFactory
{
public:
virtual ~CPedFactory() = default;
class CPed* m_local_ped; //0x0008
}; //Size: 0x0010
//CUSTOM CLASS TO IMPROVE R* SHIT CLASS STRUCTURE
class CEntityHandle {
public:
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
static_assert(sizeof(CObjectHandle) == 0x10, "CObjectHandle is not properly sized");
class CObjectList
{
public:
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
rage::fwEntity* get_object(const int& index)
{
if (index < m_max_objects)
return m_object_list->m_objects[index].m_entity_ptr;
return nullptr;
}
}; //Size: 0x016C
class CPedHandle
{
public:
class CPed* m_ped; //0x0000
int32_t m_handle; //0x0008
char pad_000C[4]; //0x000C
}; //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 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
fwEntity* get_ped(const int& index)
{
if (index < m_max_peds)
return m_ped_list->m_peds[index].m_entity_ptr;
return nullptr;
}
}; //Size: 0x0114
class CVehicleHandle
{
public:
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 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
fwEntity* get_vehicle(const int& index)
{
if (index < m_max_vehicles)
return m_vehicle_list->m_vehicles[index].m_entity_ptr;
return nullptr;
}
}; //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
}
#pragma pack(pop)

185
src/gta/script_handler.hpp Normal file
View File

@ -0,0 +1,185 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "node_list.hpp"
#include "script_id.hpp"
#pragma pack(push, 1)
namespace rage
{
class scriptResource
{
public:
virtual ~scriptResource() = default;
};
class scriptResourceEntry
{
public:
scriptResource *m_data; // 0x00
std::uint32_t m_unk; // 0x04
char m_padding[0x0C]; // 0x0C
scriptResourceEntry *m_next; // 0x18
};
class scriptHandlerNetComponent
{
public:
virtual ~scriptHandlerNetComponent() = default;
public:
scriptHandler *m_script_handler; // 0x08
};
class scriptHandler
{
public:
class atDScriptObjectNode : public atDNode<scriptHandlerObject*>
{
};
public:
virtual ~scriptHandler() = default; // 0 (0x00)
virtual bool _0x08() = 0; // 1 (0x08)
virtual void _0x10() = 0; // 2 (0x10)
virtual void cleanup_objects() = 0; // 3 (0x18)
virtual scriptId *_0x20() = 0; // 4 (0x20)
virtual scriptId *get_id() = 0; // 5 (0x28)
// Returns whether the script handler belongs to a networked script.
virtual bool is_networked() = 0; // 6 (0x30)
// Initializes the network component for the script handler.
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)
// Destroys the script handler.
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)
// Something related to reservations.
virtual void _0x58(void*) = 0; // 11 (0x58)
virtual void register_resource(scriptResource*, void*) = 0; // 12 (0x60)
virtual void _0x68() = 0; // 13 (0x68)
virtual void _0x70() = 0; // 14 (0x70)
virtual void _0x78() = 0; // 15 (0x78)
virtual void _0x80() = 0; // 16 (0x80)
virtual void _0x88() = 0; // 17 (0x88)
virtual void _0x90() = 0; // 18 (0x90)
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
};
class scriptHandlerMgr
{
public:
virtual ~scriptHandlerMgr() = default;
// Initializes some scripting-related pools.
virtual bool initialize() = 0; // 1 (0x08)
// Called every tick.
virtual void _0x10() = 0; // 2 (0x10)
// Frees some scripting-related pools.
virtual void shutdown() = 0; // 3 (0x18)
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)
// Allocates and constructs a script handler.
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)
// Attaches a script thread.
virtual void attach_thread(scrThread*) = 0; // 10 (0x50)
// Detaches a script thread.
virtual void detach_thread(scrThread*) = 0; // 11 (0x58)
// Called when a player joins.
virtual void on_player_join(netPlayer*) = 0; // 12 (0x60)
// Called when a player leaves.
virtual void on_player_left(netPlayer*) = 0; // 13 (0x68)
virtual std::int32_t _0x70() = 0; // 14 (0x70)
virtual void *_0x78() = 0; // 15 (0x78)
public:
char m_padding1[0x28]; // 0x08
bool m_initialized; // 0x30
bool m_initialized2; // 0x31
char m_padding2[0x0E]; // 0x32
rage::netLoggingInterface *m_logger; // 0x40
};
}
class CGameScriptHandler : public rage::scriptHandler
{
public:
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
};
class CGameScriptHandlerMgr : public rage::scriptHandlerMgr
{
};
static_assert(sizeof(rage::scriptHandler) == 0x60);
static_assert(sizeof(CGameScriptHandler) == 0xA0);
static_assert(sizeof(CGameScriptHandlerNetwork) == 0xB0);
#pragma pack(pop)

72
src/gta/script_id.hpp Normal file
View File

@ -0,0 +1,72 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "joaat.hpp"
#pragma pack(push, 1)
namespace rage
{
class scriptIdBase
{
public:
virtual ~scriptIdBase() = default; // 0 (0x00)
// Assumes the script thread's identity.
virtual void assume_thread_identity(scrThread*) {}; // 1 (0x08)
// Returns whether the hash of the script id is valid.
virtual bool is_valid() {}; // 2 (0x10)
// Gets the hash of the script id.
virtual joaat_t *get_hash(joaat_t *out) {}; // 3 (0x18)
// Gets an unknown value from the script id.
virtual std::uint32_t *get_hash2(std::uint32_t *out) {}; // 4 (0x20)
// Gets the name of the script id.
virtual const char *get_name() {}; // 5 (0x28)
// Serializes the script id from the buffer.
virtual void deserialize(datBitBuffer* buffer) {}; // 6 (0x30)
// Serializes the script id to the buffer.
virtual void serialize(datBitBuffer* buffer) {}; // 7 (0x38)
// Calculates some information with the position hash & instance id.
virtual std::uint32_t _0x40() {}; // 8 (0x40)
// Calls _0x40 and returns it's value added to another value.
virtual std::uint32_t _0x48() {}; // 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*) {}; // 12 (0x60)
virtual bool _0x68(void*) {}; // 13 (0x68)
};
class scriptId : public scriptIdBase
{
public:
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
};
static_assert(sizeof(CGameScriptId) == 0x40);
#pragma pack(pop)

173
src/gta/script_program.hpp Normal file
View File

@ -0,0 +1,173 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "base.hpp"
#include "joaat.hpp"
#include "script_id.hpp"
#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
bool is_valid() const
{
return m_code_size != 0;
}
std::uint32_t get_num_code_pages() const
{
return (m_code_size + 0x3FFF) >> 14;
}
std::uint32_t get_code_page_size(std::uint32_t page) const
{
auto num = get_num_code_pages();
if (page < num)
{
if (page == num - 1)
return m_code_size & 0x3FFF;
return 0x4000;
}
return 0;
}
std::uint32_t get_full_code_size() const
{
auto numPages = get_num_code_pages();
if (!numPages)
return 0;
if (numPages == 1)
--numPages;
return (numPages * 0x4000) + (m_code_size & 0x3FFF);
}
std::uint8_t* get_code_page(std::uint32_t page) const
{
return m_code_blocks[page];
}
std::uint8_t* get_code_address(std::uint32_t index) const
{
if (index < m_code_size)
return &m_code_blocks[index >> 14][index & 0x3FFF];
return nullptr;
}
const char* get_string(std::uint32_t index) const
{
if (index < m_strings_count)
return &m_strings_data[index >> 14][index & 0x3FFF];
return nullptr;
}
void** get_address_of_native_entrypoint(void* entrypoint)
{
for (std::uint32_t i = 0; i < m_native_count; ++i)
{
if (m_native_entrypoints[i] == entrypoint)
{
return m_native_entrypoints + i;
}
}
return nullptr;
}
};
class scrProgramTableEntry
{
public:
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
std::list<joaat_t> all_script_hashes()
{
std::list<rage::joaat_t> hash;
for (uint32_t i = 0; i < m_size; ++i)
{
if (m_data[i].m_program != nullptr && m_data[i].m_program->m_name != nullptr)
{
hash.push_back(m_data[i].m_hash);
}
}
return hash;
}
std::list<std::string> all_script_names()
{
std::list<std::string> hash;
for (uint32_t i = 0; i < m_size; ++i)
{
if (m_data[i].m_program != nullptr && m_data[i].m_program->m_name != nullptr)
{
hash.push_back(m_data[i].m_program->m_name);
}
}
return hash;
}
scrProgram* find_script(joaat_t hash)
{
for (std::uint32_t i = 0; i < m_size; ++i)
{
if (m_data[i].m_hash == hash)
{
return m_data[i].m_program;
}
}
return nullptr;
}
scrProgramTableEntry* begin()
{
return m_data;
}
scrProgramTableEntry* end()
{
return m_data + m_size;
}
};
static_assert(sizeof(scrProgram) == 0x80);
static_assert(sizeof(scrProgramTableEntry) == 0x10);
static_assert(sizeof(scrProgramTable) == 0x1C);
}
#pragma pack(pop)

81
src/gta/script_thread.hpp Normal file
View File

@ -0,0 +1,81 @@
#pragma once
#include <cstdint>
#include "fwddec.hpp"
#include "joaat.hpp"
#include "tls_context.hpp"
namespace rage
{
enum class eThreadState : std::uint32_t
{
idle,
running,
killed,
unk_3,
unk_4,
};
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
};
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)
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
char m_pad[0x4];
char m_name[0x40]; // 0xD4
scriptHandler* m_handler; // 0x114
scriptHandlerNetComponent* 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
};
static_assert(sizeof(GtaThread) == 0x160);

View File

@ -0,0 +1,72 @@
#pragma once
#include "fwddec.hpp"
namespace rage
{
class sysMemAllocator
{
public:
virtual ~sysMemAllocator() = 0;
virtual void SetQuitOnFail(bool) = 0;
virtual void* Allocate(size_t size, size_t align, int subAllocator) = 0;
inline void* allocate(size_t size, size_t align, int subAllocator)
{
return Allocate(size, align, subAllocator);
}
virtual void* TryAllocate(size_t size, size_t align, int subAllocator) = 0;
virtual void Free(void* pointer) = 0;
virtual void free(void* pointer)
{
return Free(pointer);
}
virtual void TryFree(void* pointer) = 0;
virtual void Resize(void* pointer, size_t size) = 0;
virtual sysMemAllocator* GetAllocator(int allocator) const = 0;
virtual sysMemAllocator* GetAllocator(int allocator) = 0;
virtual sysMemAllocator* GetPointerOwner(void* pointer) = 0;
virtual size_t GetSize(void* pointer) const = 0;
virtual size_t GetMemoryUsed(int memoryBucket) = 0;
virtual size_t GetMemoryAvailable() = 0;
public:
static sysMemAllocator* UpdateAllocatorValue()
{
//B9 ? ? ? ? 48 8B 0C 01 45 33 C9 49 8B D2 48
auto g_gtaTlsEntry = *(sysMemAllocator**)(*(uintptr_t*)(__readgsqword(88)) + 0xC8); //This has been 0xC8 since 323, I'm not adding this signature to pointers...
if (g_gtaTlsEntry == nullptr)
LOG(FATAL) << "Failed to find tlsEntry within GTA5.exe via __readgsqword";
*(sysMemAllocator**)(*(uintptr_t*)(__readgsqword(88)) + 0xC8) = g_gtaTlsEntry;
*(sysMemAllocator**)(*(uintptr_t*)(__readgsqword(88)) + 0xC8 - 8) = g_gtaTlsEntry;
return g_gtaTlsEntry;
}
};
inline sysMemAllocator* GetAllocator()
{
sysMemAllocator* allocator = *(sysMemAllocator**)(*(uintptr_t*)(__readgsqword(88)) + 0xC8);
if (!allocator)
{
return sysMemAllocator::UpdateAllocatorValue();
}
return allocator;
}
}

22
src/gta/tls_context.hpp Normal file
View File

@ -0,0 +1,22 @@
#pragma once
#include <intrin.h>
#include "fwddec.hpp"
namespace rage
{
class tlsContext
{
public:
char m_padding1[0xC8]; // 0x00
sysMemAllocator* m_allocator; // 0xC8
char m_padding2[0x778]; // 0xD0
scrThread* m_script_thread; // 0x848
bool m_is_script_thread_active; // 0x850
static tlsContext* get()
{
return *reinterpret_cast<tlsContext**>(__readgsqword(0x58));
}
};
static_assert(sizeof(tlsContext) == 0x858);
}

90
src/gta/vector.hpp Normal file
View File

@ -0,0 +1,90 @@
#pragma once
namespace rage
{
#pragma pack(push, 1)
class scrVector
{
public:
scrVector() = default;
scrVector(float x, float y, float z) :
x(x), y(y), z(z)
{}
scrVector operator+(const scrVector& other)
{
scrVector vec;
vec.x = this->x + other.x;
vec.y = this->y + other.y;
vec.z = this->z + other.z;
return vec;
}
scrVector operator-(const scrVector& other)
{
scrVector vec;
vec.x = this->x - other.x;
vec.y = this->y - other.y;
vec.z = this->z - other.z;
return vec;
}
scrVector operator*(const scrVector& other)
{
scrVector vec;
vec.x = this->x * other.x;
vec.y = this->y * other.y;
vec.z = this->z * other.z;
return vec;
}
scrVector operator*(const float& other)
{
scrVector vec;
vec.x = this->x * other;
vec.y = this->y * other;
vec.z = this->z * other;
return vec;
}
public:
float x{};
private:
char m_padding1[0x04];
public:
float y{};
private:
char m_padding2[0x04];
public:
float z{};
private:
char m_padding3[0x04];
};
#pragma pack(pop)
}
class Vector2 final
{
public:
Vector2() = default;
Vector2(float x, float y)
: x(x), y(y)
{}
public:
float x, y;
};
class Vector4 final
{
public:
Vector4() = default;
Vector4(float x, float y, float z, float w)
: x(x), y(y), z(z), w(w)
{}
public:
float x, y, z, w;
};