Persist Weapons (#1647)

This commit is contained in:
gir489 2023-07-09 17:01:42 -04:00 committed by GitHub
parent 95f1db0894
commit 7f777900a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 902 additions and 760 deletions

View File

@ -72,6 +72,7 @@ namespace big
looped::weapons_steal_vehicle_gun();
looped::weapons_vehicle_gun();
looped::weapons_c4_limit();
looped::weapons_do_persist_weapons();
script::get_current()->yield();
}

View File

@ -54,6 +54,7 @@ namespace big
static void weapons_steal_vehicle_gun();
static void weapons_vehicle_gun();
static void weapons_c4_limit();
static void weapons_do_persist_weapons();
static void drive_train();
static void derail_train();

View File

@ -0,0 +1,21 @@
#include "backend/looped/looped.hpp"
#include "services/persist_weapons/persist_weapons.hpp"
namespace big
{
static auto last_time = std::chrono::steady_clock::now();
void looped::weapons_do_persist_weapons()
{
const auto time_now = std::chrono::steady_clock::now();
const auto elapsed_time_in_ms = std::chrono::duration_cast<std::chrono::milliseconds>(time_now - last_time).count();
if (elapsed_time_in_ms >= 500)
{
last_time = time_now;
persist_weapons::check_player_has_weapons();
}
}
}

View File

@ -917,7 +917,15 @@ namespace big
NLOHMANN_DEFINE_TYPE_INTRUSIVE(lua, enable_auto_reload_changed_scripts)
} lua{};
NLOHMANN_DEFINE_TYPE_INTRUSIVE(menu_settings, debug, tunables, notifications, player, player_db, protections, self, session, settings, spawn_vehicle, clone_pv, spoofing, vehicle, weapons, window, context_menu, esp, session_browser, ugc, reactions, world, stat_editor, lua)
struct persist_weapons
{
bool enabled = false;
std::string weapon_loadout_file;
NLOHMANN_DEFINE_TYPE_INTRUSIVE(persist_weapons, enabled, weapon_loadout_file)
} persist_weapons{};
NLOHMANN_DEFINE_TYPE_INTRUSIVE(menu_settings, debug, tunables, notifications, player, player_db, protections, self, session, settings, spawn_vehicle, clone_pv, spoofing, vehicle, weapons, window, context_menu, esp, session_browser, ugc, reactions, world, stat_editor, lua, persist_weapons)
};
inline auto g = menu_settings();

View File

