This commit is contained in:
expvintl committed 2024-10-16 11:20:42 +08:00
commit ce19babcf4
4231 files changed
+701180

No files matched your search

+37
View File
@@ -0,0 +1,37 @@
util.require_natives("2944a", "g-uno")
local crashes = menu.my_root()
crashes:action("CTaskNMShot", {""}, "", function(bool)
local pid = players.user()
local pos = players.get_position(pid)
local ped1 = CREATE_RANDOM_PED(pos)
local ped2 = CREATE_RANDOM_PED(pos)
local ped3 = CREATE_RANDOM_PED(pos)
util.request_model(util.joaat("adder"))
local veh = entities.create_vehicle(util.joaat("adder"), pos, 0)
FREEZE_ENTITY_POSITION(veh, true)
local peds = {ped1, ped2}
repeat
SET_PED_INTO_VEHICLE(ped1, veh, 0)
SET_PED_INTO_VEHICLE(ped3, veh, -1)
util.yield()
until GET_PED_IN_VEHICLE_SEAT(veh, 0) == ped1
SET_PED_INTO_VEHICLE(ped1, veh, -1)
ATTACH_ENTITY_TO_ENTITY(ped2, ped1, 0, 0, 0.0, 0.0, 0.0, 0.0, 0.0, true, false, true, false, 0, false)
SET_ENTITY_HEADING(ped2, GET_ENTITY_COORDS(ped3))
GIVE_WEAPON_TO_PED(ped2, util.joaat("weapon_stungun_mp"), 9999, true, true)
TASK_SHOOT_AT_ENTITY(ped2, ped3, 5000, 0)
while GET_PED_IN_VEHICLE_SEAT(veh, -1) == ped3 do
FORCE_PED_AI_AND_ANIMATION_UPDATE(ped2)
REFILL_AMMO_INSTANTLY(ped2)
util.yield()
end
for peds as ped do
entities.delete(ped)
end
end)
+27
View File
@@ -0,0 +1,27 @@
util.require_natives()
menu.my_root():toggle("lag player", {""}, "", function(on)
if on then
toggled = on
local vehs = {}
local pos = players.get_pos(players.user())
util.request_model("patrolboat")
for i = 1, 23 do
vehs[i] = entities.create_vehicle(util.joaat("patrolboat"),pos,0)
entities.set_can_migrate(vehs[i],false)
ENTITY.SET_ENTITY_INVINCIBLE(vehs[i],true)
end
while toggled do
for vehs as veh do
if toggled ~= false then
ENTITY.SET_ENTITY_COORDS_NO_OFFSET(veh, pos, false, false, false)
end
end
util.yield(3000)
end
for vehs as veh do
entities.delete(veh)
end
end
toggled = false
end)
+46
View File
@@ -0,0 +1,46 @@
util.require_natives(1672190175)
function Playerjoin(pid)
menu.action(menu.my_root(), "Crash", {""}, "", function()
STREAMING.REQUEST_MODEL(util.joaat("buccaneer2"))
while not STREAMING.HAS_MODEL_LOADED(util.joaat("buccaneer2")) do
util.yield()
end
menu.trigger_commands("bottomless on")
menu.trigger_commands("noreload on")
menu.trigger_commands("csbmpagent14") -- csbmpagent14 iglestercrest igorleans
local player = players.user_ped()
util.yield(1000)
PED.SET_PED_HEAD_BLEND_DATA(player, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0,true)
for i = 1, 3 do
TASK.TASK_JUMP(player,true,false,false)
util.yield(500)
TASK.CLEAR_PED_TASKS_IMMEDIATELY(player)
end
local pos = ENTITY.GET_ENTITY_COORDS(player)
local veh = entities.create_vehicle(util.joaat("buccaneer2"), pos,0)
STREAMING.SET_MODEL_AS_NO_LONGER_NEEDED(util.joaat("buccaneer2"))
entities.set_can_migrate(veh,false)
VEHICLE.SET_VEHICLE_EXTRA(veh,2,true)
ENTITY.SET_ENTITY_INVINCIBLE(veh,true)
WEAPON.GIVE_WEAPON_TO_PED(player,util.joaat("WEAPON_APPISTOL"),9999,true,true)
PED.SET_PED_INTO_VEHICLE(player,veh,-1)
WEAPON.SET_CURRENT_PED_WEAPON(player,util.joaat("WEAPON_APPISTOL"),true)
TASK.TASK_VEHICLE_SHOOT_AT_COORD(player,pos.x,pos.y + 10,pos.z,100.0)
local time = util.current_time_millis() + 5000
while time > util.current_time_millis() do
PED.SET_PED_RESET_FLAG(player, 65 , true) -- shooting
util.yield()
end
entities.delete(veh)
end)
end
players.on_join(Playerjoin)
players.dispatch_on_join()
util.keep_running()
+19
View File
@@ -0,0 +1,19 @@
util.require_natives("2944b")
menu.action(menu.my_root(), "Bullet Damage", {}, "", function ()
local end_str = "\n"
for util.get_weapons() as weapon do
local hash = weapon.hash
local damage = WEAPON.GET_WEAPON_DAMAGE(hash, 0)
local weapon_name = util.reverse_joaat(hash)
assert(weapon_name ~= "", $"weapon_name is undefined. {hash}, {weapon.label_key}")
if damage ~= 0.0 then
end_str ..= '{ ATSTRINGHASH("' .. util.reverse_joaat(hash) .. '"), ' .. damage .. "f },\n"
end
end
util.toast(end_str, TOAST_LOGGER)
end)
+130
View File
@@ -0,0 +1,130 @@
<?php
// Adapted from https://github.com/calamity-inc/gta-v-joaat-hash-db/blob/senpai/extract_stats.php
// Before running: Search OpenIV for "statssetup" and extract all results into the same folder as this script.
$fh = fopen("raw/stats.txt", "w");
$processed_stats = array(); // Some stats duplicate in OpenIV. This is very sad.
fwrite($fh, " static inline Stat stats[] = {\n");
function getAgnosticField($stat, $field, $can_be_empty = false)
{
$res = $stat[$field];
if (empty($res))
{
$res = $stat[strtolower($field)];
if (empty($res) && !$can_be_empty)
{
echo "getAgnosticField failed on:\n";
var_dump($stat);
exit;
}
}
return $res;
}
function formatStat($stat, $name)
{
global $stattypes;
$name = ' Stat("' . $name . '"';
$type = getAgnosticField($stat, "Type");
if (!empty($type))
{
$field = getAgnosticField($stat, "Packed", true);
if (!empty($field))
{
$name .= ", true, " . strtoupper($field);
$name = "// ".$name;
}
else
{
$name .= ", false, " . strtoupper($type);
}
}
else
{
echo "Unexpected absent type on stat: " . $name . "\n";
var_dump($name);
exit;
}
return $name . "),";
}
function markStatAsProcessed($name)
{
global $processed_stats;
$processed_stats[trim($name)] = true;
}
function wasStatProcessed($name)
{
global $processed_stats;
return array_key_exists(trim($name), $processed_stats);
}
function processStatName($name)
{
if (wasStatProcessed($name))
{
return false;
}
markStatAsProcessed($name);
return true;
}
function processCharStat($mp, $stat)
{
global $fh;
$arr = $mp ? ["MP0_", "MP1_"] : ["SP0_", "SP1_", "SP2_"];
foreach($arr as $prefix)
{
$name = $prefix . getAgnosticField($stat, "Name");
if (processStatName($name))
{
$line = formatStat($stat, $name);
fwrite($fh, $line."\n");
}
}
}
function processStats($mp, $stats)
{
global $fh;
foreach($stats->stat as $stat)
{
$name = getAgnosticField($stat, "Name");
if($stat["characterStat"] == "true")
{
processCharStat($mp, $stat);
}
else if (processStatName($name))
{
$name = formatStat($stat, $name);
fwrite($fh, $name."\n");
}
}
}
foreach(scandir(".") as $file)
{
if(substr($file, -4) == ".xml")
{
$mp = substr($file, 0, 2) == "mp";
$stats = simplexml_load_file($file)->stats;
if($stats->Category)
{
foreach($stats->Category as $category)
{
processStats($mp, $category);
}
}
else
{
processStats($mp, $stats);
}
}
}
echo "Success.\n";
fwrite($fh, "};");
fclose($fh);
+64
View File
@@ -0,0 +1,64 @@
util.require_natives("3095a")
local ent = 0
local vehs = util.get_vehicles() -- Be it this or a table of vehicle names.
local current_index = 1
local supported_vehs = {}
local function getVehName(veh)
if type(veh) == "string" then
return veh
else
return veh.name
end
end
menu.action(menu.my_root(), "Next", {}, "", function ()
if current_index > #vehs then
util.toast("Done")
return
else
util.toast($"{current_index}/{#vehs}")
end
local veh = vehs[current_index]
local name = getVehName(veh)
local hash = util.joaat(name)
util.request_model(hash)
if ENTITY.DOES_ENTITY_EXIST(ent) then
STREAMING.SET_MODEL_AS_NO_LONGER_NEEDED(ENTITY.GET_ENTITY_MODEL(ent))
entities.delete(ent)
end
local pos = players.get_position(players.user())
ent = entities.create_vehicle(hash, pos, 1.0)
if ent ~= 0 then
PED.SET_PED_INTO_VEHICLE(players.user_ped(), ent, -1)
VEHICLE.SET_VEHICLE_EXTRA_COLOUR_5(ent, 136) -- Salmon Pink
current_index += 1
else
util.toast($"Failed to create entity from hash: {name}")
end
end)
menu.action(menu.my_root(), "Add Current", {}, "", function ()
local veh = vehs[current_index - 1]
local name = getVehName(veh)
supported_vehs:insert(name)
util.toast($"Added {name} to the list.")
end)
menu.action(menu.my_root(), "Add Previous", {}, "", function ()
local veh = vehs[current_index - 2]
local name = getVehName(veh)
supported_vehs:insert(name)
util.toast($"Added {name} to the list.")
end)
menu.action(menu.my_root(), "Print List", {}, "", function ()
util.log("\n" .. supported_vehs:concat("\n"))
end)
+43
View File
@@ -0,0 +1,43 @@
util.require_natives()
menu.action(menu.my_root(), "Crash", {""}, "", function()
util.request_model("cs_lestercrest")
util.request_model("cs_josh")
local pid = players.user()
local PlayerPed = PLAYER.GET_PLAYER_PED_SCRIPT_INDEX(pid)
local PlayerPos = ENTITY.GET_ENTITY_COORDS(PlayerPed, true)
PlayerPos.x = PlayerPos.x + 3
for i = 1, 10 do
local Ped = entities.create_ped(26, util.joaat("cs_lestercrest"), PlayerPos, ENTITY.GET_ENTITY_HEADING(PlayerPed))
local time = util.current_time_millis() + 1500
while time > util.current_time_millis() do
PED.SET_PED_RANDOM_COMPONENT_VARIATION(Ped,0)
NETWORK.NETWORK_REQUEST_CONTROL_OF_ENTITY(Ped)
PED.SET_PED_COMPONENT_VARIATION(Ped, 3, 3, math.random(0, 3), 0)
PED.SET_PED_COMPONENT_VARIATION(Ped, 8, 2, math.random(0, 3), 0)
PED.SET_PED_COMPONENT_VARIATION(Ped, 9, 2, math.random(0, 3), -1)
PED.SET_PED_COMPONENT_VARIATION(Ped, 12, 2, math.random(0, 3), -1)
PED.SET_PED_COMPONENT_VARIATION(Ped, 13, 2, math.random(0, 3), -1)
util.yield(50)
end
TASK.TASK_START_SCENARIO_IN_PLACE(Ped, "WORLD_HUMAN_YOGA", 0, false)
util.yield(100)
end
util.yield(1000)
for i = 1, 10 do
local Ped = entities.create_ped(26, util.joaat("cs_josh"), PlayerPos, ENTITY.GET_ENTITY_HEADING(PlayerPed))
local time = util.current_time_millis() + 1500
while time > util.current_time_millis() do
PED.SET_PED_RANDOM_COMPONENT_VARIATION(Ped,0)
NETWORK.NETWORK_REQUEST_CONTROL_OF_ENTITY(Ped)
PED.SET_PED_COMPONENT_VARIATION(Ped, 3, 0, math.random(0, 3), 0)
PED.SET_PED_COMPONENT_VARIATION(Ped, 8, 0, math.random(0, 3), 0)
PED.SET_PED_COMPONENT_VARIATION(Ped, 9, 0, math.random(0, 3), -1)
PED.SET_PED_COMPONENT_VARIATION(Ped, 12, 0, math.random(0, 3), -1)
PED.SET_PED_COMPONENT_VARIATION(Ped, 13, 0, math.random(0, 3), -1)
util.yield(50)
end
TASK.TASK_START_SCENARIO_IN_PLACE(Ped, "WORLD_HUMAN_YOGA", 0, false)
util.yield(100)
end
end)
+17
View File
@@ -0,0 +1,17 @@
util.require_natives()
local pos = ENTITY.GET_ENTITY_COORDS(players.user_ped(), true)
pos.x = pos.x + 2
pos.z = pos.z + 5
local models = {"cs_taostranslator","cs_taostranslator2","cs_tenniscoach","cs_beverly","a_c_poodle","A_C_Dolphin","A_C_HumpBack","A_C_KillerWhale","A_C_SharkHammer","A_C_Stingray"}
for models as model do
STREAMING.REQUEST_MODEL(util.joaat(model))
while not STREAMING.HAS_MODEL_LOADED(util.joaat(model)) do util.yield() end
end
local ped = entities.create_ped(26, util.joaat(models[math.random(1,#models)]), pos, 0.0,true,false)
entities.set_can_migrate(ped,false)
WEAPON.GIVE_WEAPON_TO_PED(ped, util.joaat("WEAPON_RPG"), 10, true, true)
util.yield(1000)
ENTITY.SET_ENTITY_HEALTH(ped,0,0)
util.yield(2000)
entities.delete(ped)
+15
View File
@@ -0,0 +1,15 @@
util.require_natives("2944a", "g-uno")
local root = menu.my_root()
root:action("funny freeze", {""}, '', function()
local pid = players.user()
local pos = players.get_position(pid)
local vehicle = GET_VEHICLE_PED_IS_USING(GET_PLAYER_PED_SCRIPT_INDEX(pid))
local ped = CREATE_RANDOM_PED(pos)
--SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped, true)
SET_PED_INTO_VEHICLE(ped, vehicle, -2)
util.yield(250)
TASK_SHUFFLE_TO_NEXT_VEHICLE_SEAT(ped, vehicle)
end)
+64
View File
@@ -0,0 +1,64 @@
util.require_natives(1672190175)
function Playerjoin(pid)
menu.action(menu.player_root(pid), "Crash", {""}, "", function()
menu.trigger_commands("timesmoothing off")
menu.trigger_commands("time 0")
while not STREAMING.HAS_MODEL_LOADED(util.joaat("deluxo")) do
STREAMING.REQUEST_MODEL(util.joaat("deluxo"))
util.yield()
end
local vehs = {}
local pos = ENTITY.GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER.GET_PLAYER_PED_SCRIPT_INDEX(pid),0,3,0)
local Ped = PED.CREATE_RANDOM_PED(pos.x, pos.y, pos.z)
STREAMING.SET_MODEL_AS_NO_LONGER_NEEDED(Ped)
entities.set_can_migrate(Ped,false)
PED.SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(Ped,true)
ENTITY.SET_ENTITY_INVINCIBLE(Ped,true)
for i = 1 , 45 do
vehs[i] = entities.create_vehicle(util.joaat("deluxo"), pos, ENTITY.GET_ENTITY_HEADING(PLAYER.GET_PLAYER_PED_SCRIPT_INDEX(pid)) - 180)
ENTITY.FREEZE_ENTITY_POSITION(vehs[i],true)
entities.set_can_migrate(vehs[i],false)
PED.SET_PED_INTO_VEHICLE(Ped,vehs[i], -1)
VEHICLE.SET_VEHICLE_ENGINE_ON(vehs[i],true,true,false)
VEHICLE.SET_VEHICLE_KEEP_ENGINE_ON_WHEN_ABANDONED(vehs[i],true)
ENTITY.SET_ENTITY_INVINCIBLE(vehs[i],true)
for m =0 ,3 do
VEHICLE.SET_VEHICLE_NEON_ENABLED(vehs[i],m,true)
end
VEHICLE.SET_AMBIENT_VEHICLE_NEON_ENABLED(vehs[i])
entities.set_upgrade_value(vehs[i],22,10)
for n = 17, 22 do
VEHICLE.TOGGLE_VEHICLE_MOD(vehs[i],n,true)
end
VEHICLE.SET_VEHICLE_XENON_LIGHT_COLOR_INDEX(vehs[i],10)
VEHICLE.SET_VEHICLE_HAS_UNBREAKABLE_LIGHTS(vehs[i],false)
VEHICLE.SET_VEHICLE_LIGHTS(vehs[i],3)
VEHICLE.SET_VEHICLE_HEADLIGHT_SHADOWS(vehs[i],3)
VEHICLE.SET_VEHICLE_INTERIORLIGHT(vehs[i],true)
VEHICLE.SET_VEHICLE_FORCE_INTERIORLIGHT(vehs[i],true)
util.yield(50)
end
util.yield(5000)
entities.delete(Ped)
for i = 1 , #vehs do
if vehs[i] ~= nil then
STREAMING.SET_MODEL_AS_NO_LONGER_NEEDED(vehs[i])
entities.delete(vehs[i])
util.yield()
end
end
Models = nil
pos = nil
vehs = nil
end)
end
players.on_join(Playerjoin)
players.dispatch_on_join()
util.keep_running()
+10
View File
@@ -0,0 +1,10 @@
local json = require("json")
local clrs = io.open("./vehicleColors.json", "r"):read("*a") |> json.decode -- Change to HTTP in 0.9.0, vehicleColours is from DurtyFree
local output = ""
for clrs.PrimarySecondaryColors as colour do
output ..= $'\{ {colour.Index}, "{colour.ColorName}" },\n'
end
output |> print
+328
View File
@@ -0,0 +1,328 @@
local components = {
{ "COMPONENT_KNIFE_VARMOD_XM3", "WCT_KNIFE_XM3" },
{ "COMPONENT_KNIFE_VARMOD_XM3_01", "WCT_KNIFE_XM301" },
{ "COMPONENT_KNIFE_VARMOD_XM3_02", "WCT_KNIFE_XM302" },
{ "COMPONENT_KNIFE_VARMOD_XM3_03", "WCT_KNIFE_XM303" },
{ "COMPONENT_KNIFE_VARMOD_XM3_04", "WCT_KNIFE_XM304" },
{ "COMPONENT_KNIFE_VARMOD_XM3_05", "WCT_KNIFE_XM305" },
{ "COMPONENT_KNIFE_VARMOD_XM3_06", "WCT_KNIFE_XM306" },
{ "COMPONENT_KNIFE_VARMOD_XM3_07", "WCT_KNIFE_XM307" },
{ "COMPONENT_KNIFE_VARMOD_XM3_08", "WCT_KNIFE_XM308" },
{ "COMPONENT_KNIFE_VARMOD_XM3_09", "WCT_KNIFE_XM309" },
{ "COMPONENT_BAT_VARMOD_XM3", "WCT_BAT_XM3" },
{ "COMPONENT_BAT_VARMOD_XM3_01", "WCT_BAT_XM301" },
{ "COMPONENT_BAT_VARMOD_XM3_02", "WCT_BAT_XM302" },
{ "COMPONENT_BAT_VARMOD_XM3_03", "WCT_BAT_XM303" },
{ "COMPONENT_BAT_VARMOD_XM3_04", "WCT_BAT_XM304" },
{ "COMPONENT_BAT_VARMOD_XM3_05", "WCT_BAT_XM305" },
{ "COMPONENT_BAT_VARMOD_XM3_06", "WCT_BAT_XM306" },
{ "COMPONENT_BAT_VARMOD_XM3_07", "WCT_BAT_XM307" },
{ "COMPONENT_BAT_VARMOD_XM3_08", "WCT_BAT_XM308" },
{ "COMPONENT_BAT_VARMOD_XM3_09", "WCT_BAT_XM309" },
{ "COMPONENT_PISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_PISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AT_PI_FLSH", "WCT_FLASH" },
{ "COMPONENT_AT_PI_SUPP_02", "WCT_SUPP" },
{ "COMPONENT_PISTOL_VARMOD_LUXE", "WCT_VAR_GOLD" },
{ "COMPONENT_GUNRUN_MK2_UPGRADE", "WCT_VAR_GUN" },
{ "COMPONENT_COMBATPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_COMBATPISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AT_PI_SUPP", "WCT_SUPP" },
{ "COMPONENT_COMBATPISTOL_VARMOD_LOWRIDER", "WCT_VAR_GOLD" },
{ "COMPONENT_APPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_APPISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_APPISTOL_VARMOD_LUXE", "WCT_VAR_METAL" },
{ "COMPONENT_APPISTOL_VARMOD_SECURITY", "WCT_VAR_STUD" },
{ "COMPONENT_PISTOL50_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_PISTOL50_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AT_AR_SUPP_02", "WCT_SUPP" },
{ "COMPONENT_PISTOL50_VARMOD_LUXE", "WCT_VAR_SIL" },
{ "COMPONENT_MICROSMG_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_MICROSMG_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AT_SCOPE_MACRO", "WCT_SCOPE_MAC" },
{ "COMPONENT_MICROSMG_VARMOD_LUXE", "WCT_VAR_GOLD" },
{ "COMPONENT_MICROSMG_VARMOD_SECURITY", "WCT_VAR_WEED" },
{ "COMPONENT_MICROSMG_VARMOD_XM3", "WCT_MSMG_XM3" },
{ "COMPONENT_SMG_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_SMG_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_SMG_CLIP_03", "WCT_CLIP_DRM" },
{ "COMPONENT_AT_AR_FLSH", "WCT_FLASH" },
{ "COMPONENT_AT_SCOPE_MACRO_02", "WCT_SCOPE_MAC" },
{ "COMPONENT_SMG_VARMOD_LUXE", "WCT_VAR_GOLD" },
{ "COMPONENT_ASSAULTSMG_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_ASSAULTSMG_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_ASSAULTSMG_VARMOD_LOWRIDER", "WCT_VAR_GOLD" },
{ "COMPONENT_ASSAULTRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_ASSAULTRIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_ASSAULTRIFLE_CLIP_03", "WCT_CLIP_DRM" },
{ "COMPONENT_AT_AR_AFGRIP", "WCT_GRIP" },
{ "COMPONENT_ASSAULTRIFLE_VARMOD_LUXE", "WCT_VAR_GOLD" },
{ "COMPONENT_CARBINERIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_CARBINERIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_CARBINERIFLE_CLIP_03", "WCT_CLIP_BOX" },
{ "COMPONENT_AT_RAILCOVER_01", "WCT_RAIL" },
{ "COMPONENT_AT_SCOPE_MEDIUM", "WCT_SCOPE_MED" },
{ "COMPONENT_AT_AR_SUPP", "WCT_SUPP" },
{ "COMPONENT_CARBINERIFLE_VARMOD_LUXE", "WCT_VAR_GOLD" },
{ "COMPONENT_ADVANCEDRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_ADVANCEDRIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AT_SCOPE_SMALL", "WCT_SCOPE_SML" },
{ "COMPONENT_ADVANCEDRIFLE_VARMOD_LUXE", "WCT_VAR_METAL" },
{ "COMPONENT_MG_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_MG_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AT_SCOPE_SMALL_02", "WCT_SCOPE_SML" },
{ "COMPONENT_MG_VARMOD_LOWRIDER", "WCT_VAR_GOLD" },
{ "COMPONENT_COMBATMG_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_COMBATMG_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_COMBATMG_VARMOD_LOWRIDER", "WCT_VAR_ETCHM" },
{ "COMPONENT_PUMPSHOTGUN_CLIP_01", "COMPONENT_PUMPSHOTGUN_CLIP_01" },
{ "COMPONENT_AT_SR_SUPP", "WCT_SUPP" },
{ "COMPONENT_PUMPSHOTGUN_VARMOD_LOWRIDER", "WCT_VAR_GOLD" },
{ "COMPONENT_PUMPSHOTGUN_VARMOD_SECURITY", "WCT_VAR_BONE" },
{ "COMPONENT_PUMPSHOTGUN_VARMOD_XM3", "WCT_PUMPSHT_XM3" },
{ "COMPONENT_SAWNOFFSHOTGUN_CLIP_01", "COMPONENT_SAWNOFFSHOTGUN_CLIP_01" },
{ "COMPONENT_SAWNOFFSHOTGUN_VARMOD_LUXE", "WCT_VAR_METAL" },
{ "COMPONENT_ASSAULTSHOTGUN_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_ASSAULTSHOTGUN_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_BULLPUPSHOTGUN_CLIP_01", "COMPONENT_BULLPUPSHOTGUN_CLIP_01" },
{ "COMPONENT_SNIPERRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_AT_SCOPE_LARGE", "WCT_SCOPE_LRG" },
{ "COMPONENT_AT_SCOPE_MAX", "WCT_SCOPE_MAX" },
{ "COMPONENT_SNIPERRIFLE_VARMOD_LUXE", "WCT_VAR_WOOD" },
{ "COMPONENT_HEAVYSNIPER_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_GRENADELAUNCHER_CLIP_01", "COMPONENT_GRENADELAUNCHER_CLIP_01" },
{ "COMPONENT_RPG_CLIP_01", "COMPONENT_RPG_CLIP_01" },
{ "COMPONENT_MINIGUN_CLIP_01", "WCT_CLIP2" },
{ "POLICE_TORCH_FLASHLIGHT", "WCT_FLASH" },
{ "COMPONENT_SNSPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_SNSPISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_SNSPISTOL_VARMOD_LOWRIDER", "WCT_VAR_WOOD" },
{ "COMPONENT_BULLPUPRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_BULLPUPRIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_BULLPUPRIFLE_VARMOD_LOW", "WCT_VAR_METAL" },
{ "COMPONENT_SPECIALCARBINE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_SPECIALCARBINE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_SPECIALCARBINE_CLIP_03", "WCT_CLIP_DRM" },
{ "COMPONENT_SPECIALCARBINE_VARMOD_LOWRIDER", "WCT_VAR_ETCHM" },
{ "COMPONENT_HEAVYPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_HEAVYPISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_HEAVYPISTOL_VARMOD_LUXE", "WCT_VAR_WOOD" },
{ "COMPONENT_BULLPUPRIFLE_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_BULLPUPRIFLE_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_BULLPUPRIFLE_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_BULLPUPRIFLE_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_BULLPUPRIFLE_MK2_CLIP_ARMORPIERCING", "WCT_CLIP_AP" },
{ "COMPONENT_BULLPUPRIFLE_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_AT_SIGHTS", "WCT_HOLO" },
{ "COMPONENT_AT_SCOPE_MACRO_02_MK2", "WCT_SCOPE_MAC2" },
{ "COMPONENT_AT_SCOPE_SMALL_MK2", "WCT_SCOPE_SML2" },
{ "COMPONENT_AT_BP_BARREL_01", "WCT_BARR" },
{ "COMPONENT_AT_BP_BARREL_02", "WCT_BARR2" },
{ "COMPONENT_AT_MUZZLE_01", "WCT_MUZZ1" },
{ "COMPONENT_AT_MUZZLE_02", "WCT_MUZZ2" },
{ "COMPONENT_AT_MUZZLE_03", "WCT_MUZZ3" },
{ "COMPONENT_AT_MUZZLE_04", "WCT_MUZZ4" },
{ "COMPONENT_AT_MUZZLE_05", "WCT_MUZZ5" },
{ "COMPONENT_AT_MUZZLE_06", "WCT_MUZZ6" },
{ "COMPONENT_AT_MUZZLE_07", "WCT_MUZZ7" },
{ "COMPONENT_AT_AR_AFGRIP_02", "WCT_GRIP" },
{ "COMPONENT_MARKSMANRIFLE_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_MARKSMANRIFLE_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_MARKSMANRIFLE_MK2_CLIP_ARMORPIERCING", "WCT_CLIP_AP" },
{ "COMPONENT_MARKSMANRIFLE_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_MARKSMANRIFLE_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_MARKSMANRIFLE_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_AT_SCOPE_MEDIUM_MK2", "WCT_SCOPE_MED2" },
{ "COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM_MK2", "WCT_SCOPE_LRG2" },
{ "COMPONENT_AT_MRFL_BARREL_01", "WCT_BARR" },
{ "COMPONENT_AT_MRFL_BARREL_02", "WCT_BARR2" },
{ "COMPONENT_PISTOLXM3_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_PISTOLXM3_SUPP", "WCT_SUPP" },
{ "COMPONENT_SPECIALCARBINE_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_SPECIALCARBINE_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_SPECIALCARBINE_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_SPECIALCARBINE_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_SPECIALCARBINE_MK2_CLIP_ARMORPIERCING", "WCT_CLIP_AP" },
{ "COMPONENT_SPECIALCARBINE_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_AT_SCOPE_MACRO_MK2", "WCT_SCOPE_MAC2" },
{ "COMPONENT_AT_SC_BARREL_01", "WCT_BARR" },
{ "COMPONENT_AT_SC_BARREL_02", "WCT_BARR2" },
{ "COMPONENT_SNSPISTOL_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_SNSPISTOL_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_SNSPISTOL_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_SNSPISTOL_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_SNSPISTOL_MK2_CLIP_HOLLOWPOINT", "WCT_CLIP_HP" },
{ "COMPONENT_SNSPISTOL_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_AT_PI_FLSH_03", "WCT_FLASH" },
{ "COMPONENT_AT_PI_RAIL_02", "WCT_SCOPE_PI" },
{ "COMPONENT_AT_PI_COMP_02", "WCT_COMP" },
{ "COMPONENT_PUMPSHOTGUN_MK2_CLIP_01", "WCT_SHELL" },
{ "COMPONENT_PUMPSHOTGUN_MK2_CLIP_ARMORPIERCING", "WCT_SHELL_AP" },
{ "COMPONENT_PUMPSHOTGUN_MK2_CLIP_EXPLOSIVE", "WCT_SHELL_EX" },
{ "COMPONENT_PUMPSHOTGUN_MK2_CLIP_HOLLOWPOINT", "WCT_SHELL_HP" },
{ "COMPONENT_PUMPSHOTGUN_MK2_CLIP_INCENDIARY", "WCT_SHELL_INC" },
{ "COMPONENT_AT_SR_SUPP_03", "WCT_SUPP" },
{ "COMPONENT_AT_MUZZLE_08", "WCT_MUZZ" },
{ "COMPONENT_RAILGUNXM3_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_RAYPISTOL_VARMOD_XMAS18", "WCT_VAR_RAY18" },
{ "COMPONENT_REVOLVER_MK2_CLIP_01", "COMPONENT_REVOLVER_MK2_CLIP_01" },
{ "COMPONENT_REVOLVER_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_REVOLVER_MK2_CLIP_HOLLOWPOINT", "WCT_CLIP_HP" },
{ "COMPONENT_REVOLVER_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_REVOLVER_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_AT_PI_COMP_03", "WCT_COMP" },
{ "COMPONENT_DOUBLEACTION_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_HOMINGLAUNCHER_CLIP_01", "COMPONENT_HOMINGLAUNCHER_CLIP_01" },
{ "COMPONENT_GUSENBERG_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_GUSENBERG_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_VINTAGEPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_VINTAGEPISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_FIREWORK_CLIP_01", "COMPONENT_FIREWORK_CLIP_01" },
{ "COMPONENT_MUSKET_CLIP_01", "COMPONENT_MUSKET_CLIP_01" },
{ "COMPONENT_RAILGUN_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_HEAVYSHOTGUN_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_HEAVYSHOTGUN_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_HEAVYSHOTGUN_CLIP_03", "WCT_CLIP_DRM" },
{ "COMPONENT_MARKSMANRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_MARKSMANRIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM", "WCT_SCOPE_LRG" },
{ "COMPONENT_MARKSMANRIFLE_VARMOD_LUXE", "WCT_VAR_GOLD" },
{ "COMPONENT_CERAMICPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_CERAMICPISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_CERAMICPISTOL_SUPP", "WCT_SUPP" },
{ "COMPONENT_MILITARYRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_MILITARYRIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_MILITARYRIFLE_SIGHT_01", "WCT_MRFL_SIGHT" },
{ "COMPONENT_COMBATSHOTGUN_CLIP_01", "WCT_SHELL" },
{ "COMPONENT_GADGETPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_FLAREGUN_CLIP_01", "COMPONENT_FLAREGUN_CLIP_01" },
{ "COMPONENT_NAVYREVOLVER_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_KNUCKLE_VARMOD_BASE", "WCT_KNUCK_01" },
{ "COMPONENT_KNUCKLE_VARMOD_PIMP", "WCT_KNUCK_02" },
{ "COMPONENT_KNUCKLE_VARMOD_BALLAS", "WCT_KNUCK_BG" },
{ "COMPONENT_KNUCKLE_VARMOD_DOLLAR", "WCT_KNUCK_DLR" },
{ "COMPONENT_KNUCKLE_VARMOD_DIAMOND", "WCT_KNUCK_DMD" },
{ "COMPONENT_KNUCKLE_VARMOD_HATE", "WCT_KNUCK_HT" },
{ "COMPONENT_KNUCKLE_VARMOD_LOVE", "WCT_KNUCK_LV" },
{ "COMPONENT_KNUCKLE_VARMOD_PLAYER", "WCT_KNUCK_PC" },
{ "COMPONENT_KNUCKLE_VARMOD_KING", "WCT_KNUCK_SLG" },
{ "COMPONENT_KNUCKLE_VARMOD_VAGOS", "WCT_KNUCK_VG" },
{ "COMPONENT_COMBATPDW_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_COMBATPDW_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_COMBATPDW_CLIP_03", "WCT_CLIP_DRM" },
{ "COMPONENT_MARKSMANPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_DBSHOTGUN_CLIP_01", "COMPONENT_DBSHOTGUN_CLIP_01" },
{ "COMPONENT_MACHINEPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_MACHINEPISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_MACHINEPISTOL_CLIP_03", "WCT_CLIP_DRM" },
{ "COMPONENT_COMPACTRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_COMPACTRIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_COMPACTRIFLE_CLIP_03", "WCT_CLIP_DRM" },
{ "COMPONENT_FLASHLIGHT_LIGHT", "WCT_FLASH" },
{ "COMPONENT_SWITCHBLADE_VARMOD_BASE", "WCT_SB_BASE" },
{ "COMPONENT_SWITCHBLADE_VARMOD_VAR1", "WCT_SB_VAR1" },
{ "COMPONENT_SWITCHBLADE_VARMOD_VAR2", "WCT_SB_VAR2" },
{ "COMPONENT_REVOLVER_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_REVOLVER_VARMOD_BOSS", "WCT_REV_VARB" },
{ "COMPONENT_REVOLVER_VARMOD_GOON", "WCT_REV_VARG" },
{ "COMPONENT_COMPACTLAUNCHER_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_MINISMG_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_MINISMG_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AUTOSHOTGUN_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_CARBINERIFLE_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_CARBINERIFLE_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_CARBINERIFLE_MK2_CLIP_ARMORPIERCING", "WCT_CLIP_AP" },
{ "COMPONENT_CARBINERIFLE_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_CARBINERIFLE_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_CARBINERIFLE_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_AT_CR_BARREL_01", "WCT_BARR" },
{ "COMPONENT_AT_CR_BARREL_02", "WCT_BARR2" },
{ "COMPONENT_ASSAULTRIFLE_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_ASSAULTRIFLE_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_ASSAULTRIFLE_MK2_CLIP_ARMORPIERCING", "WCT_CLIP_AP" },
{ "COMPONENT_ASSAULTRIFLE_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_ASSAULTRIFLE_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_ASSAULTRIFLE_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_AT_AR_BARREL_01", "WCT_BARR" },
{ "COMPONENT_AT_AR_BARREL_02", "WCT_BARR2" },
{ "COMPONENT_COMBATMG_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_COMBATMG_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_COMBATMG_MK2_CLIP_ARMORPIERCING", "WCT_CLIP_AP" },
{ "COMPONENT_COMBATMG_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_COMBATMG_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_COMBATMG_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_AT_MG_BARREL_01", "WCT_BARR" },
{ "COMPONENT_AT_MG_BARREL_02", "WCT_BARR2" },
{ "COMPONENT_SMG_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_SMG_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_SMG_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_SMG_MK2_CLIP_HOLLOWPOINT", "WCT_CLIP_HP" },
{ "COMPONENT_SMG_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_SMG_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_AT_SIGHTS_SMG", "WCT_HOLO" },
{ "COMPONENT_AT_SCOPE_MACRO_02_SMG_MK2", "WCT_SCOPE_MAC2" },
{ "COMPONENT_AT_SCOPE_SMALL_SMG_MK2", "WCT_SCOPE_SML2" },
{ "COMPONENT_AT_SB_BARREL_01", "WCT_BARR" },
{ "COMPONENT_AT_SB_BARREL_02", "WCT_BARR2" },
{ "COMPONENT_HEAVYSNIPER_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_HEAVYSNIPER_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_HEAVYSNIPER_MK2_CLIP_ARMORPIERCING", "WCT_CLIP_AP" },
{ "COMPONENT_HEAVYSNIPER_MK2_CLIP_EXPLOSIVE", "WCT_CLIP_EX" },
{ "COMPONENT_HEAVYSNIPER_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_HEAVYSNIPER_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_AT_SCOPE_LARGE_MK2", "WCT_SCOPE_LRG2" },
{ "COMPONENT_AT_SCOPE_NV", "WCT_SCOPE_NV" },
{ "COMPONENT_AT_SCOPE_THERMAL", "WCT_SCOPE_TH" },
{ "COMPONENT_AT_MUZZLE_09", "WCT_MUZZ" },
{ "COMPONENT_AT_SR_BARREL_01", "WCT_BARR" },
{ "COMPONENT_AT_SR_BARREL_02", "WCT_BARR2" },
{ "COMPONENT_PISTOL_MK2_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_PISTOL_MK2_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_PISTOL_MK2_CLIP_FMJ", "WCT_CLIP_FMJ" },
{ "COMPONENT_PISTOL_MK2_CLIP_HOLLOWPOINT", "WCT_CLIP_HP" },
{ "COMPONENT_PISTOL_MK2_CLIP_INCENDIARY", "WCT_CLIP_INC" },
{ "COMPONENT_PISTOL_MK2_CLIP_TRACER", "WCT_CLIP_TR" },
{ "COMPONENT_AT_PI_RAIL", "WCT_SCOPE_PI" },
{ "COMPONENT_AT_PI_FLSH_02", "WCT_FLASH" },
{ "COMPONENT_AT_PI_COMP", "WCT_COMP" },
{ "COMPONENT_PISTOL_MK2_VARMOD_XM3_SLIDE", "COMPONENT_PISTOL_MK2_VARMOD_XM3_SLIDE" },
{ "COMPONENT_PISTOL_MK2_VARMOD_XM3", "WCT_PISTMK2_XM3" },
{ "COMPONENT_TACTICALRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_TACTICALRIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_AT_AR_FLSH_REH", "WCT_FLASH" },
{ "COMPONENT_PRECISIONRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_HEAVYRIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_HEAVYRIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_HEAVYRIFLE_SIGHT_01", "COMPONENT_HEAVYRIFLE_SIGHT_01" },
{ "COMPONENT_EMPLAUNCHER_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_TECPISTOL_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_TECPISTOL_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_BATTLERIFLE_CLIP_01", "WCT_CLIP1" },
{ "COMPONENT_BATTLERIFLE_CLIP_02", "WCT_CLIP2" },
{ "COMPONENT_RPG_VARMOD_TVR", "WCT_RPGTVR_VAR" },
{ "COMPONENT_MICROSMG_VARMOD_FRN", "WCT_MSMGFRN_VAR" },
{ "COMPONENT_CARBINERIFLE_VARMOD_MICH", "WCT_CRBNMIC_VAR" },
{ "COMPONENT_COMBATPISTOL_VARMOD_XMAS23", "WCT_COMPIST_XM" },
{ "COMPONENT_SPECIALCARBINE_VARMOD_XMAS23", "WCT_SPCR_XM" },
{ "COMPONENT_HEAVYSNIPER_VARMOD_XMAS23", "WCT_HVSP_XM" },
}
-- fill in american name
for components as comp do
if comp[2]:sub(1, 4) == "WCT_" then
comp[3] = util.get_label_text(comp[2])
end
end
-- dump
local str = "--- WEAPON COMPONENTS BEGIN ---\n"
for components as comp do
str ..= '{ "' .. comp[1] .. '", "' .. comp[2] .. '"'
if comp[3] then
str ..= ', "' .. comp[3] .. '" },\n'
else
str ..= ' },\n'
end
end
print(str:sub(1, -2))
print("--- WEAPON COMPONENTS END ---")
+34
View File
@@ -0,0 +1,34 @@
local json = require("json")
local file = io.open(filesystem.scripts_dir() .. "/weapons.json", "r"):read("*a")
local weapons = {}
local function isValidName(name)
return !name:contains("VEHICLE_") and name:contains("WEAPON_")
end
local function parseLiveries(liveries)
local str = "{"
for liveries as livery do
str ..= $'\{ "{livery.Name}", "{livery.TranslatedLabel.Name}", "{util.get_label_text(livery.TranslatedLabel.Name)}" },'
end
str = str:rstrip(",")
str ..= " }"
return str
end
for json.decode(file) as weapon do
if #weapon.Liveries > 0 and isValidName(weapon.Name) then
weapons[weapon.Name] = parseLiveries(weapon.Liveries)
end
end
local str = ""
for key, value in weapons do
str ..= $' \{ ATSTRINGHASH("{key}"), ' .. value .. " },\n"
end
print(str)
util.copy_to_clipboard(str)