refactor!: Replace premake5 with CMake. (#551)
Co-authored-by: tupoy-ya <tupoy-ya@users.noreply.github.com>
This commit is contained in:
160
src/gta/PickupRewards.h
Normal file
160
src/gta/PickupRewards.h
Normal 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
3141
src/gta/VehicleValues.h
Normal file
File diff suppressed because it is too large
Load Diff
829
src/gta/Vehicles.h
Normal file
829
src/gta/Vehicles.h
Normal 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
649
src/gta/Weapons.h
Normal 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
206
src/gta/array.hpp
Normal 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
4
src/gta/base.hpp
Normal file
@ -0,0 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#include "base/datBase.hpp"
|
||||
#include "base/pgBase.hpp"
|
60
src/gta/blip.hpp
Normal file
60
src/gta/blip.hpp
Normal 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
19
src/gta/color.hpp
Normal 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);
|
||||
}
|
90
src/gta/decal_controller.hpp
Normal file
90
src/gta/decal_controller.hpp
Normal 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
1660
src/gta/enums.hpp
Normal file
File diff suppressed because it is too large
Load Diff
7
src/gta/extensible.hpp
Normal file
7
src/gta/extensible.hpp
Normal 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
263
src/gta/fidevice.cpp
Normal 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
286
src/gta/fidevice.hpp
Normal 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
76
src/gta/fwddec.hpp
Normal 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
21
src/gta/gxt2.hpp
Normal 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
33
src/gta/joaat.hpp
Normal 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
34
src/gta/matrix.hpp
Normal 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
122
src/gta/natives.hpp
Normal 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
380
src/gta/net_game_event.hpp
Normal 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
270
src/gta/net_object_mgr.hpp
Normal 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
23
src/gta/node_list.hpp
Normal 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
9
src/gta/ped_factory.hpp
Normal 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
11
src/gta/player.hpp
Normal 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
4
src/gta/ref_aware.hpp
Normal file
@ -0,0 +1,4 @@
|
||||
#pragma once
|
||||
#include "base.hpp"
|
||||
|
||||
#include "gta/ref_aware.hpp"
|
139
src/gta/replay.hpp
Normal file
139
src/gta/replay.hpp
Normal 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
185
src/gta/script_handler.hpp
Normal 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
72
src/gta/script_id.hpp
Normal 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
173
src/gta/script_program.hpp
Normal 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
81
src/gta/script_thread.hpp
Normal 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);
|
72
src/gta/sysMemAllocator.hpp
Normal file
72
src/gta/sysMemAllocator.hpp
Normal 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
22
src/gta/tls_context.hpp
Normal 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
90
src/gta/vector.hpp
Normal 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;
|
||||
};
|
Reference in New Issue
Block a user