@ -849,7 +849,7 @@ static bool GetVehicleInfoForClanLogo(Hash vehicleModel, rage::fvector3& x, rage
z = {-1.0f, 0.0f, 0.0f};
scale = 0.2f;
return true;
case VEHICLE_BULLETGT:
case VEHICLE_BULLET:
x = {-1.57f, 0.07f, 0.16f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
@ -1195,7 +1195,7 @@ static bool GetVehicleInfoForClanLogo(Hash vehicleModel, rage::fvector3& x, rage
x = {0.0f, 1.43f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.515f;
scale = 0.425f;
return true;
case VEHICLE_PRAIRIE:
x = {0.0f, 1.41f, 1.0f};
@ -1330,7 +1330,7 @@ static bool GetVehicleInfoForClanLogo(Hash vehicleModel, rage::fvector3& x, rage
scale = 0.5f;
return true;
case VEHICLE_SENTINEL:
x = {0.0f, 1.52f, 1.0f};
x = {0.0f, 1.18f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.5f;
@ -1516,9 +1516,9 @@ static bool GetVehicleInfoForClanLogo(Hash vehicleModel, rage::fvector3& x, rage
scale = 0.4f;
return true;
case VEHICLE_ZENTORNO:
x = {-1.24f, 0.42f, -0.14f};
x = {-1.24f, 0.3f, -0.07f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.035f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_JESTER:
@ -1691,10 +1691,10 @@ static bool GetVehicleInfoForClanLogo(Hash vehicleModel, rage::fvector3& x, rage
scale = 0.09f;
return true;
case VEHICLE_FELTZER3:
x = {0.0f, 1.4f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.5f;
x = {0.0f, 1.597f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.45f;
return true;
case VEHICLE_OSIRIS:
x = {-1.0f, 0.27f, -0.03f};
@ -2375,6 +2375,7 @@ static bool GetVehicleInfoForClanLogo(Hash vehicleModel, rage::fvector3& x, rage
scale = 0.18f;
return true;
case VEHICLE_AVENGER:
case VEHICLE_AVENGER3:
x = {-2.02f, 6.45f, -0.716f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
@ -3028,112 +3029,532 @@ static bool GetVehicleInfoForClanLogo(Hash vehicleModel, rage::fvector3& x, rage
return true;
case VEHICLE_GAUNTLET5:
x = {-1.5f, 0.379f, 0.297f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.24f;
return true;
case VEHICLE_DUKES3:
x = {-1.f, 0.f, 0.f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, 0.0f, 0.0f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.375f;
return true;
case VEHICLE_MANANA2:
x = {-1.76f, 0.105f, 0.009f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.22f;
return true;
case VEHICLE_CLUB:
x = {0.f, 1.252f, 1.f};
y = {0.f, 0.f, -1.f};
z = {-1.f, 0.f, 0.f};
x = {0.0f, 1.252f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.31f;
return true;
case VEHICLE_GLENDALE2:
x = {0.f, 2.135f, 1.f};
y = {0.f, 0.f, -1.f};
z = {-1.f, 0.f, 0.f};
x = {0.0f, 2.135f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.205f;
return true;
case VEHICLE_YOUGA3:
x = {0.f, 2.352f, 0.3f};
y = {0.f, -1.f, -0.256f};
z = {-1.f, 0.f, 0.f};
x = {0.0f, 2.352f, 0.3f};
y = {0.0f, -1.0f, -0.256f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.135f;
return true;
case VEHICLE_YOSEMITE3:
x = {-1.f, 0.252f, 0.203f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, 0.252f, 0.203f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.21f;
return true;
case VEHICLE_SEMINOLE2:
x = {0.f, 1.654f, 1.f};
y = {0.f, 0.f, -1.f};
z = {-1.f, 0.f, 0.f};
x = {0.0f, 1.654f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.25f;
return true;
case VEHICLE_PENUMBRA2:
x = {-1.08f, 0.28f, -0.093f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_LANDSTALKER2:
x = {-1.64f, 0.7f, 0.f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.64f, 0.7f, 0.0f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_COQUETTE4:
x = {-1.f, -0.021f, 0.273f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, -0.021f, 0.273f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.25f;
return true;
case VEHICLE_TIGON:
x = {-1.f, 0.156f, 0.099f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, 0.156f, 0.099f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_PEYOTE3:
x = {-1.5f, -0.36f, 0.2125f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_BRIOSO2:
x = {-1.f, 0.275f, 0.215f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, 0.275f, 0.215f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_SLAMTRUCK:
x = {-1.f, 1.454f, 0.485f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, 1.454f, 0.485f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_ITALIRSX:
x = {-1.f, 0.109f, 0.129f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, 0.109f, 0.129f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_TOREADOR:
x = {-1.f, 0.194f, 0.342f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, 0.194f, 0.342f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.15f;
return true;
case VEHICLE_WEEVIL:
x = {-1.f, 0.111f, 0.168f};
y = {1.f, 0.f, 0.f};
z = {0.f, -1.f, 0.f};
x = {-1.0f, 0.111f, 0.168f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_ZR350:
x = {0.0f, 1.632f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.19f;
return true;
case VEHICLE_CALICO:
x = {-1.0f, 0.497f, 0.212f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_JESTER4:
x = {-1.0f, 0.0f, 0.181f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_COMET6:
x = {-1.0f, 0.205f, 0.074f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_WARRENER2:
x = {-1.0f, 0.408f, 0.295f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_REMUS:
x = {-1.0f, 0.204f, 0.357f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_VECTRE:
x = {-1.0f, 0.249f, 0.164f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_DOMINATOR7:
x = {-1.0f, 0.253f, 0.142f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_CYPHER:
x = {-1.0f, 0.223f, 0.185f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_RT3000:
x = {-1.0f, 0.0f, 0.189f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_SULTAN3:
x = {-1.0f, 0.42f, 0.309f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.23f;
return true;
case VEHICLE_TAILGATER2:
x = {-1.0f, 0.337f, 0.283f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_PREVION:
x = {-1.0f, 0.14f, -0.155f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_DOMINATOR8:
x = {-1.0f, 0.153f, -0.006f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_FUTO2:
x = {-1.0f, 0.318f, -0.013f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_EUROS:
x = {-1.0f, 0.101f, 0.187f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_GROWLER:
x = {-1.0f, 0.151f, 0.149f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_CINQUEMILA:
x = {-1.0f, 0.533f, 0.197f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_CHAMPION:
x = {-1.0f, 0.076f, 0.122f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_GRANGER2:
x = {-1.0f, 0.461f, 0.264f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_DEITY:
x = {-1.0f, 0.279f, 0.235f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_BUFFALO4:
x = {-1.0f, 0.251f, 0.149f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_BALLER7:
x = {-1.194f, 0.182f, 0.0f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_ZENO:
x = {-1.194f, 0.409f, 0.199f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.22f;
return true;
case VEHICLE_COMET7:
x = {-1.0f, 0.05f, 0.187f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_ASTRON:
x = {-1.0f, 0.249f, 0.39f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_PATRIOT3:
x = {-1.2f, 0.474f, 0.335f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.23f;
return true;
case VEHICLE_JUBILEE:
x = {-1.037f, 0.438f, 0.31f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_SHINOBI:
x = {0.0f, 0.306f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.045f;
return true;
case VEHICLE_REEVER:
x = {-1.0f, 0.292f, 0.29f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.1f;
return true;
case VEHICLE_IWAGEN:
x = {-1.0f, 0.387f, 0.209f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_BRIOSO3:
x = {-1.0f, 0.15f, 0.2f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_CORSITA:
x = {-1.0f, 0.1f, 0.22f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_GREENWOOD:
x = {-1.0f, 0.2f, 0.138f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_KANJOSJ:
x = {-1.0f, 0.1f, 0.26f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_POSTLUDE:
x = {-1.0f, 0.0f, 0.28f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_RHINEHART:
x = {0.0f, 1.317f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.33f;
return true;
case VEHICLE_TENF:
x = {-1.0f, 0.74f, 0.19f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.28f;
return true;
case VEHICLE_TENF2:
x = {-1.0f, 0.74f, 0.19f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.28f;
return true;
case VEHICLE_TORERO2:
x = {-1.0f, 0.0f, 0.22f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_VIGERO2:
x = {-1.0f, -0.07f, 0.3f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_WEEVIL2:
x = {-1.0f, 0.07f, 0.13f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.45f;
return true;
case VEHICLE_DRAUGUR:
x = {-1.0f, 0.5f, 0.48f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_RUINER4:
x = {-1.0f, 0.5f, 0.182f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.28f;
return true;
case VEHICLE_SENTINEL4:
x = {-1.0f, 0.147f, 0.239f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_SM722:
x = {-1.0f, -0.4f, 0.18f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_OMNISEGT:
x = {0.0f, 1.462f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.29f;
return true;
case VEHICLE_POWERSURGE:
x = {-1.0f, 0.3f, 0.37f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.1f;
return true;
case VEHICLE_ENTITY3:
x = {-1.0f, 0.5f, 0.225f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.25f;
return true;
case VEHICLE_MANCHEZ3:
x = {-1.0f, 0.066f, 0.329f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.1f;
return true;
case VEHICLE_SURFER3:
x = {-1.0f, 1.19f, 0.18f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_BOOR:
x = {-1.0f, 0.25f, 0.4f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.4f;
return true;
case VEHICLE_ENDORA:
x = {0.0f, 1.623f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.7f;
return true;
case VEHICLE_TULIP2:
x = {-1.0f, 0.0f, 0.22f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_R300:
x = {-1.0f, 0.0f, 0.22f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_VIRTUE:
x = {-1.0f, 0.0f, 0.22f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_ISSI8:
x = {-1.0f, 0.3f, 0.0f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_BROADWAY:
x = {-1.0f, -0.4f, 0.375f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_PANTHERE:
x = {-1.0f, 0.069f, 0.13f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_TAHOMA:
x = {-1.0f, -0.253f, 0.39f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_EVERON2:
x = {-1.0f, 0.101f, 0.227f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.6f;
return true;
case VEHICLE_L35:
x = {-1.0f, 0.2f, 0.43f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_BRIGHAM:
x = {-0.003f, 2.764f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.25f;
return true;
case VEHICLE_GAUNTLET6:
x = {-1.5f, 0.4f, 0.1f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.24f;
return true;
case VEHICLE_STINGERTT:
x = {0.0f, 1.623f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.25f;
return true;
case VEHICLE_BUFFALO5:
x = {0.0f, 1.5f, 1.0f};
y = {0.0f, 0.0f, -1.0f};
z = {-1.0f, 0.0f, 0.0f};
scale = 0.3f;
return true;
case VEHICLE_RATEL:
x = {-1.0f, 0.128f, 0.212f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.42f;
return true;
case VEHICLE_CLIQUE2:
x = {-1.0f, 0.088f, 0.438f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.28f;
return true;
case VEHICLE_COUREUR:
x = {-1.0f, 0.0f, 0.295f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.35f;
return true;
case VEHICLE_MONSTROCITI:
x = {-1.0f, 0.0f, 0.295f};
y = {1.0f, 0.0f, 0.0f};
z = {0.0f, -1.0f, 0.0f};
scale = 0.5f;
return true;
default: return false;
}
}

View File

@ -550,7 +550,7 @@ enum Super : Hash
VEHICLE_ADDER = RAGE_JOAAT("ADDER"),
VEHICLE_AUTARCH = RAGE_JOAAT("AUTARCH"),
VEHICLE_BANSHEE2 = RAGE_JOAAT("BANSHEE2"),
VEHICLE_BULLETGT = RAGE_JOAAT("BULLET"),
VEHICLE_BULLET = RAGE_JOAAT("BULLET"),
VEHICLE_CHEETAH = RAGE_JOAAT("CHEETAH"),
VEHICLE_CYCLONE = RAGE_JOAAT("CYCLONE"),
VEHICLE_ENTITYXF = RAGE_JOAAT("ENTITYXF"),
@ -678,7 +678,6 @@ enum Vans : Hash
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"),
@ -901,7 +900,7 @@ enum DrugWars : Hash
VEHICLE_CARGOPLANE2 = RAGE_JOAAT("cargoplane2"),
VEHICLE_ENTITY3 = RAGE_JOAAT("entity3"),
VEHICLE_ENDORA = RAGE_JOAAT("eudora"),
VEHICLE_EVERSON2 = RAGE_JOAAT("everon2"),
VEHICLE_EVERON2 = RAGE_JOAAT("everon2"),
VEHICLE_ISSI8 = RAGE_JOAAT("issi8"),
VEHICLE_JOURNEY2 = RAGE_JOAAT("journey2"),
VEHICLE_MANCHEZ3 = RAGE_JOAAT("manchez3"),
@ -913,3 +912,24 @@ enum DrugWars : Hash
VEHICLE_TULIP2 = RAGE_JOAAT("tulip2"),
VEHICLE_VIRTUE = RAGE_JOAAT("virtue")
};
enum SanAndreasMercenaries : Hash
{
VEHICLE_AVENGER3 = RAGE_JOAAT("avenger3"),
VEHICLE_AVENGER4 = RAGE_JOAAT("avenger4"),
VEHICLE_BRIGHAM = RAGE_JOAAT("brigham"),
VEHICLE_BUFFALO5 = RAGE_JOAAT("buffalo5"),
VEHICLE_CLIQUE2 = RAGE_JOAAT("clique2"),
VEHICLE_CONADA2 = RAGE_JOAAT("conada2"),
VEHICLE_COUREUR = RAGE_JOAAT("coureur"),
VEHICLE_GAUNTLET6 = RAGE_JOAAT("gauntlet6"),
VEHICLE_INDUCTOR = RAGE_JOAAT("inductor"),
VEHICLE_INDUCTOR2 = RAGE_JOAAT("inductor2"),
VEHICLE_L35 = RAGE_JOAAT("l35"),
VEHICLE_MONSTROCITI = RAGE_JOAAT("monstrociti"),
VEHICLE_RAIJU = RAGE_JOAAT("raiju"),
VEHICLE_RATEL = RAGE_JOAAT("ratel"),
VEHICLE_SPEEDO4 = RAGE_JOAAT("speedo4"),
VEHICLE_STINGERTT = RAGE_JOAAT("stingertt"),
VEHICLE_STREAMER216 = RAGE_JOAAT("streamer216")
};

View File

@ -3,203 +3,9 @@
#include "gta/joaat.hpp"
#include "natives.hpp"
enum WeaponHashes : Hash
enum Weapons : 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,
WEAPON_UNARMED = RAGE_JOAAT("WEAPON_UNARMED")
};
enum Gadgets : Hash
@ -208,426 +14,6 @@ enum Gadgets : Hash
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"),

View File

@ -1,4 +1,5 @@
#include "hooking.hpp"
#include "gta/weapons.hpp"
namespace big
{
@ -6,7 +7,7 @@ namespace big
{
if (g.vehicle.unlimited_weapons)
{
if (weaponinfo_group == RAGE_JOAAT("GROUP_THROWN")) // Because the thrower can be used without bypassing, we let the game decide the return value, since this function has multiple xrefs, it may be necessary to return 0 at some point
if (weaponinfo_group == GROUP_THROWN) // Because the thrower can be used without bypassing, we let the game decide the return value, since this function has multiple xrefs, it may be necessary to return 0 at some point
return g_hooking->get_original<allow_weapons_in_vehicle>()(unk, weaponinfo_group);
return true;
}

View File

@ -127,17 +127,17 @@ namespace big
const weapon_component& gta_data_service::weapon_component_by_hash(std::uint32_t hash)
{
for (const auto& component : m_weapons_cache.weapon_components)
if (component.second.m_hash == hash)
return component.second;
for (const auto& [name, component] : m_weapons_cache.weapon_components)
if (component.m_hash == hash)
return component;
return gta_data_service::empty_component;
}
const weapon_component& gta_data_service::weapon_component_by_name(std::string name)
{
for (const auto& component : m_weapons_cache.weapon_components)
if (component.first == name)
return component.second;
for (const auto& [name_key, component] : m_weapons_cache.weapon_components)
if (name_key == name)
return component;
return gta_data_service::empty_component;
}

View File

@ -0,0 +1,196 @@
#include "persist_weapons.hpp"
#include "services/gta_data/gta_data_service.hpp"
#include "gta/weapons.hpp"
#include "natives.hpp"
namespace big
{
static weaponloadout_json persist_weapon_loadout;
void persist_weapons::save_weapons(std::string loadout_name)
{
Player player = self::id;
Ped player_ped = self::ped;
weaponloadout_json weapon_json{};
for (const auto& [name, weapon] : g_gta_data_service->weapons())
{
Hash weapon_hash = weapon.m_hash;
if (weapon_hash != WEAPON_UNARMED && WEAPON::HAS_PED_GOT_WEAPON(player_ped, weapon_hash, FALSE))
{
weaponloadout_weapon_json weapon_loadout;
weapon_loadout.weapon = weapon_hash;
weapon_loadout.group = rage::joaat("GROUP_" + weapon.m_weapon_type);
weapon_loadout.tint = WEAPON::GET_PED_WEAPON_TINT_INDEX(player_ped, weapon_hash);
for (auto component : weapon.m_attachments)
{
Hash component_hash = rage::joaat(component);
if (WEAPON::HAS_PED_GOT_WEAPON_COMPONENT(player_ped, weapon_hash, component_hash))
weapon_loadout.component_array.push_back(component_hash);
}
weapon_json.weapons.push_back(weapon_loadout);
}
}
if (WEAPON::HAS_PED_GOT_WEAPON(player_ped, GADGET_PARACHUTE, FALSE))
{
weapon_json.parachutes = 1;
int parachute_tint, parachute_pack_tint, reserve_pack_tint, smoke_trail[3]{};
bool hasReserve = PLAYER::GET_PLAYER_HAS_RESERVE_PARACHUTE(player);
PLAYER::GET_PLAYER_PARACHUTE_TINT_INDEX(player, &parachute_tint);
PLAYER::GET_PLAYER_PARACHUTE_PACK_TINT_INDEX(player, &parachute_pack_tint);
weapon_json.parachute_tint = parachute_tint;
weapon_json.parachute_pack_tint = parachute_pack_tint;
if (hasReserve == true)
{
weapon_json.parachutes = 2;
PLAYER::GET_PLAYER_RESERVE_PARACHUTE_TINT_INDEX(player, &reserve_pack_tint);
weapon_json.reserve_pack_tint = reserve_pack_tint;
}
PLAYER::GET_PLAYER_PARACHUTE_SMOKE_TRAIL_COLOR(player,
&weapon_json.smoke_trail[0],
&weapon_json.smoke_trail[1],
&weapon_json.smoke_trail[2]);
}
nlohmann::json json_output_file = weapon_json;
const auto file = get_weapon_config_folder().get_file(loadout_name + ".json");
std::ofstream file_stream(file.get_path(), std::ios::out | std::ios::trunc);
file_stream << json_output_file.dump(4);
file_stream.close();
}
void persist_weapons::set_weapon_loadout(std::string loadout_name)
{
if (loadout_name.empty())
return;
g.persist_weapons.weapon_loadout_file = loadout_name;
persist_weapon_loadout = get_loadout(loadout_name);
}
void persist_weapons::check_player_has_weapons()
{
if (!g.persist_weapons.enabled)
{
return;
}
if (persist_weapon_loadout.weapons.empty())
{
if (g.persist_weapons.weapon_loadout_file.empty())
{
return;
}
persist_weapon_loadout = get_loadout(g.persist_weapons.weapon_loadout_file);
}
if (g_local_player == nullptr || g_local_player->m_player_info == nullptr || g_local_player->m_player_info->m_game_state == eGameState::InMPCutscene || STREAMING::IS_PLAYER_SWITCH_IN_PROGRESS() || DLC::GET_IS_LOADING_SCREEN_ACTIVE())
{
return;
}
give_Loadout(persist_weapon_loadout);
}
void persist_weapons::give_player_loadout(std::string loadout_name)
{
give_Loadout(get_loadout(loadout_name));
}
weaponloadout_json persist_weapons::get_loadout(std::string loadout_name)
{
auto file = get_weapon_config_folder().get_file(loadout_name);
if (file.exists())
{
std::ifstream file_stream(file.get_path());
try
{
nlohmann::json json_input_file;
file_stream >> json_input_file;
file_stream.close();
weaponloadout_json loadout = json_input_file;
return loadout;
}
catch (std::exception& e)
{
g_notification_service->push_warning("Persist Weapons", "Failed to load JSON file from disk.");
LOG(WARNING) << "Persist Weapons failed to load JSON file: " << g.persist_weapons.weapon_loadout_file << " because " << e.what();
}
}
else
{
g.persist_weapons.weapon_loadout_file.clear();
LOG(WARNING) << "persist_weapons cannot open file" << g.persist_weapons.weapon_loadout_file;
}
return {};
}
big::folder persist_weapons::get_weapon_config_folder()
{
const auto folder = g_file_manager.get_project_folder("./weapon_loadouts");
return folder;
}
std::vector<std::string> persist_weapons::list_weapon_loadouts()
{
std::vector<std::string> file_paths;
const auto file_path = get_weapon_config_folder();
for (const auto& directory_entry : std::filesystem::directory_iterator(file_path.get_path()))
if (directory_entry.path().extension() == ".json")
file_paths.push_back(directory_entry.path().filename().generic_string());
return file_paths;
}
void persist_weapons::give_Loadout(const weaponloadout_json& loadout)
{
Player player = self::id;
Ped player_ped = self::ped;
if (PED::IS_PED_DEAD_OR_DYING(player_ped, true))
return;
for (auto weapon : loadout.weapons)
{
Hash weapon_hash = weapon.weapon;
bool is_gun = (weapon.group != GROUP_MELEE);
if (WEAPON::HAS_PED_GOT_WEAPON(player_ped, weapon_hash, FALSE) == false
|| (is_gun && (WEAPON::GET_PED_WEAPON_TINT_INDEX(player_ped, weapon_hash) != weapon.tint || (WEAPON::GET_AMMO_IN_PED_WEAPON(player_ped, weapon_hash) == 0))))
{
int maxAmmo;
if (WEAPON::GET_MAX_AMMO(player_ped, weapon_hash, &maxAmmo) == FALSE)
maxAmmo = 9999;
WEAPON::GIVE_WEAPON_TO_PED(player_ped, weapon_hash, maxAmmo, FALSE, FALSE);
if (weapon.group != GROUP_MELEE)
{
WEAPON::SET_PED_WEAPON_TINT_INDEX(player_ped, weapon_hash, weapon.tint);
for (auto component : g_gta_data_service->weapon_by_hash(weapon_hash).m_attachments)
WEAPON::REMOVE_WEAPON_COMPONENT_FROM_PED(player_ped, weapon_hash, rage::joaat(component));
for (auto component : weapon.component_array)
WEAPON::GIVE_WEAPON_COMPONENT_TO_PED(player_ped, weapon_hash, component);
WEAPON::GIVE_WEAPON_TO_PED(player_ped, weapon_hash, (WEAPON::GET_MAX_AMMO(player_ped, weapon_hash, &maxAmmo) == TRUE) ? maxAmmo : 9999, FALSE, FALSE); //Mk II weapons require giving the weapon to the player twice for them to work, because reasons.
}
}
}
if (loadout.parachutes != 0)
{
WEAPON::GIVE_WEAPON_TO_PED(player_ped, GADGET_PARACHUTE, 1, FALSE, FALSE);
PLAYER::SET_PLAYER_PARACHUTE_TINT_INDEX(player, loadout.parachute_tint);
PLAYER::SET_PLAYER_PARACHUTE_PACK_TINT_INDEX(player, loadout.parachute_pack_tint);
if (loadout.parachutes == 2)
{
PLAYER::SET_PLAYER_HAS_RESERVE_PARACHUTE(player);
PLAYER::SET_PLAYER_RESERVE_PARACHUTE_TINT_INDEX(player, loadout.reserve_pack_tint);
}
auto smoke_trail = loadout.smoke_trail;
if ((smoke_trail[0] + smoke_trail[1] + smoke_trail[2]) != 765) //255 + 255 + 255
{
PLAYER::SET_PLAYER_CAN_LEAVE_PARACHUTE_SMOKE_TRAIL(player, TRUE);
PLAYER::SET_PLAYER_PARACHUTE_SMOKE_TRAIL_COLOR(player, smoke_trail[0], smoke_trail[1], smoke_trail[2]);
}
}
}
}

View File

@ -0,0 +1,20 @@
#pragma once
#include "weaponloadout_json.hpp"
namespace big
{
class persist_weapons
{
public:
static void save_weapons(std::string loadout_name);
static void set_weapon_loadout(std::string loadout_name);
static std::vector<std::string> list_weapon_loadouts();
static void check_player_has_weapons();
static void give_player_loadout(std::string loadout_name);
private:
static weaponloadout_json get_loadout(std::string loadout_name);
static big::folder get_weapon_config_folder();
static void give_Loadout(const weaponloadout_json& loadout);
};
}

View File

@ -0,0 +1,27 @@
#pragma once
namespace big
{
struct weaponloadout_weapon_json
{
Hash weapon;
Hash group;
std::vector<Hash> component_array;
int tint;
NLOHMANN_DEFINE_TYPE_INTRUSIVE(weaponloadout_weapon_json, weapon, group, component_array, tint)
};
struct weaponloadout_json
{
std::vector<weaponloadout_weapon_json> weapons;
int parachutes;
int parachute_tint;
int parachute_pack_tint;
int reserve_pack_tint;
int smoke_trail[3];
NLOHMANN_DEFINE_TYPE_INTRUSIVE(weaponloadout_json, weapons, parachutes, parachute_tint, parachute_pack_tint, reserve_pack_tint, smoke_trail)
};
}

View File

@ -7,6 +7,7 @@
#include "pointers.hpp"
#include "services/gta_data/gta_data_service.hpp"
#include "views/view.hpp"
#include "services/persist_weapons/persist_weapons.hpp"
namespace big
{
@ -177,92 +178,131 @@ namespace big
ImGui::PopItemWidth();
}
ImGui::SeparatorText("Ammunation");
static Hash selected_weapon_hash, selected_weapon_attachment_hash{};
static std::string selected_weapon, selected_weapon_attachment;
ImGui::PushItemWidth(300);
if (ImGui::BeginCombo("Weapons", selected_weapon.c_str()))
if (ImGui::CollapsingHeader("Ammunation"))
{
for (auto& weapon : g_gta_data_service->weapons())
static Hash selected_weapon_hash, selected_weapon_attachment_hash{};
static std::string selected_weapon, selected_weapon_attachment;
ImGui::PushItemWidth(300);
if (ImGui::BeginCombo("Weapons", selected_weapon.c_str()))
{
bool is_selected = weapon.second.m_hash == selected_weapon_hash;
if (weapon.second.m_display_name != "NULL" && ImGui::Selectable(weapon.second.m_display_name.c_str(), is_selected, ImGuiSelectableFlags_None))
for (auto& weapon : g_gta_data_service->weapons())
{
selected_weapon = weapon.second.m_display_name;
selected_weapon_hash = weapon.second.m_hash;
selected_weapon_attachment_hash = {};
selected_weapon_attachment.clear();
}
if (is_selected)
ImGui::SetItemDefaultFocus();
}
ImGui::EndCombo();
}
ImGui::PopItemWidth();
ImGui::SameLine();
components::button("Give Weapon", [] {
WEAPON::GIVE_WEAPON_TO_PED(self::ped, selected_weapon_hash, 9999, false, true);
});
ImGui::SameLine();
components::button("Remove Weapon", [] {
WEAPON::REMOVE_WEAPON_FROM_PED(self::ped, selected_weapon_hash);
});
ImGui::PushItemWidth(250);
if (ImGui::BeginCombo("Attachments", selected_weapon_attachment.c_str()))
{
auto weapon = g_gta_data_service->weapon_by_hash(selected_weapon_hash);
if (!weapon.m_attachments.empty())
{
for (std::string attachment : weapon.m_attachments)
{
auto attachment_component = g_gta_data_service->weapon_component_by_name(attachment);
std::string attachment_name = attachment_component.m_display_name;
Hash attachment_hash = attachment_component.m_hash;
if (attachment_hash == NULL)
bool is_selected = weapon.second.m_hash == selected_weapon_hash;
if (weapon.second.m_display_name != "NULL" && ImGui::Selectable(weapon.second.m_display_name.c_str(), is_selected, ImGuiSelectableFlags_None))
{
attachment_name = attachment;
attachment_hash = rage::joaat(attachment);
}
bool is_selected = attachment_hash == selected_weapon_attachment_hash;
std::string display_name = attachment_name.append("##").append(std::to_string(attachment_hash));
if (ImGui::Selectable(display_name.c_str(), is_selected, ImGuiSelectableFlags_None))
{
selected_weapon_attachment = attachment_name;
selected_weapon_attachment_hash = attachment_hash;
selected_weapon = weapon.second.m_display_name;
selected_weapon_hash = weapon.second.m_hash;
selected_weapon_attachment_hash = {};
selected_weapon_attachment.clear();
}
if (is_selected)
ImGui::SetItemDefaultFocus();
}
ImGui::EndCombo();
}
ImGui::PopItemWidth();
ImGui::SameLine();
components::button("Give Weapon", [] {
WEAPON::GIVE_WEAPON_TO_PED(self::ped, selected_weapon_hash, 9999, false, true);
});
ImGui::SameLine();
components::button("Remove Weapon", [] {
WEAPON::REMOVE_WEAPON_FROM_PED(self::ped, selected_weapon_hash);
});
ImGui::EndCombo();
ImGui::PushItemWidth(250);
if (ImGui::BeginCombo("Attachments", selected_weapon_attachment.c_str()))
{
auto weapon = g_gta_data_service->weapon_by_hash(selected_weapon_hash);
if (!weapon.m_attachments.empty())
{
for (std::string attachment : weapon.m_attachments)
{
auto attachment_component = g_gta_data_service->weapon_component_by_name(attachment);
std::string attachment_name = attachment_component.m_display_name;
Hash attachment_hash = attachment_component.m_hash;
if (attachment_hash == NULL)
{
attachment_name = attachment;
attachment_hash = rage::joaat(attachment);
}
bool is_selected = attachment_hash == selected_weapon_attachment_hash;
std::string display_name = attachment_name.append("##").append(std::to_string(attachment_hash));
if (ImGui::Selectable(display_name.c_str(), is_selected, ImGuiSelectableFlags_None))
{
selected_weapon_attachment = attachment_name;
selected_weapon_attachment_hash = attachment_hash;
}
if (is_selected)
ImGui::SetItemDefaultFocus();
}
}
ImGui::EndCombo();
}
ImGui::SameLine();
components::button("Add to Weapon", [] {
WEAPON::GIVE_WEAPON_COMPONENT_TO_PED(self::ped, selected_weapon_hash, selected_weapon_attachment_hash);
});
ImGui::SameLine();
components::button("Remove from Weapon", [] {
WEAPON::REMOVE_WEAPON_COMPONENT_FROM_PED(self::ped, selected_weapon_hash, selected_weapon_attachment_hash);
});
ImGui::PopItemWidth();
static const char* default_tints[]{"Black tint", "Green tint", "Gold tint", "Pink tint", "Army tint", "LSPD tint", "Orange tint", "Platinum tint"};
static const char* mk2_tints[]{"Classic Black", "Classic Grey", "Classic Two - Tone", "Classic White", "Classic Beige", "Classic Green", "Classic Blue", "Classic Earth", "Classic Brown & Black", "Red Contrast", "Blue Contrast", "Yellow Contrast", "Orange Contrast", "Bold Pink", "Bold Purple & Yellow", "Bold Orange", "Bold Green & Purple", "Bold Red Features", "Bold Green Features", "Bold Cyan Features", "Bold Yellow Features", "Bold Red & White", "Bold Blue & White", "Metallic Gold", "Metallic Platinum", "Metallic Grey & Lilac", "Metallic Purple & Lime", "Metallic Red", "Metallic Green", "Metallic Blue", "Metallic White & Aqua", "Metallic Red & Yellow"};
static int tint;
if (selected_weapon.ends_with("Mk II"))
{
ImGui::Combo("Tints", &tint, mk2_tints, IM_ARRAYSIZE(mk2_tints));
}
else
{
ImGui::Combo("Tints", &tint, default_tints, IM_ARRAYSIZE(default_tints));
}
ImGui::SameLine();
components::button("Apply", [] {
WEAPON::SET_PED_WEAPON_TINT_INDEX(self::ped, selected_weapon_hash, tint);
});
}
ImGui::SameLine();
components::button("Add to Weapon", [] {
WEAPON::GIVE_WEAPON_COMPONENT_TO_PED(self::ped, selected_weapon_hash, selected_weapon_attachment_hash);
});
ImGui::SameLine();
components::button("Remove from Weapon", [] {
WEAPON::REMOVE_WEAPON_COMPONENT_FROM_PED(self::ped, selected_weapon_hash, selected_weapon_attachment_hash);
});
ImGui::PopItemWidth();
static const char* default_tints[]{"Black tint", "Green tint", "Gold tint", "Pink tint", "Army tint", "LSPD tint", "Orange tint", "Platinum tint"};
static const char* mk2_tints[]{"Classic Black", "Classic Grey", "Classic Two - Tone", "Classic White", "Classic Beige", "Classic Green", "Classic Blue", "Classic Earth", "Classic Brown & Black", "Red Contrast", "Blue Contrast", "Yellow Contrast", "Orange Contrast", "Bold Pink", "Bold Purple & Yellow", "Bold Orange", "Bold Green & Purple", "Bold Red Features", "Bold Green Features", "Bold Cyan Features", "Bold Yellow Features", "Bold Red & White", "Bold Blue & White", "Metallic Gold", "Metallic Platinum", "Metallic Grey & Lilac", "Metallic Purple & Lime", "Metallic Red", "Metallic Green", "Metallic Blue", "Metallic White & Aqua", "Metallic Red & Yellow"};
static int tint;
if (selected_weapon.ends_with("Mk II"))
if (ImGui::CollapsingHeader("Persist Weapons"))
{
ImGui::Combo("Tints", &tint, mk2_tints, IM_ARRAYSIZE(mk2_tints));
ImGui::Checkbox("Enabled", &g.persist_weapons.enabled);
static std::string selected_loadout = g.persist_weapons.weapon_loadout_file;
ImGui::PushItemWidth(250);
if (ImGui::BeginListBox("Saved Loadouts", ImVec2(200, 200)))
{
for (auto filename : persist_weapons::list_weapon_loadouts())
{
if (components::selectable(filename, filename == selected_loadout))
{
selected_loadout = filename;
}
}
ImGui::EndListBox();
}
ImGui::SameLine();
ImGui::BeginGroup();
static std::string input_file_name;
components::input_text_with_hint("Weapon Loadout Filename", "Loadout Name", &input_file_name);
components::button("Save Loadout", [] {
persist_weapons::save_weapons(input_file_name);
input_file_name.clear();
});
ImGui::SameLine();
components::button("Load Loadout", [] {
persist_weapons::give_player_loadout(selected_loadout);
});
ImGui::SameLine();
components::button("Set Loadout", [] {
persist_weapons::set_weapon_loadout(selected_loadout);
});
ImGui::Text(std::format("Current Loadout: {}:", g.persist_weapons.weapon_loadout_file).data());
ImGui::EndGroup();
ImGui::PopItemWidth();
}
else
{
ImGui::Combo("Tints", &tint, default_tints, IM_ARRAYSIZE(default_tints));
}
ImGui::SameLine();
components::button("Apply", [] {
WEAPON::SET_PED_WEAPON_TINT_INDEX(self::ped, selected_weapon_hash, tint);
});
}
}